golangの日記

Go言語を中心にプログラミングについてのブログ

脆弱性スキャンツール Vuls を使ってみた

golang.png


Go言語で書かれている脆弱性スキャンツール Vuls(バルス) を Ubuntu で試してみた。











目次



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