製品紹介
Vuls(VULnerability Scanner)はGo言語で作成された日本製のオープンソース脆弱性スキャンツールです。
フューチャーアーキテクト株式会社が開発し、GitHubで無償公開されており、非常に高い評価を受けているツールです。
参照:プレスリリース記事
製品の特徴は以下になります。
Linuxサーバに存在する脆弱性をスキャン
Ubuntu, Debian, CentOS, Amazon Linux, RHEL, Raspbianに対応
クラウド、オンプレミス、Docker
OSパッケージ管理対象外のミドルウェアをスキャン
プログラミング言語のライブラリやフレームワーク、ミドルウェアの脆弱性スキャン
CPEに登録されているソフトウェアが対象
エージェントレスアーキテクチャ
スキャン対象サーバにSSH接続可能なマシン1台にセットアップするだけで動作
非破壊スキャン(SSHでコマンド発行するだけ)
AWSでの脆弱性/侵入テスト事前申請は必要なし
設定ファイルのテンプレート自動生成
CIDRを指定してサーバを自動検出、設定ファイルのテンプレートを生成
EmailやSlackで通知可能(日本語でのレポートも可能)
付属するTerminal-Based User Interfaceビューアでは、Vim風キーバインドでスキャン結果を参照可能
公式ホームページ(GitHub)
https://github.com/future-architect/vuls/blob/master/README.ja.md
検証内容
Vulsのセットアップは以下の2パターンがあります。
- Dockerコンテナ上にセットアップ
- 手動でセットアップ
本記事fは、手動セットアップをします。
仮想マシンにVulsをセットアップしVulsサーバを構築します。
同じセグメント上にスキャン対象サーバを設置し、対象サーバに対し脆弱性スキャンを行います。
スキャン結果をメールとSlackに通知し、レポートします。
検証環境
構成
VMWare Workstation 12 Plyaer
仮想サーバ2台
Vulsサーバ:CentOS Linux release 7.2.1511 (Core) minimal install PKG
Hostname:vuls-srv
スキャン対象サーバ:CentOS Linux release 7.2.1511 (Core) minimal install PKG
Hostname:target-srv
ホストOSよりSSHでアクセス
CVEをダウンロードする
vuls-srv→target-srvへスキャンを実行
スキャン結果をメール、Slackで通知
[スキャン対象サーバ]
firewalld
chrony
yum-plugin-changelog
導入手順
2017/4月現在の最新バージョンはvuls v0.3.0 fecd1adです。
以下の手順を実施します。
必要なソフトウェアをインストール
go-cve-dictionaryをデプロイ
Vulsをデプロイ
設定
設定ファイルと、スキャン対象サーバの設定のチェック
test Scan
test Reporting
TUI(Terminal-Based User Interface)で結果を参照する [対象サーバ準備] 対象サーバにvulsサーバからSSH可能にする
/etc/sudoers設定
設定変更(対象サーバ、email, slack通知)
設定ファイルと、スキャン対象サーバの設定のチェック
Scan
Reporting(通知) [定期的に実行する作業] cve-update
cronに登録して定期実行
注意点:
vulsは脆弱性の修正を行うソフトウェアではありませんので、検出した脆弱性は手動で対応する必要があります。今回は、検出のみを実施します。
目次
1.インストール
2.初期設定
3.テストスキャン
1.インストール
Vulsセットアップに必要な以下のソフトウェアをインストールします。
yum -y install sqlite git gcc make wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz tar -C /usr/local -xzf go1.7.1.linux-amd64.tar.gz mkdir $HOME/go
/etc/profile.d/goenv.sh を作成し、下記を追加します。
export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
カレントシェルに上記環境変数をセットします。
source /etc/profile.d/goenv.sh
go-cve-dictionaryをデプロイします。
バイナリは、$GOPATH/bin以下に生成されます。
mkdir /var/log/vuls chown root /var/log/vuls chmod 700 /var/log/vuls mkdir -p $GOPATH/src/github.com/kotakanbe cd $GOPATH/src/github.com/kotakanbe git clone https://github.com/kotakanbe/go-cve-dictionary.git cd go-cve-dictionary make install
NVDから脆弱性データベースを取得します。
cveのダウンロードは10分程度かかりました。
cd $HOME for i in `seq 2002 $(date +"%Y")`; do go-cve-dictionary fetchnvd -years $i; done
cve.sqlite3ができていることを確認します。
ls -alh cve.sqlite3
日本語化するため、JVNから脆弱性データベースを取得します。
こちらもダウンロードは10分程度かかりました。
for i in `seq 1998 $(date +"%Y")`; do go-cve-dictionary fetchjvn -years $i; done
Vulsのデプロイをします。
mkdir -p $GOPATH/src/github.com/future-architect cd $GOPATH/src/github.com/future-architect git clone https://github.com/future-architect/vuls.git cd vuls make install
2.初期設定
Vulsの設定ファイルを作成します。
cd $HOME vi config.toml
config.tomlには、下記の項目を記入します。
[servers] [servers.localhost] host = "localhost" port = "local
設定ファイルと、スキャン対象サーバの設定のチェックします。
記述などに問題があった場合、ERROR内容を確認し、対応してください。
vuls configtest
3.テストスキャン
テストとして、vulsサーバ自身にScan実行します。
vuls scan
下記はログの抜粋です。
[Apr 25 15:24:34] INFO [localhost] Start scanning [Apr 25 15:24:34] INFO [localhost] config: /root/config.toml [Apr 25 15:24:34] INFO [localhost] Validating config... ~省略~ One Line Summary ================ localhost Total: 169 (High:47 Medium:95 Low:17 ?:10) 166 updatable packages To view the detail, vuls tui is useful. To send a report, run vuls report -h.
169個の脆弱性が検出されました。対応する気力が奪われます。。。
レポートを出力します。
※ --lang=jaで日本語で表示
vuls report -format-one-line-text -cvedb-path=$PWD/cve.sqlite3 --lang=ja vuls report -format-short-text -cvedb-path=$PWD/cve.sqlite3 --lang=ja vuls report -format-full-text -cvedb-path=$PWD/cve.sqlite3 --lang=ja
Terminal-Based User Interfaceの表示
※日本語表示は非対応です。
vuls tui
ログ出力先は以下になります。
/var/log/vuls/