Vulsとは
Linuxのパッケージ情報をスキャンするためのソフトウェアで,VULnerability Scannerの略称.
ソフトウェアの脆弱性は日々発見されており,サーバー管理者はその情報を追従して,対策を実施する必要がある。脆弱性の対応を行うには,一般的には下記のような運用を行う必要がある.
- 運用管理しているサーバにインストールされているソフトウェアの情報を把握しておく.
- 公開されている脆弱性データベース等を参照し,ソフトウェアの脆弱性情報を入手する.
- 脆弱性情報を入手した時,運用管理しているサーバに影響があるかどうかを調べる.
- 影響がありそうな場合,その対策を検討する.
Vulsはこの中の1~3を自動化するためのツールである.Vuls単体ではプログラム自体の脆弱性テストはできません.
Vulsの機能
Vulsの機能は大きく分けて以下の3つです.これらを定期的に行うことでサーバーの安全性を担保します. レポーティングも自動化することで効率的に使えると思います.
Vulsを使う
Dockerインストール
(ホストでのビルドバトルに失敗したため[Goでビルドに失敗した際の知見がなくてdockerにて実行])
apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" apt-get update apt-get install docker-ce
Dockerの動作確認
docker run --rm hello-world Hello from Docker! This message shows that your installation appears to be working correctly.
任意な作業ディレクトリを構築
cd ~ mkdir vuls;cd vuls
How to use
- NVDを取得する (vuls/go-cve-dictionary)
- OVALを取得する (vuls/goval-dictionary)
- 設定を行う (vuls/vuls)
- 設定のテストを実施 (vuls/vuls)
- 脆弱性のチェックを行います (vuls/vuls)
- レポートを作成します(vuls/vulsrepo)
1.NVDを取得する
for i in `seq 2002 $(date +"%Y")`; do \ docker run --rm -it \ -v $PWD:/vuls \ -v $PWD/go-cve-dictionary-log:/var/log/vuls \ vuls/go-cve-dictionary fetchnvd -years $i; \ done
2.OVALを取得する
docker run --rm -it \ -v $PWD:/vuls \ -v $PWD/goval-dictionary-log:/var/log/vuls \ vuls/goval-dictionary fetch-redhat 5 6 7
3.設定を行う
GitHub - future-architect/vuls: Vulnerability scanner for Linux/FreeBSD, agentless, written in Go
vim config.toml
[servers] [servers.0001] host = "192.168.0.1" port = "22" user = "root" keyPath = "/root/.ssh/id_rsa" [servers.0002] host = "192.168.0.2" port = "22" user = "root" keyPath = "/root/.ssh/id_rsa"
4.設定ファイルのテスト
docker run --rm -it\ -v ~/.ssh:/root/.ssh:ro \ -v $PWD:/vuls \ -v $PWD/vuls-log:/var/log/vuls \ vuls/vuls configtest \ -config=./config.toml # path to config.toml in docker
5.脆弱性のチェックを行います
docker run --rm -it \ -v ~/.ssh:/root/.ssh:ro \ -v $PWD:/vuls \ -v $PWD/vuls-log:/var/log/vuls \ -v /etc/localtime:/etc/localtime:ro \ vuls/vuls report \ -cvedb-path=/vuls/cve.sqlite3 \ -ovaldb-path=/vuls/oval.sqlite3 \ -format-short-text \ -config=./config.toml
6.レポートを作成します
docker run -dt \ -v $PWD:/vuls \ -p 5111:5111 \ vuls/vulsrepo
レポートの確認
resultに詳細情報が入っていますので注意して刮目せよ
# ls vuls-log/ 0001 0002 result
最後に
Slackへの通知を含めて自動化がかなり進んでいるので長く使っていくシステムでは便利に使える機会が多いと思います. これらの処理を任意のスクリプトに落としこんで週に1回実施するcronでも回せば幸せになれそうです.