LESSON 30分

ストーリー

佐藤CTO
脅威を知ることは大事だ。でもそれだけじゃ足りない
佐藤CTO
体系的に脅威を洗い出す方法が必要だ。抜け漏れがあれば、そこが攻撃者の入口になる
あなた
体系的に…何かフレームワークがあるんですか?
佐藤CTO
STRIDE だ。Microsoftが開発した脅威モデリングの方法論で、6つのカテゴリから脅威を分析する。まずはこの考え方を身につけよう

STRIDE脅威モデリングとは

STRIDEは、Microsoftが1999年に提唱した脅威モデリングのフレームワークです。システムに対する脅威を6つのカテゴリに分類し、網羅的に分析します。

STRIDEの6カテゴリ

カテゴリ英語CIAとの対応脅威の例
S なりすましSpoofing認証他人のアカウントでログイン、IPスプーフィング
T 改ざんTampering完全性データの不正変更、通信の改ざん
R 否認Repudiation監査操作の証拠を消す、ログの改ざん
I 情報漏洩Information Disclosure機密性機密データの流出、エラーメッセージによる情報露出
D サービス妨害Denial of Service可用性DDoS攻撃、リソース枯渇
E 権限昇格Elevation of Privilege認可一般ユーザーが管理者権限を取得

脅威モデリングのプロセス

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

graph LR
    S1["Step 1<br/>対象の定義<br/>・DFD作成<br/>・境界の定義"] --> S2["Step 2<br/>脅威の特定<br/>・STRIDE適用<br/>・脅威の列挙"]
    S2 --> S3["Step 3<br/>脅威の評価<br/>・リスク評価<br/>・優先順位"]
    S3 --> S4["Step 4<br/>対策の計画<br/>・緩和策検討<br/>・対策の実装"]

    classDef step fill:#0d6efd,stroke:#0d6efd,color:#fff
    class S1,S2,S3,S4 step

Step 1: データフローダイアグラム(DFD)の作成

DFDは、システム内のデータの流れを可視化するための図です。

要素記号説明
外部エンティティ四角形システム外のアクター(ユーザー、外部サービス)
プロセスデータを処理するコンポーネント
データストア二重線データを保存する場所(DB、ファイル)
データフロー矢印データの流れ
信頼境界点線セキュリティレベルが変わる境界
graph TD
    subgraph trust["信頼境界"]
        User["ユーザー"] -->|HTTPS| APIGateway["APIゲートウェイ"]
        APIGateway --> Auth["認証サービス"]
        APIGateway --> Order["注文サービス"]
        Order --> Payment["決済サービス"]
        Order --> OrderDB[("注文DB")]
    end

    subgraph external["外部決済API"]
        Payment --> Stripe["外部決済サービス"]
    end

    classDef entity fill:#4a90d9,stroke:#2c5f8a,color:#fff
    classDef store fill:#f5a623,stroke:#c47d10,color:#fff
    classDef boundary fill:transparent,stroke:#e94560,stroke-dasharray:5 5

    class User,APIGateway,Auth,Order,Payment entity
    class OrderDB store
    class trust,external boundary

Step 2: STRIDEによる脅威の特定

DFDの各要素にSTRIDEカテゴリを適用します。

// 脅威モデリングの構造をTypeScriptで表現
interface Threat {
  id: string;
  category: 'S' | 'T' | 'R' | 'I' | 'D' | 'E';
  target: string;           // DFD上のコンポーネント
  description: string;      // 脅威の説明
  attackVector: string;     // 攻撃経路
  impact: 'Critical' | 'High' | 'Medium' | 'Low';
  likelihood: 'High' | 'Medium' | 'Low';
  mitigation: string;       // 緩和策
}

// 脅威モデリング結果の例
const threats: Threat[] = [
  {
    id: 'T-001',
    category: 'S',
    target: 'APIゲートウェイ',
    description: '盗まれたJWTトークンによるなりすまし',
    attackVector: 'XSSでトークンを窃取し、正規ユーザーとしてAPIを呼び出す',
    impact: 'High',
    likelihood: 'Medium',
    mitigation: 'HttpOnly Cookie、トークンのローテーション、異常検知',
  },
  {
    id: 'T-002',
    category: 'T',
    target: '注文サービス',
    description: '注文金額の改ざん',
    attackVector: 'APIリクエストの価格パラメータを改ざん',
    impact: 'Critical',
    likelihood: 'Medium',
    mitigation: 'サーバーサイドでの価格再計算、入力値の検証',
  },
  {
    id: 'T-003',
    category: 'I',
    target: '注文DB',
    description: 'SQLインジェクションによるデータ漏洩',
    attackVector: '検索パラメータに悪意のあるSQLを挿入',
    impact: 'Critical',
    likelihood: 'Low',
    mitigation: 'パラメータ化クエリ、ORM使用、WAF',
  },
  {
    id: 'T-004',
    category: 'D',
    target: 'APIゲートウェイ',
    description: 'DDoSによるサービス停止',
    attackVector: '大量のリクエストでサーバーリソースを枯渇',
    impact: 'High',
    likelihood: 'Medium',
    mitigation: 'レート制限、CDN、オートスケーリング',
  },
  {
    id: 'T-005',
    category: 'E',
    target: '認証サービス',
    description: 'IDOR(Insecure Direct Object Reference)による権限昇格',
    attackVector: '他ユーザーのIDを指定して管理者操作を実行',
    impact: 'Critical',
    likelihood: 'Medium',
    mitigation: '全エンドポイントでの認可チェック、RBAC実装',
  },
];

信頼境界の定義

信頼境界は、セキュリティレベルが変わる箇所であり、脅威が最も発生しやすいポイントです。

信頼境界説明必要な対策
インターネット ↔ DMZ外部からの最初のアクセスポイントWAF、DDoS防御、TLS
DMZ ↔ 内部ネットワークパブリック領域と内部の境界API Gateway、認証・認可
アプリケーション ↔ データベースデータアクセスの境界暗号化、アクセス制御、監査ログ
サービス間マイクロサービスの境界mTLS、サービスメッシュ
自社 ↔ 外部サービス外部APIとの境界API Key管理、タイムアウト、サーキットブレーカー

アタックツリー

アタックツリーは、攻撃者の視点から攻撃の手順を木構造で表現する手法です。

目標: ユーザーの個人情報を窃取する
├── 1. Webアプリケーション経由
│   ├── 1.1 SQLインジェクション
│   │   ├── 検索フォームへの攻撃
│   │   └── APIパラメータへの攻撃
│   ├── 1.2 XSSでセッション窃取
│   │   ├── 反射型XSS
│   │   └── 格納型XSS
│   └── 1.3 IDOR(直接オブジェクト参照)
│       └── ユーザーIDの推測
├── 2. ネットワーク経由
│   ├── 2.1 中間者攻撃(MITM)
│   │   └── TLSの設定不備を悪用
│   └── 2.2 DNS偽装
├── 3. サプライチェーン経由
│   ├── 3.1 悪意のあるnpmパッケージ
│   └── 3.2 CI/CDパイプラインの侵害
└── 4. 内部犯行
    ├── 4.1 データベースへの直接アクセス
    └── 4.2 ログからの情報収集

脅威モデリングのベストプラクティス

プラクティス説明
早期に実施設計フェーズで脅威モデリングを行う
定期的に更新機能追加・アーキテクチャ変更時に見直す
チームで実施開発者・セキュリティ担当・運用担当が協力
文書化する脅威モデルをADR(Architecture Decision Record)として記録
自動化と統合CI/CDパイプラインに脅威モデリングのチェックを組み込む
// 脅威モデルをコードで管理する例
interface ThreatModel {
  systemName: string;
  version: string;
  lastReviewDate: string;
  reviewers: string[];
  dataFlowDiagram: string;  // DFDファイルへのパス
  trustBoundaries: TrustBoundary[];
  threats: Threat[];
  mitigations: Mitigation[];
}

interface TrustBoundary {
  id: string;
  name: string;
  from: string;
  to: string;
  protections: string[];
}

interface Mitigation {
  threatId: string;
  strategy: 'Mitigate' | 'Accept' | 'Transfer' | 'Avoid';
  description: string;
  status: 'Planned' | 'InProgress' | 'Completed';
  owner: string;
}

まとめ

ポイント内容
STRIDE6カテゴリ(なりすまし、改ざん、否認、情報漏洩、DoS、権限昇格)で脅威を分類
脅威モデリングプロセス対象定義 → 脅威特定 → 脅威評価 → 対策計画
DFDデータの流れと信頼境界を可視化する図
信頼境界セキュリティレベルが変わるポイント、脅威が最も発生しやすい
アタックツリー攻撃者の視点で攻撃手順を木構造で分析

チェックリスト

  • STRIDEの6つのカテゴリを説明できる
  • DFD(データフローダイアグラム)を作成できる
  • 信頼境界を識別し、脅威を特定できる
  • アタックツリーを使って攻撃経路を分析できる
  • 脅威モデリングのプロセスを4ステップで実施できる

次のステップへ

次は「リスクアセスメント」を学びます。特定した脅威の深刻度を評価し、優先順位をつける方法を身につけましょう。


推定読了時間: 30分