yamory Blog

NVDの脆弱性情報を活用する上で気をつけたいこと

開発者やセキュリティエンジニアの中には、日々セキュリティのニュースサイトやTwitterで自分たちが利用しているソフトウェアに新しい脆弱性が発見されていないか確認している方も多いかと思います。

もし、自分たちが利用しているソフトウェアに脆弱性がありそうだとわかったら次に何をしていますか?

多くの脆弱性にはCVE IDが割り当てられているため、そのCVE IDを使ってより詳細な情報、正しい情報を調べることと思います。
そして、その際に多くの人が利用するのがアメリカ国立標準技術研究所 NIST が管理する NVD(National Vulnerability Database)のサイトではないでしょうか。

本記事ではNVDの情報だけでの脆弱性調査の課題や、より楽に正しい脆弱性情報を収集するための方法について解説します。

※こちらの内容は2020年4月22日に開催されたDevSecOps勉強会 #1にてお話しした内容と同様のものとなっています。

脆弱性を調査する時のポイント

NVDの調べたいCVE IDのページにアクセスした後、まずはじめに確認するのが「Current Description」の部分になります。
ここでは、以下の3点を確認することができます。

  • どのソフトウェアの
  • どのバージョンに
  • どんな影響があるのか

「Current Description」を確認することで自分たちの利用しているソフトウェアにこの脆弱性が該当するのかどうかの判断を行うことができます。

また、「Known Affected Software Configurations」のCPEの情報を確認するとより細かい該当ソフトウェアとバージョンが示されていることもあります。

次に確認するポイントは、CVSSのBase ScoreやAttack Vectorを含むVector情報になります。
Base Scoreで脆弱性の深刻度を確認し、緊急性が高いかどうかの判断材料にしたり、Attack Vectorを元にネットワーク経由で攻撃される可能性がないかどうか確認すると良いでしょう。

しかし、修正方法・影響バージョンの調査時に、NVDに書かれている情報だけでは判断できない場合もあります。
その場合は「References to Advisories, Solutions, and Tools」の参考情報を確認し、より詳細な情報を得ることができます。

参考情報を確認

参考情報には以下のような情報があります。

  • 脆弱性のPoC(実証コード)の情報 (Exploit Databaseや発見者のブログなど)
  • セキュリティコミュニティサイト(SecurityFocusなど)
  • メーリングリストでの議論(Apacheなど)
  • Github上の Issue / Commit / PullRequest
  • ソフトウェアの提供元サイト

例としてCVE-2010-0364の脆弱性調査・参考情報の確認をしてみたいと思います。
NVDのサイトで「Current Description」を確認することで以下のように該当ソフトウェアとバージョンとどんな脆弱性なのかが確認できます。

  • 該当ソフトウェア:VideoLAN VLC Media Player
  • 該当バージョン:0.8.6
  • 脆弱性情報:execute arbitrary code via an ogg file

次に、「References to Advisories, Solutions, and Tools」の参考情報の中から、例えば「SecurityFocus」の情報を確認します。
SecurityFocusでも以下のような該当のソフトウェアとバージョンを確認することができます。

  • 該当ソフトウェア:VideoLAN VLC Media Player
  • 該当バージョン:0.6.8

よく注意して見てみると該当するバージョンがSecurityFocus(0.6.8)とNVD(0.8.6)で異なっています。
これはどういうことなのか解説していきます。

NVDと参考情報が合わない理由

USENIX Security 2019の論文「Towards the Detection of Inconsistencies in Public Security Vulnerability Reports」を参考にこの現象を説明したいと思います。

先ほどのCVE-2010-0364の別の参考情報(Exploit Databaseなど)で該当バージョンを確認します。
他のどのサイトでも0.8.6が脆弱性のあるバージョンだとしているためやはりNVDの情報が正しいようです。

先ほどの論文ではこれは打ち間違え(typo)によるミスだと指摘しています。
では、NVDと参考情報が一致しない場合は常にNVDの情報を信用すればいいのでしょうか。

NVDの脆弱性情報は常に正しいのか?

もうひとつ例としてCVE-2006-6516の脆弱性調査・参考情報の確認をしてみたいと思います。
先ほどと同様にNVDのサイトで「Current Description」を確認すると以下のように該当ソフトウェアとバージョンと脆弱性情報を確認します。

  • 該当ソフトウェア:Eye of GNOME
  • 該当バージョン:3.16.5, 3.17.x, 3.18.x before 3.18.3, 3.19.x, and 3.20.x before 3.20.4
  • 脆弱性情報:denial of service

次に、「References to Advisories, Solutions, and Tools」の参考情報の中から、「Exploit Database」の情報を確認し、PoCを確認したソフトウェア名とバージョンを確認します。

  • 確認したソフトウェア名:Eye of GNOME
  • 確認したバージョン:3.10.2

今回もExploit Database(3.10.2)とNVD(3.16.5など)で情報が一致しません。
NVDの情報が正しいのでしょうか。

他の参考情報も確認してみましょう。
packet stormとSecurity Focusで確認して結果もやはり3.10.2が該当バージョンだとわかります。
調査の結果、NVDの情報も完全に正しい情報を提供できていないことがわかりました。
では何故このようなことが起こるのでしょうか。

論文では、NVDは情報がアップデートされてないことがあると指摘されています。
公開当時に3.10.2を該当バージョンとしなかった場合、古い情報のままになっていることがあるようです。

最近のCVEでも同様の問題がある

これまでの例では少し古いものをあげていましたが、
最近のCVEでは改善されているかというとそうでもありません。
2020年4月に発見したものを2つ紹介したいと思います。

CVE-2020-7628ではnpmのinstall-packageというライブラリの脆弱性が1.1.6で発生していると書かれています。
しかし、npmやGithubで確認するとそもそも1.1.6というバージョンはなく、最新バージョンが0.4.0となっています。

CVE-2020-7066ではPHPの脆弱性に関して7.2.9、7.3.16、7.4.34にて修正されていると書かれていますが、PHPのChange Logでは7.2.29、7.3.16、7.4.4で修正しているとされているため、2つのバージョンで情報が食い違っています。また、NVDが示している7.4.34はまだ存在しないバージョンです。NVDの情報もtypo(打ち間違え)によるミスが発生している ように思われます。
※ 2020/5/15更新: 2020/04/30時点でCurrent Description、CPEともに修正されました

このように、正しい脆弱性情報を得るためには色々な情報ソースから情報収集し、どの情報が正しいのか検証することが大切です。

しかし、脆弱性ひとつひとつに多くの時間を掛けて調査することは時間も人手もかかる作業です。
より効率的に情報収集をするためには何をすれば良いのでしょうか。

正しい情報を得るためには

より早く正確な情報を得る手段として脆弱性が報告されているソフトウェアの公式サイトで情報を確認する方法があります。
先ほどのPHPの例ではPHPのChange Logを確認することで正確な情報に辿りつくことができました。
しかし、この方法でもいくつか欠点がありますのでご注意ください。

NVDのReferenceに公式サイトの脆弱性情報がリンクされていない

PHPの例でもNVDのReferenceには公式サイトへのリンクがされていないため、公式の脆弱性が公表されているページまで調査をする必要があります。
脆弱性に関する情報がひとつのページにまとめられているサイトもあれば、Change Logの中に修正したCVE IDが記載されているものなど、多くのパターンがあるので見つけることも容易ではありません。

公式サイトで脆弱性情報を公開していない

公式サイトが必ずしも脆弱性情報を公開しているとは限りません。
また、Githubだけで管理されているケースも多くあり、Issueの中でCVE IDが明記されているケースもあまり多くはありません。

ソフトウェアの公式サイトで情報を確認する方法でも時間がかかり、正確な脆弱性情報が見つからないこともあるためベストな方法とは言えません。

脆弱性の正しい情報を得るためのより良い解決策

私が考えるより良い解決策を2つ紹介したいと思います。

商用の脆弱性データベースの活用

解決策のひとつとして商用の脆弱性データベースを利用する方法があります。
商用の脆弱性データベースは、セキュリティの専門家が独自に脆弱性を調査した情報が取り込まれているため、より精度が高く、NVDにはないPoC(攻撃コード)の情報や脆弱性への対応方法なども明記されているものもあります。

脆弱性データベースのみの利用では自分たちが利用しているソフトウェアとの突合作業は発生しますが、精度の高い情報は得ることができるでしょう。

脆弱性スキャナ(SCA)の活用

さらに、自分たちの利用しているソフトウェアの突合まで行なってくれるのが脆弱性スキャナ(SCA)です。
無償の脆弱性スキャナではNVDのデータをそのまま利用しているものもあるため誤検知もありますが、商用の脆弱性スキャナでは自分たちで脆弱性データベースを構築、運用しているケースもあるため、商用の脆弱性データベースと同様に精度の高い情報やNVDにはない付加価値のある情報を得ることもできます。

また、CI / CDに組み込んで利用できるケースもあるため自動で脆弱性の検知を行うことができます。

さいごに

日々の脆弱性ウォッチから正確な調査を行うことは意外と大変な作業です。
脆弱性スキャナなどを活用することでこれらの手間を軽減し、開発サイクルの中で脆弱性の対応を行うことができるようになると良いでしょう。

今回の記事と関連した、CVEやNVDに関する基本的な内容はブログ記事「はじめての方向けCVE入門 CVEIDやMITREなどもまとめて紹介」でも解説しています。合わせてご活用ください。

yamoryでは、これらの作業をCI / CDに組み込み自動化することができるサービスを提供しています。
また、間違った脆弱性を見つけた際にはNVDへ連絡し、正しい情報が世の中に提供されるように協力しています。

脆弱性調査の自動化ができれば開発者は注力したい開発に専念し、セキュリティ担当者も脆弱性の調査以降の部分に時間を掛けることができるようになると考えています。
yamoryによって、少しでも皆様のセキュアな開発をサポートすることができれば幸いです。ぜひ一度お試しください。

オープンソース脆弱性管理ツール yamory

  • 利用中のOSSを抽出し
    脆弱性を自動スキャン
  • 脆弱性への対応優先度を自動で分類
  • 組織規模に合わせたプランを選択可能

フリー

¥0

個人向け

1件ずつ Immediate な脆弱性を管理

1チームまでの開発チーム作成

yamory を使いはじめる

プロ

有料料金はお問い合わせください

中〜大規模組織向け

無制限で Immediate な脆弱性を管理

無制限の開発チーム作成

開発チームを俯瞰できるセキュリティチーム機能

危険な脆弱性の Slack 連携通知機能

特定のソフトウェアの脆弱性一覧を表示

特定の脆弱性を含むソフトウェア一覧を表示

Jira Cloud と連携

30日間の無料トライアルを開始