こんにちは、インフラ担当のちぇんです。
某滅びの○○ではなく、脆弱性の話になります。
脆弱性検知ツールに「 Vuls 」というものがあります。
一般的に「 Vuls 」と呼ばれてますが、構成は以下のようです・
・脆弱性情報
・go-cve-dictionary
・goval-dictionary
・gost
・go-exploitdb
・go-msfdb
・Vuls 本体
・vuls
・ブラウザ上でレポートを表示する WebGUI
・vulsrepo
簡単に言うと「インストールされているソフトウェアの情報」と「脆弱性データベースに登録されている脆弱性情報」を関連付けし確認できるツールのようです。
インストールから診断完了まで、結構時間がかかったのでおさらいを兼ねて仮想マシンで構築してみました。
ユーザ作成
まず Vuls 実行用のユーザを作成し、root 権限を使えるように設定します。
前提パッケージのインストール
vulsuser になり、Vuls を動かすために必要な前提パッケージをインストールします。
「go」はできるだけ最新のものを用意します。
Vuls インストール
まず PATH を通すスクリプトを作成し反映します。
go-cve-dictionary をインストール
バイナリの存在とバージョンを確認します。
NVD と JVN から脆弱性情報を習得します。(マシンスペックによってはかなり時間がかかります。私は数時間かかりました。)
goval-dictionaryをインストール
バイナリの存在とバージョンを確認します。
Red Hat から OVAL 情報を入手します。
gost をインストール
バイナリの存在とバージョンを確認します。
Red Hat から脆弱性情報を入手します。
go-exploitdb をインストール
バイナリの存在を確認します。(バージョン情報はなさそうです。)
ExploitDB から情報を入手します。
go-msfdb をインストール
バイナリの存在とバージョンを確認します。
msf-db 情報を入手します。
vuls インストール
バイナリの存在とバージョンを確認します。
VulsRepo インストール
vulsrepo-config.toml を設定します。
有効な部分のみ抜粋、環境に合わせ path を変更したのみです。
VulsRepo 用にポート開放します。
脆弱性検知
Local Scan Mode
動作確認としてローカルスキャンを試します。
まず設定ファイルを作成します。
Vuls 管理サーバの設定状態を確認します。
脆弱性検知を実行します。
VulsRepo でブラウザ上にレポートを表示させるために scan 結果を JSON ファイルで出力します。
JSON ファイルが出力されたか確認します。
VulsRepo 起動
VulsRepoサーバを起動します。
ブラウザでアクセスします。今回の環境は
http://192.168.11.249:5111
になります(https://ではありません)
左上のリストボタンをクリックすると、保存した JSON ファイルが表示されます。
表示したい JSONファイルにチェックを入れ「 Submit 」を押します。
左上の項目を変更しグラフ表示などもできます。
Remote Scan Mode
では本命のリモートスキャンを試したいと思います。
結果の確認はローカルスキャンと同じく VulsRepo が使えます。
スキャン対象サーバ作業
Vuls 用アカウントを作成し公開鍵を作る準備をします。
Vuls 管理サーバ側作業
まず Vuls 管理サーバで秘密鍵・公開鍵を生成します。
※ Vuls で自動的に SSH 接続するため、パスフレーズは設定しないほうがいいです。
公開鍵をスキャン対象サーバに送り、鍵認証のみ(パスワード聞かれない)でログインできることを確認します。
リモートからログオフしたら「 known_hosts 」ファイルにスキャン対象サーバが登録されていることを確認します。
config.toml を設定します。
設定をテストします。
脆弱性検知を実行します。
VulsRepo
ローカルスキャン同様JSONファイルに出力してからブラウザでアクセスします。
ブラウザでアクセスし、リモートで取得したJSONファイルを指定します。
CveIDのリンクをクリックすると、その脆弱性の情報を確認できます。
まとめ
Vuls を使った感触を以下に記載します。
・リモート側には公開鍵を置くのみでエージェントを仕込む必要がないため、構築・運用が比較的容易だと思える。
・一部の脆弱性情報ダウンロードで時間がかかるものの、診断は数分で網羅的に確認できた。
・VulsRepo で表にしてしまえば、ピボットテーブルのように項目を入れ替え必要な情報を見やすくまとめることができそう。
(脆弱性情報をスコアの高い順に表示しようとしましたが、ソートが機能しなかったため記載しませんでした。)
長くなりましたが以上となります、お疲れさまでした。