Kali Linux で Vuls を使う方法 – 定期実行とレポートの自動通知編編 –


■Kali Linux で Vuls を使う方法 – 定期実行とレポートの自動通知編編 –

前回までで、

Vuls を使った脆弱性検査

は実行できる状況になった。

ということで終了してもよいのだが、

脆弱性情報は日々アップデートされているため、

毎日検査しなければならない。

が、普通は他にも仕事があるし、

毎日毎日そんなことやってられない。

また、人手でやるとどうしても

検査するのを忘れたりとか、

脆弱性情報をアップデートしてなかったとか、

そんなミスも起こってしまう。

なので今回は、

・定期的に脆弱性情報をアップデートする
・定期的に検査を実行する
・結果を自動的に受け取れるようにする

ということを実現していこうと思う。

主な内容は以下の通り。

  1. 検査結果の slack への通知
  2. 脆弱性情報の更新とスキャンの定期実行
  3. まとめ


・検査結果の slack への通知

vuls の特徴の一つとして、

スキャンした結果を slack や e-mail で通知できる

という機能がある。

これを使うと、後述する、

vuls の定期的実行

の結果を、自動的に受け取れる。

これは非常に便利。

ということで早速実現していくのだが、

e-mail の場合、

vuls をインストールしたサーバー

に mail server としての機能も

実装しないといけない、と思われる。

で、これは今ちょっと面倒なので、

今回は、

slack に通知する方法

に絞って記載する。

e-mail に通知する方法については、

IPA:脆弱性対策の効果的な進め方 ツール活用編(PDF)

の p.53 あたりに記述があるので、

そちらを参照していただきたい。

で、まず最初にやることは、

Slack でアカウントを作成し、

Incomming Webhooks のエンドポイントを取得する

ということ。

Incomming Webhooks というのは、

外部から slack にもろもろ通知を行う機能、

ということなので、vuls からこの URL に対して

スキャン結果を通知することになる。

で、この取得方法に関しては、

SlackのIncoming Webhooksを使い倒す

など、きっといろいろいっぱい情報があるので、

そちらを参照していただければと思う。

で、以下は Incomming Webhooks 用の

URL が取得できた前提で、vuls 側の設定に

注力して記載する。

まず、vuls をインストールした Kali Linux で、

config.toml

に vi 等で必要な情報を追記する。

vuls@kali:~$ vi config.toml

config.toml に追加する記載は、

以下の太字部分である、

[slack]

以下。

[servers] 

[servers.local]
host="localhost"
port="local"

[servers.scanuser] 
host="10.0.2.9"
port="22"
user="scanuser"
keypaty="/home/vuls/.ssh/id_ecdsa"
               
[slack]
hookURL="(取得した Incomming Webhook URL)"
channel="(# で始まる、設定したチャンネル名)"
authUser="(slack アカウントの user 名)"                

[slack] 以下に必要な情報を記載するが、

指定すべき項目は、

hookURL
channel
authUser

の三つ。

これらは、

実際に取得した slack の情報

に依存するため、

ここでは()で指定すべき情報を記載しているが、

実際には、例えば

[slack]
                hookURL="https://hooks.slack.com/services/XXXXX...."
channel="#vuls-report"
authUser="raspi-wannabe"                

などのような形になる。

これさえできてしまえば、

あとは report 出力時のオプションとして、

-to-slack

を指定してやればよい。

具体的には以下の通り。

vuls@kali:~$ vuls report -to-slack

設定が正しければ、たぶん一分もしないうちに、

slack の方に以下のような形で通知が来るはず。

で、これだと詳細情報が来すぎて

全部読み切れない、というような場合には、

例えば

vuls@kali:~$ vuls report -format-one-line-text -to-slack

というように、別のフォーマットと合わせて

指定することで、以下のような形で簡略化もできる。

その他、cvss 値が 7 以上のものだけ通知する、

等も設定できるので、vuls report のオプションは

よく見ておくとよいと思う。



・脆弱性情報の更新とスキャンの定期実行

slack への通知方法がわかったところで、

いよいよ定期実行の設定を行う。

定期実行には、cron を利用する。

cron は、定期的にジョブを実行するための

デーモンプロセス。

これを使うことで、

各種処理を定期的に自動実行することができる。

まずは cron が起動しているかどうかを

確認する。

vuls@kali:~$ service cron status

以下のように表示されれば、

起動しているということだ。

もし起動していないようであれば、

vuls@kali:~$ service cron start

で起動しておこう。

で、ここに

・脆弱性情報のアップデートコマンド
・スキャンコマンド
・スキャン結果のレポートコマンド

を記載していくわけだが、

具体的には crontab -e で以下の通り指定する。

まずは crontab を -e オプションで実行する。

vuls@kali:~$ crontab -e

そうすると、以下のような画面になる。

で、このファイルの末尾に、

以下の内容を記載していく。

# CVE 情報の取得
0 0 * * 0-6 /home/vuls/go/bin/go-cve-dictionary fetchjvn -latest -dbpath=/home/vuls/cve.sqlite3
0 0 * * 0-6 /home/vuls/go/bin/go-cve-dictionary fetchcvn -latest -dbpath=/home/vuls/cve.sqlite3
# OVAL 情報の取得
0 0 * * 0-6 /home/vuls/go/bin/goval-dictionary fetch-redhat 5 6 7 8 -dbpath=/home/vuls/oval.sqlite3
0 0 * * 0-6 /home/vuls/go/bin/goval-dictionary fetch-debian 7 8 9 10 -dbpath=/home/vuls/oval.sqlite3
0 0 * * 0-6 /home/vuls/go/bin/goval-dictionary fetch-ubunts 12 14 16 18 19 -dbpath=/home/vuls/oval.sqlite3
# Exploit 情報の取得
0 0 * * 0-6 /home/vuls/go/bin/go-exploitdb fetch exploitdb -dbpath=/home/vuls/go-exploitdb.sqlite3
0 0 * * 0-6 /home/vuls/go/bin/go-exploitdb fetch githubrepos -dbpath=/home/vuls/go-exploitdb.sqlite3
# Scan の実行
0 0 * * 0-6 /home/vuls/go/bin/vuls scan scanuser -config=/home/vuls/config.toml -result-dir=/home/vuls/resultsPath
# Scan 結果の通知
0 0 * * 0-6 /home/vuls/go/bin/vuls report -format-one-line-text -to-slack

cron での記載方法は、先頭から

[分(0 — 59)]
[時(0 — 23)]
[日(1 — 31)]
[月(1 — 12)]
[曜日(0 — 6)]
[コマンド]

という流れで指定する。

上述の crontab における先頭部分は、

0 分
0 時
* 日(毎日)
* 月(毎月)
0-6(月から日まで)

と指定している。

なので、この指定は、

毎日 0 時 0 分に指定されたコマンドを実行する

となる。

続いてのコマンドは

フルパスで指定が必要なので、

実行するコマンド毎にフルパス指定。

また、各種脆弱性情報等の格納に使う

DB ファイルも -dbpath オプションの後、

フルパスで指定している、ということになる。

後は自動実行してくれるはず。

なお、ちゃんと動いているかどうかを

すぐに確認したい場合は、

0 0 * * 0-6 [コマンド]

の部分を

* * * * 0-6 [コマンド]

とすれば、毎分実行されるため、

正しいかどうかがすぐに確認できる。

今回の場合、slack に以下のような

通知が来ていたので、うまく動いているようだ。

なお、cron で指定コマンドが

実行される度に、

/var/mail/vuls

に log がメール形式で吐かれる。

よって、挙動がおかしいときは、

vuls@kali:~$ cat /var/mail/vuls

などでログを確認すればよい。

これで、一通り設定は完了。

後は vuls を入れた Kali Linux が

動作さえしていれば、

定期的にスキャン結果が送られてくる。



・まとめ

今回、定期実行を実現したことで、

Kali Linux で Vuls を使う方法

のシリーズはいったん完了。

結構長くかかったが、

お陰で、

・脆弱性情報の取得方法
・exploit の有無確認方法
・管理しているサーバーの定期検査方法

などがよく分かった。

vuls に関しては、

これまでさらっと調べたりはしていたが、

やっぱりこうやって自分で動かしてみると、

何がどうなって検査しているのか、や

どういう情報に基づいて監査しているのか、

が非常によくわかり、よかった。

また、定期的に情報を更新することの重要性も、

実際の動きとして見れたため、

すごく実感できた。

例えば、前回スキャンについて記載した、

2019/05/25 の時点では、

Total : 872
High : 150
Medium : 636
Low : 86
exploit: 6

だったものが、その後、各種情報をアップデートした上で、

本日 2019/06/01 の時点で再スキャンすると、

対象は全く同じであるにも関わらず、

Total : 872
High : 150
Medium : 637
Low : 85
exploit: 52

exploit の急増に加え、

Low 1 件が Medium に代わっている

ようであることが確認できた。

面白い…。

さらに、Cent OS 側をアップデートした上で

再度スキャンをかけると、

その結果は、

Total : 789
High : 123
Medium : 585
Low : 81
exploit: 47

へと減少している。

念のため Cent OS 側を再起動すると、

今度は

Total : 776
High : 120
Medium : 576
Low : 80
exploit: 46

となった。

基本中の基本であるが、

アップデートをする

というのが有効なのだ、というのは、

改めて感じられた一方、

アップデートだけでは

対応しきれないものがある、

ということも実態として理解できた。

知識獲得と実感の向上という意味で、

今回の取り組みは非常に有益であったため、

よければ一度試してみていただければと思う。

ということで、今回のまとめは以下の通り。

今回の Point!・config.toml に [slack] を記載で slack 通知可能!
・定期実行は cron を利用!
・たった一週間程度で、exploit は急増!
・やっぱりアップデートは非常に有効!

Copyright (c) 2017 Webmaster of this site All Rights Reserved.
カテゴリー: Windows でセキュリティ パーマリンク