この記事は、Vuls Advent Calendar 2016の6日目の記事です。
こんにちは、サウナおじさんです。
5日目の記事\( ´・ω・)/°\(・ω・`)/バルス!!!ではイカサマを晒されて、あたしゃびっくりしたねぇ。タイトルからして、さてはネタ決まってねぇなこいつ、と思っていたけど、予感は的中するもんだねぇ。でも面白かったからまあいいや。
さて、Vulsアドベントカレンダーでは今後も何回か投稿する予定だけど、あたしのテーマは前からやろうとしていてなかなかできていなかった、他の脆弱性スキャナはどーやってスキャンしてんのさ?を追っていくよ。
今回は一発目としてcoreos/clairのCentOSのスキャン処理を追ってみるね。
Clairは静的スキャン、Vulsは動的スキャン
CoreOS/ClairはCoreOS社が開発している、コンテナイメージを対象とした静的な脆弱性スキャナ。静的な脆弱性スキャナなので稼働中のコンテナではなくイメージをスキャンするのが特徴。詳細はREADMEを参照してね。
なお、VulsもDockerコンテナの脆弱性スキャンは可能だが、clairと異なり動的なスキャナである。稼働中のDockerコンテナが対象であり、Docker HostにSSH接続し、docker execを使って脆弱性をスキャンする。詳細はVuls READMEを参照してね。
clairの一般的なユースケースは手動でのスキャンとContainer Registory統合の2パターン。詳細はREADME参照してね。
さて、今回はclairがどうやってCentOSの脆弱性をスキャンしているのか、どの脆弱性データソースを用いているのか、を追ってみるね。
脆弱性情報データソース
Clairは検知したCVE-IDをNVDやディストリビューションが提供するセキュリティ情報を用いてレポーティングしているよ。Vulsと似ているね。
- READMEに表があるよ。
- CentOS用にはReHat Customer Portal Security Dataをデータソースとして利用していると書いてあるね。
RedHatのサイトにはCVRFとOVALという2種類のデータフォーマットで脆弱性情報が提供されているね。
-
CVRF Documents
- Common Vulnerability Reporting Framework (CVRF)
- 本家
-
OVAL Definitions
あたしゃCVRFは初耳だよ。
ん?
良く見たらReHat Customer Portal Security Dataに使えそうなデータたくさんあるやんかいさ
ClairのCentOSスキャンの内部処理おっていこうと思ったけど、あたしゃ気が変わっちゃったよ。また今度でいいや。
だってVulsの検知精度、レポーティング精度向上に使えそうなお宝データ見つけちゃったんだもの。あたしゃラッキーだねぇ。
CVE to date, CVE to severity, CVE to CVSS mapping
CVE-IDがキーで、以下の情報がある
- 公開日
- 深刻度
- CVSS V2 socre
- CVSS V2 vector
- CVSS V3 score
- CVSS V3 vector
この情報マジでぱねぇ
今まではNVD上にCVE-IDは採番されているけど情報がない、でもRedHatやUbuntuのサポートサイトなどには脆弱性情報がある、という脆弱性はVuls上では「?」として表示していたけど、この情報使えばNVDに情報ないものでもCVSS Scoreとか出せるじゃん。「?」に関してはVulsを使って脆弱性情報を精査していて気づいたことに詳しくかいてあるよ。
あと、CVSS v3はNVDのXML, JVNのXMLには情報がないので出せなかったんだけど、これ使えばいけるやん。
RHSA to CVE and CPE mapping
VulsはCPEを指定すれば、OSパッケージマネージャ管理外のソフトウェア、たとえばコンパイルしていれたものやプログラミング言語のライブラリ、ルータなどのN/W機器のOSなどの脆弱性も検知出来るんだけど詳細はREADME参照、現状だと、CPE-CVEの情報源として、NVDの脆弱性データベースのみを使っているんだよ。NVDの情報と合わせてこれも使えば、さらに精度高まるかも。
というわけで
Clairの内部追うぜとやる気満々でしたが、お宝見つけちゃってそれどころじゃなくなっちゃったよ。この情報使えば、現状「?」で表示されているものが少なくなると思うよ。近い将来実装するから楽しみにしていてね!じゃ、またね!
Vuls Advent Calendar 7日目はhogehogehugahugaさんです。よろしくお願いします。