
Aya पर आधारित eBPF सुरक्षा निगरानी और सैंडबॉक्सिंग एजेंट
Bombini एक eBPF-आधारित सुरक्षा एजेंट है जो पूरी तरह से Rust में Aya लाइब्रेरी का उपयोग करके लिखा गया है और LSM (Linux Security Module) BPF हुक्स पर आधारित है। इसके मूल में, Bombini मॉड्यूलर घटकों का उपयोग करता है जिन्हें Detectors कहा जाता है, प्रत्येक विशिष्ट प्रकार के सिस्टम इवेंट्स की निगरानी और रिपोर्टिंग के लिए जिम्मेदार है। सैंडबॉक्स मोड सक्षम वाले Detectors निषिद्ध क्रियाओं को सीधे कर्नेल में ब्लॉक भी करते हैं।
EPERM के साथ विफल हो जाता है, बजाय इसके कि घटित होने के बाद रिपोर्ट किया जाए।scope/event विधेय या तो किसी इवेंट की रिपोर्ट करते हैं या, sandbox सक्षम होने पर, उसे अस्वीकार कर देते हैं।Bombini को Linux 6.2+ की आवश्यकता है जिसमें BPF LSM सक्षम हो। पहले compatibility नोट्स देखें। कंटेनर इमेज x86_64 के लिए बनाई गई है।
रिपॉज़िटरी रूट से quickstart कॉन्फ़िग के साथ Bombini शुरू करें:
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
कॉन्फ़िग में तीन डिटेक्टर फ़ाइलें हैं।
procmon.yaml root पर setuid की रिपोर्ट करता है और /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 /etc/shadow के पठन की रिपोर्ट करता है:
# Detect reads of password hashes
file_open:
enabled: true
rules:
- rule: ShadowRead
event: path == "/etc/shadow"
netmon.yaml क्लाउड मेटाडेटा सेवा से कनेक्शन की रिपोर्ट करता है:
# 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
किसी अन्य टर्मिनल में इवेंट्स उत्पन्न करें:
$ ./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 इवेंट्स को stdout पर JSON लाइन्स के रूप में प्रिंट करता है। यह ब्लॉक किया गया 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"
}
अधिक तैयार नीतियाँ, जैसे GTFOBins शेल एस्केप्स और privilege escalation, examples में हैं।
| Detector | यह क्या देखता है | Sandbox |
|---|---|---|
| ProcMon | प्रोसेस execs और exits, setuid/setgid, capabilities, prctl, user namespaces, ptrace | ✓ |
| FileMon | फ़ाइल open, mmap, truncate, unlink, symlink, chmod, chown, mount, ioctl | ✓ |
| NetMon | Ingress और egress TCP कनेक्शन, socket निर्माण और connect | ✓ |
| KernelMon | BPF मैप निर्माण, BPF प्रोग्राम लोड, और BPF मैप्स और प्रोग्राम्स तक पहुँच | |
| IOUringMon | io_uring सबमिशन क्यू एंट्रीज़ | |
| SysEnumMon (प्रयोगात्मक) | सिस्टम एन्यूमरेशन: एक समय विंडो के भीतर कई निगरानी वाली फ़ाइलें या बाइनरीज़ छुई गईं |
नियम सिंटैक्स Rules में वर्णित है, और इवेंट प्रारूप Events में।
पूर्ण दस्तावेज़ीकरण book में है।
कृपया योगदान दिशानिर्देश के लिए CONTRIBUTING.md देखें।