脆弱性スキャンツール Vuls を使ってみた
Go言語で書かれている脆弱性スキャンツール Vuls(バルス) を Ubuntu で試してみた。
- go-cve-dictionary
https://github.com/kotakanbe/go-cve-dictionary
CVEデータをNVDやJVNから取得してデータベースに保存する
これ単体でもサーバーを起動してCVEのIDとかCPEで検索できる
CVE とは
https://www.ipa.go.jp/security/vuln/CVE.html
CPE とは
https://www.ipa.go.jp/security/vuln/CPE.html
- goval-dictionary
https://github.com/kotakanbe/goval-dictionary
OVAL とは
https://www.ipa.go.jp/security/vuln/OVAL.html
- go-exploitdb
https://github.com/mozqnet/go-exploitdb
exploitdb https://www.exploit-db.com/
githubrepos
https://github.com/search?o=desc&q=CVE&s=&type=Repositories
awesomepoc
https://github.com/qazbnm456/awesome-cve-poc
目次
vuls用のユーザーを追加
必ずしもユーザーを追加する必要はない
ユーザーの作成
$ sudo adduser vuls
追加したユーザーが sudo できるようにする
$ visudo vuls ALL=(ALL) ALL
ユーザーを切り替える
$ su - vuls
Goのインストール
Goがインストール済みであれば必要ない。
現在の最新版 go1.13.7 をダウンロードして /usr/local に配置
$ curl -LO https://dl.google.com/go/go1.13.7.linux-amd64.tar.gz $ sudo tar -C /usr/local -xzf go1.13.7linux-amd64.tar.gz $ mkdir $HOME/go $ vim .bashrc export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin $ source .bashrc $ go version go version go1.13.7 linux/amd64
インストール
ひとつひとつインストールを書くのは面倒なので、以下
ログのディレクトリ作成と各コマンドのインストールをシェルスクリプトにまとめもの
install.sh
#!/bin/bash func_create_log_dirs() { local DIRS="vuls gost go-exploitdb" local for v in ${DIRS[@]} do if [ ! -d /var/log/$v ]; then echo "Create: log directory /var/log/$v" sudo mkdir /var/log/$v sudo chown "$USER" /var/log/$v sudo chmod 700 /var/log/$v fi done } func_install_go-cve-dictionary() { echo "Installing: 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; } func_install_goval-dictionary() { echo "Installing: goval-dictionary" mkdir -p $GOPATH/src/github.com/kotakanbe && \ 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; } func_install_go-exploitdb() { echo "Installing: 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 && \ ln -s $GOPATH/src/github.com/mozqnet/go-exploitdb/go-exploitdb.sqlite3 $HOME/go-exploitdb.sqlite3; } func_install_gost() { echo "Installing: 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 && \ ln -s $GOPATH/src/github.com/knqyf263/gost/gost.sqlite3 $HOME/gost.sqlite3; } func_install_vuls() { echo "Installing: 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; } func_main() { set -eu func_create_log_dirs type go-cve-dictionary > /dev/null 2>&1 || func_install_go-cve-dictionary type goval-dictionary > /dev/null 2>&1 || func_install_goval-dictionary type go-exploitdb > /dev/null 2>&1 || func_install_go-exploitdb type gost > /dev/null 2>&1 || func_install_gost type vuls > /dev/null 2>&1 || func_install_vuls } func_main
実行
$ chmod 777 install.sh $ ./install.sh
データの取得
2002年からのCVEデータをNVDから取得して ~/cve.sqlite3 にする
かなり時間がかかるので試すだけなら -latest
でいい
$ for i in `seq 2002 $(date +"%Y")`; do go-cve-dictionary fetchnvd -years $i; done
$ goval-dictionary fetch-ubuntu 18 $ gost fetch debian $ go-exploitdb fetch exploitdb $ go-exploitdb fetch awesomepoc $ go-exploitdb fetch githubrepos
Vulsの使い方
ローカルスキャンするための設定ファイル
$ cd $HOME $ vim config.toml [servers] [servers.localhost] host = "localhost" port = "local"
設定ファイルのチェック
$ vuls configtest
スキャン
$ vuls scan
リポートを表示
$ vuls report -format-one-line-text localhost Total: 421 (High:74 Medium:314 Low:33 ?:0) 0/421 Fixed 2122 installed 5 exploits en: 2, ja: 0 alerts より詳細なりポートを表示する場合は以下のオプションを使う $ vuls report -format-list $ vuls report -format-full-text | less $ vuls tui