4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vulsをdocker-composeで手っ取り早く使う

Last updated at Posted at 2019-06-16

目的

vuls で脆弱性スキャンできるようになる。

前提

以下のセットアップが完了していること。
・CentOS7
・docker
・docker-compose
  → /usr/local/bin/docker-compose にあるものとする

動作を確認した構成は次の通り。

 # cat /etc/centos-release
 CentOS Linux release 7.6.1810 (Core)
 
 # docker -v
 Docker version 18.09.6, build 481bc77156
 
 # docker-compose -v
 docker-compose version 1.23.2, build 1110ad01

ディレクトリ構造

ディレクトリ構造は以下の通り。


/root/lab/vuls/docker-compose.yaml

docker-compose.yaml

データベースは Mysql を使う構成です。

docker-compose.yaml
version: '3'
services:
  vuls:
    image: vuls/vuls
    volumes:
      - ~/.ssh:/root/.ssh:ro
      - ./:/vuls
      - ./vuls-log:/var/log/vuls
    depends_on:
      - db
  cve:
    image: vuls/go-cve-dictionary
    volumes:
      - ./:/vuls
      - ./vuls-log:/var/log/vuls
    depends_on:
      - db
  oval:
    image: vuls/goval-dictionary
    volumes:
      - ./:/vuls
      - ./vuls-log:/var/log/vuls
    depends_on:
      - db

  gost:
    image: vuls/gost
    volumes:
      - ./:/vuls
      - ./vuls-log:/var/log/vuls
    depends_on:
      - db

  go-exploitdb:
    image: princechrismc/go-exploitdb
    volumes:
      - ./:/vuls
      - ./vuls-log:/var/log/vuls
    depends_on:
      - db

  db: # mysql Database
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: cve
    volumes:
      - ./data:/var/lib/mysql
    command: mysqld --sql_mode="" --default-authentication-plugin=mysql_native_password

  vulsrepo:
    image: vuls/vulsrepo
    volumes:
      - ./results:/vuls/results/
      - ./:/vuls
      - ./vuls-log:/var/log/vuls
    depends_on:
      - db
    ports:
      - "5111:5111"

docker-compose 起動

# cd /root/lab/vuls/
# docker-compose up -d

MySQL を使うための準備

docker-compose.yaml で cve という database を作成していますが、
exploitdb / gost / oval 用の database は追加で作ります。

まずは MySQL のコンテナにログイン


# docker-compose exec db bash

次に MySQL にログイン


# mysql -u root -p password

database を作成


mysql> create database exploitdb;
mysql> create database gost;
mysql> create database oval;
mysql> exit

コンテナからログアウト
# exit

初回用スクリプト

各種定義ファイルをダウンロード(OVAL と gost は RHEL のみ)
かなり時間がかかります。

/root/lab/vuls/first_download.sh

# 新規作成(CVE)
for i in `seq 2002 $(date +"%Y")`; do     /usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm cve fetchnvd -dbtype=mysql -dbpath="root:password@tcp(db:3306)/cve?parseTime=true" -years $i;   done

# 新規作成(JVN)
for i in `seq 1998 $(date +"%Y")`; do /usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm cve fetchjvn -dbtype=mysql -dbpath="root:password@tcp(db:3306)/cve?parseTime=true" -years $i; done

# OVAL (RHEL)
/usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm oval fetch-redhat -dbtype=mysql -dbpath="root:password@tcp(db:3306)/oval?parseTime=true" 6 7

## gost (RHEL)
/usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm gost fetch redhat --dbtype=mysql --dbpath="root:password@tcp(db:3306)/gost?parseTime=true"

## expliotdb
/usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm go-exploitdb fetch exploitdb --dbtype=mysql --dbpath="root:password@tcp(db:3306)/exploitdb?parseTime=true"

更新用スクリプト

/root/lab/vuls/vuls_update.sh
# 更新(CVE)
/usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm cve fetchnvd -dbtype=mysql -dbpath="root:password@tcp(db:3306)/cve?parseTime=true" -latest

# 更新(JVN)
/usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm cve fetchjvn -dbtype=mysql -dbpath="root:password@tcp(db:3306)/cve?parseTime=true" -latest

# OVAL (RHEL)
/usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm oval fetch-redhat -dbtype=mysql -dbpath="root:password@tcp(db:3306)/oval?parseTime=true" 6 7

## gost (RHEL)
/usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm gost fetch redhat --dbtype=mysql --dbpath="root:password@tcp(db:3306)/gost?parseTime=true"

## expliotdb
/usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm go-exploitdb fetch exploitdb --dbtype=mysql --dbpath="root:password@tcp(db:3306)/exploitdb?parseTime=true"

vuls スキャン用設定ファイルを作成

# cd /root/lab/vuls/
# vi config.xoml

config ファイルに対象のサーバを登録します。
また、結果の通知を slack にも行えるようにしています。

/root/lab/vuls/confi.xoml
# slack と連携する場合(Incoming Webhook)
[slack]
hookURL      = "https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXXX/XXXXXXXXXXXXXXXXXXX"
channel      = "#vuls_results"
authUser     = "vuls report"

[servers]
# 鍵認証で接続
# VulsはSSHパスワード認証をサポートしてないので、SSHの鍵認証の設定をする必要があります。
# localhost上でkeypairを作成し、remote host上の~/.ssh/authorized_keysに追加します。
[servers.k8s-master1]
host        = "192.168.1.21"
port        = "22"
user        = "root"
keyPath     = "/root/.ssh/id_rsa"

[servers.k8s-master2]
host        = "192.168.1.22"
port        = "22"
user        = "root"
keyPath     = "/root/.ssh/id_rsa"

[servers.k8s-master3]
host        = "192.168.1.23"
port        = "22"
user        = "root"
keyPath     = "/root/.ssh/id_rsa"

vuls 設定確認・スキャン・レポート

/root/lab/vuls/scan.sh
# Scan 設定確認
/usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm vuls configtest -config=./config.toml

# Scan 実行
/usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm vuls scan -config=./config.toml

# Report(To Slack)
/usr/local/bin/docker-compose -f /root/lab/vuls/docker-compose.yaml run --rm vuls report -ignore-unfixed -lang ja -to-slack -config=./config.toml -cvedb-type=mysql -cvedb-url="root:password@tcp(db:3306)/cve?parseTime=true" -ovaldb-type=mysql -ovaldb-url="root:password@tcp(db:3306)/oval?parseTime=true" -gostdb-type=mysql -gostdb-url="root:password@tcp(db:3306)/gost?parseTime=true" -exploitdb-type=mysql -exploitdb-url="root:password@tcp(db:3306)/exploitdb?parseTime=true"

report のオプション

-ignore-unfixed :未修正の脆弱性を表示させない。
-lang ja     :日本語でレポートを表示する。
-to-slack     :slack に通知する。

実際に使ってやってみる

/root/lab/vuls/first_download.sh
/root/lab/vuls/vuls_update.sh
/root/lab/vuls/scan.sh

以上となります。

4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?