脆弱性、それは、プログラムの不具合や設計上のミスが原因となって発生した情報セキュリティ上の欠陥のことであり、ソフトウェア開発ベンダーとしては、本来は隠したいものです。
実際、少し前まではセキュリティパッチのリリースは頻繁にあっても、どのような問題であったのか詳しく公開されることはありませんでした。しかし、「脆弱性は全ての情報が詳細にわたって一般に公開されているべき」とするフルディスクロージャ運動の広がりにより、今では脆弱性に関する情報は広く公開されるようになりました。
ただ、脆弱性情報が公開されるようになったとは言え、それは我々ソフトウェア利用者が労せず参照できるようになっていなければ、あまり意味をなしません。
そこで生まれたのが、脆弱性情報データベースです。様々なソフトウェアの脆弱性関する情報が一か所に一元管理されたことで、今では脆弱性に関する情報を入手しやすくなっています。
今回は、その脆弱性情報データベースの活用方法について考えていきます。
脆弱性情報データベースの種類
脆弱性情報データベースは、ひとつではありません。各国様々な組織・団体がそれぞれ収集した脆弱性情報をデータベース化し、一般に公開しています。その中で、代表的なものとして以下が挙げられます。
- Common Vulnerabilities and Exposures (CVE)
- National Vulnerability Database (NVD)
- Japan Vulnerability Notes (JVN)
- JVN iPedia
- Open Source Vulnerability Database (OSVDB)
Common Vulnerabilities and Exposures (CVE)
アメリカのMITRE社が管理する脆弱性情報データベースであり、内容がベンダー依存でないことが特徴と言えます。
脆弱性を識別する一意な番号となるCVE番号を割り当てており、この番号は、他のデータベースでも使われています。これにより、脆弱性を世界共通で一意に識別することが可能になっています。
2013年までのCVE番号は、「CVE-西暦年-4桁通番」の形式で割り振られていましたが、脆弱性の数が年々増加し、ついには年間で1万件を超えて4桁では足りなくなることが確実となったことから、2014年1月1日からは、通番部分が4桁以上と改定されています。
National Vulnerability Database (NVD)
NISTが管理している脆弱性情報データベースです。NISTはMITRE社のスポンサーでもあることから、CVEとの関連も深く、CVEで命名された脆弱性情報の詳細情報をNVDで提供するという住み分けを行なっています。CVSSによる脆弱性のスコアも出しており、とても便利なデータベースと言えます。
NVDとCVEとの具体的な違いや役割については、次のように説明されています。
CVEは、一般大衆に公開されているサイバーセキュリティの脆弱性と暴露のリストであって、無料で検索や使用、製品・サービスに組み込むことができるものである。一方、NVDは、CVEのリストにさらなる解析やデータベース、詳細な検索エンジンなどを追加したものである。NVDはCVEと同期しているので、CVEの更新があると直ちにNVDの情報も更新が行われる。
Japan Vulnerability Notes (JVN)
JPCERT/CCと情報処理推進機構(IPA)が共同で管理している脆弱性情報データベースです。CVEはアメリカで管理されているため、日本での脆弱性情報が網羅されているわけではありません。その点、JVNは日本の脆弱性情報に焦点を置いたものとなっています。
JVN iPedia
JVNと同じ団体によって管理されている脆弱性情報データベースです。
JVNとJVN iPediaの大きな違いは、脆弱性情報の収集範囲と公開タイミングにあると説明されています。
JVNの提供する情報の対象範囲はJPCERT/CCの活動が中心となっているものである。つまり、JPCERT/CCに届けられた脆弱性情報に加えて、JPCERT/CCと協力関係にある他国の脆弱性情報管理団体が提供する情報などが対象となっている。対して、JVN iPediaは「日々発見される脆弱性対策情報を適宜収集・蓄積」することを目的としており、対象範囲はJVNのものに加えて日本国内製品、日本に流通している製品も含まれる。JVN以外の情報は、日本国内ベンダーやNVDから得ている。
つまり、JVN iPediaはJVNよりもさらに日本向け情報に特化したデータベースと言えます。また、JVN iPediaはCVSSのスコアも算出して、公開しています。
Open Source Vulnerability Database (OSVDB)
オープンソースプロジェクトとして作成された脆弱性情報データベースです。セキュリティに携わるコミュニティが中立的な脆弱性のデータベースを運営すること目的としています。
脆弱性情報データベースの情報は正確なのか?
脆弱性情報データベースから情報を得る際のポイントは以下3点と言えます。
- なんのソフトウェアの
- どのバージョンに
- どのような影響があるのか
この3点から、その脆弱性が自分たちが利用しているソフトウェアに該当しているのかの切り分け、どのような影響を受けるのかを知ることができるわけです。
NVDやJVN iPediaはCVSSの基本スコアも公開しているので、深刻度の確認もしやすくなっています。
その基本スコアって脆弱性データベースによって違ってたりしませんか?
NVDやJVNといったデータベースを管理す組織・団体は脆弱性情報をベンダーから得ており、かつ互いに情報を共有しあっているため、基本的にスコアがまちまちになることはないようです。ただ、全ての脆弱性についてスコアを出しているわけでもありません。
では、情報は一致しているわけですね!
基本的にはそうですが、全てがそうというわけではありません。脆弱性情報は常に更新されます。そのため、あるデータベースは古い情報しかないといったことはあります。また、過去には入力間違いなどもあったそうです。
やはり、正確な脆弱性情報を得るためには色々な情報ソースから情報を収集し、どの情報が正しいのか検証することも必要です。
素早く正確な脆弱性情報を得る手段
脆弱性情報はいち早く入手し、対策を講じる必要があります。しかしそういった情報は、我々エンジニアより、ハッカーたちの方が関心が高く、アンテナ強度も高いのが実状です。ゼロデイ攻撃といった、セキュリティパッチが提供される前の攻撃が成立するのも頷けます。
しかし、我々エンジニアとしては、日々の業務の傍らで行うことになり、そこばかりに注力するわけにもいきません。そんなときに有効な手段として何があるのでしょうか。
商用の脆弱性情報データベースを活用する
NVDやJVN iPediaに公開されている脆弱性情報は誰でも無料で参照でき、とても重宝しますが、営利目的ではないということも忘れてはいけません。
営利目的であれば、セキュリティの専門家を雇うといったことができます。実際、商用の脆弱性情報データベースは存在し、セキュリティの専門家が独自に脆弱性を調査した情報が取り込まれているため、より精度が高い情報を得ることができます。
ちなみに大手SI企業などではそういったデータベースを独自に持っていたりします。
脆弱性スキャナ(SCA)を活用する
脆弱性スキャナとは、システムにアクセスし、外部から悪用可能な脆弱性を発見するソフトウェアのことです。ネットワーク上の指定されたホストに対して擬似的に様々な攻撃をしかけ、稼働中のソフトウェアの欠陥や、不適切なアクセス権限(パーミッション)が設定されたファイルやディレクトリなど、攻撃者に悪用される危険性のある問題点を洗い出してくれます。本番稼働前のペネトレーションテストでは必ず使われるツールです。
でも、本番稼働中のシステム対して、そんなことして良いんですか?そもそも日々見つかっている脆弱性をホントに発見できるんですか?
まず、前者についてですが、当然ですが、やらずに済むのであればやらない方が良いに決まっています。スキャンをトリガーに、潜在していた不具合が表に出てきて、システム障害を引き起こしてしまうことも十分にあり得るからです。後者については実際に攻撃をしかけるといった動的な手段では不可能と言えます。ただ、脆弱性スキャナは情報収集機能も持っていることが多いです。
各脆弱性情報データベースから、ソフトウェアの脆弱性情報や最新セキュリティパッチの提供状況を収集し、利用しているソフトウェアに含まれる既知の脆弱性の一覧を出力します。脆弱性のあるライブラリ名、バージョン情報、ライブラリ毎の脆弱性の数をまとめて確認することができます。
この情報収集機能を利用して、システム管理者が静的に脆弱性の有無を発見することができます。そういった作業を手作業でやるとすごく大変ですし、どうしてもスピードが遅くなってしまうので、とても有用なツールです。
※本来、脆弱性スキャナとは、実際に攻撃して脆弱性を発見するツールのことを指していたと思いますが、情報収集機能のみを持つツールも「脆弱性スキャナ」と呼ばれることも多いようです。