セキュリティ
vuls
OriginalLIFULLDay 5

Vulsを使って脆弱性の多い製品一覧を出してみた

この記事は、LIFULL Advent Calendar 2017の5日目の記事です。
こんにちは。
株式会社 LIFULL セキュリティグループの福沢です。

この記事の要約

  • 脆弱性の報告が多い製品について調べたよ
  • Vulsというツールを使ってみたよ
  • 調べた方法と結果をまとめたよ

です :smiley:

背景

自部署では、脆弱性情報の収集と評価をするために、
脆弱性情報データーベースの NVDJVN などから、
その日に報告された脆弱性を確認しています。

脆弱性は日々報告されており、
大体の感覚でいうと1日 50件〜200件 くらい
報告されているのかなという印象です。

脆弱性の情報を毎日見ていて、気づいたことがありました。
それは、

「あれ?この製品の脆弱性がまた出ている。前にもよくみたぞ。」

ということでした。

そこで脆弱性の報告が多い製品ってどういうものなんだろう?
と思ったので、調べてみました。
サービス開発の際に、一つの参考になれば幸いです。
※ なお、脆弱性の報告が多い製品が危険で、
少ない製品が一概に安全という訳ではありません。
よく利用されている有名な製品ほど報告件数は、多くなります。
ので、あしからず:sweat_smile::sweat_drops:

ちなみに 既に脆弱性の多い製品の一覧を出してくれている
以下のようなサイト⬇︎もあります。
CVE Deitals

ただ、特定の期間で絞り込んだり、
cvss(脆弱性の脅威スコア)で絞り込みたい
などの複数の条件で調べたかったので、
今回は、「Vuls」 というツールを使って調査しました。
Vulsについては次に記載します。

Vulsについて

vuls_logo.png

VulsはGolang製で、エージェントレスな脆弱性検知ツールです。
GitHub: https://github.com/future-architect/vuls

vulsの大まかな流れは、以下です。
① 脆弱性情報の収集
② 対象のサーバへスキャン

この「① 脆弱性情報の収集」で収集した情報は、
Vulsサーバ内のsqliteなどのDBに格納されます。
今回は、このDBを利用し、脆弱性の多い製品リストを取得します。

調査方法

【前提】
Vulsをインストールしていること
(インストール方法は、こちらをご覧ください)

Vulsのインストールが終わると、
cve.sqlite3 というファイルができていると思います。
まずは、cve.sqlite3に入ります。

$ sqlite3 cve.sqlite3

以下のようなテーブルがあります。

テーブル名 概要
nvds NVDの情報テーブル
jvns JVN情報テーブル
cpes cpe※情報テーブル

※ cpeは、製品(ハードウェア、ソフトウェア、アプリケーションなど)の識別子

それぞれの構成情報

sqlite> .schema nvds
CREATE TABLE "nvds" ("id" integer primary key autoincrement,"created_at" datetime,"updated_at" datetime,"deleted_at" datetime,"cve_detail_id" integer,"cve_id" varchar(255),"summary" varchar(4096),"score" real,"access_vector" varchar(255),"access_complexity" varchar(255),"authentication" varchar(255),"confidentiality_impact" varchar(255),"integrity_impact" varchar(255),"availability_impact" varchar(255),"cwe_id" varchar(255),"published_date" datetime,"last_modified_date" datetime );
CREATE INDEX idx_nvds_deleted_at ON "nvds"(deleted_at) ;

sqlite> .schema jvns
CREATE TABLE "jvns" ("id" integer primary key autoincrement,"created_at" datetime,"updated_at" datetime,"deleted_at" datetime,"cve_detail_id" integer,"cve_id" varchar(255),"title" varchar(255),"summary" varchar(8192),"jvn_link" varchar(255),"jvn_id" varchar(255),"score" real,"severity" varchar(255),"vector" varchar(255),"published_date" datetime,"last_modified_date" datetime );

sqlite> .schema cpes
CREATE TABLE "cpes" ("id" integer primary key autoincrement,"created_at" datetime,"updated_at" datetime,"deleted_at" datetime,"jvn_id" integer,"nvd_id" integer,"cpe_name" varchar(255),"part" varchar(255),"vendor" varchar(255),"product" varchar(255),"version" varchar(255),"vendor_update" varchar(255),"edition" varchar(255),"language" varchar(255) );
CREATE INDEX idx_cpes_deleted_at ON "cpes"(deleted_at) ;

クエリと結果

2017.11月の脆弱性が多い製品top10
SELECT
    *
FROM
    (
        SELECT
            product,
            COUNT(1) as hits
        FROM
            nvds
            INNER JOIN
                cpes
            ON  nvds.id = cpes.id
        WHERE
            published_date >= "2017-11-01 00:00:00:00-00:00"
        AND published_date <= "2017-11-30 00:00:00-00:00"
        GROUP BY
            product
        ORDER BY
            hits DESC
    )
LIMIT 10
;

2017.11月の脆弱性が多い製品top10

hits product
188 linux_kernel
91 php
57 imagemagick
45 oracle9i
40 vbulletin
33 asterisk
26 imp
25 ethereal
24 cluster_server
24 mailman
2017.1月~11月までの脆弱性が多い製品top10(NVD)
SELECT
    *
FROM
    (
        SELECT
            product,
            COUNT(1) as hits
        FROM
            nvds
            INNER JOIN
                cpes
            ON  nvds.id = cpes.id
        WHERE
            published_date >= "2017-01-01 00:00:00:00-00:00"
        AND published_date <= "2017-11-30 00:00:00-00:00"
        GROUP BY
            product
        ORDER BY
            hits DESC
    )
LIMIT 10
;

2017.1月~11月までの脆弱性が多い製品top10(NVD)

product hits
linux_kernel 2349
ios 646
ethereal 478
php 341
weblogic_server 338
phpbb 282
mac_os_x 248
vbulletin 248
jetty 240
jdk 207
2017.1月~11月までの脆弱性が多い且つcvssが9.0(critical)以上の製品top10
SELECT
    *
FROM
    (
        SELECT
            product,
            COUNT(1) as hits
        FROM
            nvds
            INNER JOIN
                cpes
            ON  nvds.id = cpes.id
        WHERE
            published_date >= "2017-01-01 00:00:00:00-00:00"
        AND published_date <= "2017-11-30 00:00:00-00:00"
        AND score >= 9.0
        GROUP BY
            product
        ORDER BY
            hits DESC
    )
LIMIT 10
;

2017.1月~11月までの脆弱性が多い且つcvssが9.0(critical)以上の製品top10

product hits
linux_kernel 175
ethereal 80
windows_2000 39
gtk%2b 36
vbulletin 36
php 35
jdk 34
weblogic_server 29
ios 26
opera_browser 23

まとめ

Vulsは、脆弱性検知ツールですが、
脆弱性情報DBを持っているので、解析などにも利用ができそうです。
この情報を元に可視化をするのも面白いかなと思いました。

以上になります。

引用