跳到主要内容
版本:v1.9

容器镜像漏洞扫描

Hangar 内置了 trivy 的容器镜像扫描功能,您可使用 hangar scan 命令一键扫描多架构容器镜像漏洞。

快速上手

使用以下命令扫描容器镜像漏洞。

#!/bin/bash

hangar scan \
--file="example_image_list.txt" \
--format="csv" \
--arch="amd64,arm64" \
--os="linux" \
--jobs=4

默认情况下,扫描结果会以 CSV 格式输出,您可以使用 --format 命令自定义漏洞扫描报告的输出格式为 jsonyaml。有关 spdx-json 格式的介绍请参阅下方的 SBOM 输出

如果在扫描容器镜像时遇到了其他错误(例如网络超时或镜像不存在),扫描失败的镜像列表将会输出至 scan-failed.txt 中。

Usage

hangar scan --help
Scan container image vulnerabilities

Usage:
hangar scan -f IMAGE_LIST.txt [flags]

Examples:
# Scan images by image list file and output CSV result.
hangar scan \
--file IMAGE_LIST.txt \
--format csv \
--arch amd64,arm64 \
--os linux

Flags:
-a, --arch strings architecture list of images (default [amd64,arm64])
-y, --auto-yes answer yes automatically (used in shell script)
--cache string trivy database cache directory (default "/home/USERNAME/.cache/trivy")
-o, --failed string file name of the scan failed image list (default "scan-failed.txt")
-f, --file string image list file
--format string output report format (available: json,yaml,csv,spdx-csv,spdx-json) (default "csv")
-h, --help help for scan
-j, --jobs int worker number, scan images parallelly (1-20) (default 1)
--offline-scan scan in offline (air-gapped) mode
--os strings OS list of images (default [linux])
--project string override all image projects in image list
--registry string override all image registry URL in image list
-r, --report string scan report output file (default "scan-report.[FORMAT]")
--scanner strings list of scanners (available: vuln,misconfig,secret,license) (default [vuln])
-s, --server string trivy server URL (scan as a trivy client mode)
--skip-db-update skip updating trivy vulnerability database
--skip-java-db-update skip updating trivy java index database
--timeout duration timeout when scan each images (default 10m0s)
--tls-verify require HTTPS and verify certificates (default true)
--trivy-db-repo strings trivy vulnerability database repositories (default [public.ecr.aws/aquasecurity/trivy-db:2,ghcr.io/aquasecurity/trivy-db:2])
--trivy-java-db-repo strings trivy java database repositories (default [public.ecr.aws/aquasecurity/trivy-java-db:1,ghcr.io/aquasecurity/trivy-java-db:1])
--trivy-log-output show trivy log (only available in single worker mode)

Global Flags:
--debug enable debug output
--insecure-policy run Hangar without policy check

在离线环境扫描容器镜像

参照以下步骤,在离线环境扫描容器镜像。

  1. 使用 mirror 命令,将 Trivy 数据库镜像拷贝至私有镜像仓库中,此步骤需要在有网络连接的环境中执行。

    创建一份镜像列表,用于拷贝 trivy-dbtrivy-java-db 镜像。

    database_images.txt
    ghcr.io/aquasecurity/trivy-db:latest
    ghcr.io/aquasecurity/trivy-java-db:1
    #!/bin/bash

    hangar mirror \
    --file="database_images.txt" \
    --destination="REGISTRY_SERVER_URL" \
    --jobs=2
  2. 使用 scan 命令,指定 --offline-scan=true--trivy-db-repo--trivy-java-db-repo 参数,在离线环境扫描镜像。

    #!/bin/bash

    hangar scan \
    --file="example_image_list.txt" \
    --format="csv" \
    --offline-scan=true \
    --trivy-db-repo="REGISTRY_SERVER_URL/aquasecurity/trivy-db" \
    --trivy-java-db-repo="REGISTRY_SERVER_URL/aquasecurity/trivy-java-db" \
    --jobs=4

以 Trivy 客户端模式扫描容器镜像

Trivy 提供了客户端/服务器模式,Hangar 支持以 Trivy 客户端模式进行容器镜像扫描操作。

  1. 启动 Trivy Server

    trivy server --listen "127.0.0.1:4954"
  2. 以 Trivy 客户端模式进行容器镜像扫描。

    hangar scan \
    --file="example_image_list.txt" \
    --server="127.0.0.1:4954" \
    --tls-verify=false \
    --jobs=4

SBOM 输出

Hangar 还支持以 SPDX 格式输出容器镜像的 SBOM 信息。您可以将 --format 参数设置为 spdx-jsonspdx-csv 以 JSON / CSV 格式 输出镜像的 SPDX SBOM 数据。

当输出格式被设定为 spdx-json/spdx-csv 时,容器镜像漏洞扫描将被禁用。

hangar scan \
--file="example_image_list.txt" \
--format="spdx-json" \
--jobs=4