セキュリティ
2025年2月、LayerX Security ResearchはAnthropicのClaude Desktop Extensions(DXT)フレームワークにおける重大なゼロクリック・リモートコード実行の脆弱性を公開しました。拡張機能はサンドボックスなしでフルシステム権限で実行され、言語モデルとローカルオペレーティングシステム間の実行ブリッジとして機能します。
多くの企業セキュリティチームは現在、AIコーディングツールを企業エンドポイント上で直接実行するのではなく、専用の仮想マシン、コンテナ、または使い捨て環境内でのみ実行することを要求しています。
このdevcontainerはその要件を満たします。
+------------------------------------------------+| ホストマシン(企業エンドポイント) || || - AIツールバイナリはインストールされていない || - AIツールの拡張機能やプラグインなし || - Dockerのみが必要 || || +------------------------------------------+ || | Dockerコンテナ(分離済み) | || | | || | AIツールはここで実行: | || | - Claude Code CLI | || | - Codex | || | | || | アクセス不可: | || | x ホストファイルシステム | || | x ホストキーチェーン / 認証情報ストア | || | x ホストクリップボード | || | x ホストネットワークインターフェース | || | x その他のホストアプリケーション | || +------------------------------------------+ |+------------------------------------------------+セキュリティ制御
Section titled “セキュリティ制御”ホストボリュームマウントなし
Section titled “ホストボリュームマウントなし”すべてのデータはDockerの名前付きボリュームに存在し、バインドマウントされたホストディレクトリではありません。コンテナ内での侵害はホストマシン上のファイルにアクセスできません。ボリュームの詳細については設定 — データ永続化を参照してください。
共有認証情報ストアなし
Section titled “共有認証情報ストアなし”コンテナはmacOSキーチェーン、Windows資格情報マネージャー、ブラウザプロファイル、またはホストSSHエージェントにアクセスできません。SSHキーはbase64エンコードされた環境変数を通じて起動時に注入され、コンテナ内にのみ存在します。
クリップボード同期なし
Section titled “クリップボード同期なし”Dockerコンテナはホストとクリップボード状態を共有しません。コピー/ペーストを通じてデータが漏洩することはありません。
ネットワーク分離
Section titled “ネットワーク分離”コンテナは、サポートされている2つの認証モードのいずれかで外部と通信します:
- LiteLLMプロキシモード — DockerのNATを通じてLiteLLMプロキシへのアウトバウンドHTTPS。
- OAuthモード — DockerのNATを通じてAnthropicへの直接アウトバウンドHTTPS。
コンテナはVPNトンネル、企業ネットワークインターフェース、またはホスト上の他のサービスにアクセスできません。
設計上エフェメラル
Section titled “設計上エフェメラル”環境全体を数秒で破棄して再作成できます。コンテナは使い捨てとして扱ってください。
docker compose down -vdocker compose pull && docker compose up -dpodman-compose down -vpodman-compose pull && podman-compose up -dCLIのみのツール
Section titled “CLIのみのツール”この環境はAIツールをコマンドラインインターフェースとしてのみ実行します。デスクトップアプリケーション、ブラウザ拡張機能、DXTフレームワークはありません。この分離モデルのきっかけとなった脆弱性は、コンテナ内でのCLI使用には適用されません。
コンテナ強化
Section titled “コンテナ強化”docker-compose.ymlは複数の多層防御措置を適用します:
- ケーパビリティの削除 — すべてのLinuxケーパビリティが削除され(
cap_drop: ALL)、最小限のセットのみが再追加されます:CHOWN、DAC_OVERRIDE、FOWNER(エントリポイントでのボリュームパーミッション修正用)、SETUID/SETGID(sudo用)、NET_RAW(ping/tcpdump用)、およびNET_ADMIN(Wiresharkやbettercapなどのパケットキャプチャツール用)。 - リソース制限 — CPU(4コア)、メモリ(8 GB)、およびPID数(4096)は
mem_limit、cpus、pids_limitによって制限され、リソース枯渇攻撃を防止します。 /tmp用tmpfs —/tmpディレクトリは256 MBのtmpfsとしてマウントされ、一時ファイルをメモリ内に保持し、コンテナの書き込み可能なレイヤーへの永続化を防止します。- デフォルトでTLS検証が有効 —
NODE_TLS_REJECT_UNAUTHORIZEDは設定されていないため、Node.jsはデフォルトでTLS証明書を検証します。自己署名証明書を受け入れる必要があるユーザー(例:内部プロキシ用)は、.envファイルにNODE_TLS_REJECT_UNAUTHORIZED=0を追加することでオプトインできます。 - SSHキーのumask — SSH秘密鍵は
umask 077の下で書き込まれるため、作成からchmod呼び出しの間であっても、ファイルが全ユーザーから読み取り可能になることはありません。
セキュリティおよびペネトレーションテストツール
Section titled “セキュリティおよびペネトレーションテストツール”コンテナには、認可されたテストシナリオ向けに約80のセキュリティおよびペネトレーションテストツールがプリインストールされています。ツールはカテゴリ別に整理されています:
| カテゴリ | ツール(例) |
|---|---|
| ネットワーク分析 | tshark, wireshark, masscan, hping3, bettercap (amd64), netdiscover |
| Webスキャナー | nikto, sqlmap, dirb, whatweb, sslscan, OWASP ZAP, dalfox, feroxbuster |
| パスワードと認証 | hydra, john, hashcat, medusa, ncrack |
| リバースエンジニアリング | radare2, Ghidra, gdb, binwalk, strace, ltrace |
| 偵察 | subfinder, amass, httpx, nuclei, gau, waybackurls, recon-ng, spiderfoot |
| ファジングと列挙 | ffuf, gobuster, SecLists |
| サプライチェーンとシークレット | trufflehog, grype, syft, gitleaks, trivy |
| エクスプロイトフレームワーク | Metasploit (amd64), searchsploit (ExploitDB) |
一部のツール(bettercap、Metasploit)は上流のパッケージング制約によりamd64でのみ利用可能です。パケットキャプチャツール(tshark、bettercap)はNET_ADMINケーパビリティを必要とし、デフォルトのdocker-compose.ymlに含まれています。
完全なリストについては、コンテナ内でclaude-self-testを実行してください(セクション7ですべてのセキュリティツールを確認します)。
コンプライアンスチェックリスト
Section titled “コンプライアンスチェックリスト”| 要件 | ステータス |
|---|---|
| ホストエンドポイントにAIツールがインストールされていない | はい |
| 分離されたVMまたはコンテナで実行 | はい |
| ホストファイル共有へのアクセスなし | はい |
| クリップボード同期なし | はい |
| 共有認証情報ストアなし | はい |
| 本番ネットワークへのVPNスプリットトンネリングなし | はい |
| 環境は使い捨て可能 | はい |
| デスクトップ拡張機能やプラグインなし | はい |
| Linuxケーパビリティの削除(最小権限) | はい |
| リソース制限の適用(CPU/メモリ/PID) | はい |
| デフォルトでTLS証明書検証が有効 | はい |
| 内部サービスはlocalhostのみにバインド | はい |
ベストプラクティス
Section titled “ベストプラクティス”- ホストマシンにAIコーディングツールをインストールしないでください。 代わりにこのコンテナを使用してください。
docker-compose.ymlにバインドマウントを追加しないでください。 名前付きボリュームの設定は意図的なものです。- コンテナ内で使用するSSHキーを定期的にローテーションしてください。
- 共有前に
.envを確認してください。 APIキーが含まれており、SSH秘密鍵が含まれている場合もあります。 - 定期的に更新してセキュリティパッチを適用してください:
docker compose pull && docker compose up -dpodman-compose pull && podman-compose up -d