ストーリー
高橋アーキテクトが脆弱性レポートを表示しました。
脆弱性管理のプロセス
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.0 | Critical | 即座に対応(24時間以内) |
| 7.0-8.9 | High | 1週間以内に対応 |
| 4.0-6.9 | Medium | 次のリリースで対応 |
| 0.1-3.9 | Low | 計画的に対応 |
| 0.0 | None | 対応不要 |
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分