有償脆弱性データベースvFeedの調査その2

[vFeedの調査その1](https://qiita.com/kotakanbe@github/items/69f317883e81d1be983c)の続きです。
> AdventCalendarドリブンで普段調査してくてもできていなかったことを調べてメモっていくシリーズ。
2017年12月時点でのVulsは、インターネット上に公開されているNVD, JVN, OVALの脆弱性データベースを利用している。これらの脆弱性データベースは、対応しているアプリケーションなどの種類が多ければ多いほど、脆弱性情報の掲載が早ければ早いほどVulsにとっては有益であり、具体的には
検知精度が向上(CPENameを使った脆弱性情報の検索時)する
レポートに表示する情報がリッチになる
という利点がある。
今回はvFeedという脆弱性データベースがあるという情報を入手したので、vFeedについて調べた結果をメモ代わりに書いておく。


# get_certvn : retrieve information related to advisories issued by the CERT-VN

https://vfeed.io/docs/#3614
CERT/CCのリンクを取得可能。

```
python vfeedcli.py --method get_certvn CVE-2013-3611                                                                                                                                  Wed Dec 13 15:20:33 2017
[
  {
    "id": "VU#705004",
    "url": "http://www.kb.cert.org/vuls/id/705004"
  }
]
```

このCERT/CCのリンクは、NVDのデータにも存在するのでVulsではCERT/CCのリンクをレポートに表示してもよいかもしれない。
CERT/CCの情報をVulsでキャッシュしてレポートに組み込みたいけど、APIもないしファイルとしても存在しない（見つけられなかった）、残念。
http://www.kb.cert.org/vuls/

# vFeedのget_severityのtopValunerableとtopAlertの意味が判明

[前回のvFeed調査その1](https://qiita.com/kotakanbe@github/items/69f317883e81d1be983c#cve-id%E3%81%AEseverity)で謎だった、この２つの意味がわかった。

## topAlert
- OWASP Top 10や、CWE 2011 Top 25に該当するCWE場合にこのフラグがTrueになる

 https://github.com/toolswatch/vFeed/blob/46d8aa9e83e78e73c83ddc70674041425513cfb8/lib/core/methods/risk.py#L87

```
        top_category = ['CWE-929', 'CWE-930', 'CWE-931', 'CWE-932', 'CWE-933', 'CWE-934', 'CWE-935', 'CWE-936',
                        'CWE-937', 'CWE-938', 'CWE-810', 'CWE-811', 'CWE-812', 'CWE-813', 'CWE-814', 'CWE-815',
                        'CWE-816', 'CWE-817', 'CWE-818', 'CWE-819', 'CWE-864', 'CWE-865', 'CWE-691']

        """
        CWE-864 --> 2011 Top 25 - Insecure Interaction Between Components
        CWE-865 --> 2011 Top 25 - Risky Resource Management
        CWE-691 --> Insufficient Control Flow Management
        CWE-810 --> OWASP Top Ten 2010 Category A1 - Injection
        CWE-811 --> OWASP Top Ten 2010 Category A2 - Cross-Site Scripting (XSS)
        CWE-812 --> OWASP Top Ten 2010 Category A3 - Broken Authentication and Session Management
        CWE-813 --> OWASP Top Ten 2010 Category A4 - Insecure Direct Object References
        CWE-814 --> OWASP Top Ten 2010 Category A5 - Cross Site Request Forgery (CSRF)
        CWE-815 --> OWASP Top Ten 2010 Category A6 - Security Misconfiguration
        CWE-816 --> OWASP Top Ten 2010 Category A7 - Insecure Cryptographic Storage
        CWE-817 --> OWASP Top Ten 2010 Category A8 - Failure to Restrict URL Access
        CWE-818 --> OWASP Top Ten 2010 Category A9 - Insufficient Transport Layer Protection
        CWE-819 --> OWASP Top Ten 2010 Category A10 - Unvalidated Redirects and Forwards
        CWE-929 --> OWASP Top Ten 2013 Category A1 - Injection
        CWE-930 --> OWASP Top Ten 2013 Category A2 - Broken Authentication and Session Management
        CWE-931 --> OWASP Top Ten 2013 Category A3 - Cross-Site Scripting (XSS)
        CWE-932 --> OWASP Top Ten 2013 Category A4 - Insecure Direct Object References
        CWE-933 --> OWASP Top Ten 2013 Category A5 - Security Misconfiguration
        CWE-934 --> OWASP Top Ten 2013 Category A6 - Sensitive Data Exposure
        CWE-935 --> OWASP Top Ten 2013 Category A7 - Missing Function Level Access Control
        CWE-936 --> OWASP Top Ten 2013 Category A8 - Cross-Site Request Forgery (CSRF)
        CWE-937 --> OWASP Top Ten 2013 Category A9 - Using Components with Known Vulnerabilities
        CWE-938 --> OWASP Top Ten 2013 Category A10 - Unvalidated Redirects and Forwards
        """

```

Vulsとしては[OWASP TOP 10 -2017 PDF](https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf)に載ってるCWEをマークしてレポート時に表示してもいいかもな。


## topVulunerable

https://github.com/toolswatch/vFeed/blob/46d8aa9e83e78e73c83ddc70674041425513cfb8/lib/core/methods/risk.py#L53-L56

- base scoreと、exploitabilityと、impactが全部10のときにTrueになる

```
        elif cvss_data[0]["base"] == "10.0" and cvss_data[0]["exploitability"] == "10.0" and cvss_data[0][
            "impact"] == "10.0":
            self.level = "high"
            self.top_vulnerable = True
```

VulsとしてはExploitability, impactの値が、2017/12時点でVulsが参照する脆弱性DBである、NVD, JVN, OVALにはないので、vFeedをデータソースとすることではじめて付加できる情報。
だが、この情報を出す意味がそれほどあるのか、ユーザの意見を聞きたいところ。

# あとは、この辺のExploitのあるなしが使えるかな〜。
https://vfeed.io/docs/#5-6-exploitation-scripts

- [Exploit-Database](https://www.exploit-db.com/)
    - CVE-IDとのマッピングができるのはいいなぁー
    - と思ったけど、NVDにも情報あるね。でもNVDは更新が遅いんだろうな（予想）

```
    <vuln:references xml:lang="en" reference_type="UNKNOWN">
      <vuln:source>EXPLOIT-DB</vuln:source>
      <vuln:reference href="https://www.exploit-db.com/exploits/41363/" xml:lang="en">41363</vuln:reference>
    </vuln:references>
```

- Metasploit FW
    - get_msf : retrieve the appropriate information about the Metasploit exploit or plugin.
    - https://github.com/rapid7/metasploit-framework


```
python vfeedcli.py --method get_msf CVE-2010-2743                                                                                                                             [
  {
    "file": "metasploit-framework/modules/post/windows/escalate/ms10_073_kbdlayout.rb",
    "id": "ms10_073_kbdlayout.rb",
    "title": "Windows Escalate NtUserLoadKeyboardLayoutEx Privilege Escalation"
  }
]
```


他にはとくにvFeedで使えそうな情報はなさげかなー。

というわけでvFeed特有の情報はそれほどないので、VulsをvFeedに対応させるぜ！というモチベーションはそれほどなくなっちゃったけど、

- Exploitの有無の情報がNVDよりも爆速
- CVE脆弱性情報がNVDよりも爆速
- 言語系ライブラリの掲載件数めっさ多い

なら対応してもいいかもなぁーくらいですが、このへんはやっぱりVulnDBが最強なのかなー。高いけど。

# まとめ
その1, その2の二日間でvFeedの調査をしてきて、思いついたVuls改善策をメモっとくよ。

- レポートにCERT/CCのリンク入れる
- CWE情報(英語日本語の説明)をgo-cve-dictionaryにテーブル追加、さらにOWASP TOP 10 - 2017に対応するCWEですよって警告
- Exploit-DBのリンクは目立たせてもよい(CVE-IDとの関連はNVDのreferencesで可能。ほかのソースでExploit-DBとCVE-IDのヒモ付ができて、NVDよりもフレッシュならそっちでやる）
- MetasploitFWのリンクも目立たせたい。コマンドか、metasploitのDB検索すりゃできそう。
    - metasploitのDBはSQLite3を選択できそう
    - http://www.computerweekly.com/tip/Metasploit-tutorial-3-Database-configuration-post-exploit-affairs

そろそろvFeed飽きてきたので、次は[VulDB](https://vuldb.com/)(VulnDBではない)の調査をする。