{{< details >}}

  • Tier: 旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

{{< history >}}

  • 引入于极狐GitLab 17.9,使用名为 dependency_scanning_for_pipelines_with_cyclonedx_reports功能标志。默认情况下禁用。
  • 在极狐GitLab 17.9 中,在 JihuLab.com 和私有化部署上启用。
  • 在极狐GitLab 17.10 中,删除了功能标志 dependency_scanning_for_pipelines_with_cyclonedx_reports

{{< /history >}}

{{< alert type=”flag” >}}

此功能标志用于控制最近新增的基于 CycloneDX 报告 的流水线安全发现支持。

{{< /alert >}}

所有启用的安全分析器在流水线中运行,并将其结果作为产物输出。这些产物被处理,包括去重过程,结果在流水线的 安全 标签中列出。通过识别流水线中的漏洞发现,您可以主动解决风险。

以下标准适用于流水线安全标签:

  • 仅显示成功的安全扫描作业的结果。例如,如果流水线包含 SAST 和 DAST 作业,但 DAST 作业失败,则仅显示 SAST 结果。
  • 发现有一个过期周期。过期的发现不会显示在流水线安全标签上。有关详细信息,请参阅发现的保留期

查看流水线中的漏洞

要查看流水线中的漏洞:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 选择 构建 > 流水线
  3. 选择流水线。
  4. 选择 安全 标签。

扫描详细信息

扫描详细信息 部分显示了流水线中漏洞发现的摘要和源报告。

极狐GitLab 为流水线中存在的每个扫描类型产物显示一行信息。

下载安全扫描结果

根据安全扫描器的类型,您可以下载:

  • 包含安全扫描器报告的 JSON 产物。
  • 包含安全扫描器扫描的 URL 和端点的 CSV 文件。

要下载安全扫描输出:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 选择 构建 > 流水线
  3. 选择流水线。
  4. 选择 安全 标签。
  5. 扫描详细信息 中,选择 下载结果
    • 要下载 JSON 文件,选择 JSON 产物。
    • 要下载 CSV 文件,选择 下载扫描资源

扫描结果

源分支中存在的发现按严重性降序排列。您可以按严重性和工具筛选发现列表。您还可以下载安全扫描结果,以便在极狐GitLab 之外进行分析。

默认情况下,已关闭的发现会被隐藏。要查看这些发现,请关闭 隐藏已关闭 切换。

对于每个发现,您可以:

  • 获取有关发现的更多信息。
  • 为发现创建一个议题。
  • 关闭发现。

当您将合并请求的分支合并到目标分支时,下一个在默认分支上运行的流水线中报告的所有发现都会显示在漏洞报告中。在默认分支上执行的流水线中的扫描结果在流水线完成后被合并,根据下表:

现有漏洞状态 从流水线安全标签中关闭? 新漏洞状态
任意 已关闭
已关闭 任意 已关闭
已确认 已确认
需要分类(已检测) 需要分类(已检测)
已解决 需要分类(已检测)
不适用(新漏洞) 需要分类(已检测)

来自被阻止或不完整状态的流水线的安全报告

{{< history >}}

  • 引入于极狐GitLab 16.10,使用名为 include_manual_to_pipeline_completion功能标志。默认情况下启用。

{{< /history >}}

流水线状态 流水线完成情况 显示了哪些漏洞?
成功 完成 ✅ 显示流水线的所有漏洞发现。
失败 完成 ✅ 显示所有未失败作业的漏洞发现,❌ 不显示任何失败作业的漏洞发现。
被阻止 完成 ✅ 即使流水线被手动作业阻止,也显示所有漏洞发现。

发现的保留期

{{< history >}}

  • 引入于极狐GitLab 15.5。

{{< /history >}}

发现不再可用:

  • 当相关的 CI 作业产物过期时。
  • 流水线创建后 90 天,即使相关的 CI 作业产物被锁定。

要查看发现,可以:

  • 运行新的流水线。
  • 下载相关的 CI 作业产物(如果可用)。

{{< alert type=”note” >}}

这不适用于默认分支上存在的漏洞。

{{< /alert >}}

更改发现的状态

{{< history >}}

  • 引入于极狐GitLab 16.7,使用名为 pipeline_security_dashboard_graphql功能标志。默认情况下禁用。
  • 在极狐GitLab 17.4 中 GA,删除了功能标志 pipeline_security_dashboard_graphql

{{< /history >}}

要将发现的状态更改为 关闭需要分类

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 选择 构建 > 流水线
  3. 选择一个流水线并选择 安全 标签。
  4. 要选择:
    • 一个或多个发现,请选择每个发现旁边的复选框。
    • 页面上的所有发现,请选择表头中的复选框。
  5. 设置状态 下拉列表中,选择所需的状态。
  6. 如果选择了 关闭 状态,请在 设置关闭原因 下拉列表中选择所需原因。
  7. 添加评论 输入框中,可以提供评论。对于 关闭 状态,评论是必需的。
  8. 选择 更改状态

所选发现的状态会更新,安全标签的内容会刷新。

去重过程

当流水线包含生成多个同类型安全报告的作业时,可能会在多个报告中出现相同的漏洞发现。当使用不同的扫描器来增加覆盖率时,这种重复很常见,但也可能存在于单个报告中。去重过程使您能够最大化漏洞扫描覆盖率,同时减少需要管理的发现数量。

当两个发现的扫描类型位置和一个或多个标识符相同时,被视为重复。

扫描类型必须匹配,因为每种类型可以定义漏洞位置。例如,静态分析器可以定位文件路径和行号,而容器扫描分析器则使用镜像名称。

在比较标识符时,极狐GitLab 在去重过程中不比较 CWEWASC,因为它们是“类型标识符”,用于对漏洞进行分类。包括这些标识符将导致许多发现被错误地视为重复。如果没有任何标识符匹配,则两个发现被视为唯一。

在一组重复的发现中,保留第一次出现的发现,剩余的则被跳过。安全报告按字母顺序的文件路径顺序处理,发现按报告中出现的顺序依次处理。

去重示例

  • 示例 1:匹配标识符和位置,扫描类型不匹配。
    • 发现
      • 扫描类型:dependency_scanning
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符:CVE-2022-25510
    • 其他发现
      • 扫描类型:container_scanning
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符:CVE-2022-25510
    • 去重结果:不是重复,因为扫描类型不同。
  • 示例 2:匹配位置和扫描类型,类型标识符不匹配。
    • 发现
      • 扫描类型:sast
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符:CWE-259
    • 其他发现
      • 扫描类型:sast
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符:CWE-798
    • 去重结果:重复,因为 CWE 标识符被忽略。
  • 示例 3:匹配扫描类型、位置和一个标识符。
    • 发现
      • 扫描类型:container_scanning
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符:CVE-2019-12345, CVE-2022-25510, CWE-259
    • 其他发现
      • 扫描类型:container_scanning
      • 位置指纹:adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
      • 标识符:CVE-2022-25510, CWE-798
    • 去重结果:重复,因为所有标准都匹配,并且类型标识符被忽略。只需一个标识符匹配,在这种情况下为 CVE-2022-25510。

您可以在以下位置找到每个扫描类型的定义 gitlab/lib/gitlab/ci/reports/security/locationsgitlab/ee/lib/gitlab/ci/reports/security/locations

例如,对于 container_scanning 类型,位置由 Docker 镜像名称不带标签定义。但是,如果镜像标签至少包含一个字母和/或长度超过 8 个字符,则不被视为重复。因此,位置 registry.gitlab.com/group-name/project-name/image1:12345019:libcrypto3registry.gitlab.com/group-name/project-name/image1:libcrypto3 被视为相同,而 registry.gitlab.com/group-name/project-name/image1:v19202021:libcrypto3registry.gitlab.com/group-name/project-name/image1:libcrypto3 被视为不同。

故障排除

已关闭的漏洞有时仍然可见

在极狐GitLab 16.8 及更早版本中,已关闭的漏洞有时仍然可见。通过升级到极狐GitLab 16.9 及更高版本可以解决此问题。

报告解析和扫描摄取错误

{{< alert type=”note” >}}

这些步骤供极狐GitLab 支持人员用于重现此类错误。

{{< /alert >}}

某些安全扫描可能会导致流水线的 安全 标签中出现与报告解析或扫描摄取相关的错误。如果无法从用户处获得项目的副本,您可以使用扫描生成的报告重现错误。

要重新创建错误:

  1. 从用户处获取报告副本。在此示例中,gl-sast-report.json
  2. 创建一个项目。
  3. 将报告提交到存储库。
  4. 添加您的 .gitlab-ci.yml 文件,并在作业中将报告作为产物。

    例如,要重现由 SAST 作业引起的错误:

    sample-job:
      script:
        - echo "Testing report"
      artifacts:
        reports:
          sast: gl-sast-report.json
    
  5. 流水线完成后,检查流水线的 安全 标签中的错误内容。

您可以根据生成报告的扫描,将 sast: gl-sast-report.json 替换为相应的 artifacts:reports 类型和正确的 JSON 报告文件名。