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