ストーリー
佐
佐藤CTO
STRIDEで脅威を洗い出せるようになった。でも全部を同時に対策することはできない
佐藤CTOはリストに並んだ脅威を指しながら言いました。
佐
佐藤CTO
リソースは有限だ。だから優先順位が必要になる。発生可能性と影響度を掛け合わせて、リスクを定量的に評価する。それがリスクアセスメントだ
佐
佐藤CTO
その通り。DREAD スコアリングとリスクマトリクスを使えば、チーム全員が同じ基準でリスクを評価できる
リスクの基本概念
リスクの定義
リスク = 脅威 × 脆弱性 × 影響度
| 要素 | 説明 | 例 |
|---|
| 脅威(Threat) | システムに害を与える可能性のある事象 | SQLインジェクション攻撃 |
| 脆弱性(Vulnerability) | 脅威に悪用される可能性のある弱点 | ユーザー入力をサニタイズしていない |
| 影響度(Impact) | 攻撃が成功した場合の被害の大きさ | 顧客データ100万件の漏洩 |
| 発生可能性(Likelihood) | 攻撃が実際に起こる確率 | 公開APIのため高い |
リスクマトリクス
リスクマトリクスは、発生可能性と影響度の2軸でリスクを可視化するツールです。
5段階リスクマトリクス
| 影響度:極小 | 影響度:小 | 影響度:中 | 影響度:大 | 影響度:極大 |
|---|
| 発生可能性:極高 | 中 | 高 | 高 | 極高 | 極高 |
| 発生可能性:高 | 低 | 中 | 高 | 高 | 極高 |
| 発生可能性:中 | 低 | 中 | 中 | 高 | 高 |
| 発生可能性:低 | 極低 | 低 | 中 | 中 | 高 |
| 発生可能性:極低 | 極低 | 極低 | 低 | 中 | 中 |
リスクレベルと対応方針
| リスクレベル | スコア | 対応方針 | 対応期限 |
|---|
| 極高 | 20-25 | 即座に対策を実施 | 24時間以内 |
| 高 | 12-19 | 優先的に対策を実施 | 1週間以内 |
| 中 | 6-11 | 計画的に対策を実施 | 1ヶ月以内 |
| 低 | 2-5 | 監視しつつ対策を検討 | 次のスプリント |
| 極低 | 1 | リスク受容も選択肢 | 定期レビュー時 |
DREADスコアリング
DREADは、各脅威を5つの観点から1-10のスコアで評価するモデルです。
| 要素 | 英語 | 評価基準 |
|---|
| D 被害度 | Damage | 攻撃が成功した場合の被害の大きさ |
| R 再現性 | Reproducibility | 攻撃の再現しやすさ |
| E 悪用容易性 | Exploitability | 攻撃を実行するために必要なスキルやツール |
| A 影響範囲 | Affected Users | 影響を受けるユーザーの割合 |
| D 発見容易性 | Discoverability | 脆弱性の発見しやすさ |
スコアリング基準
| スコア | 被害度 | 再現性 | 悪用容易性 | 影響範囲 | 発見容易性 |
|---|
| 1-3 | 軽微な影響 | 再現困難 | 高度な専門知識が必要 | 一部のユーザー | 発見困難 |
| 4-6 | 中程度の影響 | 条件付きで再現可能 | ある程度のスキルが必要 | かなりのユーザー | ツールで発見可能 |
| 7-10 | 重大な影響 | 常に再現可能 | 初心者でも実行可能 | 全ユーザー | 容易に発見できる |
// DREADスコアリングの実装例
interface DreadScore {
damage: number; // 1-10
reproducibility: number; // 1-10
exploitability: number; // 1-10
affectedUsers: number; // 1-10
discoverability: number; // 1-10
}
interface RiskAssessment {
threatId: string;
threatName: string;
dread: DreadScore;
totalScore: number;
riskLevel: 'Critical' | 'High' | 'Medium' | 'Low';
}
function calculateDreadScore(dread: DreadScore): number {
const { damage, reproducibility, exploitability, affectedUsers, discoverability } = dread;
return (damage + reproducibility + exploitability + affectedUsers + discoverability) / 5;
}
function classifyRisk(score: number): RiskAssessment['riskLevel'] {
if (score >= 8) return 'Critical';
if (score >= 6) return 'High';
if (score >= 4) return 'Medium';
return 'Low';
}
// 実際のリスク評価例
const assessments: RiskAssessment[] = [
{
threatId: 'T-001',
threatName: 'SQLインジェクションによるデータ漏洩',
dread: {
damage: 9, // 全顧客データが漏洩
reproducibility: 8, // 入力フォームから再現可能
exploitability: 6, // SQLiの知識が必要
affectedUsers: 10, // 全ユーザーが影響
discoverability: 7, // 自動スキャンで発見可能
},
totalScore: 8.0,
riskLevel: 'Critical',
},
{
threatId: 'T-002',
threatName: 'CSRF攻撃による不正操作',
dread: {
damage: 5, // 個別ユーザーの操作
reproducibility: 7, // 悪意のあるサイト経由で再現
exploitability: 5, // HTMLの知識で実行可能
affectedUsers: 3, // 攻撃を受けたユーザーのみ
discoverability: 6, // コードレビューで発見可能
},
totalScore: 5.2,
riskLevel: 'Medium',
},
];
リスク優先順位の決定
リスクの4つの処理戦略
| 戦略 | 英語 | 説明 | 適用場面 |
|---|
| 緩和 | Mitigate | リスクの発生可能性や影響度を低減 | 対策のコストがリスクより小さい場合 |
| 受容 | Accept | リスクを認識した上で受け入れる | リスクが十分に小さい場合 |
| 移転 | Transfer | リスクを第三者に移転 | サイバー保険、外部サービスの利用 |
| 回避 | Avoid | リスクの原因となる活動を中止 | リスクが許容できないほど大きい場合 |
// リスク処理計画の構造
interface RiskTreatmentPlan {
riskId: string;
strategy: 'Mitigate' | 'Accept' | 'Transfer' | 'Avoid';
actions: TreatmentAction[];
residualRisk: RiskAssessment['riskLevel']; // 対策後の残留リスク
owner: string;
deadline: string;
}
interface TreatmentAction {
description: string;
effort: 'Low' | 'Medium' | 'High';
cost: number; // 推定コスト(人日)
effectiveness: number; // リスク低減率(%)
}
// リスク処理計画の例
const treatmentPlans: RiskTreatmentPlan[] = [
{
riskId: 'T-001',
strategy: 'Mitigate',
actions: [
{
description: 'ORMへの移行(パラメータ化クエリの強制)',
effort: 'Medium',
cost: 5,
effectiveness: 90,
},
{
description: 'WAFルールの追加',
effort: 'Low',
cost: 1,
effectiveness: 70,
},
{
description: 'SQLインジェクション検出のSASTルール追加',
effort: 'Low',
cost: 0.5,
effectiveness: 80,
},
],
residualRisk: 'Low',
owner: 'セキュリティチーム',
deadline: '2024-04-30',
},
];
リスクアセスメントの実施手順
実施フロー
1. 資産の特定
│ 「何を守るべきか」を明確にする
▼
2. 脅威の特定(STRIDE)
│ 各資産に対する脅威を洗い出す
▼
3. 脆弱性の特定
│ 現在の対策の弱点を評価する
▼
4. リスクの評価(DREAD / リスクマトリクス)
│ 発生可能性 × 影響度でスコアリング
▼
5. リスクの優先順位付け
│ スコアに基づいてランキング
▼
6. リスク処理計画の策定
│ 緩和・受容・移転・回避を決定
▼
7. 残留リスクの評価
│ 対策後のリスクレベルを再評価
▼
8. 定期的なレビュー
環境変化に応じてリスク評価を更新
まとめ
| ポイント | 内容 |
|---|
| リスクの定義 | 脅威 × 脆弱性 × 影響度 |
| リスクマトリクス | 発生可能性と影響度の2軸でリスクを可視化 |
| DREADスコアリング | 被害度・再現性・悪用容易性・影響範囲・発見容易性で定量評価 |
| リスク処理戦略 | 緩和・受容・移転・回避の4つの選択肢 |
| 残留リスク | 対策後に残るリスクを評価し、許容範囲に収める |
チェックリスト
次のステップへ
次は「セキュリティアーキテクチャの原則」を学びます。多層防御や最小権限の原則など、セキュアなシステムを設計するための根本原則を身につけましょう。
推定読了時間: 30分