aquasecurity/trivyは、Dockerイメージの脆弱性を検知するOSSツールです。 FutureVulsではtrivyのスキャン結果を取り込み、FutureVuls上でコンテナイメージの脆弱性を管理できます。
サポート対象の言語やパッケージエコシステムの詳細は、Trivy Supported OSを参照してください。
Amazon ECRやGoogle Container Registryとの連携を設定することでコンテナレジストリ上にあるDockerイメージの脆弱性スキャンが可能です。
2021年10月時点ではtrivyのほうが脆弱性の検知精度が高く、イメージ中のライブラリのスキャンも可能なため、trivyを用いた脆弱性スキャンの方がオススメです。
本ドキュメントでは、以下の2パターンを解説します。
trivyをローカル環境にインストールし、コンテナイメージをスキャンした結果をFutureVulsにアップロードします。
trivy, vulsは最新版をお使いください。 もしエラーが発生したら、Trivy, trivy-to-vuls, futue-vulsの各バイナリを最新化してください。 最新版で正常に動作しない場合は問い合わせください
サーバ追加
ボタンからダイアログを開き、コンテナイメージスキャン
を選択する
登録しているコンテナイメージに変更があった場合は、本手順に従ってFutureVulsに反映してください。
構成情報を更新
ボタンをクリックしてダイアログを開く
GitHub ActionsのサンプルYAMLファイルは以下のとおりです。
サンプルでセットしている以下の環境変数はencrypted secretsにてセットして下さい。
この情報を使うとFutureVulsの指定したグループに対して、任意のサーバのスキャン結果のアップロードが可能となってしまいます。
trivy, vulsは最新版をお使いください。 最新版で正常に動作しない場合は問い合わせください
name: FutureVuls Docker Image Scan
on:
push
defaults:
run:
shell: bash
jobs:
container-scan:
name: FutureVuls Docker Image Scan
env:
FVULS_GROUP_ID: xxx
FVULS_TOKEN: xxxxxxxxx
FVULS_AUTH_URL: "https://auth.vuls.biz/one-time-auth"
DOCKERFILE_PATH: "path/to/dockerfile"
IMAGE_NAME: "image-name"
FVULS_SERVER_UUID: xxxxxxxxx
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: cached scan db
uses: actions/cache@v2
with:
path: vulndb/
key: trivy-vulndb
- name: Build dockerfile
run: docker build . -f ${{ env.DOCKERFILE_PATH }} -t ${{ env.IMAGE_NAME }}
- name: Scan the image and upload to FutureVuls
uses: docker://vuls/fvuls
with:
entrypoint: '/bin/sh'
args: |-
-c "\
set -eo pipefail
trivy -q --cache-dir vulndb/ image -f json --list-all-pkgs ${{ env.IMAGE_NAME }} | \
trivy-to-vuls parse --stdin | \
future-vuls upload --stdin --url ${{ env.FVULS_AUTH_URL }} --group-id ${{ env.FVULS_GROUP_ID }} --token ${{ env.FVULS_TOKEN }} --uuid ${{ env.FVULS_SERVER_UUID }} \
"
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-latest
steps:
- uses: actions/checkout@v1
- name: cached scan db
uses: actions/cache@v2
with:
path: vulndb/
key: trivy-vulndb
- name: install trivy
run: |
curl -s https://api.github.com/repos/aquasecurity/trivy/releases/latest | \
grep "browser_download_url.*_Linux-64bit.tar.gz" | \
cut -d : -f 2-3 | \
xargs wget
tar zxvf trivy_*
- name: install trivy-to-vuls
run: |
curl -s https://api.github.com/repos/future-architect/vuls/releases/latest | \
grep "browser_download_url.*trivy-to-vuls.*_linux_amd64.tar.gz" | \
cut -d : -f 2-3 | \
xargs wget
tar zxvf trivy-to-vuls*
- name: install future-vuls
run: |
curl -s https://api.github.com/repos/future-architect/vuls/releases/latest | \
grep "browser_download_url.*future-vuls.*_linux_amd64.tar.gz" | \
cut -d : -f 2-3 | \
xargs wget
tar zxvf future-vuls*
- 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 --list-all-pkgs ${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はdebugオプション)
./trivy -d -q image image-name
タイムアウト系のエラーが出ている場合はtimeoutオプションを設定する
./trivy -d -q image --timeout=60m image-name
trivyコマンドが正常の場合は、trivy-to-vuls(JSONの変換処理)でエラーが発生しているか確認する
./trivy -d -q image image-name | ./trivy-to-vuls parse --stdin
解決できない場合はお問い合わせください。