|
| 1 | +--- |
| 2 | +title: eBPF |
| 3 | +status: Completed |
| 4 | +category: Technology |
| 5 | +tags: ["architecture", "networking", "security"] |
| 6 | +--- |
| 7 | + |
| 8 | +Технология eBPF (англ. extended Berkley Packet Filter — расширенный фильтр пакетов Беркли) |
| 9 | +позволяет небольшим программам или скриптам запускаться в пространстве ядра ОС Linux |
| 10 | +без необходимости изменять код ядра или загружать модули ядра. |
| 11 | + |
| 12 | +В ОС Linux есть два пространства: пространство ядра (kernel space) и пространство пользователя (user space). |
| 13 | +Ядро представляет основу операционной системы и имеет неограниченный доступ к аппаратному обеспечению. |
| 14 | + |
| 15 | +Приложения находятся в пространстве пользователя. |
| 16 | +Когда возникает необходимость в привилегированном доступе, приложения отправляют запрос к ядру. |
| 17 | +Для приложений, требующих большей свободы действий, например, прямого доступа к аппаратному обеспечению, |
| 18 | +ядро может быть расширено за счёт модулей ядра Linux. |
| 19 | +Такой подход расширяет функциональность ядра, доступную по умолчанию, открывая приложениям доступ к более низкоуровневым компонентам. |
| 20 | +Однако расширение ядра с помощью модулей влечет за собой риски и потенциально снижает безопасность, что делает eBPF привлекательной альтернативой. |
| 21 | + |
| 22 | +## Какую проблему решает |
| 23 | + |
| 24 | +Как правило, приложения работают в пространстве пользователя. |
| 25 | +Если возникает необходимость в привилегированном доступе (например, к аппаратному обеспечению), |
| 26 | +приложение отправляет запрос к ядру. такой запрос называется «системный вызов». |
| 27 | +В большинстве случает такой подход прекрасно работает. |
| 28 | +Однако бывают ситуации, когда разработчики нуждаются в более низкоуровневом доступе к системе. |
| 29 | +Такие ситуации, как правило, связаны с наблюдаемостью (observability), безопасностью и работой с сетью. |
| 30 | +Использование модулей ядра Linux позволяет решить вышеупомянутую проблему без изменения исходного кода ядра. |
| 31 | +К сожалению, у этого подхода есть не только плюсы, но и минусы (в первую очередь, связанные с безопасностью). |
| 32 | +Модули ядра работают в пространстве ядра. Это означает, что сбой модуля неминуемо приводит к сбою ядра и, как следствие, падению всей системы. |
| 33 | +Кроме того, модули ядра наделены повышенными привилегиями и имеют прямой доступ к системным ресурсам. Если не обеспечить должную защиту, этими свойствами модулей могут воспользоваться злоумышленники. |
| 34 | + |
| 35 | +## Как именно решает проблему |
| 36 | + |
| 37 | +В отличие от модулей ядра, eBPF позволяет запускать пользовательские программы в более контролируемой и ограниченной среде. |
| 38 | +eBPF-программа работает в «песочнице» внутри ядра. Тем самым обеспечивается необходимая изоляция и снижаются риски. |
| 39 | +Даже если в eBPF-программе обнаружится уязвимость или какой-то изъян, их воздействие ограничится «песочницей». |
| 40 | +Более того, прежде чем программа сможет запуститься внутри ядра, она должна пройти процесс верификации. |
| 41 | +Верификатор проверяет eBPF-программу на наличие потенциально небезопасного кода: например, доступ к памяти за пределами выделенного буфера, бесконечные циклы и неавторизованный доступ к функциям ядра. |
| 42 | +Верификация гарантирует, что eBPF-программа не войдет в бесконечный цикл и не приведет к сбою ядра. |
| 43 | +Такие меры безопасности делают eBPF более надежным вариантом запуска приложений в ядре по сравнению с модулями ядра Linux. |
| 44 | + |
0 commit comments