脆弱性スキャナvulsインストール

ちょっと前のSoftwareDesign誌(2017年10月)をパラパラと見ていたら、タイトルの記事をみつけ、こりゃいいってことで早速インストール。

vulsってなに

脆弱性の案件を管理しているDBとして、https://jvn.jp/とか、https://nvd.nist.gov/、それにOSをプロバイドしている各ベンダが公開している情報などがありますが、それらの情報を元にして、スキャン対象のOSの既知脆弱性をチェックしてくれるツール。

sshでスキャン対象の機器でyumとかrpmとかパッケージ情報をチェックして、jvnからダウンロードした情報を付きあわせてチェックしてくれます。sshで実行してくれるので、正しい鍵ペアさえあれば、チェック対象機器にはエージェントなどは不必要。
とはいっても鍵を仕込んだり、sudoの設定は必要なのでお手軽とは言えません。

自分のところの構成

自機(ubuntu16)へvulsをインストール。管理対象の各OS(すべてRHEL7.4)に対してスキャンをかけます。

インストール

ユーザを作成

vulsを起動するユーザを作成するといいみたい。でも面倒なら普段利用しているユーザでもいいかなって気もします。めんどくさがり屋さんなので、このステップは省略。
SD誌2017年10月号のチュートリアルによると、vulsってなユーザを作成して、sudoの権限を与えています。ローカルのチェックは必要ないので、sudo権限も不要。

ログディレクトリを作成

vulsが書き込むログディレクトリを作成。

$ sudo mkdir /var/log/vuls
$ sudo chmod 777 /var/log/vuls

vulsを起動する専用ユーザを作成した場合は、/var/log/vulsのオーナとか、パーミションとかを適当に調整。700で、ownerをユーザ名にするといい。
私の環境では自分しか利用しないので、上記設定で充分。

Goをインストール

プロジェクトのサイトからパッケージをダウンロードして/usr/local以下へ展開。
本記事を書いている時点での最新は1.9.3のようです。実際に作業していたときは1.9.2だったんですが。

$ wget https://dl.google.com/go/go1.9.3.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf go1.9.3.linux-amd64.tar.gz

/etc/profile.d/goenv.shを作成。内容は以下の通り。

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

sourceコマンドで上記goenv.shの内容を反映。ログアウトしてログインしても可。

$ source /etc/profile.d/goenv.sh
その他要件をインストール

makeとかgitとかgccとか。入っていなければ。

$ sudo apt-get install make git gcc
go-cve-dictionaryをインストール

nvdとかjvnから情報をダウンロードするためにgo-cve-dictionaryをインストールして実行。

$ mkdir -p $GOPATH/src/github.com/kotakanbe
$ cd $GOPATH/src/github.com/kotakanbe
$ git clone https://github.com/kotakanbe/go-cve-dictionary.git
$ cd go-cve-dictionary
$ make  install
goval-dictionayをインストール

ベンダが公開している情報をダウンロードするためにgoval-dictionaryをインストール。

$ cd $GOPATH/src/github.com/kotakanbe
$ git clone https://github.com/kotakanbe/goval-dictionary.git
$ cd goval-dictionary
$ make install
脆弱性情報ダウンロード

でもって脆弱性情報をダウンロード。

$ cd $HOME
$ go-cve-dictionary fetchnvd -last2y
$ go-cve-dictionary fetchjvn -last2y
$ goval-dictionary fetch-redhat 7
設定ファイルを書く

ここまで適当にやっちゃっていますが、上記の脆弱性ダウンロードは実行したカレントディレクトリをダウンロードしてDBを作成しちゃいます。まぁチェック前にはかならず上記ダウンロードをしないといけないのでどこでもいいんですけどね。
で、vulsの設定ファイルを書きます。こんな感じ。config.tomlという名前で保存。

[default]
port    = "22"
user    = "vuls"
keyPath = "/home/hoge/.ssh/vuls_rsa"

[servers]
[servers.example01]
host    = "172.16.1.1"

defaultセクションにあるuserはsshでリモートチェックする場合に利用するユーザ名。これ既存ユーザ名でもいいんですが、セキュリティホールになる可能性があるので、新しくユーザを作成した方がいいでしょう。
でもってkeyPathには新規に作成したsshキーペアの秘密鍵ファイルを指定。鍵作成時にはノーパスワードにするとのちのち面倒がありません。
書いたら一応チェック。

$ vuls configtest
チェック対象側の設定

こんどはチェック対象側機器の設定。
先ほど書いたようにユーザを作成。

# groupadd vuls
# useradd vuls 

GIDやUIDは適当に。
作成したアカウントの$HOME/.sshに上記で作成した新規sshキーペアの公開鍵ファイルを仕込みます。

/etc/sudoersの設定

チェック対象機器の/etc/sudoersを設定。visudoで以下の二行を追加。

vuls ALL=(ALL) NOPASSWD:/usr/bin/yum --color=never repolist, /usr/bin/yum --color=never --security updateinfo list updates, /usr/bin/yum --color=never --security updateinfo updates, /usr/bin/repoquery, /usr/bin/yum --color=never changelog all *
Defaults:vuls env_keep="http_proxy https_proxy HTTP_PROXY HTTPS_PROXY"

以上でリモートチェックができるはずです。