目次
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などの連携が可能で、拡張機能が充実している。