
みなさんこんにちは、長谷川まりです。
近年、VPN機器のセキュリティホール(以下、脆弱性と表記します)を突かれて社内ネットワークに侵入されたり、Windows Updateを怠ったドメインコントローラが乗っ取られ多くの業務サーバがランサムウェアに感染させられたり、といった手口のサイバー攻撃が増えています。
このような被害を受けないようにするための「脆弱性管理」について何回かに分けてお送りします。
たくさん見つかりすぎる脆弱性
突然ですが問題です。
脆弱性って、1年間でいくつぐらい見つかるものでしょうか?
下にグラフを載せていますが、数年前までは年間数千件程度で増減しながら緩やかに増えていましたが、2017年に1万件を突破、以後どんどん増えて昨年2020年は18,352件も見つかっています。
[グラフ]1年間に見つかった脆弱性件数(最近20年分)

脆弱性を管理する組織や機関は世界各国に存在しますが、ここではアメリカのNIST(National Institute of Standards and Technology/国立標準技術研究所)が管理している「NVD」(National Vulnerability Database/脆弱性データベース、https://nvd.nist.gov)から、脆弱性情報としてリリースされた件数をグラフにしています。
NVDの場合、脆弱性情報が発見されると「CVE」(Common Vulnerabilities and Exposures、共通脆弱性識別子)という一意の番号が振られ、併せて「CVSS」(Common Vulnerability Scoring System、共通脆弱性評価システム)という、脆弱性の「重大度」が数値化されたものが公開されます。
さて、上記のグラフ、何だか凸凹していて分かりづらいですが、縦軸を対数にすると、波打ちながらも直線的に右肩上がりになっているように見えます(下図グラフの点線)。
[グラフ]1年間に見つかった脆弱性件数(最近20年分)※対数軸で表示

この点線の式を求めると、こんな数式になりました。
Y=2044.4e0.1077x
※X…2001年からの経過年数
Y…その年の1年間に見つかる脆弱性件数
e…自然対数の底(2.718281828…)
この式が正しければ、1年間に見つかる脆弱性の数が2026年には3万件を突破し、2038年には10万件を超える、なんていう暗黒の未来が待っている…のかもしれません。
たくさん見つかるなら、絞り込めばいいじゃない
そんな未来予測はさておいて、今の時点で既に1年間に1万何千件も脆弱性が見つかっているわけですから、その「全て」を調べて対処する、なんてことは難しそうです。どうすれば良いでしょうか?
前述の通りNVDで公開されている脆弱性情報には「CVSS」という“重大度”を示すスコアが付いています。多すぎるなら、重要なものだけを選んで対処すれば良さそうです。
このCVSS値、重大度が最も低い「0」から、最も高い「10.0」までの数字で表現されており、このように区分されています。
※厳密にはCVSSにはv2とv3があり、さらに「基本値」「現状値」「環境値」という分類が存在しますが、ここではCVSSv2とv3の基本値を取り上げています
[表]CVSS基本値と重大度区分
CVSSv2基本値 | 重大度 |
7.0以上 | 高 |
4.0~6.9 | 中 |
3.9未満 | 低 |
CVSSv3基本値 | 重大度 |
9.0以上 | 致命的 |
7.0~8.9 | 高 |
4.0~6.9 | 中 |
0.1~3.9 | 低 |
0.0 | なし |
「NVD - Vulnerability Metrics」(nist.gov) より
https://nvd.nist.gov/vuln-metrics/cvss
一般的に、脆弱性管理が業務として行われている場合、「CVSS7.0以上の脆弱性が発見されたら対処する」のような社内ルールで運用される場合もあるかもしれません。しかし、発見された脆弱性の中でCVSS7.0以上のものの割合は、実は約50~60%ほどもあるのです。
年間数千件…という数字は、人手で対処するには多すぎますよね。
脆弱性から見るCVSS値
じゃあ、「CVSS値の一番大きいものから順番にとにかく対処する」なんてやり方ならどうでしょう?順番に並べて、一番重大なものからとにかく対処すれば、最低限の脆弱性管理ができるのでしょうか?
ここで、今までに発見され世間を騒がせた脆弱性と、そのCVSS値を見てみたいと思います。こうして眺めてみると、CVSS値の高い脆弱性だけが攻撃に利用されているわけではないことが分かります。それに、同じCVSS値でもv2とv3とでは微妙に異なっています。セキュリティ担当としても、どっちの数字を見ればいいのか迷ってしまいますね。
[表]近年発見された主な脆弱性と影響、およびCVSS基本値
CVE番号 | 概要 | 主な影響 | CVSS | |
v2 | v3 | |||
CVE-2017-0144 | Windows SMBのリモートでコードが実行される | WannaCryの流行(2017年) | 9.3 | 8.1 |
CVE-2017-11882 | Microsoft Office数式エディタのスタックバッファオーバーフローの脆弱性 | 様々なマルウェア | 9.3 | 7.8 |
CVE-2018-8174 | Windows VBScriptエンジンのリモートでコードが実行される脆弱性 | 7.6 | 7.5 | |
CVE-2019-11510 | Pulse Secureで任意のファイルが読み出される | Pulse SecureのVPNパスワード流出事件(2020年) | 7.5 | 10.0 |
CVE-2019-11539 | Pulse Secureの管理インターフェースにログインしたユーザによって任意のコマンドを実行される脆弱性 | 6.5 | 7.2 | |
CVE-2019-11540 | Pulse Secureでリモートの攻撃者によるセッションハイジャックの脆弱性 | 7.5 | 9.8 | |
CVE-2020-1472 | Netlogonの特権の昇格の脆弱性 | いわゆるZelologonの脆弱性 | 9.3 | 10.0 |
なぜ、CVSS値の高い脆弱性だけが、攻撃に利用されているわけではないのでしょうか。
攻撃者にとって重要なのは、その脆弱性が「重大かどうか」ではなく「利用しやすいかどうか」だからです。攻撃者は、1つの脆弱性を攻撃すればそれで完了というわけではありません。ターゲットのPCをマルウェアに感染させ操ったり、社内LANに侵入したり、ドメインのAdministrator権限を奪ったり…。脆弱性の攻撃は、単にサイバー攻撃の始まりであり、「足がかり」ができさえすればそれで良いからなのですね。
では、CVSS値は意味のない数字なのでしょうか?脆弱性管理には役に立たないのでしょうか?
いえ、決してそんなことはありません。例えば最近見つかった以下の脆弱性、個別にどんな脆弱性かを調べ、重大度を判断して…ということをするのはもちろん有意義なことで、CVSS値は多いに参考になる指標です。
[表]2021年に発見された主な脆弱性とCVSS基本値
CVE番号 | 概要 | 主な影響 | CVSS | |
v2 | v3 | |||
CVE-2021-26411 | Internet Explorerのメモリ破損の脆弱性(2021年3月) | ??? | 5.1 | 7.5 |
CVE-2021-31956 | Windows NTFSの権限昇格の脆弱性(2021年6月) | ??? | 9.3 | 7.8 |
CVE-2021-34527 | Windows Print Spoolerサービスのリモートコード実行の脆弱性 | ??? | 9.0 | 8.8 |
ただし…、これらの脆弱性がこの先どんな攻撃に悪用されるのか、あるいはされないのか?については、残念ながら、攻撃者でないと、知りようがないことなのです。
まりから一言
今回は、脆弱性は年間1万何千件以上も見つかっており、「CVSS値」という、脆弱性の「重大度」を表す数字があるということをご紹介しました。一方で、攻撃者は必ずしも「重大な」(=CVSS値の高い)脆弱性ばかりを狙うわけではないこと、「攻撃者にとって利用しやすいかどうか」が重要であるということをお伝えしました。
では、「利用しやすいかどうか」なんてどうやったら判断できるのでしょうか?次回は改めてCVSS値の計算の仕組みを紐解きながら、脆弱性管理に本当に役に立つCVSS値の使い方を見ていきます。
→アシストの脆弱性管理製品については、Tenable のページをご覧ください