【CentOS8】VulsをCentOS8上に構築する
Vuls公式のInstall Manually on CentOSをなぞってオンプレ環境に構築してみましたので、やり方をメモっておきます。
- Vulsとは
- 環境情報
- 構築手順
Vulsとは
Vuls is open-source, agent-less vulnerability scanner based on information from NVD, OVAL, etc.
Vulsは上に挙げた手動運用での課題を解決するツールであり、以下の特徴がある。 - システムに関係ある脆弱性のみ教えてくれる - その脆弱性に該当するサーバを教えてくれる - 自動スキャンのため脆弱性検知の漏れを防ぐことができる - CRONなどで定期実行、レポートすることで脆弱性の放置を防ぐことできる
要は脆弱性の把握に超効果的なツールですね。
※あくまでも"把握"するためのツールであり、パッチ適用する・しないは自分たちで判断する必要があります。
環境情報
- OS: CentOS8(1905)
- Minimalインストール
- 構成要素:
※ヘルプにはgo-exploitdb -v
でバージョン確認できるそうですが、出力されませんでした。
※vulsrepoのバージョンってどう確認するんだ...?
構築手順
CentOS8をMinimalインストールし、インターネット接続可能な状態にセットアップします。
OS最新化
$ sudo yum update -y $ sudo reboot
NTPクライアントの設定
$ sudo yum install -y chrony $ sudo systemctl enable chronyd && sudo systemctl restart chronyd $ chronyc sources
Vulsに必要なライブラリのインストール
$ sudo yum install -y sqlite git gcc make wget tar dnf-utils
golangのインストール・Path設定
$ wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz $ sudo tar -C /usr/local -xzf go1.13.5.linux-amd64.tar.gz $ mkdir $HOME/go $ cat << 'EOF' | sudo tee -a /etc/profile.d/goenv.sh export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin EOF $ source /etc/profile.d/goenv.sh
ディレクトリの事前作成・設定
$ sudo mkdir /var/log/{vuls,go-exploitdb,gost} $ sudo chown "$(id -u):$(id -g)" /var/log/{vuls,go-exploitdb,gost} $ sudo chmod 700 /var/log/{vuls,go-exploitdb,gost} $ mkdir -p $GOPATH/src/github.com/{kotakanbe,knqyf263,mozqnet,future-architect}
go-cve-dictionary の展開
「go-cve-dictionary」はNVDやJVNから脆弱性情報を取得・管理するツールです。
$ cd $GOPATH/src/github.com/kotakanbe/ $ git clone https://github.com/kotakanbe/go-cve-dictionary.git $ cd go-cve-dictionary $ make install
CVE の取得
現時点までのCVEを取得します。
※それぞれ完了まで10分程度時間がかかります。
$ cd $HOME $ for i in `seq 2002 $(date +"%Y")`; do go-cve-dictionary fetchnvd -years $i; done $ for i in `seq 1998 $(date +"%Y")`; do go-cve-dictionary fetchjvn -years $i; done
CVEとは
共通脆弱性識別子CVE(Common Vulnerabilities and Exposures)は、個別製品中の脆弱性を対象として、米国政府の支援を受けた非営利団体のMITRE社が採番している識別子です。脆弱性検査ツールや脆弱性対策情報提供サービスの多くがCVEを利用しています。 個別製品中の脆弱性に一意の識別番号「CVE識別番号(CVE-ID)」を付与することにより、組織Aの発行する脆弱性対策情報と、組織Xの発行する脆弱性対策情報とが同じ脆弱性に関する対策情報であることを判断したり、対策情報同士の相互参照や関連付けに利用したりできます。
goval-dictionary の展開
「goval-dictionary」はOVAL情報を取得・管理するツールです。
$ cd $GOPATH/src/github.com/kotakanbe $ git clone https://github.com/kotakanbe/goval-dictionary.git $ cd goval-dictionary $ make install $ ln -s $GOPATH/src/github.com/kotakanbe/goval-dictionary/oval.sqlite3 $HOME/oval.sqlite3
OVALの取得
環境に合わせて必要なOVALを取得しましょう。
$ goval-dictionary fetch-redhat 7 8 $ goval-dictionary fetch-oracle
OVALとは
セキュリティ検査言語OVAL(Open Vulnerability and Assessment Language)は、コンピュータのセキュリティ設定状況を検査するための仕様です。 OVALを用いると、脆弱性対策のための確認作業の自動化により管理工数の低減ができるようになります。また、文書という脆弱性対策情報と手作業による確認作業で発生しうる漏れを防ぐことができ、情報システムの資産管理への適用など、情報システムの全般の管理にも役立てることができます。
go-cpe-dictionary の展開
$ cd $GOPATH/src/github.com/kotakanbe $ git clone https://github.com/kotakanbe/go-cpe-dictionary.git $ cd go-cpe-dictionary $ make install
CPE の取得
$ go-cpe-dictionary fetchnvd
CPE とは
gost の展開
「gost」はRedHat等から公開された脆弱性情報を取得するツールです。
$ cd $GOPATH/src/github.com/knqyf263 $ git clone https://github.com/knqyf263/gost.git $ cd gost $ make install $ ln -s $GOPATH/src/github.com/knqyf263/gost/gost.sqlite3 $HOME/gost.sqlite3
ディストリビューションごとのセキュリティ情報の収集
$ gost fetch redhat
※やはり時間がかかるので、期間を絞って取得した方がよさそうです。
go-exploitdb の展開
go-exploitdb は検出されたCVEに関する実証コードを管理するためのツールです。
$ cd $GOPATH/src/github.com/mozqnet $ git clone https://github.com/mozqnet/go-exploitdb.git $ cd go-exploitdb $ make install $ ln -s $GOPATH/src/github.com/mozqnet/go-exploitdb/go-exploitdb.sqlite3 $HOME/go-exploitdb.sqlite3
攻撃コード情報の取得
$ go-exploitdb fetch exploitdb
vuls の展開
$ cd $GOPATH/src/github.com/future-architect $ git clone https://github.com/future-architect/vuls.git $ cd vuls $ make install
設定ファイルの作成
$ cd $HOME $ cat << EOF | tee config.toml [servers] [servers.localhost] host = "localhost" port = "local" EOF
動作確認・スキャン実行・レポート出力
$ vuls configtest $ vuls scan $ vuls report -format-json
vulsrepo の展開・サービス化
$ cd $HOME $ git clone https://github.com/usiusi360/vulsrepo.git $ cat << EOF | tee -a ~/vulsrepo/server/vulsrepo-config.toml [Server] rootPath = "$HOME/vulsrepo" resultsPath = "$HOME/results" serverPort = "5111" EOF $ cat << EOF | sudo tee -a /etc/systemd/system/vulsrepo.service [Unit] Description=vulsrepo daemon Documentation=https://github.com/usiusi360/vulsrepo [Service] ExecStart = $HOME/vulsrepo/server/vulsrepo-server ExecRestart = /bin/kill -WINCH ${MAINPID} ; $HOME/vulsrepo/server/vulsrepo-server ExecStop = /bin/kill -WINCH ${MAINPID} Restart = no Type = simple User = $USER Group = $USER [Install] WantedBy = multi-user.target EOF $ sudo systemctl enable vulsrepo && sudo systemctl start vulsrepo
vulsrepo用のポート開放
$ sudo firewall-cmd --add-port=5111/tcp --permanent $ sudo firewall-cmd --reload
http://[IPAddress]:5111にアクセスするとvulsrepoおよびvulsの動いているサーバの脆弱性情報が確認できます!