The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Проект bpftime развивает реализацию eBPF, работающую в пространстве пользователя

22.01.2024 10:18

Представлен проект bpftime, развивающий runtime и виртуальную машину для выполнения обработчиков eBPF в пространстве пользователя. Bpftime позволяет выполнять целиком в пространстве пользователя eBPF-программы трассировки и вмешательства в работу процессов, использующие такие возможности, как uprobe и программный перехват системных вызовов. Отмечается, что благодаря исключению лишних переключений контекста bpftime позволяет добиться десятикратного снижения накладных расходов по сравнению с использованием функциональности uprobe и uretprobe, предоставляемой ядром Linux. Кроме того, bpftime значительно упрощает отладку, потенциально может применяться на системах без ядра Linux и не требует расширенных привилегий, необходимых для загрузки eBPF-приложения в ядро. Код проекта написан на языках С/C++ и распространяется под лицензией MIT.

Перехват системных вызовов и интеграция uprobe-проверок реализована с использованием техники перезаписи исполняемого кода (binary rewriting), при которой обращения к системным вызовам, точкам входа и локальным функциям подменяются на переход к отладочным обработчикам через модификацию машинного кода выполняемого приложения, что значительно эффективнее организации перехвата с использованием uprobe на уровне ядра Linux.

Поддерживаются операции замены или изменения функций, прикрепления обработчиков (hook-ов) и фильтров, перенаправления, блокировки или замены параметров системных вызовов, перехвата точек входа и выхода из функций, а также подстановки обработчика по произвольному смещению в коде. Bpftime может быть прикреплён к любому работающему процессу в системе без необходимости их перезапуска или пересборки. Подстановка bpftime в процессы может осуществляться для работающих процессов через ptrace, а для загружаемых через LD_PRELOAD.

В составе bpftime развивается runtime, позволяющий прикреплять eBPF-программы к точкам трассировки системных вызовов и uprobe; виртуальная машина eBPF с JIT для обособленного выполнения программ eBPF на уровне пользовательского процесса (дополнительно поддерживается AOT-компиляция); фоновый процесс для взаимодействия с ядром и организации совместимости с uprobe-подсистемой ядра (bpftime поддерживает режим загрузки eBPF в пространство пользователя из ядра для организации совместной работы с eBPF-программами в ядре, используемыми, например, для обработки kprobe или выставляющими сетевые фильтры).

Виртуальная машина eBPF оформлена в форме подключаемой библиотеки и предоставляет API, похожий на ubpf, что позволяет использовать её для интеграции функциональности eBPF в другие проекты. Для суммарного агрегирования данных из нескольких процессов поддерживается создание совместных eBPF Map, размещаемых в разделяемой памяти. Вместе с bpftime могут использоваться типовые обработчики eBPF, написанные для использования в ядре, а для сборки могут применяться стандартные инструменты на базе clang и libbpf.

C bpftime в пространстве пользователя могут выполняться такие системы трассировки, как BCC, bpftrace и Deepflow. Например, продемонстрировано применение скрипта sslsniff из фреймворка BCC для анализа и сохранения шифрованного трафика в nginx. В проведённых тестах производительность nginx при выполнении sslsniff на стороне ядра снижается на 58%, а при выносе обработчика в пространство пользователя на 12.3%.

Архитектура трассировки процессов с использованием оригинального eBPF в ядре:

Архитектура трассировки в пространстве пользователя с использованием bpftime:

Гибридный режим, в котором bpftime работает совместно с eBPF в ядре, например, для установки сетевых фильтров или выноса отдельных обработчиков в пространство пользователя:

Из планов на будущее отмечается: возможность подстановки исключений (Fault Injection); горячее наложение патчей (Hot Patching) для изменения логики работы или исправлении ошибок в бинарных сборках; создание модуля к Nginx, позволяющего создавать расширения при помощи программ eBPF (например, для динамического выбора маршрутов, кэширования, применения политик безопасности и балансировки нагрузки); расширение возможностей подсистемы FUSE (например, создание в форме eBPF-программ расширений к ФС для кэширования или управления доступом).

  1. Главная ссылка к новости (https://eunomia.dev/blogs/bpft...)
  2. OpenNews: Выпуск системы динамической отладки SystemTap 5.0
  3. OpenNews: Представлена библиотека Aya для создания eBPF-обработчиков на языке Rust
  4. OpenNews: Компания Oracle намерена переработать DTrace для Linux с использованием eBPF
  5. OpenNews: Для Linux представлена система динамической отладки BPFtrace (DTrace 2.0)
  6. OpenNews: BumbleBee - инструментарий для упрощения создания и распространения eBPF-программ
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/60477-bpftime
Ключевые слова: bpftime, ebpf, uprobe, syscall
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (31) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 11:44, 22/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    похоже на подарок хакерам
     
     
  • 2.4, хакер (?), 12:32, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • +5 +/
    неее, подарок - это тот который уже встроен в ведро и его даже отключить в Kconfig нельзя.

    А это они хотят наш подарочек отнять! Но Линус твердо и четко им покажет палец! Вендузятники поганые, хотят еще и чтоб оно не только в единственно-верной системе работало!

     
     
  • 3.11, crypt (ok), 13:35, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ну да, могли бы хоть здесь начать раст использовать, но нет. раст будем обсуждать, а самую дырявую подсистему напишем всеравно как обычно.
     
     
  • 4.15, ЛинусМороз (?), 14:08, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • +17 +/
    Британские ученые подсчитали, что 99% написанного на Раст кода было опубликованно в комментариях на Опеннете под новостями о программах, написанных на языке Си.
     
     
  • 5.25, crypt (ok), 20:33, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Британские ученые подсчитали, что 99% написанного на Раст кода было опубликованно в
    > комментариях на Опеннете под новостями о программах, написанных на языке Си.

    ага и 99% CVE по ядру относятся к этой подсистеме. а зачем в ядро rust внедряли тогда.

     
     
  • 6.31, YetAnotherOnanym (ok), 16:21, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > а зачем в ядро rust внедряли тогда

    Вот это по-растовски. Сначала внедрить, а потом думать - зачем.

     
  • 3.14, ЛинусМороз (?), 14:06, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Да пусть берут подарочек. НьюВедроТехнолоджис уже ничто не спасёт от вымирания. Пусть пиндузятники поиграются в песочнице, порадуются напоследок, перед Капцом.
     
  • 2.27, mos87 (ok), 06:41, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    выключи свой дэвайс. а то подарочище жы.
     
  • 2.35, Аноним (-), 18:39, 26/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    PAX, YAMA это все порежет.  Bpftime Будет работать только на систе ах с отключённой защитой.
     

  • 1.5, 12yoexpert (ok), 12:59, 22/01/2024 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –1 +/
     

  • 1.8, 1 (??), 13:16, 22/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Я думаю, что скоро в пространстве пользователя будет отдельное ядро, в котором можно делать всё, что захочется.

    Ну, с другой стороны, это же ещё на шаг приближает нас к микроядру ?

     
     
  • 2.16, Аноним (16), 14:44, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Колинукс это что-то из 90х, сегодня убунту встроена в каждой венде.
     
     
  • 3.20, Аноним (20), 15:49, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Колинукс это что-то из 90х, сегодня убунту встроена в каждой венде.

    Далее, сработает эффект Мёбиуса ;)

     
     
  • 4.33, Аноним (33), 19:20, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Что за эффект? Расскажи подробнее пожалуйста.
     
  • 2.23, Quad Romb (ok), 17:38, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Было уже.
    В 1970-ых была мода на академические экзоядра, а сейчас что-то подобное Unikernel-ами кличут.
    Никуда это не приближает и не отдаляет, а просто решает конкретные поставленные задачи.
     
  • 2.28, mos87 (ok), 06:43, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    за№№ли с этим карго культом микроядра

    давно уже всё смешалось и перемешалось.

    ну сиди на хурде ёпт как настоящий красноглаз, чего к студенческому ляликсу лезть со своими фантазиями? тут скучную работу работают.

     

  • 1.10, crypt (ok), 13:32, 22/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    могли бы хоть этот попробовать на расте сделать... это как раз то место, где он имеет смысл.
     
     
  • 2.13, Аноним (13), 13:51, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Как насчёт собрать команду энтузиастов, которые не могут мириться с тем, что в местах, где имеет смысл, до сих пор не Раст? И продемонстрировать в чём этот самый смысл заключается на практике.
     
     
  • 3.24, crypt (ok), 20:31, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    так и я о чем. команду собрал (https://github.com/Rust-for-Linux/linux), столько агитирующих было, а как до дела дошло, так нету никого код писать. или мне надо еще список CVE с дырами в этой подсистеме собрать?
     
     
  • 4.26, нах. (?), 00:15, 23/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > а как до дела дошло, так нету никого код писать

    а сам ты не умеешь, как жаль...

    > надо еще список CVE с дырами в этой подсистеме собрать

    нет, надо написать что-то посложнее хеловрота - самому.
    (вполне вероятно что в процессе ты поймешь, почему выбор хруста для хобби-проекта - так себе)

     

  • 1.12, Аноним (-), 13:46, 22/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Я вот непоняла, а зачем для описанных целей нужен bpf? Почему счётчики не сделать нативным кодом?

    В ядре ок, мы пытаемся недоверенный код гонять в доверенном контексте. Логика понятна. А здесь-то зачем? И если надо, то почему не wasm?

     
     
  • 2.17, ПомидорИзДолины (?), 14:44, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Bpftime может быть прикреплён к **любому работающему процессу** в системе **без необходимости их перезапуска или пересборки**.
     
     
  • 3.19, Аноним (-), 15:30, 22/01/2024 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 3.21, Аноним (21), 16:09, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • +/
    process_vm_writev process_vm_readv
     

  • 1.18, Аноним (18), 15:06, 22/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А кто вообще додумался механизм для модификации ядра использовать для модификации юзерспейсных процессов?
     
     
  • 2.22, Clowns (?), 16:23, 22/01/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> А кто вообще додумался механизм для модификации ядра использовать для модификации юзерспейсных процессов?

    По моему это был riggorii по этому и java есть и куча всего на zst

     

  • 1.29, крокодил мимо.. (?), 12:13, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > позволяет выполнять целиком в пространстве пользователя eBPF-программы трассировки и вмешательства в работу процессов, использующие такие возможности, как uprobe и программный перехват системных вызовов... и не требует расширенных привилегий, необходимых для загрузки eBPF-приложения в ядро..

    перечитывал.. yet another security hole by design(tm)..

    т.е. вот это теперь ни о чём:
    # sysctl kernel.unprivileged_bpf_disabled=1

    выше сказали, что опцию вырезать весь bpf/ebpf из ядра уже убрали (на стадии сборки/конфига).. надеюсь, что это был сарказм..

     
  • 1.30, _oleg_ (ok), 12:53, 23/01/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Отмечается, что благодаря исключению лишних переключений контекста

    А точно контекста? Разве не usermode/kernelmode?

     
  • 1.32, Аноним (32), 16:35, 23/01/2024 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +1 +/
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру