年間25,000件以上のCVE(Common Vulnerabilities and Exposures:公開された脆弱性の識別番号システム)が公表される現在、大規模エンタープライズには月に2,000〜3,000件もの脆弱性アラートが届く。しかし実際にパッチを当てられるのはそのうち10〜15%に過ぎない。この数字が示すのは、人手によるトリアージがすでに限界を超えているという現実だ。
なぜCVSSスコアだけでは不十分なのか
CVSS(Common Vulnerability Scoring System:脆弱性の深刻度を0〜10の数値で表す業界標準スコアリング)は長年にわたってセキュリティチームの判断基準とされてきた。しかし、このスコアはあくまで「理論上のリスク」を数値化したものであり、現実の攻撃パターンとは乖離する場合がある。
たとえば、CVSSスコアが7点台の脆弱性でも、国家支援型のAPT(Advanced Persistent Threat:標的型の持続的サイバー攻撃グループ)が積極的に悪用しているケースでは、スコア9点台の別の脆弱性より実害リスクが高いことがある。実際のデータによると、APTグループは脆弱性の公開から48〜72時間以内に兵器化(エクスプロイトコードを実際の攻撃に使える形にすること)を完了し、サイバー犯罪グループでも7〜14日で同じ工程を終える。この時間軸の差が、パッチの優先順位付けに決定的な情報となる。
MLモデルが扱うべき特徴量の設計
CVEトリアージに機械学習を適用する場合、特徴量エンジニアリング(モデルが学習する入力データの設計)が精度を左右する。シード記事が整理している特徴量の軸は大きく4種類に分類できる。
- 技術特徴量:CVSSメトリクス、認証要件、ネットワーク露出度、エクスプロイト複雑度
- 脅威インテリジェンス:エクスプロイトのPoC(Proof of Concept:概念実証コード)公開状況、ダークウェブでの言及数、キャンペーン帰属情報
- 時系列特徴量:公開からエクスプロイト出現までの日数分布、パッチ提供の遅延履歴
- 環境コンテキスト:対象アセットの業務上の重要度、既存のセキュリティ制御、コンプライアンス要件
これらを組み合わせることで、「このCVEが自社環境でどれだけ緊急か」を動的に算出できる。CVSSスコア単体では捉えられなかった組織固有のリスクプロファイルを反映できる点が大きな違いだ。
実装上は、NVD(National Vulnerability Database:米国政府が管理する公式脆弱性データベース)やEPSS(Exploit Prediction Scoring System:エクスプロイト発生確率を予測するスコアリング)のAPIからデータを収集し、特徴量として整形するパイプラインを構築するのが出発点となる。
import requests
def fetch_nvd_cve(cve_id: str) -> dict:
url = f'https://services.nvd.nist.gov/rest/json/cves/2.0?cveId={cve_id}'
resp = requests.get(url, timeout=10)
resp.raise_for_status()
return resp.json()
def fetch_epss_score(cve_id: str) -> float:
url = f'https://api.first.org/data/v1/epss?cve={cve_id}'
data = requests.get(url).json()
return float(data['data'][0]['epss']) if data['data'] else 0.0EPSSはFIRST(Forum of Incident Response and Security Teams)が提供するもので、過去の攻撃データを基に「今後30日以内にエクスプロイトが観測される確率」を0〜1で返す。CVSSと組み合わせることで、スコアの高さと実際の脅威動向の両面からトリアージできる。
開発ワークフローへの組み込みとMCPとの接点
CVEトリアージの自動化を開発チームが活用する場面として、依存ライブラリの脆弱性検知がある。GitHub ActionsやGitLab CIに組み込んだスキャンツール(TrivyやSnykなど)が検出したCVEを、自前のMLモデルやEPSSスコアで再採点し、PRのマージブロック基準を動的に調整する構成が現実的だ。
さらに近年注目されているのが、MCP(Model Context Protocol:AIエージェントが外部ツールやAPIと連携するためのプロトコル)を介してCVEトリアージ機能をAIコーディングツールに統合するアプローチだ。たとえばClaudeやCopilot Chatが依存関係の更新提案を行う際に、MCPサーバー経由でEPSSやNVDのデータをリアルタイムに取得し、「このバージョンアップはEPSS 0.87の高リスクCVEに対応している」といったコンテキストを添えて提示できる。開発者が脆弱性の意味を理解しながら意思決定できる状態になる。
要点を整理すると、CVEトリアージ自動化の設計で押さえるべき柱は三つある。第一に、CVSSスコアを起点にしつつもEPSSや脅威インテリジェンスを加えたマルチシグナルの特徴量設計。第二に、自社のアセット重要度と環境固有のコンテキストをモデルに反映させる仕組み。第三に、スキャン結果をCI/CDや開発ツールに連携させ、エンジニアが結果を解釈しやすい形で届けるパイプラインの整備だ。
EPSSのスコアは毎日更新されるため、一度モデルを組んで終わりではなく、データの鮮度を維持する継続的なパイプライン運用が前提になる点も念頭に置いておく必要がある。