「EPSS」という指標を聞いたことはあるでしょうか。
これは機械学習モデルにより「将来その脆弱性が悪用される確率」を推定した指標で、脆弱性対策の観点から最近注目されてきています。
この EPSS について基本的な概念をまとめ、脆弱性管理にどのように役立てていくのかまでをテーマに、2回に渡ってブログを連載します。
本記事は主に「FIRSTのwebサイト」に掲載されている情報をベースにしています。
EPSS (Exploit Prediction Scoring System) とは、機械学習によるデータ駆動型のアプローチによる脆弱性の危険度を示す指標です。
FIRST (Forum of Incident Response and Security Teams) という団体から、無料で一般公開されています。
EPSS は2019年8月に論文が公開され、2021年4月に初めてデータが公開されました。
2022年2月には新たに EPSS v2 が公開され、有用な脆弱性管理の手段への1つとして注目され始めました。
現在は EPSS v3も公開され、v2から82%もパフォーマンスが向上したという報告があります1。
大雑把なモデルに「リスク=脆弱性×脅威×資産重要性」という表現があります。下図はそれを図示したもので、3つの要素の重なる中心部分が特に高いリスクの領域になります。この中で CVSS は「脆弱性」の深刻度を表し、EPSS は「脅威」に関係する概念です。
これらが「リスク」そのものを表すわけではないことに注意してください(より専門的にリスク判断について興味があれば「こちら」の記事をご参照ください)
EPSS のデータは EPSS Probability (score) と EPSS Percentile の2つで構成されます。
これら2つのEPSS のデータは、採番されている全てのCVE-IDに対して毎日自動的に値が計算されます。
今後30日間でその脆弱性が悪用される可能性を表し、確率として表現されています。EPSS スコアはCVSSスコアのように、脆弱性の将来的な脅威を数値として表します。
データは 0~1 の小数点以下の数値で提供されていますが、特に理由が無い場合は 0~100% の確率表記が推奨されています。
EPSS スコアの全体におけるランクを表します。EPSS パーセンタイルはその脆弱性が相対的にどの程度危険かを表したものです。具体的には、EPSS スコアが対象のそれより低い脆弱性の割合を表します。
percentileの値が0.90の脆弱性は、この脆弱性よりEPSS スコアの低い脆弱性が全体で90%存在することを意味します。すなわち、全脆弱性の中で悪用される確率が上位10%に位置している、という意味になります。
EPSS データの取得には、以下2つの方法があります。
上記のFIRSTのwebサイトから入手できます。に「Download the data」というボタンがあり、そこから gz ファイルをダウンロードできます。
この gzip ファイルを解凍して CSV ファイルを入手できます。
但し、この方法では前日分のデータの取得のみになってしまうことに注意が必要です。
なお、Linux 環境を利用している場合は以下のコマンドで直接最新の CSV ファイルを入手できます。
このファイルを開くと以下のような中身になっています。
1行目にバージョンや日付などの情報、2行目にはカラム名、3行目以降にデータが格納されている構造です。
EPSS は公式が提供しているAPIを利用することでも取得可能です。
例えば、CVE-IDが CVE-2023-38408 の脆弱性の EPSS のデータは次で取得できます。response.data にCVE-ID、EPSS スコア、パーセンタイル、日付がそれぞれJSON形式で入っています。
その他の使い方やパラメータの指定方法はFIRST公式をご参照ください。
EPSS は、今後30日間でその脆弱性が悪用される脅威を表すため、EPSS スコアが高い脆弱性に対応できれば、組織のリスクを低減できる可能性があります。
過去の調査結果によると、米国の平均的な組織は新規に検知された脆弱性の約10%程度しかパッチを当てられていないようです2。また、公表されている脆弱性のうち、実際に悪用されるのは2~7%程度とごく一部です。
その場合に EPSS を1つの指標にすることで、効率的に脆弱性へ対応できるようになる可能性があります。
次の図は、公開された全脆弱性の中で、実際に対応した脆弱性の数の割合(Effort)を固定した場合に、CVSS スコアベース・EPSS スコアベースでそれぞれどの程度実際に悪用された脆弱性に対処できたか(Coverage)をシミュレーションした図です1。
CVSS スコアベースで対応する場合、CVSS スコアが9.1以上の脆弱性に対応すると約15%の脆弱性に対応できるが、実際に悪用される脆弱性に対しては約34%しか対応できていない、という結果になっています。CVSSスコアベースでの対処では、「パッチを当ててもそれらの大半は実際に悪用されることはない」ということになります。
一方、EPSS スコアベースで対応する場合、同程度の数の脆弱性に対応するとv2では約70%、v3では約90%の実際に悪用される脆弱性をカバーできます。これは、「実際に悪用される」という観点で脆弱性対応をする場合に、EPSS は CVSS スコアをベースにするよい効率が良い対応指標になると言えます。
その他にも CVSS との大きな違いで、EPSS は毎日最新の情報に基づいてスコアが再計算される、という点があります。CVSS には含まれない「攻撃コードの公開」情報が、 EPSS では日次で反映されるため、よりタイムリーに脅威度の高い脆弱性を見つけることができます。
先述のように、EPSS のデータはあくまで脆弱性の脅威度を表すものであり、リスクではありません。
そのため、CVSS ベースで脆弱性の運用がなかなか回らないように、EPSS スコアもその解決策になるわけではありません。
例えば 「CVSS BaseScore で脆弱性を分類した後に、その分類の中でさらに優先度付けをする指標として使う」といった形で、CVSS スコアと組み合わせて使う方法などがあります。
実データを見るとよく実感できますが、EPSS スコアにはかなりの偏りが見られます。
以下に公式が公開しているブログ記事を引用します。
下記の画像は2022年3月時点における、EPSS スコアの度数分布です。
このグラフを見ると分かりますが、大多数の脆弱性はEPSSスコアが10%以内に集中しています。
これは次の EPSS スコアに対する EPSS パーセンタイルを示したグラフでもよく分かります。
EPSS スコアはその脆弱性が将来的に悪用される脅威を表します。しかし分布に偏りが大きいため、そのスコアだけでは直感的に危険度が分かりにくいです。
そのため、相対値であるパーセンタイルも併記し、「CVE-2023-38408、EPSS:3.65%(上位10%)」のような形で表記をするのが、危険度を直感的に感じる上で良いでしょう。
但し、脆弱性管理の場面での EPSS パーセンタイルの利用についてはまた注意が必要です。この EPSS パーセンタイルはあくまで「公開されている全脆弱性について、EPSS スコアの相対的なランク」を表しており、自組織内における分布を表すものではありません。そのため、EPSS スコアの相対的なランクが全脆弱性内でなのか、自組織内でなのか、誤解が生まれないようにする必要もあります。
本記事では EPSS について、その基礎的な部分を解説するとともに、実際のデータや利用方法などについて解説しました。
「今後その脆弱性が悪用される脅威度」を定量化する EPSS は有用な指標となる可能性があります。
しかし実際に脆弱性対応を運用していく場合、ネットワーク環境情報や資産重要度なども重要なファクターとなります。脅威度だけでなく、これらの要素も考慮したリスクベースでの運用をしていく場合、EPSS のみでは難しく、他の手段が必要になります。
組織で検知した膨大な量の脆弱性に、リスクベースで効率的に脆弱性対応の運用を回していきたい。そのような場合に、SSVC(Stakeholder-Specific Vulnerability Categorization)のような脆弱性対応フレームワークが力を発揮します。この強力な機能である SSVC については、こちらの「ブログ記事」をご参照ください。
以上で、EPSS の基礎的な事項のまとめを終えます。
第2回の記事では、EPSS を実際にFutureVulsに対してどのように組み込み、運用上どのように利用していくと良いかについて解説します。