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


前回の記事
あなたのサーバは本当に安全ですか?今もっともイケてる脆弱性検知ツールVulsを使ってみた

はじめに

先日書かせていただいたVulsの記事の反響がすごく、とても驚いています。
個人的に感じていたツールの優秀さに、共感頂けたのはとても嬉しいです。

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

Vulsとは

Github: vuls
日本語のREADME: vuls japanese

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

Docker対応の詳細

README #Docker

特徴

  • 設定ファイルにコンテナ名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に入る
console
$ ssh -i /Users/matsunosadayuki/.ssh/vuls-dev.pem [email protected]
  • ダウンロードできるdockerの確認
target_amazon
$ sudo yum info docker

読み込んだプラグイン:priorities, update-motd, upgrade-helper
インストール済みパッケージ
名前                : docker
アーキテクチャー    : x86_64
バージョン          : 1.9.1
  • dockerインストール
target_amazon
$ sudo yum install docker
  • dockerグループにec2-userを追加
target_amazon
$ sudo usermod -aG docker ec2-user
  • ubuntu12.04のイメージを取得
target_amazon
$ sudo docker pull ubuntu:12.04
  • ubuntu12.04を起動
target_amazon
$ sudo docker run -d -t  ubuntu:12.04 bin/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を実行するサーバにて

  • 設定ファイルの作成
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の準備
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実行
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

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

注意点

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

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

その他便利機能

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

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

さいごに

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