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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
sandboxed-untrusted-code-execution-runner — 信頼できない Python、JavaScript、Bash を、5秒・128 MB・0.5コア・PID・出力制限付きの堅牢化された jail 内で実行します。 | Kitploit
ツール/GitLabGitLab/kavryxdev-group/sandboxed-untrusted-code-execution-runner
防御ツールコンテナセキュリティ動的分析 (サンドボックス)スクリプトと自動化構成監査セキュリティ仮想化APIセキュリティログ分析

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
GitLab
kavryxdev-group/sandboxed-untrusted-code-execution-runner

sandboxed-untrusted-code-execution-runner

信頼できない Python、JavaScript、Bash を、5秒・128 MB・0.5コア・PID・出力制限付きの堅牢化された jail 内で実行します。

リポジトリを見る
422時間6分前未レビュー

🛡️ サンドボックス化された信頼できないコード実行ランナー

信頼できないコードをカーネルで強制執行する実行環境 — すべてのペイロードを cgroups v2、namespaces、seccomp-BPF、読み取り専用 rootfs で隔離し、すべての実行を PostgreSQL で監査します。

Go Linux PostgreSQL Redis Docker Status

python · javascript · bash → 5秒、128 MB、0.5コア、32 PID、512 KB出力の隔離環境


概要

信頼していないコードのためのセキュリティ強化された実行サービスです。呼び出し元は小さな REST API 経由でソースコードを送信し、デーモンは各ペイロードを一時的なカーネル隔離環境に起動します。そこではアプリケーションロジックではなく Linux カーネル自体が封じ込めを保証します:

  • プロセスはファイルシステムから脱出できない(読み取り専用 rootfs への pivot_root)、
  • ネットワークやホストと通信できない(プライベート namespaces + lo ダウン + seccomp が socket を強制終了)、
  • マシンのリソースを枯渇させられない(cgroups v2 のメモリ/CPU/PID 上限)、
  • 予算を超えて生存できない(5秒のウォールクロック監視)、そして
  • すべての結果 — 違反を含む — が不変の監査証跡に記録される。

主な機能

  • 🧱 多層防御 — 6つの Linux namespaces(PID · MOUNT · NET · IPC · UTS · USER)、厳格な seccomp-BPF 許可リスト、cgroups v2 リソース隔離、16 MB の tmpfs スクラッチ領域を備えた読み取り専用 pivot_root ファイルシステム。
  • ⚡ サブ秒の起動 — 16個の実行スロットのウォームプールと3秒の取得タイムアウトにより、リクエストごとのコールドスタートコストを回避しつつ並行性を制限します。
  • ⏱️ 決定論的な制限 — 厳格な 5 s ウォールクロックタイムアウト、128 MB のメモリ上限(スワップ無効、即時 OOM キル)、0.5 CPU コア、pids.max = 32 による fork 爆弾耐性、stdout/stderr の 512 KB 出力上限。
  • 📜 完全な実行監査 — 終了コード、ウォールタイム、ピークメモリ、CPU 時間、切り捨てフラグ、セキュリティイベントが PostgreSQL(execution_runs)に非同期で書き込まれます。
  • 🧪 攻撃グレードのテストスイート — fork 爆弾、ネットワーク脱出、メモリ OOM、タイムアウト監視、並行性ストレスのための専用統合テスト。特権コンテナ内で実際のカーネルに対して実行可能です。

システムアーキテクチャ

flowchart LR
    CLI["👤 API Client<br/><i>tenant / CI job</i>"]

    subgraph CP["🔐 Trusted Control Plane — Go daemon"]
        API["Ingestion Daemon<br/><i>net/http :8080</i>"]
        POOL["Warm Runner Pool<br/><i>16 slots · 3 s cap</i>"]
        RUN["Process Runner<br/><i>watchdog + pipes</i>"]
        ISO["Kernel Isolation<br/><i>cgroups v2 · namespaces · seccomp-BPF</i>"]
    end

    subgraph JAIL["⛓️ Ephemeral Kernel Jail — untrusted"]
        INIT["sandbox_init<br/><i>exec trampoline</i>"]
        GUEST["💀 Untrusted Code<br/><i>python · node · bash</i>"]
    end

    PG[("🗄️ PostgreSQL 16<br/><i>execution_runs</i>")]
    RD[("📮 Redis 7 Queue<br/><i>sandbox:jobs</i>")]

    CLI -->|"POST /api/v1/execute"| API
    API -->|"validate + acquire"| POOL
    POOL -->|"spawn + limits"| RUN
    RUN -.->|"apply jail"| ISO
    ISO ==>|"seccomp · pivot_root"| GUEST
    RUN -->|"fork / exec"| INIT
    INIT -->|"syscall.Exec"| GUEST
    RUN -.->|"stdout / stderr ≤ 512 KB"| POOL
    API -.->|"async audit INSERT"| PG
    RD -.->|"BRPop drain · worker module"| POOL

    style JAIL fill:#2a1215,stroke:#f87171,stroke-width:2px
    style CP fill:#0d1b2a,stroke:#38bdf8,stroke-width:1px

コンポーネントの内訳

コンポーネント責務ソース
Ingestion DaemonREST サーフェス: POST /api/v1/execute + /health、リクエスト検証、非同期監査イベントの発行cmd/server/main.go
Warm Runner Poolセマフォで制限された実行スロット(16)と 3 秒の取得タイムアウト → 503 相当の枯渇バックプレッシャーinternal/runner/pool.go
Process Runner言語コマンドの構築、cgroup のアタッチ、切り詰めライターを介したパイプのストリーミング、5 秒のウォッチドッグの適用、cgroup メトリクスの収集、結果の分類internal/runner/process.go
Kernel Isolationcgroups v2 リミッター(memory.max、cpu.max、pids.max)、名前空間フラグ(CLONE_NEWPID/NET/NS/IPC/UTS/USER)、seccomp-BPF フィルターコンパイラinternal/isolation/
sandbox_init子プロセスのトランポリン: 読み取り専用の pivot_root + tmpfs の /dev//tmp、ネットワークの切断(lo ダウン)、seccomp の適用、続いてターゲットの syscall.Execcmd/sandbox_init/main.go
Untrusted Codeゲストのペイロード。ホストデバイスは除去され、/proc は隠蔽され(hidepid=2)、許可リストにないすべてのシステムコールは強制終了されるruntimes/ rootfs イメージ
PostgreSQL 16セキュリティ違反を含む、すべての実行の永続的な監査ログmigrations/001_init_sandbox_schema.sql
Redis 7sandbox:jobs キュー + プールへ排出する BRPop ワーカー (モジュールは実装済みだが、まだデーモンに接続されていない — 既知の制限を参照)internal/queue/redis_consumer.go

信頼境界

境界何を分離するか適用方法
クライアント ↔ デーモンコントロールプレーンからの未認証のペイロード送信スキーマ検証(tenant_id、language、code)
コントロールプレーン ↔ ジェイル信頼された Go コードと敵対的ペイロードプライベート名前空間への fork、pivot_root、exec 時の seccomp 継承
ジェイル ↔ カーネル制限ゲストのリソース消費とホストの容量cgroups v2 memory.max=128MB、swap.max=0、cpu.max="50000 100000"、pids.max=32
ジェイル ↔ ネットワークあらゆる外向き通信やホスト側への到達性プライベートな NET 名前空間、lo ダウン、socket システムコールの強制終了

🔍 この図のインタラクティブでテーマ対応のバージョン(PNG/SVG エクスポート付き)は、 docs/archify/ 内の証拠に基づく候補から作成されています。


実行ライフサイクル — リクエストから監査まで

sequenceDiagram
    autonumber
    participant C as Client
    participant A as REST API
    participant P as Warm Pool
    participant R as Process Runner
    participant I as sandbox_init
    participant G as Untrusted Code
    participant DB as PostgreSQL

    C->>A: POST /api/v1/execute
    A->>P: acquire slot · 16 max, 3 s timeout
    P->>R: Run(req, limits)
    R->>I: fork under CLONE_NEWPID·NET·NS·IPC·UTS·USER
    R->>R: create cgroup scope → attach PID<br/>128 MB · 0.5 CPU · 32 PIDs
    I->>I: pivot_root RO rootfs · lo down · seccomp-BPF
    I->>G: syscall.Exec target interpreter
    G-->>R: stdout / stderr via pipes (512 KB cap)
    R->>R: watchdog: SIGKILL at 5 s → exit 137
    R-->>P: result + cgroup metrics (peak mem, CPU)
    P-->>A: ExecutionResult
    A-->>C: 200 JSON
    A-)DB: async audit INSERT (non-blocking)

ステップバイステップ:

  1. 送信 — クライアントが JSON (tenant_id、language、code、任意の stdin/limits) を POST します。不正または未対応のペイロードは 400/422 で即座に失敗します。
  2. 取得 — ハンドラがウォームプールにスロットを要求します。3 秒間の競合の後、リクエストは無制限にキューイングされるのではなく拒否されます。
  3. 隔離 — ランナーが一時的な cgroup v2 スコープを作成し、6 つの分離名前空間フラグすべてを付けて fork し、子 PID がメモリを割り当てる前にその PID をアタッチします。
  4. ロックダウン — sandbox_init が読み取り専用の rootfs にピボットし、クォータ付き tmpfs をマウントし、lo を停止し、seccomp-BPF 許可リストをインストールしてから、インタプリタを exec します — ペイロードが親プロセスによって特権実行されることは決してありません。
  5. 封じ込め — 無限ループは 5 秒のウォッチドッグで終了します。割り当ての嵐は memory.max に引っかかります (クリーンな OOM kill)。fork 爆弾は pids.max = 32 で拒否されます。socket/ptrace/mount 呼び出しはカーネルによって kill されます (SIGSYS/SIGKILL → SECURITY_VIOLATION)。
  6. 報告 — 上限付きの stdout/stderr、終了コード、実時間、ピークメモリ、CPU が 6 つのステータスのいずれかに分類され、JSON として返されます。
  7. 監査 — 結果は独自の 2 秒予算を持つデタッチされた goroutine から execution_runs に挿入されるため、永続化がレスポンスのレイテンシをブロックしたり漏洩させたりすることは決してありません。

技術スタック

レイヤー技術役割
言語Go 1.27 (github.com/kavaryx/sandboxed-runner)デーモン、ランナー、分離、テスト
カーネル分離cgroups v2 · namespaces · seccomp-BPF (libseccomp-golang) · pivot_root封じ込めの強制
ランタイムイメージ最小限の Python / Node rootfs (Docker ビルド、runtimes/*.tar)読み取り専用のゲストファイルシステム
APInet/http 標準ライブラリ (REST、JSON)取り込み + ヘルスチェック
キューRedis 7 (go-redis/v9) — sandbox:jobs に対する LPUSH/BRPop非同期ジョブパイプライン (モジュール)
永続化PostgreSQL 16 (lib/pq)永続的な実行監査
ツールDocker Compose · Makefile · go test開発、ビルド、セキュリティテスト

プロジェクト構成

ツールをダウンロード