Help us understand the problem. What is going on with this article?

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

はじめに

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用環境構築

  • 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
ciloholic
色々エンジニアしてます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away