aquasecurity/trivyとは、Dockerイメージの脆弱性を検知するOSSツールです。 FutureVulsではtrivyのスキャン結果を取り込み、FutureVuls上で脆弱性を管理できます。
FutureVulsでは、Amazon ECR, Google Container Registry連携を設定することでコンテナレジストリ上にあるDockerイメージの脆弱性スキャンが可能ですが、 2020年6月5日時点ではtrivyのほうが高性能のため、trivyを用いた脆弱性スキャンがオススメです。
本ドキュメントでは、以下の2パターンを解説します。
uuidgen
などのコマンドを使ってUUIDを作成バージョンはこちらから確認できます。
export TRIVY_VERSION=0.14.0
wget https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz
tar zxvf trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz
バージョンはこちらから確認できます。
export VULS_VERSION=0.13.9
wget https://github.com/future-architect/vuls/releases/download/v${VULS_VERSION}/trivy-to-vuls_${VULS_VERSION}_linux_amd64.tar.gz
tar zxvf trivy-to-vuls_${VULS_VERSION}_linux_amd64.tar.gz
バージョンはこちらから確認できます。
export VULS_VERSION=0.13.9
wget https://github.com/future-architect/vuls/releases/download/v${VULS_VERSION}/future-vuls_${VULS_VERSION}_linux_amd64.tar.gz
tar zxvf future-vuls_${VULS_VERSION}_linux_amd64.tar.gz
# xxxx/xxxxはイメージ名
docker build . -t xxxx/xxxx
export FVULS_AUTH_URL=https://auth.vuls.biz/one-time-auth
export FVULS_GROUP_ID=xxx
export FVULS_TOKEN=xxx
export FVULS_SERVER_UUID=xxxx
./trivy -q image -f=json xxxx/xxxx | \
./trivy-to-vuls parse --stdin | \
./future-vuls upload --stdin --url ${FVULS_AUTH_URL} --group-id ${FVULS_GROUP_ID} --token ${FVULS_TOKEN} --uuid ${FVULS_SERVER_UUID}
GitHub アクションズのサンプルYAMLファイルは以下のとおりです。
サンプルでセットしている以下の環境変数はencrypted secretsにてセットして下さい。
この情報を使うとFutureVulsの指定したグループに対して、任意のサーバのスキャン結果のアップロードが可能となってしまいます。
name: FutureVuls Docker Image Scan
on:
push
defaults:
run:
shell: bash
jobs:
docker-test:
name: FutureVuls Docker Image Scan
env:
FVULS_GROUP_ID: xxx
FVULS_TOKEN: "xxxxxxxx"
FVULS_AUTH_URL: "https://auth.vuls.biz/one-time-auth"
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v1
- name: cached scan db
uses: actions/cache@v2
with:
path: vulndb/
key: trivy-vulndb
- name: install trivy
env:
TRIVY_VERSION: 0.8.0
run: |
wget https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz
tar zxvf trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz
- name: install trivy-to-vuls
env:
VULS_VERSION: 0.10.0
run: |
wget https://github.com/future-architect/vuls/releases/download/v${VULS_VERSION}/trivy-to-vuls_${VULS_VERSION}_linux_amd64.tar.gz
tar zxvf trivy-to-vuls_${VULS_VERSION}_linux_amd64.tar.gz
- name: install future-vuls
env:
VULS_VERSION: 0.10.0
run: |
wget https://github.com/future-architect/vuls/releases/download/v${VULS_VERSION}/future-vuls_${VULS_VERSION}_linux_amd64.tar.gz
tar zxvf future-vuls_${VULS_VERSION}_linux_amd64.tar.gz
- name: scan core-rpc-server by trivy
env:
DOCKERFILE_PATH: "docker/anything/Dockerfile"
IMAGE_NAME: "fvuls/trivy-scan"
FVULS_SERVER_UUID: "xxxxxxxx"
run: |
docker build . -f ${DOCKERFILE_PATH} -t ${IMAGE_NAME}
set -eo pipefail
./trivy -q --cache-dir vulndb/ image -f=json ${IMAGE_NAME} | \
./trivy-to-vuls parse --stdin | \
./future-vuls upload --stdin --url ${FVULS_AUTH_URL} --group-id ${FVULS_GROUP_ID} --token ${FVULS_TOKEN} --uuid ${FVULS_SERVER_UUID}
正常にスキャンできない場合は以下をお試しください。
./trivy -d -q image image-name
./trivy -d -q image --timeout=60m image-name