進化するVuls!稼働中のDockerコンテナの脆弱性を検知する

前回の記事
[あなたのサーバは本当に安全ですか？今もっともイケてる脆弱性検知ツールVulsを使ってみた](http://qiita.com/sadayuki-matsuno/items/0bb8bb1689425bb9a21c)

# はじめに

先日書かせていただいた[Vulsの記事](http://qiita.com/sadayuki-matsuno/items/0bb8bb1689425bb9a21c)の反響がすごく、とても驚いています。
個人的に感じていたツールの優秀さに、共感頂けたのはとても嬉しいです。

さて、今回は、 **Vulsが稼働中のDockerコンテナの脆弱性検知** に対応したので、そちらを紹介したいと思います。

# Vulsとは

![download.png](https://raw.githubusercontent.com/future-architect/vuls/master/img/vuls_logo.png)


Github: [vuls](https://github.com/future-architect/vuls)
日本語のREADME: [vuls japanese](https://github.com/future-architect/vuls/blob/master/README.ja.md)

Vulsはgolang製の脆弱性検知ツールです。
VulsはVULnerability Scannerの略です。
「バルス！」

# Docker対応の詳細

[README #Docker](https://github.com/future-architect/vuls#hello-vuls-in-a-docker-container)

![スクリーンショット 2016-05-24 20.13.15.png](https://qiita-image-store.s3.amazonaws.com/0/55672/cde81a14-cf7b-589c-4bb3-af1d8fbde44b.png "スクリーンショット 2016-05-24 20.13.15.png")

## 特徴

- 設定ファイルにコンテナ名orコンテナIDを登録するだけでscan出来る
- **動いているコンテナの脆弱性**を調べることができる
- もちろん **TUI** で確認出来る！
- コンテナのOSは本体と同じく以下に対応している

|Distribution|Release|
|:--|:--|
|Ubuntu	|12, 14, 16|
|Debian|	7, 8|
|RHEL|	4, 5, 6, 7|
|CentOS	|5, 6, 7|
|Amazon Linux|All|


# 実際に試してみた。

## 環境

|Role|OS|
|:--|:--|
|Dockerホスト|AmazonLinux|
|Dockerコンテナ|Ubuntu12.04|
|VulsScanner|OSX|

## 脆弱性スキャン対象のamazonにて

- ホストOSであるAmazonに入る

```bash:console
$ ssh -i /Users/matsunosadayuki/.ssh/vuls-dev.pem ec2-user@54.199.215.192
```

- ダウンロードできるdockerの確認

```bash:target_amazon
$ sudo yum info docker

読み込んだプラグイン:priorities, update-motd, upgrade-helper
インストール済みパッケージ
名前                : docker
アーキテクチャー    : x86_64
バージョン          : 1.9.1
```

- dockerインストール

```bash:target_amazon
$ sudo yum install docker
```

- dockerグループにec2-userを追加

```bash:target_amazon
$ sudo usermod -aG docker ec2-user
```
- ubuntu12.04のイメージを取得

```bash:target_amazon
$ sudo docker pull ubuntu:12.04
```
- ubuntu12.04を起動

```bash:target_amazon
$ sudo docker run -d -t  ubuntu:12.04 bin/bash
```

- コンテナの起動を確認

```bash:target_amazon
$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
65b284c96e29        ubuntu:12.04        "bin/bash"          23 hours ago        Up 19 minutes                           romantic_ptolemy
```

## Vuls Scanを実行するサーバにて

- 設定ファイルの作成

```bash:config.yml
[servers]

[servers.vuls-dev-amazon]
host         = "54.199.215.192"
port        = "22"
user        = "ec2-user"
keyPath     = "/Users/matsunosadayuki/.ssh/vuls-dev.pem"
containers = ["${running}"]
```

**"${running}"** と入力すると、動いているコンテナ全てを調べてくれる
個別に設定したい場合は、コンテナ名やコンテナIDを入力する

- scanの準備

```bash:console
$ vuls prepare

INFO[0000] Start Preparing (config: /Users/matsunosadayuki/vuls/config.toml)
[May 25 22:10:27]  INFO [localhost] Detecting OS...
[May 25 22:10:32]  INFO [localhost] (1/1) Detected vuls-dev-amazon: amazon 2016.03
[May 25 22:10:32]  INFO [localhost] Detecting Container OS...
[May 25 22:10:36]  INFO [localhost] Detected 65b284c96e29/romantic_ptolemy on vuls-dev-amazon: ubuntu 12.04
[May 25 22:10:36]  INFO [localhost] Installing...
[May 25 22:10:36]  INFO [vuls-dev-amazon_romantic_ptolemy] apt-get update...
[May 25 22:10:36]  INFO [vuls-dev-amazon] Nothing to do
[May 25 22:10:43]  INFO [localhost] Success
```

- scan実行

```bash:console
% vuls scan
INFO[0000] Start scanning (config: /Users/matsunosadayuki/vuls/config.toml)
[May 25 22:42:39]  INFO [localhost] Validating Config...
[May 25 22:42:39]  INFO [localhost] Detecting Server OS...
[May 25 22:42:43]  INFO [localhost] (1/1) Detected vuls-dev-amazon: amazon 2016.03
[May 25 22:42:43]  INFO [localhost] Detecting Container OS...
[May 25 22:42:46]  INFO [localhost] Detected 65b284c96e29/romantic_ptolemy on vuls-dev-amazon: ubuntu 12.04
[May 25 22:42:46]  INFO [localhost] Scanning vulnerabilities...
[May 25 22:42:46]  INFO [localhost] Check required packages for scanning...
[May 25 22:42:46]  INFO [localhost] Scanning vulnerable OS packages...
```

**おお。`Detecting Container OS...` ゆうとる。**

- tui

```
$ vuls tui
```

![スクリーンショット 2016-05-26 9.01.24.png](https://qiita-image-store.s3.amazonaws.com/0/55672/7170a8b8-b54f-e989-503d-0d629360421a.png "スクリーンショット 2016-05-26 9.01.24.png")

そしておなじみのTUIがなんと進化して、階層表示になってる！！
個人的には、たとえ脆弱性スキャンがなくてもこのTUIは利用する価値がある！

## 注意点

vulsは0.1.4で今回のdocker対応が入ったが、どうやらsqliteの構造が変わったらしい。
https://github.com/future-architect/vuls/pull/67

なので `Scan` や `TUI` を実行するときは、古いデータを削除する必要がある。

# その他便利機能

- `vuls history`
  - scanした履歴がみれる！
- `vuls discover`
  - CIDRを指定すると、そのネットワーク内にいるサーバをすべて探して設定ファイルを作ってくれる！

特に `vuls discover` は普通にそれだけでも十分有用なツールです！

# さいごに

Vulsはやっぱりすごいです。
一つの武器を手にいれた感じですね。
脆弱性検知だけじゃなくて、ターミナルでのサーバ管理にも使えそうですね！