Vulsを使って脆弱性情報を精査していて気づいたこと

この記事は、[Vuls Advent Calendar 2016](http://qiita.com/advent-calendar/2016/vuls)の1日目の記事です。

# はじめに
システム運用をされている方で、脆弱性情報を収集するために毎日NVD(https://nvd.nist.gov/ )やJVN(https://jvn.jp/ )の更新情報をチェックされている方は多いと思います。

しかし、[Vuls祭り #1](http://vuls-jp.connpass.com/event/38391/)で発表した「[Vulsで危険な脆弱性を最速検知！](http://www.slideshare.net/TakayukiUshida/vulsthe-fastest-detection-of-dangerous-vulnerability-by-vuls)」の中でも触れましたが、それらの情報が常に最新で正しい情報であるとは限りません。半年間Vulsを使っていて気付いた点を書いていきたいと思います。

# vuls tuiの表示で、Scoreが「？」になっている
![image](https://qiita-image-store.s3.amazonaws.com/0/54952/7a9d3d1f-cc5f-810c-865a-66ccfb4680b9.png)

原因として以下のことが考えられます。
1．CVE-ID全部のスコアが「？」になっている。
　→ **NVD**データを取り込んでいない。vuls tuiではNVDのデータを元に表示するので、JVNのデータしか取り込んでいない場合も同様のことになります。 
２．一部だけ「？」になる
　→ NVDのデータを更新していない（or できていない）。
　→ **NVD、JVNにそもそも該当のCVE-IDに関する情報が登録されていない**

ディストリビュータがパッケージを更新していてもNVD、JVNに情報が掲載されるまで時間が掛かる場合があるようです。

- 上記のキャプチャに示した「CVE-2016-1000110」は名前付き脆弱性「httpoxy」として注意喚起（https://www.jpcert.or.jp/at/2016/at160031.html ）されているものですが、2016/12/1現在もNVD、JVNに掲載されていません。
    - RedHat（https://access.redhat.com/security/cve/cve-2016-1000110 ）
        - 2016-07-18に初回公開
    - NVD（https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-1000110 ）
        - 2016/12/1現在「CVE ID Not Found」
    - JVN（http://jvndb.jvn.jp/search/index.php?mode=_vulnerability_search_IA_VulnSearch&keyword=CVE-2016-1000110 ）
        - 2016/12/1現在「該当するデータがありません。」

<div class="alert alert-warning">VulsがScoreを「？」と表示するのは更新パッケージの中にCVE-IDを見つけたが、それに紐づくNVDの情報を見つけられなかった場合です。<strong>決して脆弱性として影響度が低い訳では無いことに注意が必要です。またVulsはNVD・JVNの情報に左右されることなく、このように検知できるという点が重要です。</strong></div>


<div class="alert alert-success">VulsRepoであれば、リンク先を先読みして各サイトに情報があるかどうか表示することができます。</div>

<img width="80%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/54952/4e7f0b75-7a82-754f-739e-2f64ef492659.png">

# NVDとJVNでCVSSスコアが異なる場合がある

情報の更新タイミングによっては、NVDとJVNの間でCVSSスコアや影響パッケージが異なる場合があります。場合によっては数か月異なるままの場合もあるようです。

![image](https://qiita-image-store.s3.amazonaws.com/0/54952/5f673336-6462-3e13-5cee-f216579398d0.png)
https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-5696

![image](https://qiita-image-store.s3.amazonaws.com/0/54952/a62e965b-d439-02f4-ff07-1d8ee831a2bb.png)
http://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-004375.html

<div class="alert alert-success">VulsRepoでは、NVD・JVN両方のデータをタブで切り替えて閲覧することができるため、スコア・サマリーの内容を比較することができます。</div>
<img width="80%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/54952/2a511011-ef3f-3336-0c38-7dbc3c45b940.png">

# 脆弱性対象が変わる
「[Vulsで危険な脆弱性を最速検知！](http://www.slideshare.net/TakayukiUshida/vulsthe-fastest-detection-of-dangerous-vulnerability-by-vuls)」で紹介した事例ですが、元々はApple系製品だけと記載されていたものが、全Linux系OSに範囲が拡大しました。
RedHatが修正パッケージを公開してからNVDの記載内容が修正されるまでに34日間かかりましたが、VulsはRedHatの修正パッケージの公開直後から脆弱性のあるパッケージを正しく検知することが出来ていました。

![image](https://qiita-image-store.s3.amazonaws.com/0/54952/18b8b65e-a643-4973-3c37-5cfa991a2b96.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/54952/9b846ff4-ca78-aa02-0192-7566b6aeb1ff.png)


# CVE-IDが払い出しされたあと詳細が掲載されるまでに年単位で時間がかかっている場合がある

脆弱性が修正されてもNVDに掲載されるまでの期間は様々です。
例えば「CVE−2013−4312」では、CVE MITERにIDが登録されたのは2013/6/12にも関わらず、NVDに初めて詳細が掲載されたのは2016/2/7であり、**970日もかかっています**。CVE-IDの年番が古いからといって混乱することなく、実際に情報が掲載された日時を確認する必要があります。

![image](https://qiita-image-store.s3.amazonaws.com/0/54952/03272b46-c393-4df8-5b27-c9696ada4039.png)
https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4312

# JVNの方が情報公開が早い場合もある

Vuls祭り#1の時の発表（http://www.slideshare.net/jpcert_securecoding/ss-66412794 ）の中で、JVN iPediaはNVDの情報も取り入れているということでしたが、当然JVN独自の情報もあります。
CVE-2016-5195（Dirty COW https://dirtycow.ninja/ ）の情報についてはかなり早い段階（2016/10/25）にJVNへ掲載されました。（NVDは2016/11/10初回公開）

![image](https://qiita-image-store.s3.amazonaws.com/0/54952/61f87049-41a8-8fa6-a2d2-94d4acb0b87a.png)
http://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-005596.html
https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-5195


# さいごに
NVD・JVNの更新情報を追いかけていた時に比べて、VulsとVulsRepoを使うことで格段に早く正確な情報を得ることができるようになりました。特に脆弱性の修正がされているにも関わらず、NVDやJVNに脆弱性情報が長い間掲載がされていないケースがかなりあることに驚きました。
修正済みの脆弱性を確実にチェックし早期に対応するために、Vulsを使って日々チェックしましょう。