LESSON 30分

ストーリー

高橋アーキテクト
SBOMがあれば脆弱性を”見つける”ことはできる。でも、見つけた後どうするかが重要だ

高橋アーキテクトが脆弱性レポートを表示しました。

高橋アーキテクト
全ての脆弱性に即座にパッチを当てるのは現実的ではない。優先度を判断し、計画的に対処する。これが脆弱性管理だ

脆弱性管理のプロセス

graph TD
    S1["1. 発見(Discovery)<br/>SBOM分析、脆弱性スキャン、セキュリティアドバイザリ"]
    S2["2. 評価(Assessment)<br/>CVSSスコア、影響範囲、悪用可能性"]
    S3["3. 優先度付け(Prioritization)<br/>ビジネスへの影響を加味してランク付け"]
    S4["4. 対応(Remediation)<br/>パッチ適用、設定変更、代替策"]
    S5["5. 検証(Verification)<br/>パッチの適用確認、回帰テスト"]
    S6["6. 報告(Reporting)<br/>対応状況の記録と報告"]

    S1 --> S2 --> S3 --> S4 --> S5 --> S6

CVSSスコアの理解

CVSS(Common Vulnerability Scoring System)は、脆弱性の深刻度を0.0-10.0のスコアで評価する国際標準です。

スコア深刻度対応目安
9.0-10.0Critical即座に対応(24時間以内)
7.0-8.9High1週間以内に対応
4.0-6.9Medium次のリリースで対応
0.1-3.9Low計画的に対応
0.0None対応不要
interface VulnerabilityAssessment {
  cveId: string;
  cvssScore: number;
  severity: "Critical" | "High" | "Medium" | "Low";
  affectedComponent: string;
  affectedVersion: string;
  fixedVersion: string | null;
  exploitAvailable: boolean;
  businessImpact: "Critical" | "High" | "Medium" | "Low";
  effectivePriority: "P0" | "P1" | "P2" | "P3";
}

// ビジネス影響を加味した優先度判定
const calculatePriority = (
  cvssScore: number,
  exploitAvailable: boolean,
  businessImpact: string,
): string => {
  if (cvssScore >= 9.0 && exploitAvailable) return "P0"; // 緊急対応
  if (cvssScore >= 7.0 || (cvssScore >= 4.0 && exploitAvailable)) return "P1";
  if (cvssScore >= 4.0) return "P2";
  return "P3";
};

パッチ戦略

パッチ適用のフロー

interface PatchWorkflow {
  steps: {
    // 1. パッチの評価
    evaluate: {
      compatibility: "依存関係の互換性チェック";
      breakingChanges: "破壊的変更の確認";
      testCoverage: "テストカバレッジの確認";
    };

    // 2. テスト環境での検証
    staging: {
      deployment: "ステージング環境にデプロイ";
      regression: "回帰テストの実行";
      performance: "パフォーマンスへの影響確認";
    };

    // 3. 本番環境への適用
    production: {
      strategy: "ローリングアップデート or カナリアリリース";
      rollback: "ロールバック計画の準備";
      monitoring: "適用後のモニタリング強化";
    };
  };
}

// 自動パッチ適用の判断基準
const autoApplyPolicy = {
  // 自動適用可能な条件
  autoApply: {
    patchVersion: true,     // パッチバージョン(x.x.1 → x.x.2)
    testsPassing: true,     // 全テストが通ること
    cvssBelow: 4.0,         // CVSS 4.0未満
  },

  // 手動レビューが必要な条件
  manualReview: {
    majorVersion: true,     // メジャーバージョン変更
    cvssAbove: 7.0,         // CVSS 7.0以上
    breakingChanges: true,  // 破壊的変更あり
  },
};

依存関係の自動更新

// Renovate/Dependabot の設定例
const renovateConfig = {
  // セキュリティアップデートは優先
  vulnerabilityAlerts: {
    enabled: true,
    labels: ["security"],
    automerge: false,  // セキュリティパッチも手動マージ
    prPriority: 10,    // 最優先
  },

  // パッチバージョンは自動マージ
  packageRules: [
    {
      matchUpdateTypes: ["patch"],
      automerge: true,
      automergeType: "pr",
      requiredStatusChecks: ["ci/tests", "ci/security-scan"],
    },
    {
      matchUpdateTypes: ["minor"],
      automerge: false,
      labels: ["dependencies"],
    },
    {
      matchUpdateTypes: ["major"],
      automerge: false,
      labels: ["dependencies", "breaking-change"],
    },
  ],
};

脆弱性対応のSLA

優先度検知から対応開始対応完了
P0(緊急)1時間以内24時間以内
P1(高)4時間以内1週間以内
P2(中)1営業日以内次回リリース
P3(低)1週間以内3ヶ月以内

まとめ

ポイント内容
脆弱性管理発見→評価→優先度→対応→検証→報告
CVSS脆弱性の深刻度を0-10で評価
パッチ戦略リスクに応じた計画的なパッチ適用
自動更新Renovate/Dependabotで依存関係を管理

チェックリスト

  • 脆弱性管理の6つのプロセスを理解した
  • CVSSスコアの解釈方法を把握した
  • パッチ適用のワークフローを理解した
  • 依存関係の自動更新設定を把握した

次のステップへ

次は「セキュリティテストの自動化」を学びます。SAST、DAST、SCAの3つのテスト手法をCI/CDに組み込む方法を身につけましょう。


推定読了時間: 30分