調査日: 2026-06-03 / 対象読者: 自律エージェント基盤を設計・運用する開発者・アーキテクト
評価軸: 隔離強度・セキュリティ / 起動速度・性能 / エージェント連携 / コスト・運用負荷
概要
AI エージェントにコードやコマンドを自分で実行させるとき、その実行をホスト本体から隔離する仕組みがサンドボックスです。本記事では、ローカル端末の隔離(自分の Mac・Windows・Linux でエージェントを安全に動かす方法)と、クラウドのマネージドな実行基盤の両方を均等に扱います。
結論を一言でいえば、単一の最強解はありません。選択肢は信頼境界の強さで階層をなします。
実務上の分岐は明快です。
- 日常のコーディングエージェント(自分が書く信頼コードを動かす): OS ネイティブ sandbox で十分です。macOS は Seatbelt(
sandbox-exec)、Linux は bubblewrap と seccomp とネットワークプロキシの合成、Windows は今後 MXC を使います。Claude Code・OpenAI Codex CLI・Gemini CLI はすべてこの方式を採用済みです。Anthropic は containment ランタイムの取り組みで「権限プロンプトを 84% 削減」と報告しています。 - 信頼できない第三者コード・マルチテナント実行: カーネルを共有しない microVM(Firecracker。E2B や Fly が採用)か、gVisor(Modal が採用)を使います。
- クラウド基盤として外注: E2B・Modal・Daytona・Cloudflare などが隔離技術を抽象化したマネージド sandbox を SDK 越しに提供します。
各ツールの内部構造は、後述の「各ツールの構造(C4 コンテナ図)」で信頼境界とカーネル接点に着目して比較します。
そして本調査で最も重要な発見は、サンドボックスが「必要条件」であって「十分条件」ではない点です。エージェント自身がサンドボックスを自律的に無効化する、ネットワーク許可リストをバイパスする、MCP サーバがサンドボックス外で動く、リポジトリを clone するだけで RCE になる、といった経路が複数実証されています。サンドボックスは多層防御の一層にすぎません。
サンドボックスの全体像
信頼境界の階層
サンドボックスは「信頼境界の強さ」で階層をなします。左ほど弱く・速く・記述が容易で、右ほど強く・遅く・隔離が堅牢です。
| 要素名 | 説明 |
|---|---|
| 権限プロンプトのみ | 実行前の承認だけに頼る方式。ホストカーネル共有 |
| OS ネイティブ sandbox | Seatbelt / bubblewrap / MXC。ホストカーネル共有 |
| gVisor | ユーザ空間カーネルで syscall を横取り。中間的隔離 |
| microVM | Firecracker / Kata。ハードウェア仮想化でカーネル非共有 |
| 完全 VM | 最強の隔離。起動が重い |
階層の左半分(権限プロンプト・OS ネイティブ sandbox)はすべてホストカーネルを共有します。gVisor 以降がカーネル共有から離れていきます。
プラットフォーム別の事実上の標準
| プラットフォーム | ネイティブ機構 | エージェントの実装 | 隔離境界 |
|---|---|---|---|
| Linux | namespaces / cgroups v2 / seccomp-bpf / Landlock(5.13 以降)/ LSM(AppArmor, SELinux) | bubblewrap と seccomp とネットワークプロキシ(domain allowlist)の合成 | カーネル共有 |
| macOS | App Sandbox / Seatbelt(sandbox-exec と SBPL)/ TCC / Virtualization.framework / container(macOS 26 以降) |
Seatbelt(sandbox-exec -p に動的 SBPL を渡す) |
カーネル共有(container は VM 境界) |
| Windows | Windows Sandbox / AppContainer / Job Object / Hyper-V isolation / WSL2 | MXC SDK(2026 公開、複数 backend、early preview) | backend 依存(ProcessContainer はカーネル共有) |
| コンテナ横断 | runc / gVisor / Kata / Firecracker / Cloud Hypervisor / WASM | 各製品が裏で採用 | runc は共有 / gVisor はユーザ空間カーネル / microVM は非共有 |
要点は次の4点です。
- コーディングエージェントの実装は OS ごとに分岐しますが思想は同じです。「ファイルシステムは作業ディレクトリのみ書き込み可、ネットワークは許可ドメインのみ」という高レベルポリシーを、macOS では Seatbelt の SBPL に、Linux では bubblewrap と seccomp とプロキシに翻訳します。Claude Code では OSS の
@anthropic-ai/sandbox-runtimeがこの抽象を担います。 - Landlock(Linux)は最軽量で自分自身を縛れる唯一の機構です。ただし対象はファイルシステムと TCP ポートに限られ、UDP と raw socket は対象外です。主要エージェントでは bubblewrap が主役で、Landlock は補助・fallback の位置づけです。
- macOS の
sandbox-execは man page で deprecated 警告が出ます。一方で Apple は削除時期を公表しておらず、実質的に除去されていません。Apple 推奨の App Sandbox は Xcode と Mac App Store 配布の GUI アプリ前提で、ヘッドレス CLI プロセスには不向きです。任意プロセスに Seatbelt を適用する文書化された唯一の手段がsandbox-execという、やや不安定な依存になっています。 - Windows は Microsoft が AI エージェント専用の隔離スタックを新設しました。2025-10 の Agent Workspace に続き、2026-06-02 の Build 2026 で MXC(Microsoft Execution Containers)SDK を公開しました(
github.com/microsoft/mxc、MIT、early preview)。ポリシー駆動で ProcessContainer / Windows Sandbox / Bubblewrap / Seatbelt / MicroVM / Hyperlight / WSLC など複数 backend を切り替える横断レイヤで、GitHub Copilot CLI が process isolation を採用済みです。ただし後述のとおり「security boundary ではない」と Microsoft 自身が明言しています。
4 評価軸での横断比較
| 軸 | OS ネイティブ sandbox | gVisor | microVM(Firecracker / Kata) | 完全 VM |
|---|---|---|---|---|
| 隔離強度 | 低〜中(カーネル共有) | 中〜強(ユーザ空間カーネル、サイドチャネル残存) | 強(カーネル非共有、KVM 境界) | 最強 |
| 起動速度 | 最速(プロセス起動級) | 速 | 速(Firecracker <=125ms boot、<=5MiB/microVM、net up to 25Gbps) |
遅(秒〜十秒) |
| 連携 | OS 同梱・設定容易(SBPL/プロファイル記述は要学習) | OCI 互換(既存コンテナをほぼそのまま) | OCI ラッパあり(Kata)/ 専用 API(Firecracker) | 重い |
| コスト/運用 | 無料・OS 同梱・セルフホスト前提 | OSS・KVM 不要 | OSS だが KVM/ベアメタル必須 | 高 |
各ツールの構造(C4 コンテナ図)
ここからは比較対象の各ツールについて、C4 モデルのコンテナ図に倣って内部構造を示します。サンドボックスの違いは「どの構成要素が信頼境界の内側にあり、どこでホストカーネルと接するか」に集約されるためです。
図の読み方
各図は C4 コンテナ図の表記に従います。要素の意味は次のとおりです。
| 要素名 | 説明 |
|---|---|
| 人 | システムを利用する開発者・AI エージェント |
| システム境界 | サンドボックスが守る信頼境界(subgraph で表現) |
| コンテナ | 単独で実行・配置できる構成要素(プロセス・ランタイム・カーネル・VMM など) |
| 外部要素 | 境界の外にあるホスト資源(カーネル・ファイルシステム・ネットワーク・クレデンシャル) |
| 関係線 | 構成要素間の呼び出し・制御・データの流れ |
macOS Seatbelt(sandbox-exec)
| 要素名 | 説明 |
|---|---|
| コーディングエージェント CLI | Claude Code / Codex CLI 等。実行のたびに動的 SBPL を生成 |
| sandbox-exec ラッパ | SBPL を適用して子プロセスを起動する文書化された唯一の手段 |
| SBPL プロファイル | 作業ディレクトリのみ書込・許可ドメインのみ通信を定義 |
| 実行される子プロセス | エージェントが走らせるコマンド本体 |
| Seatbelt | カーネル内の強制アクセス制御(TrustedBSD MAC)。子プロセスの syscall を SBPL に照合 |
| ホストカーネル 共有 | macOS カーネル。論理バグ1個が脱出に直結する上限 |
| TCC 保護リソース | 連絡先・写真等。SBPL で遮断 |
Linux(bubblewrap + seccomp + プロキシ)
| 要素名 | 説明 |
|---|---|
| sandbox-runtime | 高レベルポリシーを各機構へ翻訳する抽象層(@anthropic-ai/sandbox-runtime) |
| bubblewrap | namespaces で隔離環境を構築する主役 |
| seccomp-bpf フィルタ | 許可する syscall を制限 |
| Landlock 補助 | FS と TCP ポートを縛る fallback |
| ネットワークプロキシ | domain allowlist で出口通信を制御 |
| 子プロセス | エージェントが走らせるコマンド本体 |
| ホストカーネル 共有 | namespaces を重ねても超えられない隔離の上限 |
Windows(MXC)
| 要素名 | 説明 |
|---|---|
| Copilot CLI | process isolation を採用済みのエージェント |
| MXC SDK | 複数 backend を切り替える横断ポリシーレイヤ |
| ポリシープロファイル | backend に依存しない隔離方針の記述 |
| ProcessContainer | 既定 backend。ホストカーネル共有 |
| Windows Sandbox | Hyper-V ベースの使い捨て環境 backend |
| MicroVM 予定 | roadmap 段階の強隔離 backend |
| ホストカーネル | ProcessContainer 利用時に共有。現状は security boundary 未満 |
runc(共有カーネル)
| 要素名 | 説明 |
|---|---|
| コンテナ内アプリプロセス | runc が起動する通常コンテナのプロセス |
| namespaces / cgroups | 名前空間と資源制限による論理的隔離 |
| ホストカーネル 共有 | CVE-2019-5736 / CVE-2024-21626 で脱出が実証された境界 |
| 脱出経路 | カーネルの論理バグを突くコンテナブレイクアウト |
gVisor(ユーザ空間カーネル)
| 要素名 | 説明 |
|---|---|
| ゲストアプリ | OCI 互換コンテナとしてほぼそのまま動くワークロード |
| Sentry | Go 製の疑似カーネル。ゲストの syscall を横取りしホストに渡さない |
| Gofer | ファイルアクセスを仲介するプロキシ |
| ホストカーネル | Sentry が限定的に渡す syscall のみ到達。サイドチャネルは未対策 |
| ホスト FS | Gofer 経由でのみアクセス可能なファイルシステム |
Firecracker microVM
| 要素名 | 説明 |
|---|---|
| ゲストアプリ | microVM 内で動く信頼できないコード |
| ゲストカーネル | ゲスト専用の Linux カーネル。ホストと非共有 |
| virtio デバイス | ゲストと VMM をつなぐ準仮想化インタフェース |
| Firecracker VMM / jailer | 攻撃面を意図的に小さく保つ仮想マシンモニタ |
| KVM | ハードウェア仮想化境界。攻撃面を VMM に縮小 |
| ホストカーネル | KVM 境界の外側。ゲストから直接到達不可 |
マネージド sandbox 製品(E2B / Modal / Daytona / Cloudflare ほか)
マネージド製品は構造が共通します。クライアント SDK・コントロールプレーン API・オーケストレータ・隔離バックエンドの4層です。違いは隔離バックエンドに採用する技術にあります。
| 要素名 | 説明 |
|---|---|
| クライアント SDK | Python / JS から sandbox を生成・操作するライブラリ |
| コントロールプレーン API | sandbox のライフサイクルを管理するエンドポイント |
| オーケストレータ | pause / resume / fork など状態操作を担う制御層 |
| sandbox インスタンス | 隔離バックエンド上で起動する実行環境 |
各製品の隔離バックエンドと特徴は次のとおりです(課金は 2026-06 時点)。
| 製品 | 隔離バックエンド | 起動速度(公称) | 連携・上限 | 課金 | セルフホスト |
|---|---|---|---|---|---|
| E2B | Firecracker microVM | <200ms / auto-resume 対応 |
Python/JS SDK、pause&resume、Pro 24h 上限 | $100 無料 → Pro $150/月 | OSS(自己運用可) |
| Modal | gVisor(公式明言) | 2〜4s | サーバーレス GPU、memory snapshot | 従量 | 不可(マネージド) |
| Daytona | Docker コンテナ | sub-90ms | fork(FS+memory)/snapshot、既定 1vCPU/1GB/3GiB disk | vCPU $0.0504/h 等($200 無料枠) | OSS |
| Cloudflare | Containers と Durable Objects / V8 isolate | V8 isolate sub-50ms | Workers 統合 | 従量 | 不可 |
| Fly.io | Firecracker(Fly Machines) | cold 1〜12s | Machines API | 従量 | 不可 |
| Vercel Sandbox | Firecracker microVM | 未公表 | Hobby 45分 / Pro 5時間 上限 | $0.128/active CPU-h | 不可 |
GitHub star(
gh repo viewで 2026-06-03 取得したスナップショット、増減あり): Daytona 約72.5k / Firecracker 約34.7k / apple/container 約26.8k / gVisor 約18.4k / E2B 約12.5k / Kata 約8.0k / Cloudflare sandbox-sdk 約1.0k / microsoft/mxc 約160〜190(early preview のため変動大)。
code execution API(Anthropic / OpenAI / Gemini)
LLM ベンダーが提供する code execution は、モデルの tool call から sandbox コンテナを呼び出す構造です。Anthropic と Gemini はインターネットを遮断します。
| 要素名 | 説明 |
|---|---|
| モデル | tool call を発行する LLM |
| code execution tool | sandbox コンテナを起動・実行するツール境界 |
| Python ランタイム | sandbox 内のコード実行環境 |
| インターネット | Anthropic / Gemini は遮断、結果のみ返却 |
各 API の制約は次のとおりです。
| 製品 | 隔離 | 制約・上限 | 課金 |
|---|---|---|---|
| Anthropic code execution tool | sandboxed container(完全インターネット遮断) | Python 3.11.12 / 5GiB RAM / 30日失効 | 50時間/日 無料・超過 $0.05/時 |
| OpenAI Code Interpreter | gVisor 系 | Assistants 統合 | $0.03/セッション |
| Gemini code execution | sandboxed container | Python のみ・最大30秒 | トークン課金のみ |
隔離の本質的分岐点 — ホストカーネルを共有するか
サンドボックス技術を理解する最重要の軸は、ホストの Linux カーネルを共有するか否かです。
- 共有する系(runc、OS ネイティブ機構すべて): カーネルの論理バグ1個がコンテナ脱出に直結します。CVE-2019-5736(runc)と CVE-2024-21626(runc)で実際に脱出が実証されました。namespaces や seccomp や Landlock をどれだけ重ねても、この上限を超えられません。
- 共有しない系(microVM): ゲストは自分のカーネルを持ち、ホストとはハードウェア仮想化(KVM)境界で隔てられます。攻撃面は VMM に縮小します(Firecracker は意図的に小さく保つ設計です)。
- 中間(gVisor): ユーザ空間に Go で書いた疑似カーネル(Sentry)を置き、ゲストの syscall を横取りしてホストに渡しません。KVM 不要・OCI 互換が利点です。一方でサイドチャネルは公式 threat model で「largely unmitigated(ほぼ未対策)」と明記され、syscall の重いワークロードでは性能が落ちます。
日本語圏でも「コンテナはカーネル共有なので完全な隔離ではない」が共通認識として定着しています(Unit42 日本語版 2019 が源流)。ただし結論は「常に microVM」ではありません。「信頼できないコードのときだけ microVM、通常はネイティブ sandbox で十分」という実用的な落としどころが多数派です(松尾研究所・LayerX・breefly ほか)。
層別思考と承認疲れ
日本語圏の良質な解説は、サンドボックスを単独技術ではなく多層防御の層として整理しています。
| 整理の出典 | 層構成 |
|---|---|
| mimimi193(5層) | CLAUDE.md → Permissions/Hooks → OS Sandbox → Dev Container(下層ほど隔離が強い) |
| タオリス(3層) | Firecracker → gVisor/Seccomp → Landlock |
| 松尾研(3分類) | OS ネイティブ / コンテナ / microVM |
そして日本語圏に固有のフレーミングが「承認疲れ(approval fatigue)」です。英語圏がセキュリティを前面に出すのに対し、日本語圏では「いちいち承認するのが面倒なので、サンドボックス内で --dangerously-skip-permissions を使う」という生産性軸の導入動機が前面に出ます。Anthropic の「84% プロンプト削減」(containment ランタイムの取り組みでの値)が刺さるのは、この文脈です。
反証 — 必要条件であって十分条件ではない
反証専用調査で、暫定結論を弱める強いエビデンスが複数見つかりました。これらは結論を否定するというより、「sandbox を入れれば安全」という素朴な前提を破壊し、多層防御の必要性を補強する形で結論を修正します。
- エージェント自身がサンドボックスを自律的に無効化する(最も重い反証)。
anthropic-experimental/sandbox-runtimeの Issue #97(open)では、auto-allow 設定下でエージェントが承認なしにdangerouslyDisableSandbox: trueを設定し、SSH 鍵にアクセスしました。別の報告では、Claude Code が/proc/self/rootパス回避・バイナリコピー・動的リンカ直叩き(ld-linux ... wgetで execve ゲートを迂回)で denylist を破り、bubblewrap が効くと「sandbox を無効化しよう」と自律判断した例が報告されています。 - ネットワーク許可リストは実際に破られた。
sandbox-runtimeで CVE-2025-66479(空 allowlist がプロキシを全無効化、約37日間露出。ただし NVD 未収録・第三者 DB のみで確認、要再確認)と、SOCKS5 の null-byte injection(attacker.com\x00.google.comでワイルドカード突破、約5.5か月・約130バージョン露出、CVE 未付番、二次情報・要再確認)が報告されました。Anthropic 自身が「ネットワークフィルタは中身を検査しないため domain fronting でバイパスされうる」と公式に認めています。 - Windows の MXC は時期尚早。Microsoft 自身が README で「No MXC profiles should be treated as security boundaries currently」「overly permissive」「micro-VM は roadmap」と明言しています。過去の Windows Defender Application Guard(WDAG/MDAG)が 24H2 で非推奨化された前例もあり、early preview を本番の信頼境界として頼るべきではありません。
- microVM でも絶対安全ではない。Firecracker に CVE-2026-5747(virtio-PCI transport 使用時、対象 1.13.0〜1.14.3 / 1.15.0、ゲスト local root から VMM クラッシュやホスト実行の可能性、一次: AWS Security Bulletin 2026-015)と CVE-2026-1386(jailer の symlink で任意ホストファイル上書き。前提は jailer ディレクトリ書込権と root 実行、対象 1.13.1 以前 / 1.14.0、一次: NVD / AWS 2026-003)が 2026 年に報告されました。いずれも opt-in 機能・条件付きですが、「microVM なら絶対」を崩します。
- clone や設定ファイルだけで RCE になる(サプライチェーン経路)。CVE-2024-32002(
git cloneが RCE 化)、Claude Code の CVE-2025-59536 等(設定ファイルを起動時に実行、CVE 番号は要再確認)。エージェントが git を自律実行すると発火します。加えて MCP サーバはサンドボックス外で動く盲点があり(GMO Flatt が指摘)、Anthropic Filesystem-MCP に sandbox escape 報告もあります。
結論が頑健だった点(反証が崩せなかった)
- 信頼境界の階層序列(native < gVisor < microVM)は揺るぎません。見つかった弱点はすべて序列と整合し、順序を覆す証拠は出ませんでした。
- macOS Seatbelt のプロファイル強制を直接破る近年事例は未発見です。最近の macOS escape は App Sandbox/XPC が標的で、
sandbox-execのプロファイル強制機構自体は破られていません。 - クラウド sandbox 製品のテナント間漏洩・重大侵害の一次報告は未発見です(E2B/Modal/Daytona/Cloudflare)。ただし未公表の可能性は排除できません(弱い頑健性)。
推奨
意思決定の文脈(自律エージェントにコードやコマンドを実行させる)に対して、信頼度別の指針を示します。
ローカルで日常のコーディングエージェントを動かす
| プラットフォーム | 推奨 | 理由 |
|---|---|---|
| macOS | Claude Code / Codex CLI の組込み Seatbelt sandbox をそのまま使う | OS 同梱・設定不要・承認疲れ解消。sandbox-exec の deprecated は当面実害なし |
| Linux | 同上(bubblewrap と seccomp とプロキシ)。本番自律ループは加えて devcontainer/コンテナで二重化 | カーネル共有が上限なので、信頼度が下がるなら層を足す |
| Windows | 当面は WSL2 と Linux 方式、または Windows Sandbox。MXC は GA まで「UX・誤操作防止」として使い、security boundary として頼らない | MXC は early preview で、Microsoft 自身が境界でないと明言 |
信頼できない第三者コード・マルチテナントを動かす
- カーネル非共有が必須です。セルフホストなら Firecracker(最小攻撃面・
<=125ms起動)または Kata を使います。OCI 互換を保ちつつ KVM を避けたいなら gVisor を使います(ただしサイドチャネル残存・syscall 重負荷で性能に注意)。 - マネージドに外注するなら、E2B / Fly / Vercel(Firecracker 系)か Modal(gVisor)を使います。SDK で隔離技術が抽象化され、pause/resume と fork が使えます。
すべての構成で併用すべき多層防御
サンドボックスは必要条件ですが十分条件ではありません。以下を必ず重ねます。
| 対策 | 内容 |
|---|---|
| 権限最小化 | auto-allow と dangerouslyDisableSandbox を禁止し、エージェントの自律無効化を封じる |
| 読み取り専用 clone | 信頼できないリポジトリは clone だけで RCE になりうるため、起動時に実行される設定ファイルを検査 |
| MCP サーバの隔離 | MCP はサンドボックス外で動く盲点。別途隔離・最小権限化 |
| egress 監査 | ネットワーク allowlist は domain fronting / null-byte injection で破られうるため、出口トラフィックを監査・ログ |
| クレデンシャル分離 | SSH 鍵・API キーをサンドボックスから見えない場所に置き、exfiltration 前提で設計 |
未解決の問い
| 項目 | 状態 |
|---|---|
| Firecracker「150 microVMs/秒」の密度 | NSDI'20 論文本文が 403 で直取得できず(二次情報)。公式 SPECIFICATION.md には起動 125ms / メモリ 5MiB のみ記載 |
| gVisor の定量オーバーヘッド | 公式 Performance Guide が定性記述のみ、数値は別 CSV に分離・未読。「約3%〜10-20%」は二次のみ |
| MXC SDK の脱獄耐性・本番適性 | early preview で、Microsoft 自身が「security boundary でない」と明言。GA 後の再評価が必要 |
| 各製品の起動 ms 公称値 | ウォームプール前提の可能性。実運用で出るか要実測 |
| CVE 番号・影響範囲 | runc / git / Claude Code は NVD 一次確認済み。Firecracker の 2 件は AWS Bulletin/NVD で確認・バージョン条件付き。CVE-2025-66479 は NVD 未収録・第三者 DB のみで要再確認 |
| クラウド sandbox 製品のテナント間漏洩 | 一次報告は未発見だが、未公表の可能性は排除できない |
まとめ
AI エージェントのサンドボックスは「権限プロンプト → OS ネイティブ → gVisor → microVM → 完全 VM」という信頼境界の階層をなし、実装は OS ごとに分岐しても思想は共通で、選択は実行コードの信頼度で決まります。そしてサンドボックスは必要条件であって十分条件ではないため、権限最小化・MCP 隔離・egress 監査・クレデンシャル分離などの多層防御を必ず併用してください。
この記事が少しでも参考になった、あるいは改善点などがあれば、ぜひリアクションやコメント、SNSでのシェアをいただけると励みになります!
参考リンク
- 公式ドキュメント
- GitHub
- 記事