脆弱性検知ツールVulsの導入まで

More than 3 years have passed since last update.


はじめに

Qiitaを巡回していたら、Vulsなるツールがイケてるとの記事を見つけた。

丁度、個人遊び用にさくらのVPS(月10k以下のお安いやつ)を今更使い始め、

サーバの脆弱性情報を見てみるのも有りかなと思い立った為、

このVulsを導入するまでの流れを纏めた。

全く関係ない話ですが、個人的にVuls(バルス)=滅びというイメージが先行した為、

サーバが崩壊するんじゃないかと密かに思ってたり。

逆に崩壊からサーバを救うツールってことなのかな?って思ってみたりもしたり(´・ω・`)

全くもって無駄話でしたね。

Qiita巡回中に出会った投稿

あなたのサーバは本当に安全ですか?今もっともイケてる脆弱性検知ツールVulsを使ってみた


Vulsってなんぞや?

この辺りの説明はGithub上の日本語のREADME.ja.mdに丁寧に記載されてますね。

VULnerability Scanner → 略して Vuls です。

文字通り、脆弱性を読み取るツールで、Golang製です。

どうやらサーバは崩壊しないみたい・・・。


Vulsって何してくれるの?

日本語のREADME.ja.mdの「Main Features」より抜粋


1.Linuxサーバに存在する脆弱性をスキャン

  → Ubuntu, Debian, CentOS, Amazon Linux, RHELに対応

  → クラウド、オンプレミス、Docker

2.OSパッケージ管理対象外のミドルウェアをスキャン

  → プログラミング言語のライブラリやフレームワーク、ミドルウェアの脆弱性スキャン

  → CPEに登録されているソフトウェアが対象

3.エージェントレスアーキテクチャ

  → スキャン対象サーバにSSH接続可能なマシン1台にセットアップするだけで動作

4.設定ファイルのテンプレート自動生成

  → CIDRを指定してサーバを自動検出、設定ファイルのテンプレートを生成

5.EmailやSlackで通知可能(日本語でのレポートも可能)

6.付属するTerminal-Based User Interfaceビューアでは、Vim風キーバインドでスキャン結果を参照可能


ほうほう。

普段使ってるmacとかにvuls入れるだけで、

ssh接続出来る複数サーバの脆弱性チェックが纏めて出来ると・・・。

しかも、日本語のレポート作ってメールやslackに通知してくれると・・・。

優秀 \(゚∀゚)/

早速、入れてみよう。


環境情報


  • SSH接続可能なマシン

OS
OSX El Capitan

バージョン
10.11.4


  • スキャン対象サーバ

OS
CentOS

バージョン
6.7


golang用環境構築


  • gokangのインストール

$ brew install go


  • バージョン確認

$ go version

go version go1.6.2 darwin/amd64
$


  • golang用環境変数設定

$ cat ~/.bash_profile

export GOROOT=/usr/local/Cellar/go/1.6.2/libexec
export GOPATH=$HOME/vuls/go
export PATH=$PATH:$GOROOT:$GOPATH/bin
export PATH=$PATH:/usr/local/opt/go/libexec/bin


  • 環境変数読み込み

$ source ~/.bash_profile 


Vuls用環境構築


  • Vulsログ格納ディレクトリ作成

$ sudo mkdir /var/log/vuls

$ sudo chown $(whoami) /var/log/vuls
$ sudo chmod 700 /var/log/vuls


  • 作業用ディレクトリ作成

$ mkdir /Users/tatsuno/vuls

$ cd /Users/tatsuno/vuls


  • go-cve-directionaryのダウンロード

$ go get github.com/kotakanbe/go-cve-dictionary


  • JVNから日本語の脆弱性情報を取得

// 期間指定:全て

// 取得時間:ネット環境によっては1時間以上かかる可能性有り
$ go-cve-dictionary fetchjvn -entire

// 期間指定:2002年〜2016年
// 取得時間:約30分
$ for i in {2002..2016}; do go-cve-dictionary fetchnvd -years $i; done

// 期間指定:直近1ヶ月
// 取得時間:数分
$ go-cve-dictionary fetchjvn -month

// 期間指定:直近1週間
// 取得時間:数分
$ go-cve-dictionary fetchjvn -week

// 取得ファイル:cve.sqlite3


  • go-cve-dictionary サーバを起動

$ go-cve-dictionary server


Vuls構築


  • vuls本体のダウンロード

$ go get github.com/future-architect/vuls


  • configファイル設定

今回はサーバ情報のみですが、メール通知設定等もここで設定する感じです。

その他の設定方法は、README.mdの「Configuration」を参照。

$ cat config.toml

[servers]
[servers.XXX-XXX-XXX-XXX]
host = "XXX.XXX.XXX.XXX"
port = "22"
user = "tatsuno"
keyPath = "/Users/tatsuno/.ssh/id_rsa"
$


  • サーバ接続確認

引数は vuls prepare -help で確認出来ます。

CentOS6,7はプラグインをrootでインストールする必要がある為、

-ask-sudo-password を追加しています。

その他OSの詳細は、README.mdの「Usage: Prepare」を参照。

追加プラグイン:yum-plugin-security, yum-plugin-changelog

$ vuls prepare -ask-sudo-password // 最後にSuccessって表示さればおk


  • スキャン実施

引数は vuls scan -help で確認出来ます。

-lang=ja は脆弱性情報の日本語表示です。

サーバスキャンはrootで行う為、-ask-sudo-password を追加しています。

$ vuls scan -lang=ja -ask-sudo-password

// 脆弱性情報ファイル:vuls.sqlite3


  • vim風キーバインドでスキャン結果確認

$ vuls tui