Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

この記事は、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を持っているので、解析などにも利用ができそうです。
この情報を元に可視化をするのも面白いかなと思いました。

以上になります。

引用

hikao
lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。
https://lifull.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした