
Audit-fähiges eBPF-EDR für Linux 5.15+ LTS: 14 Kernel-Hooks, 15 Aktionen (13 MITRE-Techniken), Prozess-Lineage, SIEM-Export, K8s/Docker-bereit.
Nur Erkennung & Audit. Nicht durchsetzender Sensor. Kein BPF-Programm gibt
-EPERMzurück; kein Syscall wird blockiert. Dieser Agent ist eine Laufzeit-Beobachtungsebene, keine Präventionsebene. Siehedocs/SECURITY.mdundTHREAT_MODEL.md.
Ein extrem leichtgewichtiger, ausschließlich auditierender Linux-EDR-Agent, gebaut mit eBPF (C) und einem hocheffizienten Go-Daemon. Er zielt auf Linux-Kernel 5.15 LTS und höher ab und bietet einen zuweisungsfreien Hot Path, einen Speicherbedarf unter 30 MB sowie eine tiefgehende Container-/K8s-Kontextanreicherung.
CRITICAL-Alarm aus.cgroup_id auf Pod-Name, Namespace und ServiceAccount abzubilden, ohne das 208-Byte-Kernel-Wire-Format aufzublähen.0,40 % Leerlauf-CPU und 0 Ringbuf-Drops unter einem Fork-Stresstest mit 25.000 Prozessen.Status: Phase 2.7 abgeschlossen. 13 MITRE-ATT&CK-Techniken über 16 Aktionen. Ende-zu-Ende verifiziert auf Kernel 6.12.111 (82 PASS / 0 FAIL).
| # | Aktion | Schweregrad | MITRE | Hook |
|---|---|---|---|---|
| 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 |
Die Aktionen 9 und 13 sind angehängt, aber kernel-seitig standardmäßig über
disabled_actions in config.toml unterdrückt.
Kernel-Hooks (14) speisen einen comm/cgroup-Filter, einen canary_paths-O(1)-Hash-Lookup und anschließend einen action_enabled-Lookup. Ereignisse werden in einen 1-MiB-Ringbuf mit 208-Byte-Datensätzen geschrieben. Der Userspace liest in einen festen gepoolten Puffer, wendet einen Token-Bucket pro Aktion an, reichert mit Prozess-Lineage und cgroup-Pfad sowie K8s-Pod-Metadaten aus begrenzten LRU-Caches an und leitet über einen Encoder + Sink an ein beliebiges Ziel weiter.
Vollständige Details: docs/ARCHITECTURE.md.
ebpf edr exportiert Alarme über eine Format- + Transportschicht an jedes 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
Unterstützte Transportwege: file, stdout, syslog (UDP/TCP/TLS), HTTPS-Webhook. Unterstützte Formate: natives JSON, ECS 8.11, OCSF 1.3.0, CEF, LEEF 2.0.
Rezepte für Splunk, Elastic, Sentinel, QRadar und generisches syslog:
docs/SIEM_INTEGRATION.md.
Ohne [output] ist das Verhalten byte-identisch zu 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
Führt Umgebungsprüfung, Build, C/Go-Struct-Layout-Assertion, BPF-Verifier- Probelauf, Laufzeit-Smoke-Test, Adversary-Emulation, Performance, Konfigurationsmatrix, SIGHUP-Reload, Idle-CPU, Lineage-Anreicherung, Cache-Grenzen, neue Hooks, Formatmatrix und Webhook-Zustellung aus.
sudo ./install.sh --dry-run
sudo ./install.sh
sudo ./install.sh --uninstall
Installiert /usr/local/sbin/ebpf-edr,
/usr/local/lib/ebpf-edr/bpf_program.o,
/etc/ebpf-edr/config.toml (bestehende Datei bleibt erhalten; neue Standarddatei unter .new),
/etc/systemd/system/ebpf-edr.service,
/etc/logrotate.d/ebpf-edr.
TOML unter /etc/ebpf-edr/config.toml. Rangfolge: CLI > env (EDR_*) > Datei > Standardwerte.
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
Reload: sudo systemctl reload ebpf-edr. mode = "enforce" wird abgelehnt;
dieser Build ist ausschließlich für den Audit-Betrieb vorgesehen.