Jailerはebpfベースのプロセスジェイリングシステムで、Linuxに対する強制アクセス制御(MAC)を提供します。BPFタスク_ストレージマップを使用してプロセスを追跡し、ファイルアクセス、ネットワーク操作、プロセス実行に対するロールベースのポリシーを実施します。
機能
| 機能 | ステータス | 説明 |
|---|---|---|
| プロセス追跡 | ✅ 動作中 | task_storage BPFマップを使用してプロセスを追跡 |
| ソケット登録 | ✅ 動作中 | プロセスはUnix ソケット APIを介して登録 |
| ロールベースのポリシー | ✅ 動作中 | 制限付きおよび許容的なロール |
| ファイル アクセス制御 | ✅ 動作中 | ファイルオープン操作をブロック/許可 |
| ジェイル継承 | ✅ 動作中 | 子プロセスは親のジェイルを継承 |
| ネットワーク制御 | ✅ 動作中 | ソケット バインド/接続をブロック/許可 |
| ポート/プロトコル フィルタリング | ✅ 動作中 | ポートごとのTCP/UDP許可/拒否ルール |
| 実行制御 | ✅ 動作中 | プロセス実行をブロック/許可 |
| パスマッチング | ✅ 動作中 | キャッシュ無効化によるDentryウォーキング |
| 署名付きバイナリ | 🚧 スタブ | バイナリ署名検証 (未実装) |
| 代替登録 | ✅ 動作中 | 実行可能ファイル、cgroup、またはxattrによる自動登録 |
| デーモンレスモード | ✅ 動作中 | ブートストラップ バイナリは初期ブート時にプログラムをピン留め |
| 監査イベント | ✅ 動作中 | systemd-journald統合のためのPerfバッファ |
ポリシーフラグ
| フラグ | 説明 |
|---|---|
allow_file_access |
ファイルオープン操作を許可 |
allow_network |
ソケット バインド/接続を許可 |
allow_exec |
プロセス実行を許可 |
allow_setuid |
setuid操作を許可 |
allow_ptrace |
ptrace操作を許可 |
デフォルトロール
| ロールID | 名前 | ファイルアクセス | ネットワーク | 実行 |
|---|---|---|---|---|
| 1 | restricted | ブロック済み | ブロック済み | ブロック済み |
| 2 | permissive | 許可 | 許可 | 許可 |
| 3 | webserver | 許可 | ポート 80、443、8080 | ブロック済み |
| 4 | database | 許可 | ポート 5432、6379 | ブロック済み |
| 5 | isolated | 許可 | ブロック済み | ブロック済み |
| 6 | web_with_db | 許可 | ポート 80、443、5432、3306、6379 | ブロック済み |
| 7 | worker | 許可 | ポート 443、5432、6379、5672 | 許可 |
アーキテクチャ

登録フロー
- プロセスは
/run/bpfjailer/enrollment.sockに接続します - JSONを送信します:
{"Enroll": {"pod_id": N, "role_id": M}} - デーモンは
pending_enrollments[PID]およびrole_flags[role_id]に書き込みます - 次のシステムコール (file_open、exec) で、BPFは登録を
task_storageに移行します - 以降のすべてのシステムコールは、適用のために
task_storage+role_flagsをチェックします - 子プロセスは
task_allocフックを介して継承します
インストール&使用
翻訳元: https://meterpreter.org/jailer-ebpf-linux-mandatory-access-control-process-jailing/
ソース: meterpreter.org