ログってなんぼ

日々のメモです

CVE情報からサーバーの脆弱性をスキャンできるツールVuls(バルス)

サーバー運営につきもののセキュリティアップデートの管理をどんな感じでやろうか考えていたところ、良さそうなツールに出会いましたので使って見たメモを残しときます

vuls公式

github.com

作者の方のTwitter

twitter.com

日本人の方です。

めちゃめちゃわかりやすいQiitaの神記事

qiita.com

もうここだけ見とけばvulsを体験する上で何の不足もないっす。

即ストックっす。

言い訳

このエントリ自体は"試してみたメモ"の域をでてないので勘弁して下さい。このエントリに有る作業を順番に行っても動きません。つか各種インストール方法は全く書いてません。動作に必要なgolang環境、 インベントリ(監視対象サーバー)の登録やコンフィグの書き方、prepareコマンドについてなど諸々の詳しい情報は上記公式URLのドキュメントが一番確実です。

セットアップ

というわけでここにダラダラとインストール方法を書いても仕方ないので神記事参照を強くおすすめします。

上記Qiitaもしくは公式ドキュメントの通りセットアップすれば何も難しいことはないです。

前準備

$ go-cve-dictionary server 

backgroundでgo-cve-dictionaryを立ち上げておく。バックグラウンドで起動したいとかそういうのはお好みでどーぞ

追記

作者の方からTwitterでリプライいただきました!

事前起動が不要となる実行方法が有るとのことです。特に問題ないなら、こちらのオプションを使ったほうが良さそうです。

初回スキャン時

[DATE TIME] ERROR [localhost] Failed to scan. err: hoge@SERVER_NAME:22: yum-plugin-changelog is not installed

yum-plugin-changelogが入ってないよ〜と怒られました。

prepareサブコマンドで足りないサブモジュールはインストールされると思っていたんですが、なにか間違えたかな? まあいいや、ってことで私はansibleのplaybookに追記してインストールしました。

気を取り直してscan開始

$ vuls scan
INFO[0000] Start scanning
INFO[0000] config: /Users/okisanjp/vuls/config.toml
INFO[0000] cve-dictionary: http://127.0.0.1:1323
[DATE TIME]  INFO [localhost] Validating Config...
[DATE TIME]  INFO [localhost] Detecting Server OS...
[DATE TIME]  INFO [localhost] (1/1) Detected SERVER_NAME: centos 6.6
[DATE TIME]  INFO [localhost] Detecting Container OS...
[DATE TIME]  INFO [localhost] Detecting Platforms...
[DATE TIME]  INFO [localhost] (1/1) SERVER_NAME is running on other
[DATE TIME]  INFO [localhost] Scanning vulnerabilities...
[DATE TIME]  INFO [localhost] Check required packages for scanning...
[DATE TIME]  INFO [localhost] Scanning vulnerable OS packages...
[DATE TIME]  INFO [SERVER_NAME] (1/194) Scanned ConsoleKit-0.4.1-3.el6 -> 0.4.1-6.el6 : [CVE-2010-4664]
[DATE TIME]  INFO [SERVER_NAME] (2/194) Scanned ConsoleKit-libs-0.4.1-3.el6 -> 0.4.1-6.el6 : [CVE-2010-4664]
[DATE TIME]  INFO [SERVER_NAME] (3/194) Scanned abrt-2.0.8-26.el6.centos -> 2.0.8-40.el6.centos : [CVE-2015-5302]

[DATE TIME]  INFO [SERVER_NAME] (81/194) Scanned jasper-libs-1.900.1-15.el6_1.1 -> 1.900.1-16.el6_6.3 : [CVE-2014-8138 CVE-2014-9029 CVE-2014-8157 CVE-2014-8158 CVE-2014-8137]
[DATE TIME]  INFO [SERVER_NAME] (82/194) Scanned kernel-devel-2.6.32-642.el6 -> 2.6.32-642.1.1.el6 : []
[DATE TIME]  INFO [SERVER_NAME] (83/194) Scanned kernel-firmware-2.6.32-504.el6 -> 2.6.32-642.1.1.el6 : [CVE-2014-7842 CVE-2015-5366 CVE-2014-3673 CVE-2015-8543 CVE-2015-8104 CVE-2015-2830 CVE-2015-0239 CVE-2014-7822 CVE-2014-3646 CVE-2014-5471 CVE-2016-2550 CVE-2010-5313 CVE-2014-9420 CVE-2015-8767 CVE-2015-8324 CVE-2015-7613 CVE-2014-3610 CVE-2014-8134 CVE-2014-9419 CVE-2014-3940 CVE-2012-6657 CVE-2015-5156 CVE-2015-3339 CVE-2014-9683 CVE-2014-3690 CVE-2016-0774 CVE-2015-7872 CVE-2015-3636 CVE-2014-8133 CVE-2014-9585 CVE-2014-9529 CVE-2014-3215 CVE-2015-2925 CVE-2014-9322 CVE-2014-4656 CVE-2015-3331 CVE-2014-8884 CVE-2014-6410 CVE-2015-5157 CVE-2014-8369 CVE-2014-3645 CVE-2015-1805 CVE-2015-2922 CVE-2011-5321 CVE-2015-5307 CVE-2015-1593 CVE-2014-7841 CVE-2015-7550 CVE-2015-5364 CVE-2014-8709 CVE-2014-3688 CVE-2014-3687 CVE-2014-8159 CVE-2014-7825 CVE-2014-3611 CVE-2014-9584 CVE-2014-7826 CVE-2014-5472]

インストールされているパッケージに関連したCVEが検出されていきます

[DATE TIME]  INFO [SERVER_NAME] Fetching CVE details...
[DATE TIME]  INFO [SERVER_NAME] Done
[DATE TIME]  INFO [localhost] Scanning vulnerable software specified in the CPE...
[DATE TIME]  INFO [localhost] Insert to DB...
[DATE TIME]  INFO [localhost] Reporting...
SERVER_NAME (centos6.6)
=================
CVE-2014-4877   9.3  (High)     Absolute path traversal vulnerability in GNU Wget before 1.16, when recursion is
                                enabled, allows remote FTP servers to write to arbitrary files, and consequently
                                execute arbitrary code, via a LIST response that references the same filename within
                                two entries, one of which indicates that the filename is for a symlink.
CVE-2015-3331   9.3  (High)     The __driver_rfc4106_decrypt function in arch/x86/crypto/aesni-intel_glue.c in the
                                Linux kernel before 3.19.3 does not properly determine the memory locations used for
                                encrypted data, which allows context-dependent attackers to cause a denial of
                                service (buffer overflow and system crash) or possibly execute arbitrary code by
                                triggering a crypto API call, as demonstrated by use of a libkcapi test program with
                                an AF_ALG(aead) socket.

一通りスキャンが終わるとレポーティングされます

tui(terminal-based user interface)で見てみる

TUIもあるのでそれで見てみると

$ vuls tui

f:id:Okisanjp:20160630171128p:plain

ドキュメントには、vimバインドでハイライトを操作できると書いてありましたが、私の環境だと、jkでは上下に動かずカーソルキーでのみハイライトを動かすことが出来ました。

ちなみに一番下までスクロールしてみたら 133個ヒットしていました。

日本語の情報を取得する

日本語の情報を取得する方法もあります

https://github.com/future-architect/vuls/blob/master/README.ja.md

ここに日本語のREADMEがあるのでその中に詳しく書いてあります。助かります。

TUIは日本語に対応してないようですが、Slack通知とmailは日本語に対応してます。

$ go-cve-dictionary fetchjvn -entire
[DATE TIME]  INFO Fetching CVE information from JVN.
 1 / 1227 [>----------------------------------------------------------------------------------------------------------]   0.08% 4m12s
 61 / 1227 [======>-------------------------------------------------------------------------------------------------------------------------]   4.97% 56m42s

 1227 / 1227 [===================================================================================================================================] 100.00% 0[DATE TIME]  INFO Fetched 61309 CVEs
[DATE TIME]  INFO Opening DB. datafile: /Users/okisanjp/vuls/cve.sqlite3
[DATE TIME]  INFO Migrating DB
[DATE TIME]  INFO Inserting fetched CVEs...
 60889 / 60889 [=============================================================================================================================] 100.00% 9m15s
[DATE TIME]  INFO Refreshed 60878 Jvns.

初回実行は一時間以上かかりました

追記

期待!

差分チェックとスキャン

$ go-cve-dictionary fetchjvn -week && vuls scan -lang=ja

実行結果

[DATE TIME]  INFO [localhost] Scanning vulnerable software specified in the CPE...
[DATE TIME]  INFO [localhost] Insert to DB...
[DATE TIME]  INFO [localhost] Reporting...
SERVER_NAME (centos6.6)
=================
CVE-2015-3331   9.3  (High)     Linux Kernel の arch/x86/crypto/aesni-intel_glue.c 内の __driver_rfc4106_decrypt
                                関数におけるサービス運用妨害 (DoS) の脆弱性
CVE-2015-5600   8.5  (High)     Openssh の sshd の auth2-chall.c 内の kbdint_next_device
                                関数における総当り攻撃を実行される脆弱性
CVE-2014-3673   7.8  (High)     Linux Kernel の SCTP の実装におけるサービス運用妨害 (DoS) の脆弱性
CVE-2014-3687   7.8  (High)     Linux Kernel の SCTP の実装の net/sctp/associola.c の sctp_assoc_lookup_asconf_ack
                                関数におけるサービス運用妨害 (DoS) の脆弱性

日本語はやっぱりわかりやすい(´・ω・`)

更新とチェック

#!/bin/bash -l

set -eu

cd ~/vuls
go-cve-dictionary fetchjvn -week
vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3 -lang=ja -report-slack

-report-slackをつけるとslackへ通知が行きます(Webhookの登録とconfigへの記載が完了している場合)

後はcronなどで日次チェックする感じかな?自分もまだ手探りっす

f:id:Okisanjp:20160630191507p:plain

slackに通知着ました(∩´∀`)∩ワーイ

yum updateした後に再実行してみた

とりあえずすべてのパッケージをアップデートした後、再実行してみました

f:id:Okisanjp:20160701121400p:plain

毎日のメンテナンスが相当楽になりますねこれ。

分析用WebUIもあるそうです

こちらも試してみようと思います(∩´∀`)∩

超おすすめエントリなのでもう一回貼っときますね

qiita.com

実戦上は、何でもかんでもyum -y updateすれば良いってもんじゃないですが、CVEの日常的なチェックと対策ストラテジ&アップデートの実施はサーバー担当者なら永久についてまわる大変重要な仕事なので、少しでも確実にやっていきたいですからこういうツールは本当に助かります