Help us learn about your current experience with the documentation. Take the survey.

漏洞去重流程

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

当一个 pipeline 包含多个生成同类型安全报告的 jobs 时,同一个漏洞发现(vulnerability finding)可能会出现在多个报告中。当使用不同的扫描器来增加覆盖率时,这种重复很常见,但单个报告中也可能存在。去重流程可以帮助您在最大化漏洞扫描覆盖率的同时,减少需要处理的发现数量。

当一个发现(finding)的 扫描类型位置 以及其一个或多个 标识符 与另一个发现相同时,该发现被认为是重复的。

扫描类型必须匹配,因为每种扫描类型对漏洞位置的定义可能不同。例如,静态分析器(static analyzers)可以定位到文件路径和行号,而容器扫描分析器(container scanning analyzer)则使用镜像名称。

在比较标识符时,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
    • 去重结果:所有标准都匹配,且类型标识符(CWE)被忽略,因此发生去重。在这种情况下,只需要一个标识符匹配即可,即 CVE-2022-25510。

您可以在以下链接中找到每种扫描类型的定义:gitlab/lib/gitlab/ci/reports/security/locationsgitlab/ee/lib/gitlab/ci/reports/security/locations

例如,对于 container_scanning 类型,位置由不带标签的 Docker 镜像名称定义。但是,如果镜像标签符合 semver 语法且看起来不像 Git 提交哈希值,则它们不被视为重复。

例如,以下位置被视为重复:

  • registry.gitlab.com/group-name/project-name/image1:12345019:libcrypto3
  • registry.gitlab.com/group-name/project-name/image1:libcrypto3

但是,以下位置被认为是不同的:

  • registry.gitlab.com/group-name/project-name/image1:v19202021:libcrypto3
  • registry.gitlab.com/group-name/project-name/image1:libcrypto3