Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
jailer — Jailerは、eBPFベースのプロセス隔離システムであり、Linuxに強制アクセス制御(MAC)を提供します。BPF task_storageマップを使用してプロセスを追跡し、ファイルアクセス、ネットワーク操作、プロセス実行に対するロールベースのポリシーを適用します。 | Kitploit
ツール/GitHubGitHub/gen0sec/jailer
防御ツールコンテナセキュリティネットワークセキュリティクラウドセキュリティ
GitHubgen0sec/jailer

jailer

Jailerは、eBPFベースのプロセス隔離システムであり、Linuxに強制アクセス制御(MAC)を提供します。BPF task_storageマップを使用してプロセスを追跡し、ファイルアクセス、ネットワーク操作、プロセス実行に対するロールベースのポリシーを適用します。

リポジトリを見る
582116日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト

Jailer - eBPF強制アクセス制御

警告: このプロジェクトは活発に開発中であり、本番環境での使用には適していません。API、ポリシー形式、動作は予告なく変更される可能性があります。テストおよび実験目的でのみ使用してください。

謝辞

注記: これは独立した実装であり、Metaのソリューションと同じプロジェクトではありません。BpfJailerは機能的に類似しており、Meta の Liam Wisehart、Justin Nga、Carl El Khoury、Mansee Chadha による元のアイデアと設計に触発されていますが、これは独立して開発された別のコードベースです。この作品に影響を与えたビジョンと基礎概念に感謝の意を表します。

コミュニティ

Join us on Discord Substack

Jailerは、Linux向けの強制アクセス制御(MAC)を提供するeBPFベースのプロセス隔離システムです。BPF task_storageマップを使用してプロセスを追跡し、ファイルアクセス、ネットワーク操作、プロセス実行に関するロールベースのポリシーを適用します。

機能(現在のバージョン)

機能ステータス説明
プロセス追跡✅ 動作中task_storage BPFマップを使用してプロセスを追跡
ソケット登録✅ 動作中UnixソケットAPIを介してプロセスが登録
ロールベースのポリシー✅ 動作中制限ロールと許可ロール
ファイルアクセス制御✅ 動作中ファイルオープン操作のブロック/許可
隔離の継承✅ 動作中子プロセスは親の隔離を継承
ネットワーク制御✅ 動作中ソケットbind/connectのブロック/許可
ポート/プロトコルフィルタリング✅ 動作中ポート単位のTCP/UDP許可/拒否ルール
実行制御✅ 動作中プロセス実行のブロック/許可
パス一致✅ 動作中キャッシュ無効化を伴うdentryウォーク
署名済みバイナリ🚧 スタブバイナリ署名検証(未実装)
代替登録✅ 動作中実行ファイル、cgroup、またはxattrによる自動登録
デーモンレスモード✅ 動作中ブートストラップバイナリが早期ブート時にプログラムをピン留め
監査イベント✅ 動作中systemd-journald統合用のperfバッファ

Nginxデモ

Nginx demo

複雑なデモ

asciicast

カーネル要件

最低カーネルバージョン

  • Linux 5.11以上(BPF_MAP_TYPE_TASK_STORAGEサポートのため)
  • 推奨: Linux 6.1以上(BTFサポートがより良好)

必要なカーネル設定

# 現在のカーネル設定を確認
zcat /proc/config.gz 2>/dev/null || cat /boot/config-$(uname -r)

必要なオプション:

CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_LSM=y
CONFIG_DEBUG_INFO_BTF=y

BPF LSMを有効化

BPF LSMはカーネルブートパラメータで有効にする必要があります:

# BPF LSMがアクティブか確認
cat /sys/kernel/security/lsm
# リストに "bpf" が含まれている必要があります

# 含まれていない場合、カーネルブートパラメータに追加:
# /etc/default/grub を編集し、GRUB_CMDLINE_LINUX に以下を追加:
#   lsm=lockdown,capability,landlock,yama,apparmor,bpf

# その後grubを更新して再起動:
sudo update-grub
sudo reboot

Ubuntu/Debianシステムでは、以下も使用できます:

# BPF LSMを有効化するスクリプトを作成
cat > /tmp/enable_bpf_lsm.sh << 'EOF'
#!/bin/bash
GRUB_FILE="/etc/default/grub"
if grep -q "lsm=" "$GRUB_FILE"; then
    sudo sed -i 's/lsm=[^""]*/lsm=lockdown,capability,landlock,yama,apparmor,bpf/' "$GRUB_FILE"
else
    sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 lsm=lockdown,capability,landlock,yama,apparmor,bpf"/' "$GRUB_FILE"
fi
sudo update-grub
echo "BPF LSMが有効化されました。再起動してください。"
EOF
chmod +x /tmp/enable_bpf_lsm.sh
sudo /tmp/enable_bpf_lsm.sh

ビルド

前提条件

# Rustをインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# ビルド依存関係をインストール(Ubuntu/Debian)
sudo apt-get install -y clang llvm libelf-dev linux-headers-$(uname -r)

# RustにBPFターゲットを追加
rustup target add bpfel-unknown-none

全コンポーネントのビルド

cd bpfjail

# BPFプログラムをビルド
cd bpfjailer-bpf && cargo build --release && cd ..

# デーモンとクライアントをビルド
cargo build --release

クイックスタート

1. デーモンを起動

# rootとして実行(存在すれば config/policy.json を読み込み)
sudo RUST_LOG=info ./target/release/bpfjailer-daemon

期待される出力:

[INFO] BpfJailer daemon starting...
[INFO] Loading BpfJailer eBPF programs with libbpf-rs...
[INFO] ✓ pending_enrollments map available for enrollment
[INFO] ✓ network_rules map available for port/protocol filtering
[INFO] ✓ task_storage map created successfully
[INFO] ✓ Program task_alloc attached
[INFO] ✓ Program file_open attached
[INFO] ✓ Program socket_bind attached
[INFO] ✓ Program socket_connect attached
[INFO] ✓ Program bprm_check_security attached
[INFO] Initialized with default roles: restricted (1), permissive (2)
[INFO] Loaded policy from config/policy.json
[INFO] Loaded 5 roles
[INFO] Enrollment server listening on /run/bpfjailer/enrollment.sock

2. セキュリティテストの実行

# 隔離なしで脆弱性テストを実行(攻撃が成功することを確認)
sudo python3 tests/vulnerable_apps/run_tests.py

# 制限ロールで脆弱性テストを実行(攻撃がブロックされることを確認)
sudo python3 tests/vulnerable_apps/run_tests.py --role 1

# 特定のテストを実行
sudo python3 tests/vulnerable_apps/run_tests.py --role 1 --test path

# 利用可能なテストとロールを一覧表示
sudo python3 tests/vulnerable_apps/run_tests.py --list

制限ロールでの出力例:

============================================================
TEST: Path Traversal / Arbitrary File Read
============================================================
Attempting to read /etc/passwd via path traversal...
BLOCKED - Permission denied (BpfJailer blocked file access)

============================================================
TEST: Command Injection
============================================================
Attempting command injection...
BLOCKED - Permission denied (BpfJailer blocked exec)

============================================================
TEST: Reverse Shell / Data Exfiltration
============================================================
Test 1: Reverse shell connection to 127.0.0.1:4444
BLOCKED - Permission denied (BpfJailer blocked connect)

利用可能なセキュリティテスト

テスト脆弱性緩和するロール
path_traversal../ による任意ファイル読み取りrestricted, isolated
command_injectionシェルコマンド実行restricted, webserver, isolated
reverse_shell攻撃者へのアウトバウンド接続restricted, isolated
ssrf内部サービス/クラウドメタデータへのアクセスrestricted, isolated
arbitrary_write機密パスへの書き込みrestricted
crypto_minerダウンロード + 実行 + プールへの接続restricted, webserver
privilege_escalationshadow読み取り、sudoers書き込みrestricted

3. 手動登録テスト

#!/usr/bin/env python3
import socket
import json
import os

# デーモンに接続
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect("/run/bpfjailer/enrollment.sock")

# 制限ロール(ID 1)で登録
request = {"Enroll": {"pod_id": 1, "role_id": 1}}
sock.send((json.dumps(request) + "\n").encode())
response = sock.recv(4096).decode()
print(f"登録: {response}")
sock.close()

# ファイルを読み取ろうとする(ブロックされるはず)
try:
    open("/etc/passwd").read()
    print("ファイルアクセス: 許可")
except PermissionError:
    print("ファイルアクセス: ブロック")

ポリシーファイル

BpfJailerはJSONポリシーファイルからロールを読み込みます。デーモンは次の順序でポリシーファイルを検索します:

  1. $BPFJAILER_POLICY 環境変数
  2. /etc/bpfjailer/policy.json
  3. config/policy.json(ワーキングディレクトリからの相対パス)

ポリシーファイルの例

{
  "roles": {
    "restricted": {
      "id": 1,
      "name": "restricted",
      "flags": {
        "allow_file_access": false,
        "allow_network": false,
        "allow_exec": false
      },
      "network_rules": []
    },
    "webserver": {
      "id": 3,
      "name": "webserver",
      "flags": {
        "allow_file_access": true,
        "allow_network": true,
        "allow_exec": false
      },
      "network_rules": [
        {"protocol": "tcp", "port": 80, "allow": true},
        {"protocol": "tcp", "port": 443, "allow": true}
      ]
    }
  },
  "pods": []
}

ポリシーフラグ

フラグ説明
allow_file_accessファイルオープン操作を許可
allow_networkソケットbind/connectを許可
allow_execプロセス実行を許可
allow_setuidsetuid操作を許可
allow_ptraceptrace操作を許可

デフォルトロール

ロールID名前ファイルアクセスネットワーク実行
1restrictedブロックブロックブロック
2permissive許可許可許可
3webserver許可ポート80, 443, 8080ブロック
4database許可ポート5432, 6379ブロック
5isolated許可ブロックブロック
6web_with_db許可ポート80, 443, 5432, 3306, 6379ブロック
7worker許可ポート443, 5432, 6379, 5672許可

ネットワークポート/プロトコルフィルタリング

BpfJailerはポート単位のTCP/UDPルールによる細かいネットワーク制御をサポートしています。

ルール構造

network_rules マップ:
  キー: { role_id, port, protocol, direction }
  値: allowed (1) または denied (0)
ツールをダウンロード