
Bombini は、Aya ライブラリを使用して完全に Rust で書かれ、LSM (Linux Security Module) BPF フック上に構築された eBPF ベースのセキュリティエージェントです。 その中核として、Bombini は Detector と呼ばれるモジュール式コンポーネントを採用しており、それぞれが特定の種類のシステムイベントの監視と報告を担当します。サンドボックスモードが有効な Detector は、禁止されたアクションをカーネル内で直接ブロックします。
EPERM で失敗します。scope/event 述語が、イベントを報告するか、sandbox が有効な場合はそれを拒否します。Bombini には BPF LSM が有効な Linux 6.2+ が必要です。まず互換性の注意事項を確認してください。コンテナイメージは x86_64 用にビルドされています。
リポジトリのルートからクイックスタート設定で 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
設定は 3 つの Detector ファイルで構成されています。
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 はイベントを JSON 行として stdout に出力します。これがブロックされた 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 のシェルエスケープや特権昇格など、その他の既製ポリシーは examples にあります。
| Detector | 監視対象 | Sandbox |
|---|---|---|
| ProcMon | プロセスの exec と exit、setuid/setgid、ケイパビリティ、prctl、ユーザー名前空間、ptrace | ✓ |
| FileMon | ファイルオープン、mmap、truncate、unlink、symlink、chmod、chown、mount、ioctl | ✓ |
| NetMon | インバウンドおよびアウトバウンドの TCP 接続、ソケット作成と connect | ✓ |
| KernelMon | BPF マップの作成、BPF プログラムのロード、BPF マップとプログラムへのアクセス | |
| IOUringMon | io_uring サブミッションキューエントリ | |
| SysEnumMon (実験的) | システム列挙: 時間枠内に複数の監視対象ファイルまたはバイナリが触れられた場合 |
ルール構文はルールで、イベント形式はイベントで説明されています。
完全なドキュメントはbookにあります。
コントリビューションガイドラインについては、CONTRIBUTING.md を確認してください。