查看流水线中的漏洞 (ULTIMAT ALL)
所有启用的安全分析器都会在流水线中运行并且将结果输出为产物。这些产物是可以被处理的,包括复制,而且结果会列举在流水线的 安全 选项卡中。通过在流水线中识别漏洞发现,您可以更准确的来识别风险。
如果标准会应用到流水线选项卡中:
- 只显示成功安全扫描作业的结果。比如,如果流水线中包含 SAST 和 DAST 作业,但 DAST 作业失败,则只显示 SAST 结果。
- 漏洞发现有保留期。过期的发现不会显示在流水线安全选项卡中。详情请参阅 保留期。
在流水线中查看漏洞
要在流水线中查看漏洞:
- 在左侧导航栏,选择 搜索或前往 并找到您的项目。
- 选择 构建 > 流水线。
- 选择流水线。
- 选择 安全 选项卡。
扫描详情
扫描详情显示流水线中的漏洞发现摘要和源报告。
系统为流水线中存在的每个扫描类型产物显示一行信息。
请注意,每种扫描类型的漏洞总数都包括被忽略的发现。如果报告中的结果数量与扫描详情中的数量不匹配,请确保禁用隐藏忽略。
下载安全扫描输出
根据安全扫描程序的类型,您可以下载:
- 包含安全扫描器报告的 JSON 产物。
- 包含安全扫描器扫描的 URL 和端点的 CSV 文件。
要下载安全扫描输出:
- 在左侧导航栏,选择 搜索或前往 并找到您的项目。
- 选择 构建 > 流水线。
- 选择流水线。
- 选择 安全 选项卡。
- 在 扫描详情 中,选择 下载结果:
- 要下载 JSON 文件,请选择 JSON 产物。
- 要下载 CSV 文件,请选择 下载扫描资源。
扫描结果
存在与源分支上的发现会以严重等级来降序排列。您可以通过严重等级和工具来对漏洞列表进行过滤。您还可以下载安全扫描结果,在极狐GitLab 之外分析。
默认情况下,被忽略的发现不会显示在流水线报告中。要查看这些发现,关闭 隐藏已忽略项 开关。
对于每一个发现,您可以:
- 获取更多关于发现的信息。
- 创建一个与发现相关的议题。
- 忽略发现。
当您将合并请求的分支合并到目标分支时,所有在流水线中报告的发现都会被合并到漏洞报告 中。根据下表,在默认分支上执行的流水线中的扫描结果会在流水线完成后被纳入。
现有漏洞状态 | 在流水线中被忽略? | 新的漏洞状态 |
---|---|---|
any | Yes | Dismissed |
Dismissed | any | Dismissed |
Confirmed | No | Confirmed |
Needs triage (Detected) | No | Needs triage (Detected) |
Resolved | No | Needs triage (Detected) |
N/A (i.e.: new vulnerability) | No | Needs triage (Detected) |
被阻塞或未完成流水线中的安全报告
- 引入于极狐GitLab 16.10,使用名为
include_manual_to_pipeline_completion
的功能标志。默认启用。
流水线状态 | 流水线完成度 | 展示什么漏洞? |
---|---|---|
Success | Complete | ✅ 展示流水线中所发现的所有漏洞。 |
Failed | Complete | ✅ 展示任何没有失败的作业所发现的漏洞,❌ 不会展示任何失败作业发发现的安全漏洞。 |
Blocked | Complete | ✅ 展示所有安全漏洞,即使流水线被手动作业所阻塞。 |
发现的保留时间
- 引入于极狐GitLab 15.5。
发现在以下情况下不再可用:
- 当相关的 CI 作业产物过期。
- 流水线创建后的 90 天,即使相关的 CI 作业产物被锁定。
更改发现状态
- 引入于极狐GitLab 16.7,使用名为
pipeline_security_dashboard_graphql
的功能标志。默认禁用。- 在极狐GitLab 17.4 中 GA。功能标志
pipeline_security_dashboard_graphql
被移除。
要将发现的状态变更为 忽略 或 需要处理:
- 在左侧导航栏,选择 搜索或前往 并找到您的项目。
- 选择 构建 > 流水线。
- 选择流水线并选择 安全 选项卡。
- 选择:
- 一个或多个发现,选择每个发现旁边的复选框。
- 页面上的所有发现,选择表头中的复选框。
- 在 设置状态 下拉列表中选择所需的状态。
- 如果选择 忽略,在 设置忽略原因 下拉列表中选择原因。
- 在 添加注释 输入框中提供注释。忽略 状态下注释是必填的。
- 选择 更改状态。
发现的状态被更新,安全选项卡的内容也会随之刷新。
数据去重复
当流水线包含生成多个相同类型的安全报告的作业时,多个报告中可能存在相同的漏洞发现。当使用不同的扫描器来增加覆盖范围时,这种重复很常见,但也可以存在于单个报告中。重复数据删除过程允许您最大化漏洞扫描覆盖率,同时减少您需要管理的结果数量。 当一个发现的扫描类型、位置和标识符是一样时,将被认为与另一个发现重复。
扫描类型必须匹配,因为每个扫描类型都可以有自己的漏洞位置定义。例如,静态分析器能够定位文件路径和行号,而容器扫描分析器则使用镜像名称。
在比较标识符时,消停在重复数据删除期间不会比较 CWE
和 WASC
,因为它们是“类型标识符”,用于对漏洞组进行分类。包含这些标识符会导致许多发现被错误地视为重复。如果两个发现的标识符都不匹配,则认为它们是唯一的。
在一组重复的发现中,第一次出现的发现被保留,其余的被跳过。安全报告按文件路径的字母顺序处理,发现按它们在报告中出现的顺序依次处理。
重复数据删除示例
- 示例 1:标识符和位置匹配,扫描类型不匹配。
- 发现
- 扫描类型:
sast
- 位置指纹:
adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
- 标识符:CVE-2022-25510
- 扫描类型:
- 其他发现
- 扫描类型:
secret_detection
- 位置指纹:
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。
- 发现
上面的示例不包括原始位置值。每种扫描类型都定义了自己的 fingerprint_data
,用于生成用作 location_fingerprint
的 SHA1
哈希。
您可以 gitlab/lib/gitlab/ci/reports/security/locations
和 gitlab/ee/lib/gitlab/ci/reports/security/locations
中,找到每种扫描类型的定义。
故障排查
忽略的漏洞有时仍然可见
在极狐GitLab 16.8 之前,会遇到此问题,可以通过升级到 16.9 及以后版本来解决。