ストーリー
高橋アーキテクトがツリー図を描き始めました。
攻撃ツリーとは
攻撃ツリーは、攻撃目標を根(ルート)に置き、その目標を達成するための手段を枝として展開した木構造です。攻撃者がどのような経路でシステムを攻撃できるかを可視化します。
攻撃ツリーの例:不正ログイン
不正ログイン
├── パスワード攻撃
│ ├── ブルートフォース攻撃
│ │ └── レートリミットなしのログインAPI
│ ├── 辞書攻撃
│ │ └── 弱いパスワードポリシー
│ └── クレデンシャルスタッフィング
│ └── 他サイトから漏洩したID/PW
├── セッションハイジャック
│ ├── XSSでCookieを窃取
│ │ └── 入力サニタイズの不備
│ └── 安全でないCookie設定
│ └── HttpOnly/Secure属性なし
├── 認証バイパス
│ ├── JWT署名検証の不備
│ └── パスワードリセットの脆弱性
└── ソーシャルエンジニアリング
├── フィッシング攻撃
└── サポート担当への成りすまし
DREADによるリスク評価
DREADは、各脅威のリスクを5つの観点で1-10のスコアで評価するフレームワークです。
5つの評価軸
| 評価軸 | 英語 | 質問 |
|---|---|---|
| D | Damage Potential | 攻撃が成功した場合の被害はどの程度か? |
| R | Reproducibility | 攻撃をどのくらい簡単に再現できるか? |
| E | Exploitability | 攻撃を実行するのにどの程度のスキルが必要か? |
| A | Affected Users | 影響を受けるユーザーの範囲は? |
| D | Discoverability | 脆弱性をどのくらい簡単に発見できるか? |
スコアリングの基準
| スコア | 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.0 | Critical | 即座に対処。リリースブロッカー |
| 6.0-7.9 | High | 次のスプリントで対処 |
| 4.0-5.9 | Medium | 計画的に対処 |
| 1.0-3.9 | Low | リスク受容も検討 |
リスク対応の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"),
},
];
まとめ
| ポイント | 内容 |
|---|---|
| 攻撃ツリー | 攻撃経路を木構造で可視化 |
| DREAD | 5つの観点で脅威のリスクを定量評価 |
| 優先度判定 | スコアに基づいて対応の優先度を決定 |
| リスク対応 | 軽減・転嫁・回避・受容の4戦略 |
チェックリスト
- 攻撃ツリーの作り方を理解した
- DREADの5つの評価軸を暗記した
- スコアリングに基づく優先度判定ができる
- リスク対応の4つの戦略を理解した
次のステップへ
次は「セキュリティ要件の定義」を学びます。脅威分析の結果を具体的なセキュリティ要件として文書化する方法を身につけましょう。
推定読了時間: 30分