应用程序安全
- Tier: 旗舰版
- Offering: JihuLab.com, 私有化部署
在您的开发过程中构建安全性,通过极狐GitLab 的安全扫描功能。识别并解决开发生命周期早期的漏洞,防止它们进入生产环境。
极狐GitLab 在代码、依赖项、容器和已部署的应用程序中检测安全漏洞,包括:
- 未授权的访问点
- 潜在的数据泄漏
- 拒绝服务(DoS)漏洞
- 供应链弱点
安全发现直接出现在合并请求中,提供可操作的信息,在代码合并之前。这种主动的方法减少了开发后期修复问题的成本和努力。
对于安全团队,极狐GitLab 安全仪表板集中化漏洞发现,使得优先级排序和补救跟踪更加简单。对于开发人员,合并请求集成意味着更少的上下文切换和更高效的工作流程。
数据隐私
关于安全扫描器领域的数据隐私,极狐GitLab 在极狐GitLab Runner 上处理源代码并执行分析。没有数据传输到极狐GitLab 基础设施(服务器和 runners)之外。
我们的扫描器仅访问互联网以下载最新的签名集、规则和补丁。如果您希望扫描器不访问互联网,请考虑使用离线环境。
安全扫描
对于在 CI/CD 流水线中运行的安全扫描,结果由以下决定:
- 哪些安全扫描工作在流水线中运行。
- 每个工作的状态。
- 每个工作的输出。
流水线中的安全工作
在 CI/CD 流水线中运行的安全扫描工作由以下标准决定:
-
包含安全扫描模板
安全扫描工作的选择首先由包含哪些模板决定。模板可以通过使用 AutoDevOps、扫描执行策略或 .gitlab-ci.yml 配置文件来包含。
-
规则评估
每个模板都有定义的规则,这些规则决定分析器是否运行。
例如,密钥检测模板包括以下规则。此规则指出应在分支流水线中运行密钥检测。在合并请求流水线的情况下,不运行密钥检测。
yamlrules: - if: $CI_COMMIT_BRANCH
-
分析器逻辑
如果模板的规则规定工作要运行,则在模板指定的流水线阶段创建一个工作。然而,每个分析器都有自己的逻辑来决定分析器本身是否运行。
例如,如果依赖项扫描在默认深度下未检测到支持的文件,则分析器不运行,并且没有产物输出。
成功完成后,每个工作输出产物。这些产物被处理,结果在极狐GitLab 中可用。只有在所有工作完成后才显示结果,包括手动的。此外,对于某些功能,只有在流水线运行在默认分支上时才显示结果。
工作状态
如果工作能够完成扫描,则通过。通过结果不指示他们是否识别了发现。唯一的例外是覆盖率模糊测试,如果识别到发现则失败。
如果工作无法完成扫描,则失败。您可以查看流水线日志以获取更多信息。
默认情况下,所有工作都允许失败。这意味着如果失败,它不会导致流水线失败。
如果您希望阻止漏洞合并,您应该通过在合并请求中添加安全批准来实现,这可以防止未知、高或严重发现未经特定群组批准而合并。
我们不建议更改工作allow_failure设置,因为这会导致整个流水线失败。
工作产物
安全扫描工作可能生成一个或多个产物。从极狐GitLab 17.0 开始,这些产物仅限于开发者角色。
由安全分析器生成的安全报告产物包含在目标分支上发现的所有发现,无论之前是否发现、已被驳回或完全新发现(它包含所有发现的内容)。
合并请求中的安全批准
History
- 在极狐GitLab 15.0 中删除了漏洞检查功能。
- 在极狐GitLab 16.0 中删除了许可证检查功能。
您可以强制对合并请求进行额外批准,以引入以下安全问题之一:
- 安全漏洞。有关更多详细信息,请阅读合并请求批准政策。
私有化部署安装选项
对于极狐GitLab 私有化部署实例,即使在未连接到互联网的情况下,您也可以选择运行大多数极狐GitLab 安全扫描器。
极狐GitLab 私有化部署实例还可以在极狐GitLab Runner 上运行安全扫描器在 OpenShift 内部运行。
安全报告验证
极狐GitLab 15.0 在摄取漏洞之前强制验证安全报告产物。这防止将损坏的漏洞数据摄入数据库。
流水线的安全选项卡列出任何验证失败的报告产物和验证错误消息。
验证取决于安全报告产物中声明的架构版本:
- 如果您的安全报告指定了支持的架构版本,极狐GitLab 使用此版本进行验证。
- 如果您的安全报告使用已弃用的版本,极狐GitLab 尝试对该版本进行验证,并在验证结果中添加弃用警告。
- 如果您的安全报告使用报告架构的支持的主-次版本,但补丁版本与任何供应版本不匹配,极狐GitLab 尝试对架构的最新供应版本进行验证。
- 例如:安全报告使用版本 14.1.1,但最新供应版本是 14.1.0。极狐GitLab 将根据架构版本 14.1.0 进行验证。
- 如果您的安全报告使用不支持的版本,极狐GitLab 尝试对您安装中可用的最早架构版本进行验证,但不摄取报告。
- 如果您的安全报告未指定架构版本,极狐GitLab 尝试对极狐GitLab 中可用的最早架构版本进行验证。因为版本属性是必需的,验证在这种情况下总是失败,但也可能存在其他验证错误。
安全扫描配置提示
每个极狐GitLab 安全扫描工具都有一个默认的 CI/CD 配置文件,也称为_模板_。
在自定义配置时:
- 包含扫描工具的 CI/CD 模板。不要_复制_模板的内容。
- 对于生产工作流,请使用每个模板的稳定版本。稳定版本变化较少,并且只有在极狐GitLab 大版本之间才进行重大更改。最新版本包含最新的更改,但在极狐GitLab 小版本之间可能有显著变化。
- 仅根据需要覆盖模板中的值。所有其他值均继承自模板。
强制执行扫描
安全和合规团队必须确保安全扫描:
- 定期运行,以覆盖所有项目。
- 无法被开发人员禁用。
极狐GitLab 提供了两种实现此目的的方法,每种方法都有优点和缺点。
-
当需要强制执行任何使用极狐GitLab 模板的扫描器时(例如 SAST IaC、DAST、依赖项扫描、API 模糊测试或覆盖引导模糊测试),推荐使用合规框架流水线。当需要强制执行极狐GitLab 外部扫描器时推荐使用。对于除安全扫描之外的自定义工作需要执行强制时推荐使用。
-
当需要对使用 DAST 站点或扫描配置文件的 DAST 进行强制执行时推荐使用扫描执行策略。当需要对使用项目特定变量自定义的 SAST、SAST IaC、密钥检测、依赖项扫描或容器扫描进行强制执行时推荐使用。要实现这一点,用户必须为每个项目创建单独的安全策略。扫描需要定期运行,按照计划进行。
-
当需要对没有项目特定变量自定义的容器扫描进行强制执行时,可以同样有效地使用任何解决方案。
下面概述了两种解决方案之间的详细差异:
合规框架流水线 | 扫描执行策略 | |
---|---|---|
灵活性 | 支持在 CI 文件中可以完成的任何事情。 | 仅限于极狐GitLab 明确添加支持的项目。支持的扫描包括 DAST、SAST、SAST IaC、密钥检测、依赖项扫描和容器扫描。 |
可用性 | 需要了解 CI YAML。 | 遵循基于规则和操作的 YAML 结构。 |
在 CI 流水线中的包含 | 合规流水线代替项目的.gitlab-ci.yml文件执行。要包含项目的.gitlab-ci.yml文件,请使用include语句。定义的变量不允许被包含项目的 YAML 文件覆盖。 | 在 CI 流水线中强制包含新工作。必须在每个项目上自定义的 DAST 工作可以定义项目级别站点配置文件和扫描配置文件。为了确保职责分离,这些配置文件在扫描执行策略中引用时不可变。所有工作可以作为安全策略的一部分进行自定义,使用通常可用的 CI 工作变量。 |
可调度性 | 必须通过每个项目的计划流水线进行调度。 | 可以通过策略配置本身原生调度。 |
职责分离 | 只有群组所有者可以创建合规框架标签。只有项目所有者可以将合规框架标签应用于项目。进行或批准合规流水线定义更改的能力仅限于明确授予访问权限的项目中包含合规流水线的个人。 | 只有项目所有者可以定义链接的安全策略项目。进行或批准安全策略更改的能力仅限于明确授予访问权限的安全策略项目的个人。 |
将一个标准应用于多个项目的能力 | 相同的合规框架标签可以应用于群组内的多个项目。 | 相同的安全策略项目可以在极狐GitLab 内的多个项目中使用,而无需位于同一群组中。 |