
Auditoría solo con eBPF EDR para Linux 5.15+ LTS: 14 hooks del kernel, 15 acciones (13 técnicas MITRE), linaje de procesos, exportación a SIEM, listo para K8s/Docker.
Solo detección y auditoría. Sensor no aplicador. Ningún programa BPF devuelve
-EPERM; ninguna syscall se bloquea. Este agente es un plano de observación en tiempo de ejecución, no un plano de prevención. Véasedocs/SECURITY.mdyTHREAT_MODEL.md.
Un agente EDR para Linux ultraligero y de solo auditoría, construido con eBPF (C) y un daemon Go de alta eficiencia. Está orientado a Linux kernel 5.15 LTS y superiores, e incluye una ruta crítica de cero asignaciones, una huella de memoria inferior a 30 MB y un profundo enriquecimiento de contexto de contenedores/K8s.
CRITICAL al instante.cgroup_id a nombre de Pod, Namespace y ServiceAccount sin inflar el formato de transmisión del kernel de 208 bytes.0.40% de CPU en reposo y 0 pérdidas de ringbuf bajo una prueba de estrés de 25.000 forks.Estado: Fase 2.7 completada. 13 técnicas MITRE ATT&CK en 16 acciones. Verificado de extremo a extremo en el kernel 6.12.111 (82 PASS / 0 FAIL).
| # | Acción | Severidad | 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 |
Las acciones 9 y 13 están adjuntas pero suprimidas por defecto en el lado del kernel mediante
disabled_actions en config.toml.
Los hooks del kernel (14) alimentan un filtro de comm/cgroup, una búsqueda hash O(1) de canary_paths, y luego una búsqueda de action_enabled. Los eventos se envían a un ringbuf de 1 MiB que transporta registros de 208 bytes. El espacio de usuario lee en un búfer agrupado fijo, aplica un token bucket por acción, enriquece con el linaje del proceso y la ruta de cgroup, y metadatos de Pod de K8s desde cachés LRU acotadas, y enruta a través de un Encoder + Sink hacia cualquier destino.
Detalles completos: docs/ARCHITECTURE.md.
ebpf edr exporta alertas a cualquier SIEM mediante una capa de formato + transporte.
[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
Transportes admitidos: file, stdout, syslog (UDP/TCP/TLS), webhook HTTPS. Formatos admitidos: JSON nativo, ECS 8.11, OCSF 1.3.0, CEF, LEEF 2.0.
Recetas para Splunk, Elastic, Sentinel, QRadar y syslog genérico:
docs/SIEM_INTEGRATION.md.
Sin [output], el comportamiento es idéntico byte a byte a v1.x.
CONFIG_DEBUG_INFO_BTF=y (/sys/kernel/btf/vmlinux)docs/KERNEL_COMPATIBILITY.md para la matriz completa.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
Ejecuta la sonda del entorno, la compilación, la comprobación del diseño de estructuras C/Go, el dry-run del verificador de BPF, la prueba de humo en tiempo de ejecución, la emulación de adversarios, el rendimiento, la matriz de configuración, la recarga mediante SIGHUP, la CPU en reposo, el enriquecimiento de linaje, los límites de caché, los nuevos hooks, la matriz de formatos y la entrega mediante webhook.
sudo ./install.sh --dry-run
sudo ./install.sh
sudo ./install.sh --uninstall
Instala /usr/local/sbin/ebpf-edr,
/usr/local/lib/ebpf-edr/bpf_program.o,
/etc/ebpf-edr/config.toml (se conserva el existente; el nuevo predeterminado en .new),
/etc/systemd/system/ebpf-edr.service,
/etc/logrotate.d/ebpf-edr.
TOML en /etc/ebpf-edr/config.toml. Precedencia: CLI > env (EDR_*) > archivo > valores predeterminados.
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
Recarga: sudo systemctl reload ebpf-edr. mode = "enforce" se rechaza;
esta compilación es solo de auditoría.