
Аудит только eBPF EDR для Linux 5.15+ LTS: 14 хуков ядра, 15 действий (13 техник MITRE), происхождение процессов, экспорт в SIEM, готовность к K8s/Docker.
Только обнаружение и аудит. Неблокирующий сенсор. Ни одна BPF-программа не возвращает
-EPERM; ни один системный вызов не блокируется. Этот агент — плоскость наблюдения за средой выполнения, а не плоскость предотвращения. См.docs/SECURITY.mdиTHREAT_MODEL.md.
Сверхлёгкий EDR-агент для Linux, работающий только в режиме аудита, построенный на eBPF (C) и высокоэффективном демоне на Go. Он ориентирован на ядро Linux 5.15 LTS и выше, отличается горячим путём с нулевым выделением памяти, объёмом памяти менее 30 МБ и глубоким обогащением контекста контейнеров/K8s.
CRITICAL.cgroup_id с именем Pod, пространством имён и ServiceAccount, не увеличивая 208-байтовый формат передачи данных ядра.0.40% CPU в режиме простоя и 0 потерь ringbuf при стресс-тесте с 25 000 fork.Статус: этап 2.7 завершён. 13 техник MITRE ATT&CK в рамках 16 действий. Проверено сквозным образом на ядре 6.12.111 (82 PASS / 0 FAIL).
| # | Действие | Критичность | MITRE | Точка перехвата |
|---|---|---|---|---|
| 1 | Container_Namespace_Unshare | HIGH | T1611 | kprobe/__x64_sys_unshare |
| 2 | Container_Pivot_Root_Escape | CRITICAL | T1611 | kprobe/__x64_sys_pivot_root |
| 3 | Sensitive_File_Access | HIGH | T1003.008 | tracepoint/sys_enter_openat + open |
| 4 | Process_Execution | INFO/MEDIUM | T1059.004 | tracepoint/sys_enter_execve |
| 5 | Network_Connection | INFO/HIGH | T1071 | tracepoint/sys_enter_connect |
| 6 | Process_Injection | HIGH | T1055.008 | tracepoint/sys_enter_ptrace |
| 7 | Log_Tampering | HIGH | T1562.001 | tracepoint/sys_enter_unlinkat |
| 8 | Ebpf_Tampering | HIGH | T1562.001 | tracepoint/sys_enter_bpf |
| 9 | Perf_Event_Open | MEDIUM | T1562.001 | tracepoint/sys_enter_perf_event_open |
| 10 | Suspicious_Mount | HIGH | T1611 | tracepoint/sys_enter_mount |
| 11 | Namespace_Switch | HIGH | T1611 | tracepoint/sys_enter_setns |
| 12 | Chroot_Escape | HIGH | T1611 | tracepoint/sys_enter_chroot |
| 13 | Executable_Memory | MEDIUM | T1620 | tracepoint/sys_enter_mprotect |
| 14 | Core_Pattern_Modification | CRITICAL | T1611 | tracepoint/sys_enter_openat + open |
| 15 | Cgroup_Release_Agent | CRITICAL | T1611 | tracepoint/sys_enter_openat + open |
| 16 | Canary_Triggered | CRITICAL | T1552.001 | tracepoint/sys_enter_openat + open |
Действия 9 и 13 подключены, но по умолчанию подавляются на стороне ядра через
disabled_actions в config.toml.
Хуки ядра (14) подают данные в фильтр по comm/cgroup, затем в O(1)-поиск по хешу canary_paths, затем в поиск action_enabled. События помещаются в ringbuf размером 1 МиБ, переносящий 208-байтовые записи. Пользовательское пространство читает в фиксированный пулированный буфер, применяет token bucket для каждого действия, обогащает данными о происхождении процесса и пути cgroup, а также метаданными Pod K8s из ограниченных LRU-кэшей, и маршрутизирует через Encoder + Sink к любому получателю.
Полные сведения: docs/ARCHITECTURE.md.
ebpf edr экспортирует оповещения в любую SIEM через слой формата + транспорта.
[output]
format = "ecs" # json | ecs | ocsf | cef | leef
target = "webhook" # file | stdout | syslog | webhook
[output.webhook]
url = "https://splunk.internal:8088/services/collector/event"
auth_header = "Splunk ${SPLUNK_HEC_TOKEN}"
splunk_hec = true
Поддерживаемые транспорты: file, stdout, syslog (UDP/TCP/TLS), HTTPS webhook. Поддерживаемые форматы: native JSON, ECS 8.11, OCSF 1.3.0, CEF, LEEF 2.0.
Рецепты для Splunk, Elastic, Sentinel, QRadar и generic syslog:
docs/SIEM_INTEGRATION.md.
При отсутствии [output] поведение побайтово идентично v1.x.
CONFIG_DEBUG_INFO_BTF=y (/sys/kernel/btf/vmlinux)docs/KERNEL_COMPATIBILITY.md.CAP_BPF CAP_PERFMON CAP_SYS_ADMINmake kernel # kernel/bpf_program.o
make userspace # userspace/ebpf_controller
make emulation # emulation/adversary
sudo -E make verify
Выполняет проверку окружения, сборку, проверку раскладки структур C/Go, пробный прогон BPF-верификатора, runtime smoke-тест, эмуляцию противника, тест производительности, матрицу конфигураций, перезагрузку по SIGHUP, простой CPU, обогащение lineage, границы кэша, новые хуки, матрицу форматов и доставку webhook.
sudo ./install.sh --dry-run
sudo ./install.sh
sudo ./install.sh --uninstall
Устанавливает /usr/local/sbin/ebpf-edr,
/usr/local/lib/ebpf-edr/bpf_program.o,
/etc/ebpf-edr/config.toml (существующий сохраняется; новый по умолчанию в .new),
/etc/systemd/system/ebpf-edr.service,
/etc/logrotate.d/ebpf-edr.
TOML в /etc/ebpf-edr/config.toml. Приоритет: CLI > env (EDR_*) > файл > значения по умолчанию.
mode = "audit"
disabled_actions = [
"Perf_Event_Open",
"Executable_Memory",
]
[log]
path = "/var/log/ebpf_edr.json"
max_bytes = 52428800
max_backups = 5
level = "info"
[filter]
comm_allowlist = []
cgroup_allowlist = []
canary_paths = ["/var/run/secrets/kubernetes.io/serviceaccount/token"]
[k8s]
enrichment = true
[rates]
events_per_sec = 200
burst = 400
[container]
cache_max_entries = 5000
[context]
lineage_max_depth = 16
lineage_cache_size = 20000
cgroup_cache_size = 5000
Перезагрузка: sudo systemctl reload ebpf-edr. mode = "enforce" отклоняется;
эта сборка работает только в режиме аудита.