LESSON 30分

ストーリー

高橋アーキテクト
セキュリティの原則は学んだ。次は、実際にシステムの脅威を”見つける”方法を学ぼう

高橋アーキテクトがデータフロー図を描き始めました。

高橋アーキテクト
脅威モデリングは、設計段階で”何が危険か”を体系的に洗い出す手法だ。勘に頼るのではなく、フレームワークを使って漏れなく分析する
あなた
フレームワーク…具体的には?
高橋アーキテクト
STRIDEだ。Microsoftが開発した脅威分類の枠組みで、6つの脅威カテゴリで網羅的に分析できる

脅威モデリングとは

脅威モデリングとは、システムに対する潜在的な脅威を特定・評価し、対策を計画するプロセスです。設計段階で実施することで、実装後に脆弱性が見つかるリスクを大幅に減らせます。

脅威モデリングの4つのステップ

graph TD
    S1["1. システムの分解<br/>データフロー図(DFD)の作成"]
    S2["2. 脅威の特定<br/>STRIDEフレームワークの適用"]
    S3["3. リスクの評価<br/>DREADスコアリング"]
    S4["4. 対策の計画<br/>セキュリティ要件の定義"]

    S1 --> S2 --> S3 --> S4

Step 1: システムの分解 - DFD(データフロー図)

脅威モデリングの第一歩は、システムのデータの流れを可視化することです。

DFDの4つの要素

要素記号説明
外部エンティティ四角形システム外のアクター(ユーザー、外部API)
プロセス円形データを処理するコンポーネント
データストア二重線データの保存場所
データフロー矢印データの流れ
信頼境界破線セキュリティドメインの境界
graph TD
    Browser["ブラウザ<br/>(外部エンティティ)"]
    GW["API Gateway<br/>(プロセス)"]
    App["App Server<br/>(プロセス)"]
    DB[("Database<br/>(データストア)")]

    Browser -->|"HTTPS"| GW

    subgraph trust["信頼境界内"]
        GW --> App
        App --> DB
    end

    classDef external fill:#ffd,stroke:#cc0
    classDef process fill:#ddf,stroke:#33c
    classDef datastore fill:#dfd,stroke:#3c3
    class Browser external
    class GW,App process
    class DB datastore

Step 2: STRIDEフレームワーク

STRIDEは6種類の脅威カテゴリを定義し、各コンポーネントに対して体系的に脅威を洗い出すフレームワークです。

6つの脅威カテゴリ

カテゴリ英語説明対策の方向性
SSpoofing(なりすまし)他者になりすます認証
TTampering(改ざん)データを不正に変更する完全性チェック
RRepudiation(否認)行為を否定する監査ログ
IInformation Disclosure(情報漏洩)機密情報の露出暗号化
DDenial of Service(サービス拒否)サービスを利用不能にする可用性対策
EElevation of Privilege(権限昇格)不正に権限を取得する認可

STRIDEの適用例

// ECサイトの注文APIに対するSTRIDE分析
interface StrideAnalysis {
  component: string;
  threats: {
    category: "S" | "T" | "R" | "I" | "D" | "E";
    description: string;
    mitigation: string;
  }[];
}

const orderApiAnalysis: StrideAnalysis = {
  component: "POST /api/orders",
  threats: [
    {
      category: "S",
      description: "他人のアカウントで注文を作成される",
      mitigation: "JWT認証 + セッション検証",
    },
    {
      category: "T",
      description: "注文金額が改ざんされる",
      mitigation: "サーバーサイドで価格を再計算",
    },
    {
      category: "R",
      description: "注文を行ったことを否認される",
      mitigation: "注文の監査ログを記録",
    },
    {
      category: "I",
      description: "他の顧客の注文情報が漏洩する",
      mitigation: "認可チェック + レスポンスフィルタリング",
    },
    {
      category: "D",
      description: "大量の注文リクエストでAPIがダウン",
      mitigation: "レートリミット + キュー処理",
    },
    {
      category: "E",
      description: "一般ユーザーが管理者APIにアクセス",
      mitigation: "RBAC + エンドポイント別の認可",
    },
  ],
};

STRIDE-per-Element

各DFD要素に対して、関連するSTRIDEカテゴリを分析します。

DFD要素STRIDE
外部エンティティoo
プロセスoooooo
データストアooo
データフローooo

プロセスは全てのSTRIDEカテゴリの対象となるため、最も注意が必要です。


脅威モデリングの実施タイミング

タイミング目的
新規プロジェクト開始時全体アーキテクチャの脅威を分析
大きな機能追加時新しいデータフローの脅威を分析
外部連携の追加時信頼境界をまたぐ通信の脅威を分析
セキュリティインシデント後既存の脅威モデルの見直し

まとめ

ポイント内容
脅威モデリング設計段階で脅威を体系的に洗い出す
DFDデータの流れと信頼境界を可視化
STRIDE6カテゴリで漏れなく脅威を分類
適用タイミング新規開発・大規模変更時に実施

チェックリスト

  • 脅威モデリングの4つのステップを理解した
  • DFDの4つの要素を把握した
  • STRIDEの6つのカテゴリを暗記した
  • STRIDE-per-Elementの適用方法を理解した

次のステップへ

次は「攻撃ツリーとリスク評価」を学びます。特定した脅威の深刻度をDREADで定量的に評価する方法を身につけましょう。


推定読了時間: 30分