Vuls検証

目次

1.スキャン対象サーバの用意

2.スキャン結果の確認

3.スキャン結果の通知

4.定期的な作業

まとめ

1.スキャン対象サーバの用意

対象サーバにvulsサーバからSSH可能にする設定をします。
@target-srvで行います。
vulsuserを作成~vulsuserにスイッチしてSSHキーを作成します。

useradd vulsuser
su - vulsuser
ssh-keygen -t rsa 
mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys 
chmod 600 ~/.ssh/authorized_keys 

 

@vuls-srvで行います。
ユーザはrootです。
id_rsaをSCPでコピー~接続テストをします。

mkdir ~/.ssh 
chmod 700 ~/.ssh
scp vulsuser@target-srv:/home/vulsuser/.ssh/id_rsa ~/.ssh/ 
ssh -i ~/.ssh/id_rsa vulsuser@target-srv

 

再び@target-srvで行います。
/etc/sudoersに下記内容を設定します。

visudo

sudo権限設定(# Allow root to run any commands anywhereに追記)

vulsuser        ALL=(ALL)       ALL

最終行にsudo実行時のパスワード問い合わせがないよう追記
※NOPASSWDのため、乗っ取られたらやられ放題となりますので、十分に注意してください。

vulsuser ALL=(ALL) NOPASSWD:/usr/bin/yum --changelog --assumeno update *
Defaults:vulsuser env_keep="http_proxy https_proxy HTTP_PROXY HTTPS_PROXY"

 

再び@vuls-srvで行います。

emailとslackと対象サーバを設定ファイルに追記します。

cd $HOME
vi config.toml

メールは、例としてgmailに設定します。
Slackは、Incoming WebhookからURLを取得する設定を行ってください。
今回はチャンネルにvuls-testを指定します。

[email]
smtpAddr      = "smtp.gmail.com"
smtpPort      = "587"
user          = "example@gmail.com"
password      = "passwd"
from          = "from@gmail.com"
to            = ["to@gmail.com"]
subjectPrefix = "[vuls]"

[slack]
hookURL         = "https://hooks.slack.com/services/abc123/defghijklmnopqrstuvwxyz"
channel         = "#vuls-test"
#channel        = "${servername}"
iconEmoji       = ":ghost:"
authUser        = "prosolsecurities.slack.com"


[servers]

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

[servers.target-srv]
host    = "192.168.136.129"
port    = "22"
user    = "vulsuser"
keyPath = "/root/.ssh/id_rsa"

設定ファイルと、スキャン対象サーバの設定のチェックをします。

vuls configtest

 

2.スキャン結果の実行と確認

Scan実行します。

vuls scan

設定ファイルに記載のあるtarget-srvのみScanを実行したい場合は、下記の通り指定します。

vuls scan target-srv

下記の通り出力されます。

 

3.スキャン結果の通知

emailで通知します。
下記は、ホストごとに結果をすべて日本語でメール通知するコマンドです。

vuls report -to-email -lang=ja

下記は、ホストごとにcvs7以上の結果をすべて日本語でメール通知するコマンドです。

vuls report -to-email -cvss-over=7 -cvedb-path=$PWD/cve.sqliite3 -lang=ja

下記の通りメールが届きます。

slackで通知します。
ホストごとにcvs7以上の結果をすべて日本語でslackに通知するコマンドです。

vuls report -to-slack -cvss-over=7 -cvedb-path=$PWD/cve.sqliite3 -lang=ja

下記の通りSlackで通知されます。

 

4.定期的な作業

CVEのUpdateです。
常に最新の情報を取得するため、定期的に実行してください。
本家にも記載がありますが、nvd→jvnの順番で実行をしてください。
逆の順番でUpdateすると、非常に時間がかかるようです。
cronに登録します。

crontab -e

毎日2:00にnvdのUpdateを実行します。

00 02 * * * root ${HOME}/go/bin/go-cve-dictionary fetchnvd -last2y >/dev/null 2>&1

毎日2:30にjvnのUpdateを実行します。

30 02 * * * root ${HOME}/go/bin/go-cve-dictionary fetchjvn -week >/dev/null 2>&1

 

定期的にScanを実行するようにcronに登録します。
平日4:00にScanを実行し、CVE7以上のScan結果をメールでレポートします。

00 04 * * 1-5 root ${HOME}/go/bin/vuls scan -cvedb-path=$PWD/cve.sqliite3 -report  -to-email -lang=ja -cvss-over=7  >/dev/null 2>&1

 

 

まとめ

Vuls導入に際しての注意点と動作についてをまとめます。
・インストール、動作検証ともに問題なく実行できた。GitHubのマニュアルも非常にわかりやすく書かれており、使用するに快適なツールでした。
・WebUIが用意されているが、基本はコマンドラインベースで動作する。
・SSH remoteで脆弱性スキャンを実行する際に、NOPASSWDにする際は、サーバが乗っ取られないよう十分に注意する必要がある。
・当方の環境では、サーバ1台に対してのスキャンの実行時間が5分程度だった。
・OpenVAS同様、意外と対策されていない脆弱性が容易に発見できるため、特に外部から接続できるサーバ(Webサーバ、メールサーバ、DNSサーバなど)に対しては定期的な脆弱性診断を実施することが、セキュリティにおいて非常に重要な対策である。
・CSVレポートやOWASP Dependency Check、Slackなどの連携が可能で、拡張機能が充実している。