Docker Scout 镜像分析

当你为存储库激活镜像分析时,Docker Scout 会自动分析你推送到该存储库的新镜像。

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

如果你使用 CLI 或 Docker Desktop 作为一次性任务运行镜像分析,Docker Scout 不会存储有关你的镜像的任何数据。但是,如果你为你的容器镜像存储库启用 Docker Scout,Docker Scout 会在分析后保存你的镜像的元数据快照。当新的漏洞数据可用时,Docker Scout 会使用元数据快照重新校准分析,这意味着你的镜像的安全状态会实时更新。这种动态评估意味着当新的 CVE 信息公布时,无需重新分析镜像。

Docker Scout 镜像分析默认情况下可用于 Docker Hub 存储库。你还可以集成第三方注册表和其他服务。要了解更多信息,请参见 将 Docker Scout 与其他系统集成

在存储库上激活 Docker Scout

Docker Scout 的免费层允许你为每个 Docker 组织使用 Docker Scout 访问最多 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 login 命令或 Docker Desktop 中的 **登录** 按钮,使用你的 Docker ID 登录。

  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 GUI 在本地分析镜像

  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 根据来自 公告源 的漏洞数据为漏洞分配严重程度等级。公告根据受漏洞影响的软件包类型进行排名和优先排序。例如,如果漏洞影响 OS 软件包,则优先考虑分发维护者分配的严重程度级别。

如果首选公告源已为 CVE 分配严重程度等级,但没有分配 CVSS 评分,则 Docker Scout 会回退到显示来自其他源的 CVSS 评分。首选公告的严重程度等级和回退公告的 CVSS 评分将一起显示。这意味着漏洞可以具有 LOW 的严重程度等级,CVSS 评分为 9.8,如果首选公告分配 LOW 等级但没有分配 CVSS 评分,而回退公告分配 CVSS 评分为 9.8。

在任何源中都没有分配 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 证明的图像没有最大文件大小限制。