☠️

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

2021/07/04に公開

はじめに

技術記事を巡回していたら、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