
eBPF-Sicherheitsüberwachung und Sandboxing-Agent basierend auf Aya
Bombini ist ein eBPF-basierter Sicherheitsagent, der vollständig in Rust unter Verwendung der Aya-Bibliothek geschrieben und auf LSM (Linux Security Module) BPF-Hooks aufgebaut ist. Im Kern verwendet Bombini modulare Komponenten namens Detektoren, die jeweils für die Überwachung und Meldung bestimmter Arten von Systemereignissen verantwortlich sind. Detektoren mit aktiviertem Sandbox-Modus blockieren verbotene Aktionen direkt im Kernel.
EPERM fehl, anstatt gemeldet zu werden,
nachdem es bereits geschehen ist.scope/event-Prädikate
melden entweder ein Ereignis oder verweigern es, wenn sandbox aktiviert ist.Bombini benötigt Linux 6.2+ mit aktiviertem BPF LSM. Prüfen Sie zuerst die Kompatibilitäts- Hinweise. Das Container-Image ist für x86_64 gebaut.
Starten Sie Bombini mit der Schnellstart-Konfiguration aus dem Repository-Stammverzeichnis:
docker run --pid=host --rm -it --privileged \
-v $PWD/examples/quickstart:/usr/local/lib/bombini/config:ro \
-v /sys/fs/bpf:/sys/fs/bpf \
ghcr.io/bombinisecurity/bombini:v1.1.0
Die Konfiguration besteht aus drei Detektor-Dateien.
procmon.yaml meldet setuid zu root und verbietet
die Ausführung von allem aus /tmp:
# Detect privilege escalation to root
setuid:
enabled: true
rules:
- rule: SetUidToRoot
event: euid == 0
# Block binaries executed from /tmp right in the kernel
bprm_check:
enabled: true
sandbox:
enabled: true
deny_list: true
rules:
- rule: DenyExecFromTmp
event: path_prefix == "/tmp"
filemon.yaml meldet Lesezugriffe auf /etc/shadow:
# Detect reads of password hashes
file_open:
enabled: true
rules:
- rule: ShadowRead
event: path == "/etc/shadow"
netmon.yaml meldet Verbindungen zum Cloud-
Metadatendienst:
# Detect access to the cloud metadata service: a common way to steal credentials
egress:
enabled: true
rules:
- rule: CloudMetadataAccess
event: ipv4_dst == "169.254.169.254" AND port_dst == 80
Erzeugen Sie Ereignisse in einem anderen Terminal:
$ ./examples/quickstart/trigger.sh
[1] sudo reads /etc/shadow: Setuid and FileOpen events
[2] exec a binary from /tmp: blocked by the sandbox
./examples/quickstart/trigger.sh: 10: /tmp/bombini-quickstart: Operation not permitted
blocked: exit code 126
[3] connect to the cloud metadata service: Egress event
Bombini gibt Ereignisse als JSON-Zeilen auf stdout aus. Dies ist das blockierte exec:
{
"type": "ProcessEvent",
"process": {
"start_time": "2026-10-03T14:36:10.256Z",
"cloned": true,
"pid": 39988,
"tid": 39988,
"ppid": 39984,
"uid": 503,
"euid": 503,
"gid": 1000,
"egid": 1000,
"auid": 0,
"cap_inheritable": "",
"cap_permitted": "",
"cap_effective": "",
"secureexec": "",
"filename": "dash",
"binary_path": "/usr/bin/dash",
"args": "./examples/quickstart/trigger.sh",
"exec_id": "Mzk5ODg6MjEyNzU3NDAzMjI2MzI2",
"parent_exec_id": "Mzk5ODQ6MjEyNzU3MzgzNTY5NTc3"
},
"parent": { "...": "same fields for the parent process" },
"blocked": true,
"process_event": {
"type": "BprmCheck",
"binary": "/tmp/bombini-quickstart"
},
"timestamp": "2026-10-03T14:36:10.256Z",
"rule": "DenyExecFromTmp"
}
Weitere fertige Richtlinien, wie GTFOBins-Shell-Escapes und Rechteausweitung, finden Sie in examples.
| Detektor | Was er überwacht | Sandbox |
|---|---|---|
| ProcMon | Prozess-Execs und -Exits, setuid/setgid, Capabilities, prctl, User-Namespaces, ptrace | ✓ |
| FileMon | Datei-Öffnen, mmap, truncate, unlink, symlink, chmod, chown, mount, ioctl | ✓ |
| NetMon | Eingehende und ausgehende TCP-Verbindungen, Socket-Erstellung und -Verbindung | ✓ |
| KernelMon | BPF-Map-Erstellung, BPF-Programm-Ladevorgänge und Zugriff auf BPF-Maps und -Programme | |
| IOUringMon | io_uring Submission Queue Entries | |
| SysEnumMon (experimentell) | System-Enumeration: mehrere überwachte Dateien oder Binärdateien, die innerhalb eines Zeitfensters berührt werden |
Die Regelsyntax ist in Rules beschrieben, und das Ereignis- format in Events.
Die vollständige Dokumentation finden Sie im Buch.