Security Audit
信頼境界を実際に侵害する脆弱性を特定し、影響を受ける担当者に対して、証拠、安全な再現手順、優先度、および最小限の効果的な修正を提供します。これは防御的でソースファーストのワークフローです。具体的な影響を受ける主体、リソース、またはセキュリティ上の結果が伴わない候補は、確認された発見事項とはみなされません。
動作モード
このスキルはデフォルトではガイダンスとして機能します。読み込んでも、完全な監査ワークフローやファイル作成は許可されません。
- ガイダンスモード: セキュリティに関する質問、焦点を絞ったレビュー、方法論、トリアージ、または特定の発見事項の調査には、このスキルの関連部分のみを使用します。6つのフェーズすべてを自動的に実行したり、出力ディレクトリを作成したり、監査アーティファクトを書き込んだりしないでください。必要に応じて焦点を絞ったエージェントを起動してもかまいません。結果は現在のタスクに返されます。
- 完全監査モード: ユーザーがコードベースの監査またはペネトレーションテストを明示的に依頼した場合、完全、包括的、またはエンドツーエンドのセキュリティレビューを依頼した場合、またはレポートアーティファクトを要求した場合に、完全なワークフローを使用します。以下で定義されている6つのフェーズすべてを実行し、ファイルを作成します。
リクエストがいずれのモードにも該当する可能性がある場合は、ファイルを作成したり完全なワークフローを開始したりする前に、焦点を絞った質問を1つ行ってください。
プラットフォーム用語
このスキルはエージェントに依存しません。
- 親は、実行を調整し、共有状態を所有するエージェントです。
- タスクツールは、プラットフォームの委任またはサブエージェントメカニズムです。
researchエージェントは、焦点を絞ったソース調査と事実確認のために委任されたエージェントです。generalエージェントは、広範な調査と範囲限定のローカル実行のために委任されたエージェントです。- 見出し内の
subagent_type:は、これらの2つの委任されたエージェントロールのどちらがその作業を実行するかを指定します。
ロール、書き込み分離、プロンプト、および独立性の境界を維持しながら、同等のプラットフォーム機能を使用してください。
普遍的な実行安全規則
これらのルールは両方の動作モードに適用されます。ソース検査は読み取り専用です。ターゲットが制御するビルド、テスト、プロセス、ブラウザ、エミュレータ、ファザー、およびフィクスチャ処理は、以下のすべての制御を提供するOS強制サンドボックス内でのみ実行してください。
- 外部ネットワークなし。チェックにローカルのクライアント/サーバートラフィックが必要な場合にのみ、隔離されたループバック名前空間を使用します。
- 安全な値を使用した明示的な許可リストから生成された空の環境。スクラッチローカルの
HOME、一時ディレクトリ、およびキャッシュを使用します。 - 読み取り専用のターゲットとツールチェーン。ターゲットが制御するプロセスは、割り当てられた
scratch/ディレクトリ内にのみ書き込むことができます。 - CPU、メモリ、プロセス、ファイルサイズ、ディスク、およびウォールクロック時間に対する明示的な低い制限。
ターゲット制御プロセスの外部のエージェントは、ビルドがソースの隣に書き込む必要がある場合、割り当てられた scratch/ ディレクトリに使い捨てのソースコピーを作成できます。ガイダンスモードでは、ターゲット制御ファイルを保持しないでください。完全監査モードでは、信頼できる親側のコードのみが、書き込み分離の手順に従って、最小限の非秘密結果を保持する artifacts/ に昇格させることができます。ターゲットコードに、保持された出力ディレクトリ(エージェント自身の割り当てられた scratch/ 以外)、別のエージェントのディレクトリ、ホストのホームディレクトリ、認証情報、ソケット、または共有サービスを公開しないでください。依存関係をインストールしたり、ビルドにそれらをフェッチさせたりしないでください。ローカルで既に利用可能なツールと依存関係のみを使用してください。すべての制御を強制できない場合は、ターゲットコードを実行しないでください。不足しているサンドボックス機能を検証が必要なブロッカーとして報告し、安全な検証計画を提供してください。
ダミーの主体、フィクスチャ、およびシークレットを使用してください。デプロイされたエンドポイント、外部サービス、共有インフラストラクチャ、本番環境のID、他のユーザーのデータ、またはライブコントロールプレーンをプローブしないでください。ライブまたは共有プロセスに対して可用性をテストしたり、アーティファクトを公開したり、リリースを変更したり、有料のAPIクォータを費やしたり、欠陥を確立するために必要な最小限のローカル効果を超えて続行したりしないでください。決定的な事実がソースまたはサンドボックス化されたフィクスチャの外部にある場合は、検証が必要として報告してください。
完全監査セットアップ
完全監査モードでは、偵察の前にこれらの値を解決してください。
- スキルディレクトリ: この
SKILL.mdを含む絶対ディレクトリ。 - ターゲット: レビュー対象の絶対リポジトリルート。
- リポジトリ名: ディレクトリまたはローカルのGitリモートからの安定したリポジトリ識別子。
- 出力ディレクトリ: ターゲットの外部にある新しい書き込み可能なディレクトリ。デフォルトは
~/security-audit-skill/<repo-name>/run-<N>で、<N>は次に使用されていない整数です。ユーザーが明示的に選択し、親がバージョン管理がディレクトリ全体を無視することを確認した場合にのみ、ターゲット内のディレクトリを使用してください。それ以外の場合は停止し、外部パスを要求してください。 - ソースリファレンス: レビューされたコミットと、ワークツリーがダーティかどうか。レビューされていない生成ファイルまたは変更されたファイルを別のリビジョンとして扱わないでください。
書き込み分離
親は、共有実行ファイルの唯一の作成者であり、以下のファイルを作成します。
run-metadata.jsonarchitecture.mdcoverage-ledger.jsonfindings.jsonREPORT.mdFINDINGS-DETAIL.mdNEEDS-VALIDATION.md
各ハンターまたは検証者は、<output-dir>/agents/<agent-id>/ の下に一意のルートを受け取り、個別の scratch/ および artifacts/ ディレクトリを持ちます。正規のエージェントIDは ^[a-z0-9][a-z0-9_-]{0,63}$ に一致し、con、prn、aux、nul、com1 から com9、または lpt1 から lpt9 などのWindowsデバイス名と等しくてはなりません。小文字のIDは大文字小文字の衝突を防ぎます。エージェントおよびすべてのターゲット制御プロセスは、scratch/ にのみ書き込むことができます。保持される artifacts/ は親が所有し、サンドボックスに公開されることはなく、信頼できる親側の昇格コードによってのみ書き込み可能です。エージェントは、共有ファイル、ターゲットソース、保持されたアーティファクト、または別のエージェントのディレクトリを変更してはなりません。書き込み可能なフォールバックとして /tmp またはホストのホームディレクトリを使用しないでください。
実行前に、親はエージェントの scratch/ および artifacts/ ルートの信頼できる非継承可能なディレクトリ記述子を開いて保持し、予想されるスクラッチ相対アーティファクトファイルの許可リストと、ファイルごとおよび累積バイト制限を記録します。これらの記述子をエージェントまたはサンドボックスに渡さないでください。サンドボックスとそのすべてのプロセスが終了した後、信頼できる親側のコードは、許可リストに含まれる各ファイルを個別に昇格させます。
- 宣言された相対パスを検証します。絶対、空、
.,..、またはシンボリックリンクのコンポーネントを拒否します。 - 保持されたスクラッチルート記述子から、各親コンポーネントを辿り、ノーフォローでディレクトリ相対操作を使用します。パスで再オープンしないでください。
- リーフをノーフォローかつノンブロッキングで開きます。
fstatで、それが通常のファイルであり、リンクカウントが正確に1であり、記録されたファイルごとおよび累積バイト制限内にあることを確認します。- その記述子から読み取りながら、再度それらの制限を適用します。
- 検証されたサイズを正確にコピーし、
fstatを繰り返し、変更されたID、タイプ、リンクカウント、またはサイズを拒否します。 - 宛先については、保持されたアーティファクトルート記述子から各親コンポーネントを辿り、ノーフォローでディレクトリ相対操作を使用します。既存の各コンポーネントが実際のディレクトリであることを要求し、欠落しているディレクトリを排他的に作成してから、ノーフォローで再オープンして確認します。
- リーフをリンクを辿らずに排他的に作成し、開かれた宛先がリンクカウントが正確に1の通常のファイルであることを確認し、いずれのパスも再オープンせずに、検証されたソース記述子からコピーします。
- POSIX以外のシステムでは、同等のレースセーフなAPIを使用します。
- スクラッチを再帰的にコピーしたりグロブしたり、アーカイブをアーティファクトに抽出したり、シンボリックリンク、FIFO、ソケット、デバイス、ディレクトリ、ハードリンクされたファイル、変更中のファイル、またはその制限を超えるファイルを開いたり昇格させたりしないでください。
- いずれかのチェックが利用できない、強制できない、または失敗した場合は、スクラッチエントリを破棄します。決定的な証拠である場合は、
needs_validation.mdにその理由を保持し、外部検証を推奨します。