检测
在整个软件开发生命周期中,检测项目仓库和应用程序行为中的漏洞。
帮助您在开发期间管理漏洞风险:
- 当您将代码更改推送到分支时,安全扫描器会运行。
- 您可以查看在分支中检测到的漏洞详情。开发人员此时可以修复漏洞,在它们到达生产环境之前解决问题。
- 可选地,您可以强制要求包含漏洞的合并请求获得额外批准。详情请参见合并请求批准策略。
帮助您在开发之外管理漏洞:
- 可以安排或手动运行安全扫描。
- 在默认分支中检测到的漏洞会出现在漏洞报告中。使用此报告对漏洞进行分类、分析和修复。
安全扫描
为了充分利用安全扫描,了解以下内容很重要:
- 如何触发安全扫描。
- 您的应用程序或仓库的哪些方面会被扫描。
- 什么决定了哪些扫描器会运行。
- 安全扫描是如何进行的。
触发器
当更改被推送到项目的仓库时,CI/CD 管道中的安全扫描默认会被触发。
您还可以通过以下方式运行安全扫描:
- 手动运行 CI/CD 管道。
- 使用扫描执行策略安排安全扫描。
- 仅限 DAST,手动或按计划运行按需 DAST 扫描。
- 仅限 SAST,使用 GitLab Workflow for VS Code 扩展运行扫描。
检测覆盖范围
扫描您的项目仓库并测试应用程序行为以查找漏洞:
- 仓库扫描可以检测项目仓库中的漏洞。覆盖范围包括您的应用程序源代码,以及它所依赖的库和容器镜像。
- 对您的应用程序及其 API 的行为测试可以检测仅在运行时出现的漏洞。
仓库扫描
您的项目仓库可能包含源代码、依赖项声明和基础设施定义。仓库扫描可以检测这些内容中的漏洞。
仓库扫描工具包括:
- 静态应用程序安全测试(SAST):分析源代码以查找漏洞。
- 基础设施即代码(IaC)扫描:检测应用程序基础设施定义中的漏洞。
- 密钥检测:检测并阻止密钥被提交到仓库。
- 依赖项扫描:检测应用程序依赖项和容器镜像中的漏洞。
行为测试
行为测试需要一个可部署的应用程序来测试已知的漏洞和意外行为。
行为测试工具包括:
- 动态应用程序安全测试(DAST):测试您的应用程序以查找已知的攻击向量。
- API 安全测试:测试您的应用程序 API 以查找已知的攻击和输入漏洞。
- 覆盖率引导的模糊测试:测试您的应用程序以查找意外行为。
扫描器选择
安全扫描器可以通过以下方式为项目启用:
- 将扫描器的 CI/CD 模板直接添加到
.gitlab-ci.yml文件中,或使用 AutoDevOps。 - 使用扫描执行策略、管道执行策略或合规框架强制执行扫描器。此强制执行可以直接应用于项目,也可以从项目的父组继承。
详情请参见安全配置。
安全扫描过程
安全扫描过程如下:
-
根据 CI/CD 作业标准,那些已启用并计划在管道中运行的扫描器会作为独立作业运行。
每个成功的作业都会输出一个或多个安全报告作为作业产物。这些报告包含在分支中检测到的所有漏洞的详细信息,无论它们之前是否被发现、被忽略或是新的。
-
当所有作业(包括手动作业)完成后,您可以下载或查看结果。
有关安全扫描输出的更多详情,请参见安全扫描结果。
CI/CD 安全作业标准
CI/CD 管道中的安全扫描作业由以下标准确定:
-
包含安全扫描模板
安全扫描作业的选择首先由策略或合规框架包含或强制执行的模板决定。
安全扫描默认在分支管道中运行。要在合并请求管道中运行安全扫描,您必须专门启用它。
-
规则评估
每个模板都定义了规则,这些规则决定分析器是否运行。
例如,只有当检测到特定类型的文件时,某些分析器才会运行。
-
分析器逻辑
如果模板的规则规定作业需要运行,则会在模板指定的管道阶段创建一个作业。但是,每个分析器都有自己的逻辑,决定分析器本身是否运行。
例如,如果依赖项扫描在默认深度没有检测到支持的文件,则不会运行分析器,也不会输出任何产物。
作业如果完成了扫描就算通过,即使没有发现漏洞。唯一的例外是覆盖率模糊测试,如果它发现问题则会失败。所有作业都被允许失败,这样它们就不会导致整个管道失败。不要更改作业的allow_failure设置,因为这会导致整个管道失败。
数据隐私
GitLab 在 GitLab Runner 上本地处理源代码并执行分析。没有数据传输到 GitLab 基础设施(服务器和 Runner)之外。
安全分析器仅访问互联网以下载最新的签名、规则和补丁集。如果您希望扫描器不访问互联网,请考虑使用离线环境。