ちょっと話題の記事

セキュリティテストツールvulsをインストールしてみた

2016.07.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちわ、ヨシエです。
先日、Infrastructure as Code Casualという Infrastructure as Codeの勉強会に参加してきました。
勉強会で@koiwaさんが発表されたセキュリティテストツールのVulsを紹介して聞いて、
どんなものかと興味が出たのでAWS環境でVulsを使ってみました。

Vulsとは

VulsはCVEの情報を取得して指定したサーバーにインストールされているパッケージで脆弱性があるかを
チェックするツールになります。

CVEとは

簡単に言うとソフトウェアの脆弱性を纏めたデータベースになります。
脆弱性情報を確認する時にはCVEのサイトを覗いてみると脆弱性の危険性について、スコア別になっているので指摘されている部分とスコアを 確認すると良いと思われます。

Common Vulnerabilities and Exposures
脆弱性情報のサイトでよく目にする「CVE」とは?

インストール手順

検証環境

EC2インスタンス(Amazon Linux:t2.micro)

パッケージ準備

Vulsを利用するには以下のパッケージインストールが必要になります。

  • sqlite3
  • git
  • gcc
  • go

※goのみが1.6以降のバージョンをサポートとのことで別途DLしてインストールする必要があります。

$ sudo yum install -y sqlite3 git gcc

$ wget https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz

$ sudo tar -C /usr/local -xzf go1.6.3.linux-amd64.tar.gz
$ mkdir $HOME/go
$ ls -ld $HOME/go
drwxrwxr-x 2 ec2-user ec2-user 4096 7月 26 10:49 /home/ec2-user/go

Go変数設定スクリプト作成

$ sudo vim /etc/profile.d/goenv.sh
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

$ source /etc/profile.d/goenv.sh

Vulsログ置き場を作成、CVE情報取得ツール(go-cve-dictionary)インストール

$ sudo mkdir /var/log/vuls
$ sudo chown ec2-user /var/log/vuls
$ sudo chmod 700 /var/log/vuls
$ go get github.com/kotakanbe/go-cve-dictionary

2002年 〜 2016年のCVE情報取得

$ for i in {2002..2016}; do go-cve-dictionary fetchnvd -years $i; done

Vulsインストール

$ go get github.com/future-architect/vuls

Vulsコンフィグファイル作成

vim config.toml
[servers.TEST-A]
host = "ec2-aa-aa-aa-aa.ap-northeast-1.compute.amazonaws.com"
port = "22"
user = "ec2-user"
keyPath = "/home/ec2-user/.ssh/xxxx"

[servers.TEST-B]
host = "ec2-bb-bb-bb-bb.ap-northeast-1.compute.amazonaws.com"
port = "22"
user = "ec2-user"
keyPath = "/home/ec2-user/.ssh/xxxx"

コンフィグ正常性テスト

 vuls configtest
[Jul 26 11:09:24] INFO [localhost] Validating Config...
[Jul 26 11:09:24] INFO [localhost] Detecting Server/Contianer OS...
[Jul 26 11:09:24] INFO [localhost] Detecting OS of servers...
[Jul 26 11:09:25] INFO [localhost] (1/2) Detected: TEST-A: amazon 2016.03
[Jul 26 11:09:25] INFO [localhost] (2/2) Detected: TEST-B: amazon 2016.03
[Jul 26 11:09:25] INFO [localhost] Detecting OS of containers...
[Jul 26 11:09:25] INFO [localhost] SSH-able servers are below...

脆弱性スキャン開始

$ vuls prepare
INFO[0000] Start Preparing (config: /home/ec2-user/config.toml)
[Jul 26 11:09:38] INFO [localhost] Detecting OS...
[Jul 26 11:09:38] INFO [localhost] Detecting OS of servers...
[Jul 26 11:09:38] INFO [localhost] (1/2) Detected: TEST-B: amazon 2016.03
[Jul 26 11:09:38] INFO [localhost] (2/2) Detected: TEST-A: amazon 2016.03
[Jul 26 11:09:38] INFO [localhost] Detecting OS of containers...
[Jul 26 11:09:38] INFO [localhost] SSH-able servers are below...
TEST-B TEST-A
[Jul 26 11:09:38] INFO [localhost] Installing...
[Jul 26 11:09:38] INFO [TEST-A] Nothing to do
[Jul 26 11:09:38] INFO [TEST-B] Nothing to do
[Jul 26 11:09:38] INFO [localhost] Success

$ vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3
INFO[0000] Start scanning
INFO[0000] config: /home/ec2-user/config.toml
INFO[0000] cve-dictionary: /home/ec2-user/cve.sqlite3
[Jul 26 11:09:45] INFO [localhost] Validating Config...
[Jul 26 11:09:45] INFO [localhost] Detecting Server/Contianer OS...
[Jul 26 11:09:45] INFO [localhost] Detecting OS of servers...
[Jul 26 11:09:45] INFO [localhost] (1/2) Detected: TEST-A: amazon 2016.03
[Jul 26 11:09:45] INFO [localhost] (2/2) Detected: TEST-B: amazon 2016.03
[Jul 26 11:09:45] INFO [localhost] Detecting OS of containers...
[Jul 26 11:09:45] INFO [localhost] SSH-able servers are below...
TEST-A TEST-B
[Jul 26 11:09:45] INFO [localhost] Detecting Platforms...
[Jul 26 11:09:45] INFO [localhost] (1/2) TEST-A is running on aws
[Jul 26 11:09:45] INFO [localhost] (2/2) TEST-B is running on aws
[Jul 26 11:09:45] INFO [localhost] Scanning vulnerabilities...
[Jul 26 11:09:45] INFO [localhost] Check required packages for scanning...
[Jul 26 11:09:45] INFO [localhost] Scanning vulnerable OS packages...
[Jul 26 11:09:47] INFO [TEST-A] Fetching CVE details...
[Jul 26 11:09:47] INFO [TEST-A] Done
[Jul 26 11:09:47] INFO [TEST-B] Fetching CVE details...
[Jul 26 11:09:47] INFO [TEST-B] Done
[Jul 26 11:09:47] INFO [localhost] Scanning vulnerable software specified in the CPE...
[Jul 26 11:09:47] INFO [localhost] Insert to DB...
[Jul 26 11:09:48] INFO [localhost] Reporting...

脆弱性試験結果出力

vuls tui

2016-07-26 20.11.30

最後に

私自身がGoを初心者ということでインストールに悩むかと思いましたが、
Github上のチュートリアルが充実しているおかげで、実際のインストールからスキャン実行までは1時間程度で出来る難易度で
ターミナルで発見した脆弱性を見るtuiやS3バケットへのレポート出力機能が非常にシンプルなので使い勝手は良い印象でした。
少し前までやってた案件の時にこれを知っていたら、私はどれだけ幸せだったんだろうと切ない気持ちになりました。