Threat Modeling (Pro)

注: Threat Modeling は DefectDojo Pro 限定機能であり、現在 BETA 版です。

Threat Modeling は、機能設計をレビュー済みの脅威モデルへと変換します。設計内容 — 貼り付けたテキスト、設計ドキュメント、任意でアーキテクチャ図 — を入力すると、DefectDojo はそこに記述されているコンポーネントとデータフロー、それらに対する脅威、そしてその脅威を緩和するセキュリティ要件を生成します。要件はその後 DefectDojo に検出事項としてプッシュできるため、設計段階の作業も他のすべてと同じトリアージ、SLA、Jira、レポートの仕組みに乗せることができます。

これは Sensei の コード作成前(pre-code) の機能です。scan-and-fix がすでに存在するリポジトリに対して動作するのに対し、脅威モデリングはスキャンすべきコードが存在する前の、設計の段階で動作します。

🔎 BETA: Threat Modeling は現在も活発に開発が進められており、UI 全体で BETA と表示されています。動作や画面はリリースごとに変更される可能性があります。BETA 期間中は DefectDojo がインスタンスごとに有効化します。有効にしたい場合は担当の DefectDojo 担当者にご連絡ください。

📍 アクセス方法: 左側のナビゲーションで Sensei のすぐ下にある Threat Modeling を開きます。

What you need

  • Sensei のライセンス機能。脅威モデリングは scan-and-fix と同じエンタイトルメントで提供されます。
  • グローバルの Maintainer または Owner ロール。これを持たないユーザーにはこのページは表示されません。
  • 脅威モデルを紐付ける対象の製品。V3 の命名を使用しているインスタンスでは、製品は アセット (assets) と呼ばれます。このページでは一貫して product と表記していますが、UI の表記はインスタンスの設定に従います。

何もインストールされず、リポジトリの接続も不要です。脅威モデリングは、あなたが提供した設計だけを読み取ります。

Generating a threat model

New threat model を選択し、製品を選んで名前を付け、手元にある形式で設計内容を入力します。

  • 説明を直接貼り付ける、または
  • 設計ドキュメントをアップロードする.md.markdown.txt.text、または .pdf。PDF からのテキスト抽出はベストエフォートです。PDF がほぼ画像で構成されている場合は、代わりにテキストを貼り付けてください。
  • アーキテクチャ図を任意で追加する — PNG、JPEG、WebP、または GIF。図はテキストと合わせて読み取られるため、図にしか登場しないコンポーネントも認識されます。

これらは組み合わせることができます。短い要約の貼り付けと図を組み合わせると、どちらか一方だけよりも良いモデルが得られることがよくあります。

生成はバックグラウンドで実行され、進行に応じて4つの段階を経て、その進捗が実行画面に表示されます。

  1. アーキテクチャの抽出 — コンポーネント、信頼境界、データアセット、データフロー。
  2. 脅威の列挙 — STRIDE カテゴリごとの脅威。
  3. セキュリティ要件の記述 — テスト可能な要件を、それぞれが緩和する脅威に紐付けて記述。
  4. 結果の組み立て — 図と最終的な整合性チェック。

実行には通常数分かかります。ページを離れても構いません。進捗と結果は実行結果として保持されます。

Reading the results

Architecture

Architecture タブは、抽出結果をデータフロー図として描画します。コンポーネントは信頼境界ごとにグループ化され、フローにはプロトコルのラベルが付きます。信頼境界をまたぐフローは異なる描画がされます。これらが注目すべきフローだからです。コンポーネントを選択すると、それを標的とする脅威が表示されます。

このモデルは、判断できなかった事項 — 立てざるを得なかった前提や、設計上不明確だった点 — も記録します。まずこれらを読んでください。設計自体のどこが曖昧かがわかり、この作業から得られる最も有用な成果であることが多いためです。

Threats

各脅威には以下の情報が含まれます。

  • その STRIDE カテゴリ(spoofing、tampering、repudiation、information disclosure、denial of service、elevation of privilege)と 深刻度
  • 攻撃者プロファイル — 例えば外部の未認証攻撃者、インサイダー、サプライチェーン侵害など — と、必要とされるスキルレベル。
  • 順序立てられた 攻撃経路(attack path): 攻撃者が取るであろう手順と、その前提条件。
  • 該当する場合の CWE。作成された値ではなく、固定リストから選ばれます。
  • その脅威が標的とする コンポーネント、フロー、データアセット

Security requirements

各要件は、テスト可能な文として記述され、それが満たされていることを確認する方法を説明する verification ステップ、カテゴリ(authentication、authorization、input validation、cryptography など)、優先度を伴います。すべての要件は、それが緩和する脅威を明示します。

カバレッジは明示的に管理されます。各脅威は少なくとも1つの要件によって緩和されているか、カバレッジギャップ (coverage gap) として一覧に表示されます。ギャップは隠さずに表示されるため、脅威が気づかれないまま漏れることはありません。

Evidence, and what to trust

すべてのコンポーネント、脅威、要件には、その根拠となった エビデンス が付随しており、エビデンスは出典ごとにラベル付けされます。

  • 設計テキストから — あなたが提供したテキストと一語一句照合された引用。
  • 図から — 画像から読み取られたもので、引用できるテキストはありません。
  • 推論(Inferred) — 設計にはまったく記載されていないもの。

提供されたテキストと照合できなかった引用は保持されますが、未検証としてフラグ付けされ、主張されている引用文がそのまま表示されるため、自分で判断できます。項目は削除ではなくフラグ付けされます。なぜなら、静かに破棄された脅威は誰にも気づかれないリスクとなるためです。構造的に破綻している項目 — 抽出されていないコンポーネントを参照する脅威など — は破棄され、破棄された数は実行結果に記録されます。

出力は完成した成果物ではなく、レビュー用のドラフトとして扱ってください。 これは言語モデルによって設計ドキュメントから生成されたものであり、エビデンスのラベルは、どの部分があなたが書いた内容に基づいており、どの部分が推論であるかを判別できるようにするためのものです。

Pushing requirements into findings

要件は Push to findings によって対応可能な状態になります。プッシュしたい要件を選択すると、DefectDojo はその製品上の Sensei Threat Modeling という専用エンゲージメント内に、要件1件につき1件の検出事項を作成します。テストは脅威モデルのバージョンごとに1つ作成されます。

各検出事項には以下が含まれます。

  • 要件の文言に加え、それが緩和するすべての脅威の説明 — STRIDE カテゴリ、攻撃者、番号付きの攻撃経路 — が含まれるため、チケットを担当する人は脅威モデルを開かなくても背景を把握できます。
  • 緩和策としての verification ステップ。
  • その要件の深刻度と CWE。
  • タグ sensei-threat-modeltm-v<version> タグ、STRIDE タグ。

検出事項は アクティブだが未検証 の状態で作成されます。生成された要件は、人間が確認するための提案です。

プッシュは 冪等 (idempotent) です。各要件は自身の検出事項を所有しているため、同じモデルを再度プッシュしても重複が作成されるのではなく、その場で更新されます。要件を編集して再度プッシュすると、検出事項もそれに追随します。再プッシュしても、その検出事項を最初に起票した人が書き換わることはありません。

Versions and supersession

脅威モデルは 製品ごとにバージョン管理 されます。更新された設計から再生成すると、古いバージョンを上書きするのではなく新しいバージョンが作成されるため、ある決定が下された時点で設計がどうだったかという履歴が残ります。

新しいバージョンをプッシュすると、現在の要件に対応しなくなった以前のバージョンの検出事項は、オープンのまま放置されるのではなく 緩和済み になります。これにより、エンゲージメントが現在の設計を反映した状態に保たれます。

Exporting

脅威モデルは、設計レビューやチケット用に Markdown として、またはプログラムから扱うために JSON としてダウンロードできます。どちらもその脅威モデル自体からダウンロードできます。

Generation activity

Activity タブには、すべての生成とそのステータス、到達した段階が一覧表示されます。実行中の生成は キャンセル できます。失敗した実行には失敗した 理由(設定の問題、長すぎる入力、一時的なサービスエラーなど)が表示され、完了済みの段階はチェックポイントとして保存されているため、再試行時は最初からではなく途中から再開されます。

Costs

脅威モデリングは大規模言語モデルを呼び出しており、各生成にはコストが発生します。1回の生成でおよそ8回の呼び出しが行われ、使用量は Sensei の他の LLM 使用量と合わせて実行ごとに記録されるため、そのモデルの生成にかかったコストを確認できます。実行をキャンセルすると、次の段階の境界で以降の呼び出しが停止します。