Edited at
LIFULLDay 5

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を持っているので、解析などにも利用ができそうです。

この情報を元に可視化をするのも面白いかなと思いました。

以上になります。


引用