速習vuls

# 速習vuls: 2016.07.05時点の物
取りあえずvulsを使ってみる、の環境を用意する手順のようなもの。

- 2016.07.04頃に公開された README.ja.md をベースに構築
- VMware上に仮想マシンとして構築
    - 今回はDockerは利用しません
- 自分自身をスキャンする

# 概要
以下の作業が必要。

- OSの構築
- vuls実行ユーザ(vuls)の作成
- go言語環境の導入
- git2系の導入
- go-cve-dictionary, vulsのデプロイ
- vulsの設定
- prepare, sacan
- vulsrepoの導入

方針は以下の通り

- まずは自分自身をチェックできるようにする
- 実行ユーザは vuls とする

# インストール
## OSの構築

ご自由に

- ssh鍵認証できるようにしておきましょう


## vulsをつかう

vulsユーザでvulsを動かしたいよ。

``` 
[root]# addusr vuls
[root]# passwd vuls
[root]# visudo
vuls  ALL=(ALL)  ALL
[root]# su - vuls
[vuls]$ ssh-keygen -t rsa
[vuls]$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
[vuls]$ chmod 600 .ssh/authorized_keys
```

goを入れる

```
[vuls]$ sudo yum install sqlite git gcc
[vuls]$ wget https://storage.googleapis.com/golang/go1.6.2.linux-amd64.tar.gz
[vuls]$ sudo tar -C /usr/local -xzf go1.6.2.linux-amd64.tar.gz

[vuls]$ mkdir $HOME/go
[vuls]$ sudo vi /etc/profile.d/goenv.sh
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=/usr/local/bin:$PATH:$GOROOT/bin:$GOPATH/bin
[vuls]$ source /etc/profile.d/goenv.sh
[vuls]$ go version
go version go1.6.2 linux/amd64
```

gitは2.x系が必要なの。

```
[root]# git --version
git version 1.7.1
[root]# yum remove git
[root]# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
[root]# wget https://www.kernel.org/pub/software/scm/git/git-2.8.2.tar.gz
[root]# tar zxvf git-*.tar.gz
[root]# cd git-*
[root]# ./configure --prefix=/usr/local
[root]# make prefix=/usr/local all
[root]# make prefix=/usr/local install
[root]# git --version
git version 2.8.2
```

go-cve-dictionary, vuls を導入

```
[vuls]$ sudo mkdir /var/log/vuls
[vuls]$ sudo chown vuls /var/log/vuls
[vuls]$ sudo chmod 700 /var/log/vuls
[vuls]$ mkdir vuls; cd vuls
[vuls]$ go get github.com/kotakanbe/go-cve-dictionary
[vuls]$ for i in {2002..2016}; do go-cve-dictionary fetchnvd -years $i; done
...暫く待ち...
[vuls]$ go get github.com/future-architect/vuls
[vuls]$ vuls help
Usage: vuls <flags> <subcommand> <subcommand args>
...
```

config作成

```
[vuls]$ vi /home/vuls/vuls/config.toml
[servers]

[servers.127-0-0-1]
host = "127.0.0.1"
port = "22"
user = "vuls"
keyPath = "/home/vuls/.ssh/id_rsa"
```

prepare, scan。これで自分自身をスキャンできる。

```
[vuls]$ vuls prepare -ask-sudo-password
sudo password: *****
[vuls]$ vuls scan -ask-sudo-password -cve-dictionary-dbpath=/home/vuls/vuls/cve.sqlite3
sudo password: *****
INFO[0011] Start scanning
...
[vuls]$ vuls tui
```

![vuls_tui.png](https://qiita-image-store.s3.amazonaws.com/0/124868/ca306e8c-39b5-f24d-8697-bbffe9301c09.png)


## vulsrepoをつかう

まずは json report of vuls を作る

```
[vuls]$ vuls scan -ask-sudo-password -cve-dictionary-dbpath=/home/vuls/vuls/cve.sqlite3 -report-json
...再度scan程度の時間掛かるよ...
```

httpdのインストールと、vulsrepoの導入

```
[root]# yum install httpd
[root]# cd /var/www/html
[root]# wget https://github.com/usiusi360/vulsrepo/archive/master.zip
[root]# unzip master.zip
[root]# mv ./vulsrepo-master/src /var/www/html/vulsrepo
[root]# cd vulsrepo
[root]# ln -s /home/vuls/vuls/results/current current
; 但し、WEBサーバが/home/vuls/vuls/results/currentを見る権限が必要。
; 必要に応じて権限調整。
```

後は見るだけ。

- http://HOSTNAME/vulsrepo

![vulsrepo.png](https://qiita-image-store.s3.amazonaws.com/0/124868/b531f16d-8276-b41b-402a-a94e511e6a9c.png)

# アップデート

アプリケーション自体のアップデートは、仕様変更等の可能性があるので、様子を見て時々実施が良いでしょう。

go-cve-dictionaryのデータ自体は、定期的にアップデートすべきでしょう。この情報が更新されないと、Vulsで検知できません。

## ソフトウェアアップデート

### glide install

glideが必要なので、入れましょう
- https://github.com/Masterminds/glide/releases から、対応するアーキテクチャのファイルを取得
- 展開されてファイルに glide があるので、/usr/local/bin 辺りにコピーする

```
$ wget https://github.com/Masterminds/glide/releases/download/0.10.1/glide-0.10.1-linux-amd64.tar.gz
$ tar xvfz glide-0.10.1-linux-amd64.tar.gz
$ cd linux-amd64
$ sudo cp ./glide /usr/local/bin
```

### go-cve-dictionary

構成次第ではgitのパスが /usr/local/bin/git のはずなので、必要に応じてPATHを変える等してください。

```
$ cd $GOPATH/src/github.com/kotakanbe/go-cve-dictionary
$ git pull
$ glide install
$ go install
```

### vuls

```
$ cd $GOPATH/src/github.com/future-architect/vuls
$ git pull
$ glide install
$ go install
```

### vulsrepo

master.zipをダウンロードして、DocumentRootに展開する。
- wget https://github.com/usiusi360/vulsrepo/archive/master.zip
- 単純に、staticなコンテンツ更新と同じ


## go-cve-dictionaryのCVEデータアップデート

クリティカルなシステムでなければ、1週間毎位で実施するようにcronに仕込んだ方が良いでしょう。

クリティカルなシステムの場合、毎日実施したほうが良いでしょう。
- jvnの場合、日本時間で更新されているため、公表との時差を少なくしたい場合は 昼過ぎ辺りに確認するのが良いでしょう。

```
$ go-cve-dictionary fetchjvn -week
```