
オープンソースのサンドボックス化されたAIエージェント向けランタイム — gVisor/Docker分離、認証情報ボールト、不変監査ログ。CVE-2026-25253後に構築。
AIエージェント向けオープンソースのサンドボックスランタイム
AIエージェントを自信を持って実行。各エージェントには独自の権限スコープ、認証情報ボールト、監査証跡、キルスイッチが付与されます。
2026年1月27日、CVE-2026-25253 はエージェント型AIシステムに割り当てられた初のCVEとなりました。OpenClawの重大なWebSocketハイジャック脆弱性により、公開されたインスタンス(localhostにのみバインドされたものを含む)に対してワンクリックでリモートコード実行が可能になりました。
同じ週に、ClawHavocキャンペーンは341以上の悪意のあるスキルをOpenClawのマーケットプレイスに侵入させました。ClawHubからインストールされたすべてのスキルは、OpenClaw自体と同じ権限(フルディスクアクセス、OAuthトークン、APIキー)で実行されました。サンドボックスなし。監査証跡なし。キルスイッチなし。
「ClawHubからスキルをインストールすると、OpenClaw自体と同じリソースへのアクセスが付与されます。デフォルトではスキル間にサンドボックス分離はありません。」 — DEV Community セキュリティ分析、2026年4月
数字で見る現状:
AgentBoxは構造的な修正です。パッチではなく、ランタイムです。
実行する各エージェントには以下が付与されます:
| 保護 | 仕組み |
|---|---|
| ゼロトラスト権限 | エージェントは必要なものだけを正確に宣言します。それ以外にはアクセスできません。 |
| カーネルレベルの分離 | gVisorがすべてのシステムコールを傍受します。プロンプトインジェクションはこの境界を越えられません。 |
| 認証情報ボールト | AES-256-GCM暗号化。エージェントは生のシークレットを決して見ません。スコープ付きトークンのみです。 |
| 不変の監査ログ | SHA-256ハッシュチェーン。すべてのアクションが記録されます。改ざん検知可能です。 |
| キルスイッチ | 100ms未満で任意のエージェントを終了。制限違反時は自動キル。 |
| リソース制限 | 時間、メモリ、リクエスト数 — 設定時ではなく実行時に強制されます。 |
AgentBox導入前 AgentBox導入後
───────────────── ──────────────
エージェント → フルディスク ❌ エージェント → 許可されたパスのみ ✅
エージェント → 全ネットワーク ❌ エージェント → 許可されたホストのみ ✅
エージェント → 生のシークレット ❌ エージェント → スコープ付きトークン ✅
監査証跡なし ❌ すべてのアクションを記録 ✅
キルスイッチなし ❌ 100ms未満でキル ✅
スキルはrootで実行 ❌ カーネル分離サンドボックス ✅
# インストール
go install github.com/siyad01/agentbox/cmd/agentbox@latest
# 実行前にマニフェストを検証
agentbox validate manifests/email-sorter.yaml
# サンドボックスでエージェントを実行
agentbox run --manifest manifests/email-sorter.yaml python agent.py
# エージェントが行ったことを確認
agentbox audit --log logs/email-sorter-audit.log
# ログが改ざんされていないことを検証
agentbox verify logs/email-sorter-audit.log
# シークレットを管理
agentbox vault add ANTHROPIC_API_KEY
agentbox vault list
各エージェントは必要なものだけを正確に宣言します。リストにないものにはアクセスできません。
name: "email-sorter"
version: "1.0.0"
description: "受信トレイを読み取り、メールを分類し、仕分けフォルダに書き込む"
runtime: docker # または: gvisor (カーネルレベル), firecracker (MicroVM)
permissions:
filesystem:
read:
- "~/Documents/inbox"
write:
- "~/Documents/sorted"
deny: # 読み取りリストにあっても常にブロック
- "~/.ssh"
- "~/.aws"
- "~/.config"
- "/etc"
network:
allow:
- "api.anthropic.com"
- "gmail.googleapis.com"
deny:
- "*" # それ以外はすべてブロック
tools:
allow:
- "read_file"
- "write_file"
- "list_*"
deny:
- "execute_shell" # シェルアクセスは一切不可
- "*_delete" # 削除ツールは不可
credentials:
- ANTHROPIC_API_KEY # 実行時にボールトから注入
- GMAIL_TOKEN # エージェントは生の値を決して見ない
limits:
max_tokens: 50000 # LLMトークン予算
max_duration: "30m" # 30分後にキル
max_memory_mb: 256 # RAM上限
max_requests: 500 # 最大ツール呼び出し回数
audit:
log_level: full
alert_on:
- filesystem_deny
- network_deny
- token_budget_80pct
log_path: "logs/email-sorter-audit.log"
agentbox run --manifest agent.yaml python agent.py
│
▼
┌─────────────────────────────────────────────────────┐
│ ポリシーエンジン │
│ マニフェスト解析 → 許可/拒否リストを構築 │
│ 署名を検証 → 未署名スキルを拒否 │
│ ボールトから認証情報を注入 │
└──────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 分離レイヤー │
│ │
│ Docker → コンテナ + seccomp + cap-drop │
│ gVisor → ユーザースペースカーネル、システムコール傍受│
│ Firecracker → エージェントごとに専用MicroVMカーネル │
│ │
│ ファイルシステム: 宣言されたパスのみマウント │
│ ネットワーク: 宣言されたホストのみ到達可能 │
│ ケーパビリティ: すべて破棄、追加なし │
└──────────────────────┬──────────────────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
監査ロガー 認証情報 リソース
(ハッシュチェーン) ボールト モニター
すべてのアクション AES-256-GCM 自動キル
を記録 スコープ付きトークン 制限時
他のサンドボックスはコンテナ境界で止まります。カーネル脆弱性を悪用するエージェントは脱出できます。
gVisorはすべてのシステムコールをホストカーネルに到達する前に傍受します:
エージェントの試み: write("/home/user/.ssh/id_rsa")
│
▼
gVisorユーザースペースカーネル
│
拒否リストにパスがある? → YES
│
▼
EPERMが即座に返される
ホストカーネルはこのシステムコールを決して見ない
プロンプトインジェクションはこの層を越えられない
agentbox <command> [options]
コマンド:
run サンドボックスでエージェントを実行
validate マニフェストファイルを検証
kill 実行中のエージェントを終了
audit エージェントの監査ログを表示
verify 監査ログの整合性を検証
vault 暗号化された認証情報を管理
serve REST APIサーバーを起動
version バージョンを表示
例:
agentbox validate manifests/email-sorter.yaml
agentbox run --manifest manifests/email-sorter.yaml python agent.py
agentbox kill agent-abc123
agentbox audit --log logs/email-sorter.log --deny
agentbox audit --log logs/email-sorter.log --last 1h
agentbox verify logs/email-sorter.log
agentbox vault add ANTHROPIC_API_KEY
agentbox vault list
agentbox vault delete OLD_KEY
agentbox serve :8081
agentbox serve で起動します(デフォルト: :8081)。
| メソッド | エンドポイント | 説明 |
|---|---|---|
| GET | /health | ヘルスチェック |
| GET | /dashboard | Webダッシュボード |
| GET | /api/agents | 全エージェントを一覧表示 |
| POST | /api/agents | 新しいエージェントを起動 |
| DELETE | /api/agents/:id | エージェントをキル |
| GET | /api/audit | 監査ログを照会 |
# 実行中のエージェントを一覧表示
curl http://localhost:8081/api/agents
# エージェントを起動
curl -X POST http://localhost:8081/api/agents \
-H "Content-Type: application/json" \
-d '{"manifest":"manifests/email-sorter.yaml","command":["python","agent.py"]}'
# エージェントをキル
curl -X DELETE http://localhost:8081/api/agents/abc123
# 監査ログを照会
curl "http://localhost:8081/api/audit?deny=true&agent=email-sorter"
すべてのエージェントアクションは、追記専用でハッシュチェーン化されたJSON Linesファイルに記録されます:
{"id":1,"hash":"a3f2...","prev_hash":"genesis","timestamp":"2026-05-05T09:00:00Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"agent_start","allowed":true,"resource":"manifests/email-sorter.yaml"}
{"id":2,"hash":"b7c1...","prev_hash":"a3f2...","timestamp":"2026-05-05T09:00:01Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"filesystem_allow","allowed":true,"resource":"read:/home/user/Documents/inbox/mail.txt","rule":"filesystem.read: ~/Documents/inbox"}
{"id":3,"hash":"d9e4...","prev_hash":"b7c1...","timestamp":"2026-05-05T09:00:01Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"filesystem_deny","allowed":false,"resource":"read:/home/user/.ssh/id_rsa","rule":"filesystem.deny: ~/.ssh","reason":"path is explicitly denied"}
改ざん検知:
agentbox verify logs/email-sorter-audit.log
✅ 監査ログは無傷です
エントリ: 47 (ID 1–47)
ハッシュチェーン: 途切れなし
どのエントリの1文字でも変更すると、検証は即座に失敗します — チェーンが壊れるからです。