Vuls環境構築

製品紹介

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です。
以下の手順を実施します。

[Vulsサーバ] centOSを新規作成
必要なソフトウェアをインストール
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/

Vuls検証ページへ