Docker Scout 镜像分析

当你为某个仓库启用镜像分析功能时, Docker Scout 会自动分析你推送到该仓库的新镜像。

镜像分析可提取软件物料清单(SBOM) 及其他镜像元数据,并依据来自 安全公告的漏洞数据对其进行评估。

如果您通过命令行或 Docker Desktop 将镜像分析作为一次性任务运行,Docker Scout 将不会存储有关您镜像的任何数据。 然而,如果您为容器镜像仓库启用了 Docker Scout, Docker Scout 将在分析后保存您镜像的元数据快照。 随着新的漏洞数据可用,Docker Scout 会利用该元数据快照重新校准分析, 这意味着您镜像的安全状态将实时更新。 这种动态评估方式意味着在披露新的 CVE 信息时,无需重新分析镜像。

Docker Scout 镜像分析功能默认适用于 Docker Hub 仓库。 您还可以集成第三方镜像仓库及其他服务。如需了解更多详情, 请参阅 将 Docker Scout 与其他系统集成

在仓库中启用 Docker Scout

Docker Scout 的免费版允许您每个 Docker 组织最多使用 3 个代码仓库。如果您需要更多代码仓库,可以升级 Docker Scout 计划,详情请参见 Docker Scout 计费说明

在您为第三方注册表中的仓库启用镜像分析功能之前, 必须先将该注册表与您的 Docker 组织中的 Docker Scout 进行集成。 Docker Hub 默认已集成。如需了解更多信息,请参阅 容器注册表集成

注意

您必须在 Docker 组织中拥有 编辑者所有者 角色,才能在仓库中激活镜像分析功能。

要启用镜像分析:

  1. 请前往 Docker Scout 仪表板中的仓库设置
  2. 选择您要启用的仓库。
  3. 选择 启用镜像分析

如果您的代码仓库中已包含镜像, Docker Scout 将自动拉取并分析最新的镜像。

分析镜像仓库中的镜像

要触发注册表中镜像的分析,请将该镜像推送到已与 Docker Scout 集成的注册表,或推送到已启用镜像分析功能的仓库。

注意

Docker Scout 平台上的镜像分析功能,其最大镜像文件大小限制为 10 GB,除非该镜像附带 SBOM 证明。 详情请参见 最大镜像大小

  1. 使用您的 Docker ID 登录,可通过 docker login 命令或 Docker Desktop 中的 登录 按钮进行。

  2. 构建并推送您要分析的镜像。

    $ docker build --push --tag <org>/<image:tag> --provenance=true --sbom=true .
    

    使用 --provenance=true--sbom=true 标志可将 构建证明 附加到镜像中。Docker Scout 利用这些证明提供更精细的分析结果。

    注意

    默认的 docker 驱动程序仅在您使用 containerd 镜像存储时才支持构建证明。

  3. 前往 Docker Scout 仪表板中的 镜像页面

    推送镜像到镜像仓库后,它会很快出现在列表中。 分析结果可能需要几分钟才会显示。

本地分析镜像

您可以使用 Docker Desktop 或 Docker CLI 的 docker scout 命令,通过 Docker Scout 分析本地镜像。

Docker Desktop版

注意

Docker Desktop 的后台索引功能支持最大 10 GB 的镜像。 请参阅 最大镜像大小

使用 Docker Desktop 图形界面本地分析镜像:

  1. 拉取或构建您要分析的镜像。

  2. 请进入 Docker 仪表板中的 镜像 视图。

  3. 从列表中选择一个本地镜像。

    这将打开 镜像详情视图,展示针对您所选镜像,Docker Scout 分析得出的软件包及漏洞的详细情况。

CLI

docker scout CLI 命令提供了一个命令行界面,以便在终端中使用 Docker Scout。

  • docker scout quickview: 指定镜像的摘要,参见 快速预览
  • docker scout cves: 对指定镜像的本地分析,参见 CVE漏洞
  • docker scout compare: 分析并比较两张图片

默认情况下,结果会打印到标准输出。 您也可以将结果导出为结构化格式的文件, 例如静态分析结果交换格式(SARIF)。

快速预览

docker scout quickview 命令提供了在给定镜像及其基础镜像中发现的漏洞的概览。

$ docker scout quickview traefik:latest
    ✓ SBOM of image already cached, 311 packages indexed

  Your image  traefik:latest  │    0C     2H     8M     1L
  Base image  alpine:3        │    0C     0H     0M     0L

如果您的基础镜像已过时,quickview 命令还会显示更新基础镜像将如何改变镜像的漏洞暴露情况。

$ docker scout quickview postgres:13.1
    ✓ Pulled
    ✓ Image stored for indexing
    ✓ Indexed 187 packages

  Your image  postgres:13.1                 │   17C    32H    35M    33L
  Base image  debian:buster-slim            │    9C    14H     9M    23L
  Refreshed base image  debian:buster-slim  │    0C     1H     6M    29L
                                            │    -9    -13     -3     +6
  Updated base image  debian:stable-slim    │    0C     0H     0M    17L
                                            │    -9    -14     -9     -6

CVE漏洞

docker scout cves 命令为您提供了镜像中所有漏洞的完整视图。该命令支持多个标志,让您可以更精确地指定感兴趣的漏洞,例如,按严重程度或包类型:

$ docker scout cves --format only-packages --only-vuln-packages \
  --only-severity critical postgres:13.1
    ✓ SBOM of image already cached, 187 packages indexed
    ✗ Detected 10 vulnerable packages with a total of 17 vulnerabilities

     Name            Version         Type        Vulnerabilities
───────────────────────────────────────────────────────────────────────────
  dpkg        1.19.7                 deb      1C     0H     0M     0L
  glibc       2.28-10                deb      4C     0H     0M     0L
  gnutls28    3.6.7-4+deb10u6        deb      2C     0H     0M     0L
  libbsd      0.9.1-2                deb      1C     0H     0M     0L
  libksba     1.3.5-2                deb      2C     0H     0M     0L
  libtasn1-6  4.13-3                 deb      1C     0H     0M     0L
  lz4         1.8.3-1                deb      1C     0H     0M     0L
  openldap    2.4.47+dfsg-3+deb10u5  deb      1C     0H     0M     0L
  openssl     1.1.1d-0+deb10u4       deb      3C     0H     0M     0L
  zlib        1:1.2.11.dfsg-1        deb      1C     0H     0M     0L

有关这些命令及其使用方法的更多信息,请参阅 CLI 参考文档:

漏洞严重性评估

Docker Scout 根据来自建议源的漏洞数据为漏洞分配严重性评级。建议会根据受漏洞影响的软件包类型进行排名和确定优先级。例如,如果漏洞影响的是操作系统软件包,则由发行版维护者分配的严重性级别将被优先考虑。

如果首选咨询源为 CVE 分配了严重性评级,但未分配 CVSS 分数,Docker Scout 将回退显示来自其他来源的 CVSS 分数。来自首选咨询源的严重性评级和来自回退咨询源的 CVSS 分数将一起显示。这意味着,如果首选咨询源分配了 LOW 的评级但没有 CVSS 分数,而回退咨询源分配了 9.8 的 CVSS 分数,那么漏洞可能具有 LOW 的严重性评级和 9.8 的 CVSS 分数。

在任何来源中均未分配 CVSS 分数的漏洞被归类为未指定 (U)。

Docker Scout 不实施专有的漏洞度量系统。所有度量均源自 Docker Scout 集成的安全公告。各公告可能使用不同的阈值对漏洞进行分类,但大多数公告遵循 CVSS v3.0 规范,该规范根据下表将 CVSS 分数映射到严重性等级:

CVSS 评分严重等级
0.1 – 3.9 (L)
4.0 – 6.9中等 (M)
7.0 – 8.9 (H)
9.0 – 10.0严重 (C)

如需更多信息,请参阅 漏洞指标 (NIST)

请注意,鉴于前面提到的建议优先级和回退机制,Docker Scout 中显示的严重性评级可能与该评级系统存在偏差。

最大镜像大小

Docker Scout 平台上的镜像分析,以及 Docker Desktop 中由后台索引触发的分析,其镜像文件大小限制为 10 GB(未压缩)。若要分析超过此大小的镜像,您可以:

通过 CLI 在本地分析的镜像以及带有 SBOM 证明的镜像 没有最大文件大小限制。