
脆弱性情報を表す際に、今まで解説していたSCAPの情報やSSVCに加えて、最近ではExploit Prediction Scoring System (以下EPSS)も注目を浴びています。本記事では、EPSSについて簡単に解説します。
EPSSは基本的には「機械学習」のアプローチとなります。機械学習モデルの詳細な説明については本記事では割愛し、概要と活用方法について触れています。
Exploit Prediction Scoring System (EPSS)とは

Exploit Prediction Scoring System (EPSS) は、ざっくりというと「ソフトウェアの脆弱性が実際に悪用される可能性 (確率) を推定するもの」になります。各脆弱性にEPSSのモデルを適用すると、0〜1(0〜100%) のスコアが生成されます。スコアが高いほど、脆弱性が悪用される確率が高くなります。
一般的にセキュリティベンダーの脆弱性管理システムなどの商用製品では、脆弱性が公開された際に「すでに悪用されているか」「PoCが出ているか」「公開からどのくらいの時間が経っているか」など、様々な要因を用いてベンダー独自でスコアリングを行い、ユーザーに提供しています。
しかしこれらは、ベンダー固有のスコアリング方法でクローズドにされておりアプローチ方法も⼀般に公開されていません。
比較して、EPSSでは「データドリブン」として、公開されたデータを用いたモデリング方法でスコアリングを行うアプローチとなります。基本的には「機械学習」のアプローチとなります。
EPSSのバージョンについて
EPSSはv1, v2とあり、バージョンが上がるにつれてより精度が上がっています。機械学習モデルも異なっており、v2ではElasticnetが使用されていたとの事です。
本記事では、Enhancing Vulnerability Prioritization: Data-Driven Exploit Predictions with Community-Driven Insights(論文)を参考にEPSSv3について記載しています。EPSSv3はv2に比べて82%向上したとの事です(数値は曲線下面積(AUC)が0.429から0.779 に向上したことから割り出されています)。
機械学習モデルについて

機械学習モデルの詳細な説明については本記事では割愛しますが、EPSSv3では「XGBoost」が使用されています。「XGBoost」は勾配ブースティング決定木を使用した、分散型のオープンソース機械学習ライブラリーです。スピードと効率、そして大規模なデータ・セットで適切に拡張できる点が強みです。
EPSSではXGBoostアルゴリズムを用いて実質的・効果的なアプロ ーチを採用しており、入力として1,477個の変数を用いています。
データ
Enhancing Vulnerability Prioritization: Data-Driven Exploit Predictions with Community-Driven Insights(論文)で使用されたデータは、 2022/12/31までにCVEとして登録(REJECT/RESERVEDを除く)された192,035件の脆弱性に基づいています。それぞれの脆弱性ごとに1478の変数が紐づいています。
変数としては、下記の種類(合計1477)になります。各脆弱性について、これだけの変数分のデータセットを用意して、学習させていきます。
説明 | 変数の数 | タイプ | データソース |
悪用が観測されている | 1 (日付を含む) | バイナリ | Fortinet, AlienVault, Shadowserver, GreyNoise |
エクスプロイトコードが公開されている | 3 | バイナリ | Exploit-DB, GitHub, MetaSploit |
CVEがMLやウェブサイトで言及されている | 3 | バイナリ | CISA KEV, Google Project Zero, Trend Micro ZDI |
CVEがSNSで言及されている | 3 | 数値 | Mentions/discussion on Twitter |
攻撃ツールやスキャナで使用されている | 4 | バイナリ | Intrigue, sn1per, jaeles, nuclei |
CVEのリファレンスで言及されている | 17 | 数値 | MITRE CVE List, NVD |
CVEに脆弱性のキーワードでの説明がある | 147 | バイナリ | Text description in MITRE CVE List |
CVSSメトリック | 15 | ビット列 | NVD |
CWE | 188 | バイナリ | NVD |
ベンダーのラベル | 1096 | バイナリ | NVD |
脆弱性の鮮度 | 1 | 数値 | CVEが公開されてからの経過日数 |
評価
Enhancing Vulnerability Prioritization: Data-Driven Exploit Predictions with Community-Driven Insights(論文)では、2022/12/01時点の脆弱性の状態に基づいて、今後30日間の悪用の可能性を予測しています。実際に2022/12/30までの悪用状況を使用して全体的なパフ ォ ーマンスを測定しています(図1)。 比較のために、 EPSSv1, EPSSv2と、同じ日付と悪用活動のCVSS v3 ベーススコアもグラフに含まれています。横軸は「再現率」になり、縦軸は「適合率」になります。
曲線下面積(AUC)が大きくなるほど、つまり1に近づくほど精度が良い事を示しています。また、F1スコアと呼ばれる適合率と再現率のバランスも、1に近づくほどバランスが良いとなっています。
EPSS v3では、 曲線下面積 (AUC) が 0.7795、 F1スコアが 0.728 になっています。

EPSSの確認(API)
EPSSはFIRSTが提供するEPSS APIを用いて取得することができます(ページにサンプルが載っています)。

また、Base URLはhttps://api.first.org/epss/になっており、アクセスするとパラメータ等が載っています。

APIの使用例
例えば、2025/02/10でCVE-2024-6387(regreSSHion)の2025/02/09時点でのEPSSスコアを知りたい場合には
curl -X GET "https://api.first.org/data/v1/epss?cve=CVE-2024-6387&date=2025-02-09"
と打つことで、EPSSスコアが取得できます。出力はjson形式ですので、読みやすいように”&pretty=true”を末尾につけて
curl -X GET "https://api.first.org/data/v1/epss?cve=CVE-2024-6387&date=2025-02-09&pretty=true"
としてあげると下記のような出力ができます。
[omokazuki:/home/omokazuki]$ curl -X GET "https://api.first.org/data/v1/epss?cve=CVE-2024-6387&date=2025-02-09&pretty=true"
{
"status": "OK",
"status-code": 200,
"version": "1.0",
"access-control-allow-headers": "x-requested-with",
"access": "public",
"total": 1,
"offset": 0,
"limit": 100,
"data": [
{
"cve": "CVE-2024-6387",
"epss": "0.002610000",
"percentile": "0.654110000",
"date": "2025-02-09"
}
]
}
2024年7月に公開された脆弱性ですが
- OpenSSHという対象の狭さ
- 脆弱性公開から半年以上経っている
等から、2025/02/09時点でのEPSSスコア(つまり2025/02/09時点で今後30日以内に悪用される可能性のスコア)は「0.0026」と低くなっています。試しにCVE-2024-6387(regreSSHion)の2024/07/31時点でのEPSSスコアを見てみると
[omokazuki:/home/omokazuki]$ curl -X GET "https://api.first.org/data/v1/epss?cve=CVE-2024-6387&date=2024-07-31&pretty=true"
{
"status": "OK",
"status-code": 200,
"version": "1.0",
"access-control-allow-headers": "x-requested-with",
"access": "public",
"total": 1,
"offset": 0,
"limit": 100,
"data": [
{
"cve": "CVE-2024-6387",
"epss": "0.714750000",
"percentile": "0.981090000",
"date": "2024-07-31"
}
]
}
と、2024/07/31時点でのEPSSスコア(つまり2024/07/31時点で今後30日以内に悪用される可能性のスコア)は「0.71」と高くなっています。
また、2024年12月に悪用と攻撃が話題となったCleo( ファイル転送ソフト ) の脆弱性 (CVE-2024-50623 / CVE-2024-55956)の場合には
curl -X GET "https://api.first.org/data/v1/epss?cve=CVE-2024-50623,CVE-2024-55956&date=2025-02-09&pretty=true"
とすると(複数の脆弱性のEPSSスコアを調べるときにはカンマ(,)で区切ります)
[omokazuki:/home/omokazuki]$ curl -X GET "https://api.first.org/data/v1/epss?cve=CVE-2024-50623,CVE-2024-55956&date=2025-02-09&pretty=true"
{
"status": "OK",
"status-code": 200,
"version": "1.0",
"access-control-allow-headers": "x-requested-with",
"access": "public",
"total": 2,
"offset": 0,
"limit": 100,
"data": [
{
"cve": "CVE-2024-55956",
"epss": "0.967520000",
"percentile": "0.997900000",
"date": "2025-02-09"
},
{
"cve": "CVE-2024-50623",
"epss": "0.969230000",
"percentile": "0.998340000",
"date": "2025-02-09"
}
]
}
と、両方ともEPSSスコアが約0.97で表示されます。これは
- 対象はCleo(ファイル転送ソフト)とこれも影響範囲は小さい
- 2024/10/27にCVE-2024-55956, 2024/12/03にCVE-2024-50623が公開されており、2025/02/09では2ヶ月ほどしか経っていない
- 「Termite」という脅威アクターにより実際悪用されており、パナソニック傘下の「Blue Yonder」という会社や病院、水道施設など多数で攻撃が観測されている。
という理由から、2025/02/09時点でのEPSSスコア(つまり2025/02/09時点で今後30日以内に悪用される可能性のスコア)は「0.96」と高くなっています。
まとめ
CVSS、SSVCなどと併用してEPSSも利用することで、脆弱性対処の際のプライオリティ付けがより適切になるのではないかと思われます。ぜひ皆様もEPSSを使用してみてください。
参考
FIRST: Exploit Prediction Scoring System (EPSS)
IBM: XGBoostとは
Wikipedia: Elastic net regularization
ITMedia: [評価指標]AUC(Area Under the ROC Curve:ROC曲線の下の面積)とは?
ITMedia: [評価指標]F値(F-measure、F-score)/F1スコア(F1-score)とは?
FIRST: EPSS API
SIOSセキュリティブログ: OpenSSHの脆弱性(regreSSHion: CVE-2024-6387)と9.8リリース
サイバートラスト: 2024 年 11-12 月の脅威動向と代表的な攻撃(後編)