はじめに
今回はVulsを用いた脆弱性の検査を行う。
対象とするシステムはCentOS 7とする。
また、本サイトは個人運営のため、メンテナンスが不十分であり対象パッケージのアップデートに追従できていないことに注意!
流れは以下の通り。
- Vulsインストールの下準備
- 脆弱性情報の準備
- Vulsによる脆弱性の検査
- 可視化
以上について順を追って記載する。
オフィシャルなインストール方法は以下のURLに示されており、参考にしている。
https://vuls.io/docs/en/install-manually-centos.html
Vulsインストールの下準備
実行ユーザの作成
Vulsを実行するユーザの作成を行う。
|
# useradd vulsuser # passwd vulsuser |
sudoを許可するためにvisudoでユーザに許可をします。
|
# visudo # 以下を最終行に追加する。 Defaults:vuls !requiretty vulsuser ALL=(root) NOPASSWD: ALL Defaults:vuls env_keep="http_proxy https_proxy HTTP_PROXY HTTPS_PROXY" |
セキュリティ確保の為、不要なユーザによるsudoを許可したくない場合には、作業終了後に上記の内容を削除する。
※継続的なモニタリングを行う場合には、残しておく必要あり。
ログ格納用ディレクトリの作成
vulsのログを格納するディレクトリを作成する。
|
# mkdir -p /var/log/vuls # chown vulsuser /var/log/vuls # chmod 700 /var/log/vuls |
go環境のインストール
以下のサイトからパッケージをダウンロードする。
https://golang.org/dl/
本資料作成時点における最新バージョンは1.12でしたので、以下のコマンドを実行し解凍する。
|
tar -C /usr/local -zxf go1.12.linux-amd64.tar.gz |
goの環境変数を設定する。
/etc/profile.d/goenv.shを新たに作成する。
|
# vi /etc/profile.d/goenv.sh export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin |
ここでvulsの実行ユーザでgo環境の確認を行う。
環境変数を読み込む。
|
$ source /etc/profile.d/goenv.sh <====これは基本的に不要である。気持ちw $ go version go version go1.12 linux/amd64 |
バージョンが正しく表示されていれば、goのインストールは成功している。
脆弱性情報の準備
NIST(アメリカ国立標準技術研究所)が提供するNVDと、IPA(情報処理推進機構)が提供するJVNから脆弱性情報を取得する。
gitのサイトを覗いてみると、どうも日本人の方がまとめてくれているみたいですね。感謝!
|
$ mkdir -p $GOPATH/src/github.com/kotakanbe $ cd $GOPATH/src/github.com/kotakanbe $ pwd /home/vulsuser/go/src/github.com/kotakanbe $ git clone https://github.com/kotakanbe/go-cve-dictionary.git $ cd go-cve-dictionary/ $ make install |
今度は、Linuxのディストリビュータが提供されているOVALも取得する。
|
$ cd $GOPATH/src/github.com/kotakanbe $ git clone https://github.com/kotakanbe/goval-dictionary.git $ cd goval-dictionary/ $ make install |
各データベースを構築する。
NVDのデータベースを構築する。
相当古い情報から取得するので、時間は結構かかる。
オフィシャルのインストールマニュアルには、AWSで10分程度となっていたが、1〜2時間程度は覚悟した方が良さそう(^^;
出力さているログを見ていると、西暦が記されたファイルがちらほら見受けられるので、進捗状況が分かると思う。
|
$ for i in `seq 2002 $(date +"%Y")`; do go-cve-dictionary fetchnvd -years $i; done |
JVNのデータベースを構築する。
こちらは更に古くて1998年以降のデータベースになる。
オフィシャルのインストールマニュアルには、こちらもAWSで10分程度とされているが、実際どれだけかかるのか。。。
2005年のデータまでは比較的速やかに登録が進むのだが、2006年くらいからいきなり重くなる(^^;
日本では2006年くらいから本気で取り組みを始めたということなのだろうか?(笑)
|
$ for i in `seq 1998 $(date +"%Y")`; do go-cve-dictionary fetchjvn -years $i; done |
OVALのデータベースを構築する。
|
$ goval-dictionary fetch-redhat 7 |
ここからはある意味でオプションデータベースみたいな感じもするけど、オフィシャルマニュアルに記載があるので、合わせて登録する。
gostのデータベースを構築する。
これまでよりは少し短い時間で構築できるが、それも10分程度は覚悟。
ディストリビューたから脆弱性に関するパッチが提供されていないものを検出出来るとのこと。
|
$ sudo mkdir /var/log/gost $ sudo chown vulsuser /var/log/gost $ sudo chmod 700 /var/log/gost $ $ mkdir -p $GOPATH/src/github.com/knqyf263 $ cd $GOPATH/src/github.com/knqyf263 $ git clone https://github.com/knqyf263/gost.git $ cd gost $ make install |
Exploitのデータベースを構築する。
エクスプロイトコードを表示出来るExploit DBがVuls 0.6.0から提供されているので、それを使いたい場合に追加する。ここもオフィシャルマニュアルの丸コピ
|
$ sudo mkdir /var/log/go-exploitdb $ sudo chown vulsuser /var/log/go-exploitdb $ sudo chmod 700 /var/log/go-exploitdb $ $ mkdir -p $GOPATH/src/github.com/mozqnet $ cd $GOPATH/src/github.com/mozqnet $ git clone https://github.com/mozqnet/go-exploitdb.git $ cd go-exploitdb $ make install |
Vulsのインストール
データベースの準備が整い、これからVulsのインストールを行う。
ここは、オフィシャルマニュアルを丸コピ!
※Vulsを再インストールするとかアップデートする際には、ここでインストールするソースを含めた生成物を削除する必要があるらしい。方法については後述する「Vulsのアップデート」に記したが、オフィシャルマニュアルも合わせて確認すること。
|
$ mkdir -p $GOPATH/src/github.com/future-architect $ cd $GOPATH/src/github.com/future-architect $ git clone https://github.com/future-architect/vuls.git $ cd vuls $ make install |
Vulsの設定ファイルを作成する。
|
$ cd $ vi config.toml [servers] [servers.localhost] host = "localhost" port = "local" |
設定ファイルの確認を以下のコマンドで行う。
エラーが表示されなければ完了である。
Vulsによる脆弱性の検査
ローカルスキャンの方法を記載する。
ローカルスキャン以外にもリモートスキャンを行う方法等も準備されているので、必要に応じてセットアップなどを行ってやってみるのも良いかと思う。
ローカルスキャンのコマンドは至ってシンプルで以下のコマンドで実施する。
Vulsのアップデート(新規インストール時は不要)
Vulsをアップデートする時は、実行モジュールとソースを全削除してから行うらしい。
ということで、ここで記載する内容は、Vulsをアップデートする際に行う事前作業であり、新規インストール時には必要ない。
|
$ rm -rf $GOPATH/pkg/linux_amd64/github.com/future-architect/vuls/ $ rm -rf $GOPATH/src/github.com/future-architect/vuls/ $ cd $GOPATH/src/github.com/future-architect $ git clone https://github.com/future-architect/vuls.git $ cd vuls $ make install |
スキャン結果の確認
スキャン結果を確認してみる。
困ったことに、-format-short-textオプションが使えなくなっているみたい。
オフィシャルマニュアルにはまだその記載があるのだが、諦めて他の出力結果を試してみる。
デフォルトの出力結果を出してみた。
コマンドは以下の通り。
ちなみに、この時点で-lang=jaは全く意味が無かった(笑)
日本語が出てくれることを期待しただが。。。結果は以下の通り
Total: 200 (High:49 Medium:133 Low:18 ?:0),
全体で200の脆弱性を確認している。
各レベルに対応した数値が提示されている。
199/200 Fixed
200件中199件でアップデートパッケージが提供されている。
後の説明は省略。。。。
表は、それぞれの脆弱性に関するレポートが示される。
TUI形式で表示することも可能。
終了は、Ctrl+Cで行う。
VulsRepoを用いた解析方法などもあるようだが、今回はここまで。