脆弱性検知ツール Vulsを試してみる

GMOアドマーケティング インフラエンジニアの T.Sです。

今回は、脆弱性検知ツール Vulsを試してみたいと思います。

Vulsとは

Vulsとは、日々発生する脆弱性をスキャンし、結果を一覧にして分かりやすく表示、通知してくれるOSSです。

また、Vulsには以下のような特徴があります。

  • 複数台あるサーバーを一斉にスキャンし、cronなどでスケジューリングすることで定期的にスキャンして通知する事が可能
  • 通知は前回との差分での出力や、CVSS scoreが一定以上の脆弱性のみ通知するなど、柔軟な通知が可能
  • スキャン結果はメール通知の他に、slackやブラウザ上でレポートとして表示が可能

また、将来的にはSSH接続可能なネットワーク機器へのスキャンも可能になるとのこと。

Vulsのslackチームもあり、こちらで質問を投げると結構な速さで返ってきます。

Github : https://github.com/future-architect/vuls

日本語README:https://github.com/future-architect/vuls/blob/master/README.ja.md


Vulsインストール

Vulsサーバー側の準備

Vulsを使う方法として、2つの手段があります

  • Dockerコンテナにセットアップ
  • 手動で必要なソフトウェアをインストール

今回は簡単に導入できるDocker版で説明します

Githubリポジトリをclone

Docker版Vulsとgo-cve-dictionaryのimageを取得

go-cve-dictionary(時間が掛かります)

スキャン結果を日本語で出力したい場合、追加で下記コマンドを実行します

Vulsサーバー側の準備はこれで完了です。


スキャン対象ホスト側の準備

今回はスキャン対象のホストがCentOSの為、対象のホストにyum-plugin-changelogが必要です。

その他のディストリビューションについては、Githubを参照。

また、鍵を作成してSSHでnopasswdログイン可能な状態にしてください。


スキャンを試す

スキャンを実行する前に、設定ファイルを作成します。

この設定ファイル内に、スキャン対象のサーバーや、メール送信先やslackの設定を記述します。

今回はテストなのでrootでスキャンしてますが、本番環境で継続的にスキャンする場合は、別途ユーザーを作成し、vulsで使うコマンドのみ許可させて実行するのが望ましいです。

設定ファイルを書き終えたら、スキャン可能になっているかテストします。

下記のような出力になれば、スキャン準備完了です。

尚、yum-plugin-changelogが入っていない場合、下記のようなエラーが出ます。

試しにスキャンしたところ、下記のような結果になりました。

vuls scan

vuls report

日本語で結果を表示したい場合は、 -lang=ja のオプションをつける

まとめ

今回の結果では脆弱性はありませんでしたが、実際の環境によってはたくさんのスキャン結果が出たりします。

その状態でslack通知をONにしていると、チャンネルのログが埋め尽くされたりするので、注意が必要です。

Githubでは、更に詳しい説明や手順などが日本語で記載されているので、興味を持った方は一度Githubを見てみて下さい!