CC Safety Net が守るもの
CC Safety Net は、エージェントが生成するコマンドをすべて信頼できないものとして扱います。プロンプトインジェクション、混乱したコンテキスト、敵対的な指示によって、エージェントが破壊的なコマンドを出すことがあるためです。そこでフックは、対応するツール呼び出しをホストが実行する前に 1 つずつ検査し、ブロックの理由が見つかれば拒否します。 どこまで検査するかはツールによって異なります。- 連携自身のシェルツールは、設定した安全レベルでコマンド全体を解析します。
command_toolsで宣言したツールは、空でない文字列のcommandを含む呼び出しにかぎり、組み込みのシェルツールと同じように解析します。- それ以外のツールには、ポリシーファイル、Git メタデータ、機密パスの検査だけを行います。その内容をシェルコマンドとして扱うことはありません。
- インストール済みの連携を経由しないコマンドは、まったく検査されません。
/ やホームディレクトリの再帰削除です。Git メタデータと policy.json の保護も同様です。シークレット保護が有効な間は、認識済みのシークレットファイルの内容の読み取りと、deny_paths に指定したパスの読み取りを、どのレベルでも緩められません。
CC Safety Net が信頼するもの
フックの外から入ってきて、強制の内容を変えうる入力は 3 つあります。CC Safety Net は、どれも反映する前に検証します。
設定が無効だというだけで、通常の作業が拒否されることはありません。CC Safety Net は拒否した設定元を破棄し、ランタイムを
degraded として報告します。ルールブックを破棄するとその拒否もなくなるため、直すまでは、そのルールブックがブロックしていたコマンドが再び実行できるようになります。失敗の種類とそのフォールバックの一覧は設定の復旧を参照してください。
解析に失敗したときの動作
1 つのツール呼び出しの解析を完了できない場合、CC Safety Net はその呼び出しを実行させず、拒否します。- アナライザーの想定外のエラーでは、「failed closed」の理由で拒否します。
- 不正なフック入力や、解析できないほど大きい、または深くネストしたコマンドは、standard を含むどの安全レベルでも拒否します。解析の上限に達したコマンドには、単純にするか分割するようエージェントに伝える理由が付きます。
- strict と paranoid は、パーサーが読めないコマンドも拒否します。standard は、パースできなくても安全に見えるテキストを通し、破壊的パターンのスキャンは引き続き行います。
マスク処理で隠れるものと残るもの
コマンドのテキストを監査ログに書き込む前と、拒否メッセージで返す前に、CC Safety Net は認識できる資格情報を<redacted> に置き換えます。対象は、秘密鍵、URL 内の資格情報、シークレットを含む環境変数への代入と HTTP ヘッダー、署名付き URL の署名、JWT、AWS のアクセスキー ID、既知のトークン接頭辞です。全一覧は監査ログのリファレンスにあります。
マスク処理が一致するのは、既知の資格情報の形式だけです。絶対パス、プロジェクト名やディレクトリ名、ホスト名、IP アドレス、ユーザー名、一覧にない形式の資格情報はそのまま残ります。エージェントが実行するコマンドに本物の資格情報を渡さないでください。explain と doctor の出力にも同じ生のテキストが含まれるため、共有する前に内容を確認してください。トレースを共有する前にを参照してください。
攻撃者が突破を試みうる経路
ネットワーク経由の攻撃、エージェントのプラットフォーム自体への攻撃、検査から実行までの間に差し替えられたシンボリックリンクは、実行前フックでは止められません。保護の対象外を参照してください。
関連ページ
- セキュリティポリシー:問題を公開で報告するか非公開で報告するかの判断基準。
- 保護レイヤー:CC Safety Net が守らず、サンドボックスが守る範囲。
- 既知の制限:残る隙間と、各ホストの制限。