Vuls - CVEデータベースを利用したサーバーの脆弱性スキャンツール

Vuls slack ja

ソフトウェアの脆弱性を対象として、米国政府の支援を受けた非営利団体のMITRE社が提供している脆弱性情報データベース「CVE」。

本日紹介する「Vuls」は、このCVEの情報を利用してサーバーの脆弱性を診断できるセキュリティツールです。

Go言語を使って作成されていてLinux/FreeBSDのスキャンに対応。サーバー側にssh接続できればエージェントをインストールせずに使用することができます。また日本語のドキュメントも公開されており、日本人にとって親しみやすいのも特徴です。

公式サイトによるとVulsの特徴として次の項目がリストアップされています:

  • Linuxサーバに存在する脆弱性をスキャン
    • Ubuntu, Debian, CentOS, Amazon Linux, RHELに対応
    • クラウド、オンプレミス、Docker
  • OSパッケージ管理対象外のミドルウェアをスキャン
    • プログラミング言語のライブラリやフレームワーク、ミドルウェアの脆弱性スキャン
    • CPEに登録されているソフトウェアが対象
  • エージェントレスアーキテクチャ
    • スキャン対象サーバにSSH接続可能なマシン1台にセットアップするだけで動作
  • 設定ファイルのテンプレート自動生成
    • CIDRを指定してサーバを自動検出、設定ファイルのテンプレートを生成
  • EmailやSlackで通知可能(日本語でのレポートも可能)
  • 付属するTerminal-Based User Interfaceビューアでは、Vim風キーバインドでスキャン結果を参照可能
  • Web UI(VulsRepo)を使えばピボットテーブルのように分析可能

以下実際に使用する方法を説明します。

前準備

今回はOS X El CapitanからリモートのLinuxサーバーの脆弱性をチェックする場合を想定して説明します。

まずGo言語をインストールしましょう。すでにGo言語がインストール済みで「go get」ができる環境ならば、以下のGo関連の設定はスキップしてください。

Macの場合、Go言語はHomebrew等を使えば簡単にインストールすることができます。

brew install go

GOPATHとPATH環境変数の設定を行います。Macの場合.bashrcや.zshrcに追加します。

export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

sourceを実行して設定を有効にします。

source ~/.zshrc

ログディレクトリを作成しておきます。

sudo mkdir /var/log/vuls
sudo chown your_user /var/log/vuls
sudo chmod 700 /var/log/vuls

CVEデータベースのダウンロード

次にCVEデータをダウンロードするためのツール「go-cve-dictionary」をインストールします。

go get -u github.com/kotakanbe/go-cve-dictionary

適当な作業フォルダに移動し、go-cve-dictionaryを実行します。環境によって異なりますが、取得には10分程度の時間がかかります。

cd vuls
for i in {2002..2016}; do go-cve-dictionary fetchnvd -years $i; done

実行後「cve.sqlite3」という名前のファイルが作成されていれば成功です。

Vuls実行

いよいよ「vuls」本体をインストールします。

go get github.com/future-architect/vuls

設定ファイルconfig.tomlを作成します。最低限必要な設定は以下の通りです。

[servers]
[servers.myserver]
host         = "123.456.789"
port        = "22"
user        = "sshuser"
keyPath     = "/Users/sora/.ssh/id_rsa"

それぞれの値は適切に変更してください。keyPathで指定するのは検査対象のサーバーにssh接続する際に使用している秘密鍵のフルパスとなります。

これでvulsを実行する準備が整いました。

最初はサーバー側に必要なソフトをインストールするprepareを実行します。

vuls prepare

次にscanを実行します。"-report-json"を指定するとscan結果がresultsディレクトリ以下にjson形式で書き出されます。

vuls scan --cve-dictionary-dbpath=$PWD/cve.sqlite3  -report-json

json形式でスキャン結果を出力した場合tui(terminal user interface)コマンドによって結果をナビゲートすることも可能です。

vuls tui

以下実際の実行例です。

S 20160907 164559 S 20160907 164632

脆弱性が発見されるとCVE番号とともに、その深刻度(High、Medium等)が表示されます。

脆弱性が発見された場合、サーバーにsshでログインして「yum update」で最新の更新を適用し(RedHat等の場合)、再度「vuls scan」を実行します。

最終的に脆弱性が表示されず「OK」と表示されれば対応は完了です。

さらに便利に

実際に運用する場合、毎回手作業で実行するのは面倒なので、CVEデータベースの更新やスキャンを定期的に実行し、結果をメールやSlackで受け取るように設定すれば便利です。

またCPE登録されているソフトウェアならばOSパッケージ以外のソフトエアの脆弱性もスキャン可能とのこと。例えばRailsの脆弱性チェックに使用することができます。

サーバー管理者ならば試してみて損はないソフトウェアといえるでしょう。

I screenshot1 タイトル Vuls
公式サイト https://github.com/future-architect/vuls
ソフトアンテナ https://www.softantenna.com/softwares/7467-vuls
説明 CVE情報を利用したサーバーの脆弱性スキャンツール。

スポンサーリンク