
Auditoria apenas eBPF EDR para Linux 5.15+ LTS: 14 hooks de kernel, 15 ações (13 técnicas MITRE), linhagem de processos, exportação para SIEM, pronto para K8s/Docker.
Apenas detecção e auditoria. Sensor não impositivo. Nenhum programa BPF retorna
-EPERM; nenhuma syscall é bloqueada. Este agente é um plano de observação em runtime, não um plano de prevenção. Consultedocs/SECURITY.mdeTHREAT_MODEL.md.
Um agente EDR para Linux ultraleve, apenas de auditoria, construído com eBPF (C) e um daemon Go de alta eficiência. Ele tem como alvo o kernel Linux 5.15 LTS e superiores, apresentando um caminho crítico sem alocações, um consumo de memória inferior a 30MB e enriquecimento profundo de contexto de contêiner/K8s.
CRITICAL instantaneamente.cgroup_id para Nome do Pod, Namespace e ServiceAccount sem inflar o formato de transmissão do kernel de 208 bytes.0.40% de CPU ociosa e 0 descartes de ringbuf sob um teste de estresse de 25.000 forks.Status: Fase 2.7 concluída. 13 técnicas MITRE ATT&CK em 16 ações. Verificado de ponta a ponta no kernel 6.12.111 (82 PASS / 0 FAIL).
| # | Ação | Severidade | 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 |
As ações 9 e 13 estão anexadas, mas suprimidas no lado do kernel por padrão via
disabled_actions em config.toml.
Os hooks do kernel (14) alimentam um filtro de comm/cgroup, uma busca hash O(1) de canary_paths, e em seguida uma busca de action_enabled. Os eventos são enviados para um ringbuf de 1 MiB carregando registros de 208 bytes. O espaço de usuário lê em um buffer fixo em pool, aplica um token bucket por ação, enriquece com linhagem de processos e caminho de cgroup, e metadados de Pod do K8s a partir de caches LRU limitados, e roteia através de um Encoder + Sink para qualquer destino.
Detalhes completos: docs/ARCHITECTURE.md.
ebpf edr exporta alertas para qualquer SIEM através de uma camada 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 suportados: file, stdout, syslog (UDP/TCP/TLS), webhook HTTPS. Formatos suportados: JSON nativo, ECS 8.11, OCSF 1.3.0, CEF, LEEF 2.0.
Receitas para Splunk, Elastic, Sentinel, QRadar e syslog genérico:
docs/SIEM_INTEGRATION.md.
Na ausência de [output], o comportamento é idêntico byte a byte ao v1.x.
CONFIG_DEBUG_INFO_BTF=y (/sys/kernel/btf/vmlinux)docs/KERNEL_COMPATIBILITY.md para a 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
Executa sondagem do ambiente, compilação, asserção de layout de struct C/Go, dry-run do verificador BPF, smoke em runtime, emulação de adversário, desempenho, matriz de configuração, recarga via SIGHUP, CPU em idle, enriquecimento de linhagem, limites de cache, novos hooks, matriz de formatos e entrega via 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 (existente preservado; novo padrão em .new),
/etc/systemd/system/ebpf-edr.service,
/etc/logrotate.d/ebpf-edr.
TOML em /etc/ebpf-edr/config.toml. Precedência: CLI > env (EDR_*) > arquivo > padrões.
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" é rejeitado;
esta build é somente auditoria.