eBPFで制限される:Jailer、Linux セキュリティのための次世代プロセスジェイリング システムを紹介

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 許可

アーキテクチャ

Image

登録フロー

  1. プロセスは /run/bpfjailer/enrollment.sock に接続します
  2. JSONを送信します: {"Enroll": {"pod_id": N, "role_id": M}}
  3. デーモンは pending_enrollments[PID] および role_flags[role_id] に書き込みます
  4. 次のシステムコール (file_open、exec) で、BPFは登録を task_storage に移行します
  5. 以降のすべてのシステムコールは、適用のために task_storage + role_flags をチェックします
  6. 子プロセスは task_alloc フックを介して継承します

インストール&使用

翻訳元: https://meterpreter.org/jailer-ebpf-linux-mandatory-access-control-process-jailing/

ソース: meterpreter.org