eBPF, Руткит

eBPF: двойной агент в ядре — и руткит, и детектор

Что такое eBPF и почему это важно

eBPF (Extended Berkeley Packet Filter) — это виртуальная машина внутри ядра Linux, позволяющая запускать верифицированный пользовательский код прямо в пространстве ядра без написания модулей и без перекомпиляции. Изначально технология создавалась для мониторинга производительности и фильтрации трафика, но сегодня eBPF — это двусторонний меч: тот же механизм, которым Cilium защищает Kubernetes-кластеры, злоумышленники используют для создания руткитов нового поколения.

Ключевая особенность: eBPF-код живёт в ядре, но не отображается в списке модулей. Он загружается через системный вызов bpf() и может быть полностью скрыт из пользовательского пространства. Это делает его идеальным как для атаки, так и для защиты.

Архитектура eBPF: как это работает

Прежде чем нырять в атаки и детект — нужно понять механизм изнутри.

Пользовательское пространство
        │
        │  bpf() syscall
        ▼
┌──────────────────────────────────┐
│         Верификатор eBPF         │ ◄── Проверяет безопасность кода
│   (статический анализ графа)     │
└──────────────┬───────────────────┘
               │
               ▼ JIT-компиляция
┌──────────────────────────────────┐
│        Ядро Linux (kernel)       │
│                                  │
│  kprobes / tracepoints / XDP     │
│  LSM hooks / socket filters      │
│  perf events / cgroups           │
└──────────────────────────────────┘

Типы точек прикрепления (attach points) — это то, за что цепляются как защитники, так и атакующие:

HookЧто даёт атакующемуЧто даёт защитнику
kprobeПерехват любой функции ядраМониторинг всех syscall
XDPСкрытая фильтрация/редирект пакетовDDoS-митигация на wire speed
LSMОбход политик безопасностиПринудительный мандатный контроль
uprobesПерехват функций в userspace (PAM, SSL)Трассировка приложений без инструментации
socket filterСнифинг трафика без pcapГлубокая инспекция пакетов

eBPF как оружие: техники атак

Шпионаж на уровне ядра

Самое элегантное применение — перехват вводимых паролей. В 2023 году был зафиксирован малварь PamSpy, который через uprobe цеплялся к функции PAM и тихо сливал все введённые учётки.

Загружаем и читаем данные из userspace:

Сетевая невидимость через XDP

Именно так работает BPFDoor — один из самых известных eBPF-руткитов, активно развивающийся в 2025 году. Программа на XDP-хуке получает пакет до того, как его увидит любой сниффер или файервол:

Именно этот паттерн использует LinkPro — руткит, обнаруженный в AWS-среде: один eBPF-модуль скрывает артефакты, второй работает как скрытый «knock»-триггер для активации C2.

Рекурсивная самозащита

Современные eBPF-руткиты умеют обманывать диагностические утилиты. Руткит ebpfkit перехватывает вызовы к bpftool, возвращая поддельный список программ — ядро буквально лжёт администратору.

Из реальных семейств — pidhide из проекта bad-bpf, модифицированная версия которого была найдена в атаках Доктора Веб в конце 2024 года.

eBPF как щит: детектирование угроз

Та же технология — мощнейший инструмент защиты. Ключевой инструмент в 2025-2026 году — Tetragon от Cilium.

Детектор аномальных syscall

LSM-хук: принудительный контроль загрузки BPF

Лучшая защита — превентивная. Через LSM можно блокировать загрузку неавторизованных eBPF-программ:

Python-скрипт аудита загруженных программ

Регулярный аудит через bpftool — базовая гигиена, но его можно автоматизировать и сравнивать с baseline:

Реальные руткиты: кто есть кто

ИмяТехникаОбнаруженОсобенность
BPFDoorXDP + socket filter2022–2025C2 по нестандартным портам, IPv6-поддержка
SymbioteLD_PRELOAD + eBPF2022–2025Перехват сетевого трафика всех процессов
Boopkitkretprobe2022Первый публичный eBPF-руткит с C2
ebpfkitМножественные хуки2021+Самозащита от bpftool
PamSpyuprobe/libpam2023Кража паролей через PAM
bad-bpf/pidhideМодификация2024Скрытие PID, использован в APT-атаках
LinkProXDP + knocking2025Двойной eBPF-модуль, AWS-среда

Как защищаться: чеклист

Проблема в том, что вредонос может получить контроль первым и отключить наблюдение за собой — именно поэтому превентивные меры важнее реактивных.

  • Ограничь CAP_BPF — только доверенным процессам через seccomp или BPF Tokens
  • Включи kernel.unprivileged_bpf_disabled=1 в sysctl.conf
  • Мониторь bpf() syscall через auditd или Falco
  • Регулярный аудит bpftool prog show + сравнение с baseline (скрипт выше)
  • Обновляй ядро: зафиксировано 217 уязвимостей в eBPF, около 100 новых ежегодно
  • Разверни Tetragon — он использует eBPF против eBPF, детектируя аномальное поведение на уровне ядра
  • Проверяй git-историю образов контейнеров и CI/CD на предмет загрузки .o файлов

Философия двойного агента

eBPF — идеальный пример того, как одна и та же технология становится и мечом, и щитом. Атакующие используют его потому, что он невидим для традиционных средств защиты и работает быстрее, чем любые user-space хуки. Защитники — потому что только eBPF даёт достаточную глубину наблюдаемости для детекта современных атак. В этой гонке побеждает тот, кто загрузит свою программу первым — и именно поэтому превентивный контроль доступа к bpf() syscall важнее любого детектора.

eBPF: двойной агент в ядре - и руткит, и детектор

На этом все. Всем хорошего дня!