mcpField
S
security-threat-model

security-threat-model

github.com/mohitagw15856セキュリティ1.5k36 回インストール5 日前に更新
リポジトリ

security-threat-model について

security-threat-modelは、サービスや機能のSTRIDEベースの脅威モデルを作成するスキルです。セキュリティリスクと判断を記録するエンジニアリングチーム向けに、資産、信頼境界、脅威、リスク評価、緩和策を構造化してまとめます。

主な機能

  1. 01アーキテクチャ、データ、制御情報の収集
  2. 02STRIDEによる脅威の分類
  3. 03資産と信頼境界の登録
  4. 04脅威リスクの評価
  5. 05緩和策と担当者の定義
  6. 06受容リスクとレビュー周期の記録

活用シーン

  1. 01新しいサービスや機能のセキュリティ評価
  2. 02アーキテクチャ変更に伴う脅威の記録
  3. 03緩和計画と担当者の整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitagw15856/pm-claude-skills --skill security-threat-model

インストール後、Claude Code で/security-threat-modelを入力して読み込まれたか確認します。

詳細

セキュリティ脅威モデルスキル

サービスまたは機能について、STRIDE に基づく完全な脅威モデルを作成します。脅威モデルは、起こり得る問題を列挙しただけのものではありません。攻撃者、資産、境界、対策を構造的に分析し、エンジニアリングチームが十分な情報に基づいて、文書化されたセキュリティ上の判断を下せるようにするものです。

優れた脅威モデルは、新しいエンジニアが何を保護しているのか、各対策がなぜ存在するのか、チームがどのようなリスクを受け入れたのかを理解できるだけの具体性を備えています。

必須の入力情報

以下の情報がまだ提供されていない場合は、質問してください。

  • サービス名と説明 — サービスの機能と利用者
  • アーキテクチャの概要 — コンポーネント、依存関係、データフロー(図の説明や ASCII 図でもかまいません)
  • デプロイ環境 — クラウドプロバイダー、VPC/ネットワークのトポロジー、実行環境(Kubernetes、ECS、VM、サーバーレス)
  • データの機密性 — このサービスが扱うデータの種類(PII、決済データ、認証情報、社内限定データなど)
  • 既存の対策 — 認証方式、転送中/保存時の暗号化、現在の WAF/ファイアウォール、既存のセキュリティスキャン
  • 信頼レベル — プリンシパルは誰か(匿名の一般ユーザー、認証済みユーザー、内部サービス、管理者など)

出力形式


セキュリティ脅威モデル:[サービス名]

サービス: [名前] | チーム: [チーム名] 作成者: [名前] | レビュー担当者: [セキュリティ責任者/同僚] 日付: [日付] | 次回レビュー: [日付 — 6 か月後、または大規模なアーキテクチャ変更後を推奨] 分類: [社内/機密]


1. 概要

[サービスとシステム内での役割、およびこの脅威モデルの対象範囲を説明する 2~3 文を記述します。対象範囲に含まれるものと、明示的に対象外とするものを記載します。]

対象範囲:

  • [コンポーネントまたはデータフロー]
  • [コンポーネントまたはデータフロー]

対象外:

  • [例:サードパーティ決済プロセッサーの内部]
  • [例:社内ネットワーク/エンドユーザーデバイス]

2. 資産一覧

資産とは、データ、機能、評判など、保護する価値のあるものです。

資産説明機密性所有者
[例:ユーザーの PII]氏名、メールアドレス、プロフィールデータ高 — GDPR の規制対象[チーム]
[例:API 認証情報]サービス間認証トークン重大[チーム]
[例:セッショントークン]ユーザー認証状態高[チーム]
[例:監査ログ]ユーザーおよび管理者の操作記録中[チーム]
[例:サービスの可用性][X] エンドポイントの稼働時間中[チーム]

データ分類の基準:

  • 重大 — 認証情報。漏えいすると、システムが直接侵害される可能性があります
  • 高 — PII、財務データ、健康データ。規制対象、または評判への影響が大きいデータです
  • 中 — 内部設定、機密性のない業務データ
  • 低 — 公開情報、匿名化されたデータ

3. 信頼境界とアーキテクチャ

信頼境界とは、信頼レベルの異なるゾーンを分ける境界線です。データやリクエストが境界を越える際に、脅威が発生することがよくあります。

  ┌─────────────────────────────────────────────────────────────────┐
  │  INTERNET (Untrusted)                                           │
  │                                                                 │
  │   [Public User]          [Bot / Attacker]                       │
  └──────────────────────────────┬──────────────────────────────────┘
                                 │ HTTPS
                    ─ ─ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ─ ─ ─
                    Trust Boundary: Public → DMZ
                    ─ ─ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ─ ─ ─
                                 ▼
  ┌──────────────────────────────────────────────────────────────────┐
  │  DMZ / Edge Layer                                                │
  │   ┌────────────┐     ┌──────────────┐                           │
  │   │  WAF / CDN │────▶│  API Gateway │                           │
  │   └────────────┘     └──────┬───────┘                           │
  └──────────────────────────────┼───────────────────────────────────┘
                    ─ ─ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ─ ─ ─
                    Trust Boundary: Edge → Application VPC
                    ─ ─ ─ ─ ─ ─ ─│─ ─ ─ ─ ─ ─ ─ ─
                                 ▼
  ┌──────────────────────────────────────────────────────────────────┐
  │  Application VPC (Private)                                       │
  │   ┌──────────────┐     ┌────────────┐     ┌──────────────────┐  │
  │   │  [Service A] │────▶│ [Service B]│────▶│  [Database]      │  │
  │   └──────────────┘     └────────────┘     └──────────────────┘  │
  │                                ▲                                  │
  │                                │                                  │
  │   ┌──────────────┐             │                                  │
  │   │  Admin (IAM) │─────────────┘                                 │
  └──────────────────────────────────────────────────────────────────┘

特定された信頼境界:

境界接続元接続先認証方式暗号化
TB-1パブリックインターネットAPI Gateway[JWT/OAuth/API key]TLS 1.2+
TB-2API GatewayService A[mTLS/内部 JWT/IAM role][はい/いいえ]
TB-3Service Aデータベース[接続文字列 + IAM/ユーザー名 + パスワード][はい/いいえ]
TB-4管理者Service B[IAM role/VPN + MFA]TLS

4. STRIDE による脅威分析

STRIDE は脅威を分類するフレームワークです。重要なコンポーネントごとに、各カテゴリの脅威を列挙します。

STRIDE の分類:

  • S — なりすまし:別のユーザー、サービス、またはシステムになりすますこと
  • T — 改ざん:許可なくデータやコードを変更すること
  • R — 否認:操作の実行を否認すること。監査証跡が不十分であること
  • I — 情報漏えい:許可されていない相手にデータを公開すること
  • D — サービス拒否:サービスを利用不能にすること
  • E — 権限昇格:許可された範囲を超える機能を取得すること
コンポーネント:[API ゲートウェイ/認証レイヤー]
IDカテゴリ脅威攻撃ベクトル既存の対策
T-001S攻撃者が JWT トークンを偽造し、別のユーザーとして認証する署名キーが弱い、またはアルゴリズムの混同(alg:none)[例:キーをローテーションする RS256/none]
T-002S攻撃者が盗んだセッショントークンを再利用するXSS またはネットワークの盗聴による窃取[例:トークンの有効期限+リフレッシュトークンのローテーション]
T-003T攻撃者がリクエストヘッダーを変更し、テナント分離を回避するテナント ID ヘッダーの検証不足[例:サーバー側でのテナント解決/なし]
T-004R管理者の認証イベントの監査証跡がない認証失敗のログが設定されていない[例:CloudTrail を有効化/なし]
T-005I認証エラーメッセージからメールアドレスの登録有無が判明する詳細すぎるエラーレスポンス[例:正規化されたエラーレスポンス/なし]
T-006Dクレデンシャルスタッフィングによりレート制限が使い果たされ、正規ユーザーがブロックされる自動化されたログイン試行[例:IP ごとのレート制限+CAPTCHA/なし]
T-007E侵害された低権限トークンで管理者用エンドポイントが呼び出される管理者用ルートでのロールチェック不足[例:すべてのルートに RBAC ミドルウェアを適用/なし]
コンポーネント:[アプリケーションサービス/ビジネスロジック]
IDカテゴリ脅威攻撃ベクトル既存の対策
T-008Tサニタイズされていないユーザー入力による SQL/NoSQL インジェクションパラメーター化されていないクエリ[例:パラメーター化クエリを使用する ORM/なし]
T-009Tマスアサインメント — 攻撃者が、本来設定できないフィールド(例:isAdmin: true)を設定するAPI が許可リストなしで余分なフィールドを受け入れる[例:入力検証/なし]
T-010I安全でない直接オブジェクト参照 — ユーザーが別のユーザーのリソースにアクセスするリソース ID の所有者チェック不足[例:所有権ミドルウェア/なし]
T-011Iアプリケーションログに機密データ(PII、トークン)が含まれるデバッグモードでの過剰なログ出力[例:ログの機密情報除去/なし]
T-012D保護されていない高コストなエンドポイントが大規模な DB スキャンを引き起こすページネーションまたはクエリコスト制限がない[例:ページネーションを必須化/なし]
T-013Rビジネス上重要な状態変更が記録されない[operation] に対する監査イベントがない[例:監査ログテーブル/なし]
コンポーネント:[データベース]
IDカテゴリ脅威攻撃ベクトル既存の対策
T-014Iデータベースがインターネットに公開される(セキュリティグループの設定ミス)VPC 外部からの直接接続[例:パブリック IP なし、セキュリティグループでアプリのサブネットに制限]
T-015Iバックアップスナップショットが暗号化されていない、または不適切なアカウントからアクセスできる暗号化されていないスナップショット、パブリックな S3[例:暗号化されたスナップショット、プライベート S3 バケット]
T-016T過剰な権限を持つ DB アカウントによる権限昇格アプリがスーパーユーザーの DB アカウントを使用する[例:サービスごとに最小権限の DB ロールを設定/なし]
T-017D暴走クエリまたは一括削除によりデータ損失や停止が発生するクエリタイムアウトまたは論理削除がない[例:ステートメントのタイムアウト、重要なテーブルで論理削除を適用/なし]
コンポーネント:[内部サービス間通信]
IDカテゴリ脅威攻撃ベクトル既存の対策
T-018S不正な内部サービスが信頼されたサービスになりすますサービス間の相互認証がない[例:mTLS/サービスメッシュ/なし]
T-019I共有ネットワーク上で内部トラフィックが盗聴される暗号化されていないサービス間呼び出し[例:TLS を使用するサービスメッシュ/なし]
T-020E侵害された内部サービスが特権エンドポイントを呼び出す内部トークンのスコープ制限がない[例:スコープを限定したサービストークン/なし]

5. リスク一覧

各脅威をスコア化します:可能性(1~5) × 影響度(1~5) = リスクスコア(1~25)

優先度区分:クリティカル(20~25) | 高(12~19) | 中(6~11) | 低(1~5)

ID脅威の概要可能性影響度スコア優先度ステータス
T-001JWT の偽造 — 認証の回避2510中[未対応 / 軽減済み / 受容済み]
T-002セッショントークンのリプレイ3412高[未対応 / 軽減済み / 受容済み]
T-007ロールチェックの欠如による権限昇格3515高[未対応 / 軽減済み / 受容済み]
T-008SQL インジェクション2510中[未対応 / 軽減済み / 受容済み]
T-010IDOR — 他のユーザーのデータへのアクセス3412高[未対応 / 軽減済み / 受容済み]
T-014データベースがインターネットに公開されている155低[未対応 / 軽減済み / 受容済み]
T-018不正な内部サービスによるなりすまし248中[未対応 / 軽減済み / 受容済み]

6. 軽減策一覧

優先度が中以上の未対応の脅威すべてについて、具体的な軽減策を定義します。

ID脅威軽減策担当者目標日チケット
T-002セッショントークンのリプレイリフレッシュ時にトークンをローテーションし、古いトークンをサーバー側で直ちに無効化する[エンジニア名][日付][JIRA-123]
T-007権限昇格すべての /admin/* ルートに RBAC ミドルウェアを追加し、ロール境界の統合テストを作成する[エンジニア名][日付][JIRA-124]
T-010IDORリソースを取得するすべてのサービスメソッドに所有権の確認を追加し、コードレビューのチェックリストにも追加する[エンジニア名][日付][JIRA-125]
T-011ログ内の PIIPII フィールドに関するログ出力呼び出しを監査し、ロガーミドルウェアにスクラビングを追加する[エンジニア名][日付][JIRA-126]
T-018不正なサービスによるなりすましサービスメッシュ経由で mTLS を有効にするか、サービスごとにスコープを限定したサービストークンを発行する[エンジニア名][日付][JIRA-127]

7. 受容済みリスク

受容済みリスクとは、チームが現時点では軽減しないと判断した脅威です。受容済みリスクにはすべて、担当者とレビュー日を明記する必要があります。

ID脅威受容理由リスク担当者レビュー日
T-014データベースの一般公開データベースにはパブリック IP が割り当てられておらず、対策がすでに講じられている — 発生可能性が低いため受容[氏名][日付]
[ID][脅威][理由 — 例:「現時点の規模では、リスクに対して対策の労力が大きいため、トラフィックが10倍になった時点で再評価する」][氏名][日付]

8. セキュリティ対策の概要

対策種別対象となる脅威実装済み
有効期限15分の JWT RS256予防T-001, T-002[はい / 一部 / いいえ]
すべてのルートに RBAC ミドルウェアを適用予防T-007, T-020[はい / 一部 / いいえ]
パラメーター化クエリ(ORM)予防T-008[はい / 一部 / いいえ]
レート制限(IPごとに100 req/min)予防T-006, T-012[はい / 一部 / いいえ]
CloudTrail / 監査ログ検知T-004, T-013[はい / 一部 / いいえ]
CI パイプラインでの自動 SAST検知T-008, T-009[はい / 一部 / いいえ]
暗号化バックアップ + プライベート S3予防T-015[はい / 一部 / いいえ]
最小権限の DB ロール予防T-016[はい / 一部 / いいえ]
インシデント対応手順書是正すべて[はい / 一部 / いいえ]

9. レビューの頻度

トリガー対応
6か月ごと脅威モデル全体をレビューし、リスクスコアを更新して、軽減済みの項目をクローズする
アーキテクチャの大幅な変更信頼境界図を更新し、新しいコンポーネントについて STRIDE を再実施する
セキュリティインシデント関連する脅威をレビューし、新たに発見された攻撃経路を追加する
新しいデータ分類資産を一覧に追加し、新たな STRIDE カテゴリが該当するかを評価する
サードパーティ依存関係の追加新しい依存関係に関するサプライチェーンの脅威を評価する

次回の予定レビュー: [日付] レビュー担当者: [氏名 / セキュリティリード]


品質チェック

  • すべての信頼境界に名前が付けられ、認証メカニズムが明記されています。「TBD」のままにしないでください
  • リスク登録簿に記載された「重大」および「高」のリスクすべてに、担当者名と目標日を明記した緩和策があります
  • 受容したリスクすべてに、担当者名とレビュー日が明記されています。担当者のいない受容済みリスクがあってはいけません
  • 資産登録簿にデータの機密性レベルが含まれ、認証情報に関する項目が少なくとも1件あります
  • STRIDE 分析は API レイヤーだけでなく、主要なコンポーネントすべてを網羅しています
  • 緩和策はチケットにできるほど具体的です(「セキュリティを改善する」ではありません)
  • ASCII の信頼境界図が、提示されたアーキテクチャの説明と一致しています

アンチパターン

  • STRIDE 分析を API レイヤーだけに限定しないでください。データベースや内部サービスを含め、あらゆるコンポーネントに脅威が存在します
  • 「セキュリティを改善する」のような曖昧な指示を緩和策として残さないでください。すべての緩和策は、チケットにできるほど具体的である必要があります
  • 担当者名とレビュー日を明記せずにリスクを受容しないでください。担当者のいない受容済みリスクは、管理されているリスクではありません
  • 理論上の脅威だけを対象とした脅威モデルを作成しないでください。リスク登録簿を使って、発生可能性と影響に基づいて優先順位を付けてください
  • 資産登録簿を省略しないでください。保護対象が分からなければ、STRIDE 分析の拠り所がありません

コメント