LESSON 30分

ストーリー

佐藤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つの選択肢
残留リスク対策後に残るリスクを評価し、許容範囲に収める

チェックリスト

  • リスクの基本概念(脅威・脆弱性・影響度)を説明できる
  • リスクマトリクスを使ってリスクを分類できる
  • DREADスコアリングで脅威を定量評価できる
  • 4つのリスク処理戦略を適切に選択できる
  • リスクアセスメントの実施手順を理解した

次のステップへ

次は「セキュリティアーキテクチャの原則」を学びます。多層防御や最小権限の原則など、セキュアなシステムを設計するための根本原則を身につけましょう。


推定読了時間: 30分