メインコンテンツへスキップ

概要

Claude Codeはネイティブサンドボックス機能を備えており、エージェント実行のためのより安全な環境を提供しながら、継続的なパーミッションプロンプトの必要性を軽減します。各bashコマンドのパーミッションを要求する代わりに、サンドボックス化により、Claude Codeがリスク軽減のもとでより自由に動作できるように、事前に定義された境界を作成します。 サンドボックス化されたbashツールはOSレベルのプリミティブを使用して、ファイルシステムとネットワークの両方の分離を実施します。

サンドボックス化が重要な理由

従来のパーミッションベースのセキュリティでは、bashコマンドのたびに継続的なユーザー承認が必要です。これはコントロールを提供しますが、以下につながる可能性があります:
  • 承認疲れ:繰り返し「承認」をクリックすることで、ユーザーが承認している内容に注意を払わなくなる可能性があります
  • 生産性の低下:継続的な中断により開発ワークフローが遅くなります
  • 自律性の制限:Claude Codeは承認を待っている間、効率的に動作できません
サンドボックス化はこれらの課題に以下の方法で対処します:
  1. 明確な境界を定義する:Claude Codeがアクセスできるディレクトリとネットワークホストを正確に指定します
  2. パーミッションプロンプトを削減する:サンドボックス内の安全なコマンドは承認を必要としません
  3. セキュリティを維持する:サンドボックス外のリソースへのアクセス試行は即座に通知をトリガーします
  4. 自律性を有効にする:Claude Codeは定義された制限内でより独立して実行できます
効果的なサンドボックス化には、ファイルシステムとネットワークの両方の分離が必要です。ネットワーク分離がない場合、侵害されたエージェントはSSHキーなどの機密ファイルを流出させる可能性があります。ファイルシステム分離がない場合、侵害されたエージェントはシステムリソースにバックドアを仕掛けてネットワークアクセスを取得する可能性があります。サンドボックス化を設定する際は、設定がこれらのシステムのバイパスを作成しないことを確認することが重要です。

仕組み

ファイルシステム分離

サンドボックス化されたbashツールはファイルシステムアクセスを特定のディレクトリに制限します:
  • デフォルト書き込み動作:現在の作業ディレクトリとそのサブディレクトリへの読み取りおよび書き込みアクセス
  • デフォルト読み取り動作:特定の拒否ディレクトリを除く、コンピュータ全体への読み取りアクセス
  • ブロックされたアクセス:明示的なパーミッションなしに現在の作業ディレクトリ外のファイルを変更できません
  • 設定可能:設定を通じてカスタム許可および拒否パスを定義します

ネットワーク分離

ネットワークアクセスはサンドボックス外で実行されるプロキシサーバーを通じて制御されます:
  • ドメイン制限:承認されたドメインのみがアクセスできます
  • ユーザー確認:新しいドメインリクエストはパーミッションプロンプトをトリガーします
  • カスタムプロキシサポート:高度なユーザーは送信トラフィックにカスタムルールを実装できます
  • 包括的なカバレッジ:制限はすべてのスクリプト、プログラム、およびコマンドによって生成されるサブプロセスに適用されます

OSレベルの実施

サンドボックス化されたbashツールはオペレーティングシステムのセキュリティプリミティブを活用します:
  • Linux:分離にbubblewrapを使用します
  • macOS:サンドボックス実施にSeatbeltを使用します
これらのOSレベルの制限により、Claude Codeのコマンドによって生成されたすべての子プロセスが同じセキュリティ境界を継承することが保証されます。

はじめに

サンドボックス化を有効にする

/sandboxスラッシュコマンドを実行することでサンドボックス化を有効にできます:
> /sandbox
これはデフォルト設定でサンドボックス化されたbashツールをアクティブ化し、現在の作業ディレクトリへのアクセスを許可しながら、機密システムロケーションへのアクセスをブロックします。

サンドボックス化を設定する

settings.jsonファイルを通じてサンドボックス動作をカスタマイズします。完全な設定リファレンスについては設定を参照してください。
すべてのコマンドがサンドボックス化と互換性があるわけではありません。サンドボックスを最大限に活用するのに役立つ可能性のあるいくつかのメモ:
  • 多くのCLIツールは特定のホストへのアクセスが必要です。これらのツールを使用すると、特定のホストへのアクセスをリクエストします。パーミッションを付与すると、これらのホストに今後アクセスでき、サンドボックス内で安全に実行できるようになります。
  • watchmanはサンドボックス内での実行と互換性がありません。jestを実行している場合は、jest --no-watchmanの使用を検討してください
  • dockerはサンドボックス内での実行と互換性がありません。dockerexcludedCommandsで指定して、サンドボックス外で実行するように強制することを検討してください。
Claude Codeには、必要に応じてコマンドをサンドボックス外で実行できるようにする意図的なエスケープハッチメカニズムが含まれています。サンドボックス制限(ネットワーク接続の問題や互換性のないツールなど)によってコマンドが失敗すると、Claude Codeは失敗を分析するよう促され、dangerouslyDisableSandboxパラメータでコマンドを再試行する可能性があります。このパラメータを使用するコマンドは、ユーザーパーミッションを必要とする通常のClaude Codeパーミッションフローを通じます。これにより、Claude Codeはサンドボックス制約内で特定のツールまたはネットワーク操作が機能しないエッジケースを処理できます。このエスケープハッチは、サンドボックス設定"allowUnsandboxedCommands": falseを設定することで無効にできます。無効にすると、dangerouslyDisableSandboxパラメータは完全に無視され、すべてのコマンドはサンドボックス化されるか、excludedCommandsに明示的にリストされている必要があります。

セキュリティ上の利点

プロンプトインジェクションからの保護

攻撃者がプロンプトインジェクションを通じてClaude Codeの動作を正常に操作した場合でも、サンドボックスはシステムのセキュリティを確保します: ファイルシステム保護:
  • ~/.bashrcなどの重要な設定ファイルを変更できません
  • /bin/のシステムレベルファイルを変更できません
  • Claude権限設定で拒否されているファイルを読み取ることができません
ネットワーク保護:
  • 攻撃者が制御するサーバーにデータを流出させることができません
  • 許可されていないドメインから悪意のあるスクリプトをダウンロードできません
  • 承認されていないサービスへの予期しないAPI呼び出しを行うことができません
  • 明示的に許可されていないドメインに連絡することができません
監視とコントロール:
  • サンドボックス外のすべてのアクセス試行はOSレベルでブロックされます
  • 境界がテストされるとすぐに通知を受け取ります
  • リクエストを拒否するか、1回だけ許可するか、設定を永続的に更新することを選択できます

攻撃面の削減

サンドボックス化は以下からの潜在的な損害を制限します:
  • 悪意のある依存関係:有害なコードを含むNPMパッケージまたは他の依存関係
  • 侵害されたスクリプト:セキュリティ脆弱性を持つビルドスクリプトまたはツール
  • ソーシャルエンジニアリング:ユーザーに危険なコマンドを実行させるように騙す攻撃
  • プロンプトインジェクション:Claude Codeに危険なコマンドを実行させるように騙す攻撃

透過的な操作

Claude Codeがサンドボックス外のネットワークリソースにアクセスしようとする場合:
  1. 操作はOSレベルでブロックされます
  2. すぐに通知を受け取ります
  3. 以下を選択できます:
    • リクエストを拒否する
    • 1回だけ許可する
    • サンドボックス設定を更新して永続的に許可する

セキュリティ上の制限

  • ネットワークサンドボックス化の制限:ネットワークフィルタリングシステムは、プロセスが接続できるドメインを制限することで動作します。プロキシを通じて渡されるトラフィックをそれ以上検査することはなく、ユーザーはポリシーで信頼できるドメインのみを許可することを確認する責任があります。
ユーザーは、データ流出を許可する可能性のあるgithub.comなどの広いドメインを許可することから生じる潜在的なリスクに注意する必要があります。また、場合によってはドメインフロンティングを通じてネットワークフィルタリングをバイパスすることが可能な場合があります。
  • Unixソケット経由の権限昇格:allowUnixSockets設定は、サンドボックスバイパスにつながる可能性のある強力なシステムサービスへのアクセスを不注意に付与する可能性があります。たとえば、/var/run/docker.sockへのアクセスを許可するために使用された場合、これはdockerソケットを悪用してホストシステムへのアクセスを効果的に付与します。ユーザーはサンドボックスを通じて許可するUnixソケットを慎重に検討することをお勧めします。
  • ファイルシステム権限昇格:過度に広いファイルシステム書き込みパーミッションは権限昇格攻撃を可能にする可能性があります。$PATHの実行可能ファイルを含むディレクトリ、システム設定ディレクトリ、またはユーザーシェル設定ファイル(.bashrc.zshrc)への書き込みを許可すると、他のユーザーまたはシステムプロセスがこれらのファイルにアクセスするときに異なるセキュリティコンテキストでコード実行につながる可能性があります。
  • Linuxサンドボックス強度:Linux実装は強力なファイルシステムとネットワーク分離を提供しますが、特権なしネームスペースなしでDocker環境内で動作できるようにするenableWeakerNestedSandboxモードが含まれています。このオプションはセキュリティを大幅に弱体化させ、追加の分離が別の方法で実施される場合にのみ使用する必要があります。

高度な使用法

カスタムプロキシ設定

高度なネットワークセキュリティが必要な組織の場合、カスタムプロキシを実装して以下を実行できます:
  • HTTPSトラフィックを復号化して検査する
  • カスタムフィルタリングルールを適用する
  • すべてのネットワークリクエストをログに記録する
  • 既存のセキュリティインフラストラクチャと統合する
{
  "sandbox": {
    "network": {
      "httpProxyPort": 8080,
      "socksProxyPort": 8081
    }
  }
}

既存のセキュリティツールとの統合

サンドボックス化されたbashツールは以下と連携します:
  • IAMポリシー権限設定と組み合わせて多層防御を実現します
  • 開発コンテナdevcontainersと一緒に使用して追加の分離を実現します
  • エンタープライズポリシー管理設定を通じてサンドボックス設定を実施します

ベストプラクティス

  1. 制限的に開始する:最小限のパーミッションで開始し、必要に応じて拡張します
  2. ログを監視する:サンドボックス違反の試みを確認してClaude Codeのニーズを理解します
  3. 環境固有の設定を使用する:開発と本番環境のコンテキストで異なるサンドボックスルール
  4. パーミッションと組み合わせる:包括的なセキュリティのためにサンドボックス化をIAMポリシーと一緒に使用します
  5. 設定をテストする:サンドボックス設定が正当なワークフローをブロックしないことを確認します

オープンソース

サンドボックスランタイムは、独自のエージェントプロジェクトで使用するためのオープンソースnpmパッケージとして利用可能です。これにより、より広いAIエージェントコミュニティがより安全で安全な自律システムを構築できるようになります。これは、サンドボックス化したい他のプログラムをサンドボックス化するためにも使用できます。たとえば、MCPサーバーをサンドボックス化するには、以下を実行できます:
npx @anthropic-ai/sandbox-runtime <command-to-sandbox>
実装の詳細とソースコードについては、GitHubリポジトリを参照してください。

制限事項

  • パフォーマンスオーバーヘッド:最小限ですが、一部のファイルシステム操作は若干遅くなる可能性があります
  • 互換性:特定のシステムアクセスパターンが必要なツールの中には、設定調整が必要な場合や、サンドボックス外で実行する必要がある場合もあります
  • プラットフォームサポート:現在LinuxとmacOSをサポートしており、Windowsサポートは計画中です

関連項目

  • セキュリティ - 包括的なセキュリティ機能とベストプラクティス
  • IAM - パーミッション設定とアクセス制御
  • 設定 - 完全な設定リファレンス
  • CLIリファレンス - -sbを含むコマンドラインオプション