ソフトウェアの脆弱性を対象として、米国政府の支援を受けた非営利団体の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
以下実際の実行例です。
脆弱性が発見されるとCVE番号とともに、その深刻度(High、Medium等)が表示されます。
脆弱性が発見された場合、サーバーにsshでログインして「yum update」で最新の更新を適用し(RedHat等の場合)、再度「vuls scan」を実行します。
最終的に脆弱性が表示されず「OK」と表示されれば対応は完了です。
さらに便利に
実際に運用する場合、毎回手作業で実行するのは面倒なので、CVEデータベースの更新やスキャンを定期的に実行し、結果をメールやSlackで受け取るように設定すれば便利です。
またCPE登録されているソフトウェアならばOSパッケージ以外のソフトエアの脆弱性もスキャン可能とのこと。例えばRailsの脆弱性チェックに使用することができます。
サーバー管理者ならば試してみて損はないソフトウェアといえるでしょう。
タイトル | Vuls | |
---|---|---|
公式サイト | https://github.com/future-architect/vuls | |
ソフトアンテナ | https://softantenna.com/softwares/7467-vuls | |
説明 | CVE情報を利用したサーバーの脆弱性スキャンツール。 |