sudo apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy
- --vuln-typeは
os
とlibrary
が選べる。指定しないと両方になる。これは絞らなくても良さそう。 - --no-progress: 進捗バーを表示しない。CI/CDで出力をシンプルにする。
- --exit-code 1: スキャンで脆弱性が出た時にステータスコード1を返すため,CI/CDツールなどで結果を評価しやすくなる。
- --format table: 結果をテーブル形式で表示
- fs: ファイルスキャンモード
- --scanners vuln: 脆弱性スキャンモードを指定。Secrets(デフォルトon)やmisconfig(デフォルトではoff),license(デフォルトではoff)なども指定できる
- --vuln-type library: スキャン対象をライブラリに限定する。
trivy ドキュメント .trivyignore ファイルに CVE 番号などを記述することで抑止できる。
trivy image --exit-code 1 --vuln-type os --ignorefile .trivyignore --no-progress --format table -o container-scanning-report.txt --severity CRITICAL,HIGH react-app:latest
trivy fs --exit-code 1 --scanners vuln --vuln-type library --ignorefile .trivyignore --no-progress --format table -o sca-report.txt --severity CRITICAL,HIGH package.json
npm install jquery # 調べたい対象
vim package-lock.json # 任意のバージョンに書き換え
trivy fs . --format cyclonedx --output test.json # sbom形式で出力
trivy sbom test.json # sbomを解釈
- Docker imageで使っているライブラリの脆弱性を探す。
- Dockerfileを用意する
FROM registry.access.redhad.com/ubi8/ubi:8.2
RUN dnf update -y
RUN dnf install -y httpd-2.4.37
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D" "FOREGROUND"]
- ビルドしてスキャンする
sudo docker buildt -t testimage .
sudo trivy image testimage --format cyclonedx --output test.json
trivy sbom test.json
- imageスキャンでコンテナを実行していない(
docker container ps
がない)時のエラー
2023-12-05T22:31:00.272+0900 FATAL image scan error: scan error: unable to initialize a scanner: unable to initialize a docker scanner: 4 errors occurred:
* unable to inspect the image (react:latest): Error response from daemon: No such image: react:latest
* image not found in containerd store: react:latest
* unable to initialize Podman client: no podman socket found: stat podman/podman.sock: no such file or directory
* GET https://index.docker.io/v2/library/react/manifests/latest: UNAUTHORIZED: authentication required; [map[Action:pull Class: Name:library/react Type:repository]]