LESSON 30分

ストーリー

高橋アーキテクト
STRIDEで脅威を洗い出したら、次はその”深刻度”を評価する必要がある

高橋アーキテクトがツリー図を描き始めました。

高橋アーキテクト
全ての脅威に同じ工数をかけるわけにはいかない。リスクの高いものから優先的に対処する。そのための道具が”攻撃ツリー”と”DREAD”だ
あなた
優先順位をつけるんですね
高橋アーキテクト
そうだ。限られたリソースで最大のセキュリティ効果を得るための判断基準だ

攻撃ツリーとは

攻撃ツリーは、攻撃目標を根(ルート)に置き、その目標を達成するための手段を枝として展開した木構造です。攻撃者がどのような経路でシステムを攻撃できるかを可視化します。

攻撃ツリーの例:不正ログイン

不正ログイン
├── パスワード攻撃
│   ├── ブルートフォース攻撃
│   │   └── レートリミットなしのログインAPI
│   ├── 辞書攻撃
│   │   └── 弱いパスワードポリシー
│   └── クレデンシャルスタッフィング
│       └── 他サイトから漏洩したID/PW
├── セッションハイジャック
│   ├── XSSでCookieを窃取
│   │   └── 入力サニタイズの不備
│   └── 安全でないCookie設定
│       └── HttpOnly/Secure属性なし
├── 認証バイパス
│   ├── JWT署名検証の不備
│   └── パスワードリセットの脆弱性
└── ソーシャルエンジニアリング
    ├── フィッシング攻撃
    └── サポート担当への成りすまし

DREADによるリスク評価

DREADは、各脅威のリスクを5つの観点で1-10のスコアで評価するフレームワークです。

5つの評価軸

評価軸英語質問
DDamage Potential攻撃が成功した場合の被害はどの程度か?
RReproducibility攻撃をどのくらい簡単に再現できるか?
EExploitability攻撃を実行するのにどの程度のスキルが必要か?
AAffected Users影響を受けるユーザーの範囲は?
DDiscoverability脆弱性をどのくらい簡単に発見できるか?

スコアリングの基準

スコアD(被害)R(再現性)E(悪用容易性)A(影響範囲)D(発見容易性)
1-3低い困難高度な技術要少数困難
4-6中程度条件付きある程度の技術要一部ツール必要
7-10高い容易初心者でも可能全ユーザー容易

DREADの適用例

interface DreadScore {
  threat: string;
  damage: number;         // 1-10
  reproducibility: number; // 1-10
  exploitability: number;  // 1-10
  affectedUsers: number;   // 1-10
  discoverability: number; // 1-10
  total: number;           // 平均値
  priority: "Critical" | "High" | "Medium" | "Low";
}

const evaluateThreats = (): DreadScore[] => {
  const threats: DreadScore[] = [
    {
      threat: "SQLインジェクションによるデータ漏洩",
      damage: 10,          // 全データ漏洩の可能性
      reproducibility: 8,  // 容易に再現
      exploitability: 7,   // ツールで自動化可能
      affectedUsers: 10,   // 全ユーザーに影響
      discoverability: 8,  // スキャナーで発見可能
      total: 8.6,
      priority: "Critical",
    },
    {
      threat: "ブルートフォースによるアカウント乗っ取り",
      damage: 7,           // 個別アカウントの被害
      reproducibility: 9,  // 自動化が容易
      exploitability: 6,   // 基本的なスクリプトで可能
      affectedUsers: 3,    // 弱いパスワードのユーザーのみ
      discoverability: 9,  // ログインページは公開
      total: 6.8,
      priority: "High",
    },
    {
      threat: "CSRF による不正操作",
      damage: 5,           // 限定的な操作
      reproducibility: 6,  // 条件付き
      exploitability: 5,   // 攻撃ページの準備が必要
      affectedUsers: 4,    // 誘導されたユーザーのみ
      discoverability: 5,  // 手動での確認が必要
      total: 5.0,
      priority: "Medium",
    },
  ];

  return threats.sort((a, b) => b.total - a.total);
};

優先度の判定基準

平均スコア優先度対応
8.0-10.0Critical即座に対処。リリースブロッカー
6.0-7.9High次のスプリントで対処
4.0-5.9Medium計画的に対処
1.0-3.9Lowリスク受容も検討

リスク対応の4つの戦略

特定したリスクに対して、4つの対応戦略があります。

戦略説明
軽減(Mitigate)対策を実装してリスクを下げる入力バリデーション追加
転嫁(Transfer)リスクを第三者に移すサイバー保険加入、CDN利用
回避(Avoid)リスクの原因を排除する機能そのものを削除
受容(Accept)リスクを認識した上で許容する低リスクの脆弱性を記録のみ
interface RiskResponse {
  threat: string;
  dreadScore: number;
  strategy: "mitigate" | "transfer" | "avoid" | "accept";
  action: string;
  owner: string;
  deadline: Date;
}

const riskResponses: RiskResponse[] = [
  {
    threat: "SQLインジェクション",
    dreadScore: 8.6,
    strategy: "mitigate",
    action: "全クエリをパラメータ化クエリに移行",
    owner: "バックエンドチーム",
    deadline: new Date("2024-02-01"),
  },
  {
    threat: "DDoS攻撃",
    dreadScore: 7.2,
    strategy: "transfer",
    action: "CloudflareのDDoS防御サービスを導入",
    owner: "インフラチーム",
    deadline: new Date("2024-02-15"),
  },
];

まとめ

ポイント内容
攻撃ツリー攻撃経路を木構造で可視化
DREAD5つの観点で脅威のリスクを定量評価
優先度判定スコアに基づいて対応の優先度を決定
リスク対応軽減・転嫁・回避・受容の4戦略

チェックリスト

  • 攻撃ツリーの作り方を理解した
  • DREADの5つの評価軸を暗記した
  • スコアリングに基づく優先度判定ができる
  • リスク対応の4つの戦略を理解した

次のステップへ

次は「セキュリティ要件の定義」を学びます。脅威分析の結果を具体的なセキュリティ要件として文書化する方法を身につけましょう。


推定読了時間: 30分