Дайджесты новостей
Разрез архитектуры ядра Linux с превентивным перехватом системных вызовов агентом AegisBPF через eBPF LSM

AegisBPF: агент рантайм-безопасности Linux на страже ядра через eBPF и LSM

Вспомни, как обычно устроена безопасность в Linux: ставим условный Falco или классический auditd, собираем терабайты логов системных вызовов и настраиваем алерты в Telegram. А потом злоумышленник за доли секунды выполняет вредоносный скрипт, выкачивает дампы баз данных и подчищает за собой следы. Ты получаешь красивый алерт о том, что сервер успешно взломан полчаса назад.

Разработчик Эрен Ари (Eren Ari) предложил принципиально иной подход в открытом проекте AegisBPF. Вместо пассивного наблюдения в пользовательском пространстве агент работает прямо внутри ядра Linux через подсистему Linux Security Modules (LSM) и технологию eBPF, блокируя подозрительные действия до их завершения.

Разница философий: детекция против превентивного перехвата

Традиционные HIDS-системы работают по принципу детектирования: процесс делает системный вызов, ядро его выполняет, а копия события отправляется демону аудита. Если демон завис или очередь событий переполнилась, атака проходит незамеченной.

AegisBPF исповедует подход Enforcement-First. Программы eBPF встраиваются непосредственно в 15 хуков LSM ядра:

  • Файловые операции: file_open, inode_permission, inode_copy_up, bprm_check_security.
  • Сетевые сокеты: полный цикл соединений от socket_connect и socket_bind до socket_sendmsg и socket_recvmsg.

Когда неавторизованный бинарник пытается открыть защищенный файл или инициировать исходящее TCP-соединение, хук LSM синхронно возвращает ошибку -EPERM. Вызов прерывается прямо в ядре, не доходя до диска или сетевого интерфейса.

Защита от побега из контейнеров и подмены путей

В контейнерных средах Kubernetes злоумышленники часто эксплуатируют уязвимости OverlayFS: подменяют симлинки (TOCTOU-атаки) или модифицируют файлы нижнего слоя.

AegisBPF решает эту проблему элегантно:

  1. Перехват copy-up: хук inode_copy_up фиксирует момент, когда файл из нижнего read-only слоя контейнера продвигается в верхний слой записи, и автоматически переносит правило блокировки на новый номер inode.
  2. Проверка IMA-хэшей: на ядрах 6.1+ функция bpf_ima_file_hash() сверяет криптографический SHA-256 хэш исполняемого файла при вызове bprm_check_security. Даже если вредонос переименовали в /usr/bin/python, запуск будет мгновенно заблокирован.
Требования к ядру Linux

Для работы AegisBPF требуется ядро Linux 5.8+ с включенным BPF LSM (CONFIG_BPF_LSM=y). Проверить статус подсистемы на сервере можно командой cat /sys/kernel/security/lsm | grep bpf.

Цена вопроса: замеры накладных расходов

Главный страх любого сисадмина перед безопасниками — «вы уроните производительность продакшена». В AegisBPF накладные расходы сведены к минимуму:

  • Файловые замеры показывают 1.68 мкс на операцию (на чистой системе без агента — 1.69 мкс, то есть в пределах статистической погрешности).
  • Сетевой оверхед составляет всего +6.9% при мониторинге всех шести фаз жизни сокета.

Для сравнения: традиционные решения, копирующие контекст каждого системного вызова в userspace через кольцевой буфер, дают оверхед до 30-40% на интенсивном вводе-выводе.

Практика: запуск и декларативные политики

Управление агентом происходит через CLI-утилиту, написанную на C++20:

# Запуск агента в режиме превентивной блокировки с отправкой SIGTERM процессу
sudo aegisbpf run --enforce --enforce-signal=term

# Включение эскалации до SIGKILL при регулярных повторных попытках нарушения
sudo aegisbpf run --enforce --enforce-signal=kill \
  --kill-escalation-threshold=8 \
  --kill-escalation-window-seconds=60

# Оперативная блокировка подозрительного файла без перезапуска
sudo aegisbpf block add /usr/bin/xmrig

Правила безопасности описываются в конфигурационном файле /etc/aegisbpf/policy.conf:

version=6

# Запрет запуска по путям
[deny_path]
/usr/bin/xmrig
/tmp/miner.sh

# Запрет доступа по номерам inode (устойчиво к переименованиям)
[deny_inode]
259:12345

# Доверенные группы cgroups v2
[allow_cgroup]
/sys/fs/cgroup/system.slice

# Запрет сетевых подключений для изолированного контейнера
[cgroup_deny_port]
cgid:123456 443:tcp:egress

# Разрешение запуска только бинарников с доверенным хэшем SHA-256
[allow_binary_hash]
sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

Применение политики происходит атомарно: sudo aegisbpf policy apply /etc/aegisbpf/policy.conf.

Перспективы проекта

Проект пока молод (активная разработка началась в 2026 году), и автор честно предупреждает: независимый внешний аудит кода запланирован ближе к релизу 1.0 GA. Но вектор очевиден: эпоха «постфактум-логирования» уходит в прошлое. Будущее защиты Linux-инфраструктуры — за превентивной фильтрацией на уровне хуков ядра.