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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Z-Jail — 軽量かつ多層的なLinuxサンドボックスで、namespaces、pivot_root、seccomp-bpf、capability dropping、そしてエビデンスベースの判定エンジン(Truthimatics Public Version)を組み合わせ、安全で監査可能なコード実行を実現します。 | Kitploit
ツール/GitHubGitHub/division-36/z-jail
防御ツール特権昇格コンテナセキュリティ動的分析 (サンドボックス)IDS/IPS回避フォレンジックCTFバイナリ解析学習と教育ラボと実践
GitHubdivision-36/z-jail

Z-Jail

7412111ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

軽量かつ多層的なLinuxサンドボックスで、namespaces、pivot_root、seccomp-bpf、capability dropping、そしてエビデンスベースの判定エンジン(Truthimatics Public Version)を組み合わせ、安全で監査可能なコード実行を実現します。

リポジトリを見る
Z-Jail

Z-Jail

Linux上でのネイティブコード実行のためのマルチレイヤーサンドボックス。
7つの独立した防御層 — 外部依存関係なし、約73 KiBのPIEバイナリ。


┌──────────────────────────────────────────────────────┐
│                    Z-Jail                            │
├──────────────────────────────────────────────────────┤
│  Truthimatics PV  (エビデンスベースの判定エンジン)     │
│  Namespaces       (mount, pid, net, ipc, uts)        │
│  pivot_root       (chrootの強化版)                    │
│  Capabilities     (すべて削除、securebitsをロック)       │
│  NO_NEW_PRIVS     (権限昇格を禁止)                    │
│  seccomp-BPF     (ホワイトリスト: 15システムコールのみ) │
│  Audit            (JSONログ + BLAKE2bハッシュ)        │
└──────────────────────────────────────────────────────┘

目次

  • クイックスタート
  • なぜZ-Jailか
  • アーキテクチャ
  • レイヤー
  • 使い方
  • ビルド & インストール
  • テスト
  • パフォーマンス
  • 脅威モデル
  • ドキュメント
  • ロードマップ
  • ライセンス

クイックスタート

git clone https://github.com/Division-36/Z-Jail.git
cd Z-Jail
make
sudo ./z_jail --root=/path/to/rootfs --seccomp-enforce -- /bin/ls

--rootディレクトリには、ターゲットバイナリとその依存関係を含む最小限のファイルシステムが必要です(静的バイナリの場合はバイナリのみで十分です)。


なぜZ-Jailか

既存のサンドボックス化ソリューションにはトレードオフがあります:

Z-JailFirecrackergVisorbwrapnsjail
外部依存関係ゼロlibc, seccompGoランタイムlibclibc, protobuf
バイナリサイズ約73 KiB20+ MiB40+ MiB~70 KiB~1 MiB
VM分離なしあり (microVM)なし (サンドボックス)なしなし
seccompホワイトリストありなしありオプションあり
コンテンツハッシュありなしなしなしなし
Audit JSONありなしありなし一部
ビルドの複雑さ1つのmake複雑複雑簡単中程度

Z-Jailはbwrap(最小限、デフォルトでseccompなし)とnsjail(高機能、重い依存関係)の間のニッチを埋めます。CIパイプライン、CTFジャイルチャレンジ、軽量コード評価のために設計されており、コンテナランタイムを導入せずに多層防御を実現します。


アーキテクチャ

データフロー

flowchart LR
    CLI[CLI引数] --> P[parse_args]
    P --> C{名前空間をクローン}
    C -->|子プロセス| CR[child_run]
    C -->|親プロセス| W[waitpid]
    CR --> RL[setrlimit]
    RL --> FD[fd >= 3 を閉じる]
    FD --> DUMP[PR_SET_DUMPABLE=0]
    DUMP --> PV[pivot_root]
    PV --> NNP[PR_SET_NO_NEW_PRIVS]
    NNP --> CAP[ケーパビリティを削除]
    CAP --> SC[seccomp-BPF]
    SC --> SIG[シグナルを親に送信]
    SIG --> EX[execve ターゲット]
    W --> A[監査JSON]
    A --> EXIT[終了]

レイヤーの順序

各レイヤーは、後のレイヤーが前のレイヤーによって元に戻されないように順序付けられています:

  1. setrlimit — CPU、アドレス空間、ファイル数、プロセス数を最初に制限
  2. fdスクラブ — レポートパイプを除くすべての継承されたfdを閉じる
  3. PR_SET_DUMPABLE=0 — コアダンプを無効化、/proc/self/memをロックダウン
  4. pivot_root — ホストファイルシステムから切り離し; 古いルートは遅延アンマウント
  5. PR_SET_NO_NEW_PRIVS — この時点以降、setuidやcapsetによる昇格を禁止
  6. drop_caps — すべてのケーパビリティをゼロにし、securebitsをロック
  7. seccomp-BPF — システムコールをホワイトリストのみに制限
  8. 親にシグナルを送信 — サンドボックスの準備完了を親に通知
  9. execve — プロセスをターゲットバイナリに置き換え
sequenceDiagram
    participant P as 親プロセス
    participant C as 子プロセス
    P->>C: clone (NEWNS|NEWPID|NEWNET|NEWIPC|NEWUTS)
    Note over C: setrlimit(CPU, AS, NOFILE, NPROC)
    Note over C: close(3以上のすべてのfd)
    Note over C: PR_SET_DUMPABLE=0
    Note over C: pivot_root → chdir("/") → umount -l
    Note over C: PR_SET_NO_NEW_PRIVS
    Note over C: capset(すべてゼロ) + securebits
    Note over C: seccomp(SECCOMP_MODE_FILTER, ホワイトリスト)
    C->>P: write(pipe, ready=1)
    Note over C: execve(ターゲット)
    P->>P: waitpid
    P->>P: 監査JSONを書き込み

レイヤー

1. Truthimatics Public Version

エビデンスベースの判定エンジン。実行されたバイナリに関する重み付き観測を収集し、最終的な判定(DETERMINISTIC、REJECT、またはUNCERTAIN)を決定します。各観測には重みがあり、任意の単一観測の重みが合計の50%を超えると判定が決まります。

2. 名前空間

clone()を介して5つの名前空間が作成されます:

名前空間フラグ目的
マウントCLONE_NEWNS分離されたファイルシステムツリー
PIDCLONE_NEWPIDプロセスID空間 (子プロセスはpid 1)
ネットCLONE_NEWNETネットワークインターフェースなし
IPCCLONE_NEWIPC共有メモリ / セマフォなし
UTSCLONE_NEWUTS独立したホスト名

初期名前空間でCAP_SYS_ADMINが必要です。

3. pivot_root

マウント名前空間のルートを--rootディレクトリに置き換えます:

  1. ルートディレクトリをそれ自身にバインドマウント (MS_BIND|MS_REC)
  2. pivot_root(new_root, put_old) — マウントツリーを交換
  3. chdir("/") — 新しいルートに移動
  4. umount2("/.pivot_old", MNT_DETACH) — 古いルートを切り離し
  5. rmdir("/.pivot_old") — クリーンアップ

これはchroot(2)よりも厳密に強力です — サンドボックス化されたプロセスがホストルートに戻る方法はありません。サンドボックス内部からのCLONE_NEWNS(すでにseccompでブロックされています)を使用しても不可能です。

4. ケーパビリティ

すべてのケーパビリティは以下によって削除されます:

capset(hdr, data)  // data = {0, 0, 0}
prctl(SECBIT_KEEP_CAPS_LOCKED | SECBIT_NO_SETUID_FIXUP | ...)

プロセスはcapsetの前にsetuid/setgidを削除し、CAP_SETUIDがまだ保持されている間にuid変更を有効にします。capset後、すべてのケーパビリティはなくなり、securebitsはロックされます — 再有効化は不可能です。

5. NO_NEW_PRIVS

prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);

プロセスまたはその子プロセスが、setuidバイナリ、ファイルケーパビリティ、またはLSM遷移を介して新しい特権を取得するのを防ぎます。不可逆的。

6. seccomp-BPF (whitelist-v1)

15のシステムコールの許可リスト — リストにないものはSECCOMP_RET_KILL:

システムコール番号備考
read0標準入力
write1標準出力/標準エラー + レポートパイプ
openat257ファイルアクセス (openではない)
close3—
lseek8—
brk12ヒープ管理
mmap9引数制限: flags & 4 == 0 (MAP_SHAREDなし), flags == 0x22 (MAP_PRIVATE|MAP_ANONYMOUS)
munmap11—
execve59起動時の単一exec
exit_group231クリーンなプロセス終了
rt_sigaction13シグナルハンドラ
rt_sigprocmask14シグナルマスキング
getrandom318乱数ソース
clock_gettime228タイミング
fstat5ファイルメタデータ

BPFフィルタは動的に生成されます: 各ホワイトリストエントリに対して、システムコールが一致すれば許可、そうでなければKILLにフォールスルーするジャンプチェーンが出力されます。アーキテクチャが最初にチェックされます (AUDIT_ARCH_X86_64)。

フィルタはスタンドアロンテスト (tests/seccomp_filter_test.c、8/8合格) によって独立して検証され、root権限を必要とせずに実際のprctl(PR_SET_SECCOMP)に対してテストケースをfork+execveします。

7. 監査

実行ごとにJSON監査レコードが生成されます:

{
  "schema": "z-jail.audit/v1",
  "build_id": "Z-Jail/v1+dev",
  "timestamp": 1749000000,
  "duration_ns": 8500000,
  "executable": "/bin/ls",
  "verdict": "DETERMINISTIC",
  "exit_code": 0,
  "sandbox": {
    "seccomp_filter": "whitelist-v1",
    "seccomp_whitelist_size": 15,
    "seccomp_arg_rules_size": 2,
    "namespaces": ["mount","pid","net","ipc","uts"],
    "pivot_root": "/var/run/z-jail/roots/default",
    "no_new_privs": true,
    "capabilities_dropped": true
  },
  "content_fingerprint": "0e5751c026e543b2e8ab2eb06099daa1..."
}

build/audits/<binary-name>.audit.json に書き込まれます。content_fingerprintは、子プロセスが終了した後に親によって計算されたターゲットバイナリのBLAKE2b-256ハッシュです。


使い方

z_jail --root=<dir> [--seccomp-enforce] [--self-hash=<hex>]
       [--quiet] [--verbose] -- <program> [args...]
フラグ説明
--root=<dir>サンドボックスルートディレクトリ (必須)
--seccomp-enforceseccomp-BPFシステムコールホワイトリストを有効化
--self-hash=<hex>バイナリが期待されるBLAKE2b-256ハッシュと一致するか確認
--quiet監査出力を抑制
--verboseデバッグログを有効化
--versionビルドIDを表示 (Z-Jail/v1+dev)
--help使い方を表示して終了

例

# すべての保護機能を有効にして静的バイナリを実行
sudo z_jail --root=./roots --seccomp-enforce -- bin/hello_static

# バイナリ整合性検証付きで実行
sudo z_jail --root=./roots --seccomp-enforce \
  --self-hash=$(sha256sum z_jail | cut -c1-64) -- bin/program
ツールをダウンロード