threat-model について
threat-model は、システムのリスクを評価するアプリケーションオーナーやセキュリティチーム向けのスキルです。コードに基づく初期分析、オーナーへのインタビュー、または両方を行い、後続のレビューに使える構造化された脅威モデルを作成します。
主な機能
- 01ソースと Git 履歴の静的分析
- 02初期分析とインタビューの各モード
- 03STRIDE による不足領域の確認
- 04構造化された THREAT_MODEL.md の出力
活用シーン
- 01引き継いだコードベースのリスク整理
- 02オーナーとのシステム設計レビュー
- 03後続のセキュリティレビュー用の脅威情報作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ anthropics/ defending-code-reference-harness --skill threat-modelインストール後、Claude Code で/threat-modelを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
bootstrap.mdinterview.mdREADME.mdschema.md詳細
脅威モデル
脅威モデルは、特定のバグがまだ見つかっているかどうかにかかわらず、**「このシステムでは何が起こり得るのか、誰がそれを引き起こすのか、そしてそれに対して何をすべきか」**に答えるものです。脅威モデルは地図であり、脆弱性の発見は金属探知機です。優れた脅威モデルは、パイプラインに調査箇所を示し、トリアージにどの発見が重要かを伝えます。
判定基準: 1行のコードを修正すれば項目が消えるなら、それは脅威ではなく脆弱性です。「信頼できないメディアの解析を通じて攻撃者が RCE を達成する」という脅威は、既知のバグをすべて修正した後も残ります。一方、「dr_wav.h:412 が chunk_size の境界をチェックしない」という脆弱性は残りません。このスキルが生成するのは脅威です。脆弱性は、脅威の可能性スコアを高める証拠としてのみ扱われます。
呼び出し方法: /threat-model [bootstrap-then-interview|bootstrap|interview] <target-dir> [flags]
ステップ 0 — 安全に関する事前説明(必ず最初に実行)
このスキルが行うのは静的解析のみです。ソースコード、Git の履歴、およびユーザーから提供された脆弱性レポートを読み取り、出力ファイルを 1 つ(<target-dir>/THREAT_MODEL.md)書き込みます。対象をビルド、実行、ファジング、変更することはなく、対象のインフラストラクチャに対するネットワークリクエストも行いません。
先に進む前に、最初の応答で次の点を確認し、伝えてください。
- 対象ディレクトリが存在し、読み取り可能なローカルのチェックアウトであること。
- 対象ディレクトリ内のコードを実行しないこと。
--vulnsの指定先が URL の場合、または「CVE を取得して」と依頼された場合は、公開されているアドバイザリデータベース(NVD、GitHub Security Advisories、プロジェクト独自の課題トラッカー)のみを参照し、対象の稼働中のデプロイ環境にはアクセスしないこと。
脅威を検証するためにエクスプロイトを実行するようユーザーから求められた場合は断り、代わりに vuln-pipeline(README のステップ 2)を案内してください。
ステップ 1 — モードに振り分ける
$ARGUMENTS を解析します。
| 最初のトークン | 振り分け先 |
|---|---|
interview | このディレクトリの interview.md を読み、その指示に従います。 |
bootstrap | このディレクトリの bootstrap.md を読み、その指示に従います。 |
bootstrap-then-interview | まずブートストラップを行い、その後、ドラフトを初期案としてインタビューします。詳細は以下をご覧ください。 |
| その他、または空 | ユーザーに 「このセッションで質問に答えられる、このシステムの所有者または開発者はいますか?」 と尋ねます。いる場合で、コードベースがチェックアウトされている → bootstrap-then-interview を推奨します。いる場合で、コードベースがない → interview.md。いない場合 → bootstrap.md。 |
すべてのモードで同じ成果物(スキーマは schema.md の THREAT_MODEL.md)を作成するため、後続の利用者(パイプラインの recon/judge、検証エージェント)は、どのモードで作成されたかを知る必要はありません。
interview | bootstrap | |
|---|---|---|
| 必要なもの | セッションに参加するアプリケーションの所有者 | ローカルのチェックアウト。過去の脆弱性情報は任意 |
| 方法 | 4つの質問からなるフレームワーク:何に取り組んでいるのか → 何が問題になり得るのか → それにどう対処するのか → きちんとできたか を会話形式で確認します | 5つの段階:並列調査スウォーム → セクション1~3と脆弱性テーブルを統合 → 脆弱性を脅威クラスに一般化 → STRIDE でギャップを補完 → 出力 |
| 最適な対象 | 新しいシステム、設計レビュー、コードには現れないビジネスロジックにリスクが潜むシステム | 引き継いだシステム、サードパーティコード、OSS 依存関係、CVE の履歴があるあらゆるもの |
| 来歴タグ | interview | bootstrap |
コンテキストの保持。 インタビューモードは複数のターンにわたります。初期の読み取りで得たツールの結果は、必要になる前に破棄されることがあります。確実に進めるため、以下に従ってください。
interview.mdまたはbootstrap.mdを最初にすべて読まないでください。モードファイル(または関連するセクション)は、必要になった時点で、質問または段階ごとに読みます。- Read ツールでの再読み込みが「ファイルに変更がない」として拒否された場合、以前の結果は破棄されています。代わりに Bash 経由で
cat <path>を実行して再読み込みしてください。
インタビューの骨格(セッション中に interview.md を参照できなくなっても進められるようにするための情報です)。
| Q | 質問 | 記入するスキーマのセクション |
|---|---|---|
| Q1 | 何に取り組んでいるのか? | セクション1のコンテキスト、セクション2の資産、セクション3のエントリーポイント |
| Q2 | 何が問題になり得るのか? | セクション4の脅威行(id、脅威、攻撃者、サーフェス、資産) |
| Q3 | それにどう対処するのか? | セクション4の影響/可能性/ステータス/対策、セクション5の優先度を下げた項目、セクション8の推奨される緩和策 |
| Q4 | きちんとできたか? | ランキングの検証、網羅性の確認、セクション6の未解決の質問 |
bootstrap-then-interview モード
所有者が参加でき、かつコードベースがチェックアウトされている場合は、この方法を推奨します。システムを一から説明するのではなく、コードに基づいたドラフトを改善するために所有者の時間を使えます。
- 所有者に次のように伝えます。「まずコードを読み、ドラフトを作成して戻ります(約5~10分)。その後、一緒に内容を確認しましょう。この方法でよいですか? それとも、事前情報なしで始めますか?」同意を得た場合にのみ進めます。同意しない場合は
interview.mdに切り替えます。 bootstrap.mdを読み、最初から最後まで指示に従います。<target-dir>/THREAT_MODEL.mdを作成します。- 直ちにインタビューモードに進みます。
interview.mdを読み、--seed <target-dir>/THREAT_MODEL.mdを有効にして指示に従います。ブートストラップで作成されたセクション6の未解決の質問を Q1~Q4 の質問に使い、所有者が何もないところから始めるのではなく、内容を確認、修正、追加します。 - 改善したモデルで
<target-dir>/THREAT_MODEL.mdを上書きします。来歴をmode: bootstrap-then-interviewに設定します。
同じ手順は手動でも実行できます。まず bootstrap を実行し、後のセッションで interview --seed <THREAT_MODEL.md> を実行します。
ステップ 2 — 共通の出力仕様
すべてのモードで、schema.md に準拠する <target-dir>/THREAT_MODEL.md を必ず出力してください。
ファイルを書き込む直前に、必ずこのディレクトリにある schema.md を読んでください。インタビューモードでは、ルーティングから出力までに何ターンもかかることがあり、早い段階で読んでも、使用する前に内容が失われてしまいます。
ファイルを書き込んだ後、ユーザーに以下を出力してください。
THREAT_MODEL.mdのパス。- 発生可能性 × 影響度が高い上位 5 件の脅威(ID、1 行の説明、L×I)。
bootstrapの場合、コードから回答できなかった未解決の質問(後続のinterviewパスで使用します)。interviewの場合、コードで検証できなかった所有者の発言(後続のコードレビューで確認します)。
参照資料
- このスキルが引き継ぐ取り組みのコンテキストと認可の枠組みについては、docs/security.md と docs/prompting.md を参照してください。