安全扫描结果
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
在 GitLab 中查看并处理流水线安全扫描的结果。选择在流水线中运行的安全扫描器并输出安全报告。这些报告的内容在 GitLab 中进行处理和展示。
理解安全扫描结果的关键术语:
- Finding
- Finding 是在开发分支中发现的一个潜在漏洞。当该分支合并到默认分支时,Finding 就会成为漏洞。
- Finding 会过期,相关联的 CI/CD 作业工件过期后,或者在流水线创建 90 天后过期,即使相关作业工件被锁定也是如此。
- Vulnerability
- 漏洞是在默认分支中识别出的软件安全弱点。
- 漏洞记录会一直存在,直到它们被归档,即使默认分支中不再检测到该漏洞。
安全扫描结果的展示方式取决于流水线类型 - 分支流水线或合并请求流水线。
在默认分支中识别出的漏洞列在漏洞报告中。
| 漏洞信息 | 分支 流水线 |
合并请求流水线 |
|---|---|---|
| 安全报告 | Yes | Yes |
| 流水线安全报告 (仅 Ultimate) |
Yes | Yes |
| 合并请求安全组件 (仅 Ultimate) |
No | Yes |
| 漏洞报告 | Yes - 仅默认分支 | No |
安全报告工件
安全扫描器在分支流水线中运行,如果启用,也在合并请求流水线中运行。每个安全扫描器输出一个安全报告工件,包含该特定安全扫描器检测到的所有发现或漏洞的详细信息。您可以下载这些文件在 GitLab 外进行分析。
在开发(非默认)分支中,发现包括创建开发分支时目标分支中存在的任何漏洞。
过期的发现不会显示在流水线的 Security 选项卡中。要重现它们,请重新运行流水线。
下载安全报告
- Tier: Ultimate
您可以下载安全报告,例如在 GitLab 外进行分析或用于存档目的。安全报告是一个 JSON 文件。
下载安全报告的步骤:
- 在左侧边栏,选择 Search or go to 并找到您的项目。
- 选择 Build > Pipelines。
- 选择流水线。
- 选择 Security 选项卡。
- 选择 Download results,然后选择所需的安全报告。
选定的安全报告将下载到您的设备上。
流水线安全报告
- Tier: Ultimate
流水线安全报告包含在分支中检测到的所有发现或漏洞的详细信息。对于针对默认分支运行的流水线,流水线安全报告中的所有漏洞也在漏洞报告中。
对于每个发现或漏洞,您可以:
- 通过选择其描述查看更多详细信息。
- 更改其状态或严重性。
- 创建 GitLab issue 来跟踪为解决或缓解它而采取的任何操作。
查看流水线安全报告
查看流水线安全报告以查看在分支中检测到的所有发现或漏洞的详细信息。
查看流水线安全报告的步骤:
- 在左侧边栏,选择 Search or go to 并找到您的项目。
- 选择 Build > Pipelines。
- 选择最新的流水线。
要查看发现或漏洞的详细信息,请选择其描述。
更改状态或严重性
您可以在流水线的安全选项卡中更改发现或漏洞的状态、严重性或两者。对发现所做的任何更改在分支合并到默认分支后仍然保留。
先决条件:
- 您必须拥有项目的 Maintainer 角色或
admin_vulnerability自定义权限。
更改发现或漏洞的状态和严重性的步骤:
-
在左侧边栏,选择 Search or go to 并找到您的项目。
-
选择 Build > Pipelines。
-
选择最新的流水线。
-
选择 Security 选项卡。
-
在发现报告中:
-
选择您要更改的发现或漏洞。
- 要选择单个发现或漏洞,请选择每个旁边的复选框。
- 要选择页面上的所有发现或漏洞,请选择表头中的复选框。
-
在 Select action 下拉列表中,选择 Change status 或 Change severity。
-
创建 issue
创建 issue 来跟踪、记录和管理发现或漏洞的修复工作。
- 在左侧边栏,选择 Search or go to 并找到您的项目。
- 选择 Build > Pipelines。
- 选择流水线。
- 选择 Security 选项卡。
- 选择发现的描述。
- 选择 Create issue。
会在项目中创建一个 issue,描述从发现或漏洞的描述中复制而来。
合并请求安全组件
- Tier: Ultimate
合并请求显示一个安全组件,提供更改对发现影响的摘要。在 CI/CD 流水线运行后需要一些时间来处理安全报告,因此安全组件的显示可能会有延迟。
例如,考虑两个具有这些扫描结果的流水线:
- 源分支流水线检测到两个被标识为
V1和V2的漏洞。 - 目标分支流水线检测到两个被标识为
V1和V3的漏洞。 V2在合并请求组件中显示为 “added”(新增)。V3在合并请求组件中显示为 “fixed”(已修复)。V1同时存在于两个分支上,不会显示在合并请求组件中。
为了显示源分支和目标分支之间的差异,需要两个分支的安全报告。检查功能分支从目标分支创建时提交的最近 10 个流水线,查找安全报告。如果在最近的 10 个流水线中找不到,则所有发现都会被列为新的。在合并请求中启用安全扫描之前,请确保已为默认分支启用了安全扫描。
查看安全组件
查看合并请求安全组件以查看更改对发现的影响。
查看安全组件的步骤:
- 在左侧边栏,选择 Search or go to 并找到您的项目。
- 选择 Merge requests。
- 选择一个合并请求。
要查看每个安全报告类型的详细信息,选择 Show details( )。对于每个安全报告类型,组件按严重性排序显示前 25 个新增和 25 个已修复的发现。要查看合并请求源分支上的所有发现,选择 View all pipeline findings。
故障排除
在使用安全扫描时,您可能会遇到以下问题。
已忽略的漏洞在 MR 安全组件中可见
在查看合并请求中的安全组件时,您有时可能会看到已忽略的漏洞仍然被列出。
此问题目前尚无解决方案。详细信息请参阅 issue 411235。
报告解析和扫描摄取错误
这些步骤应由 GitLab Support 人员用于重现此类错误。
某些安全扫描可能导致相关流水线的 Security 选项卡中出现报告解析或扫描摄取错误。如果无法从用户那里获取项目的副本,您可以使用扫描生成的报告来重现错误。
重现错误的步骤:
-
从用户那里获取报告副本。在此示例中为
gl-sast-report.json。 -
创建一个项目。
-
将报告提交到仓库。
-
添加您的
.gitlab-ci.yml文件,并在作业中将报告作为工件。例如,重现由 SAST 作业引起的错误:
sample-job: script: - echo "Testing report" artifacts: reports: sast: gl-sast-report.json -
流水线完成后,检查流水线 Security 选项卡中的内容是否有错误。
您可以根据生成报告的扫描类型,将 sast: gl-sast-report.json 替换为相应的 artifacts:reports 类型和正确的 JSON 报告文件名。