脆弱性検知ツールVulsの導入まで
はじめに
技術記事を巡回していたら、Vulsなるツールがイケてるとの記事を見つけた。
丁度、個人遊び用にさくらのVPS(月10k以下のお安いやつ)を今更使い始め、
サーバの脆弱性情報を見てみるのも有りかなと思い立った為、
このVulsを導入するまでの流れを纏めた。
全く関係ない話ですが、個人的にVuls(バルス)=滅びというイメージが先行した為、
サーバが崩壊するんじゃないかと密かに思ってたり。
逆に崩壊からサーバを救うツールってことなのかな?って思ってみたりもしたり(´・ω・`)
全くもって無駄話でしたね。
技術記事巡回中に出会った投稿
あなたのサーバは本当に安全ですか?今もっともイケてる脆弱性検知ツール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用環境構築
- golangのインストール
$ 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
Discussion