极狐 GitLab

检测

在软件开发生命周期中检测项目代码仓库和应用程序行为中的漏洞。

为帮助您在开发过程中管理漏洞风险:

  • 当您将代码变更推送到分支时,安全扫描器会运行。
  • 您可以查看分支中检测到的漏洞详情。开发者可以在此阶段修复漏洞,在漏洞进入生产环境之前将其解决。
  • 您也可以选择对包含漏洞的合并请求强制执行额外的审批。详情请参见合并请求审批策略。

为帮助管理开发之外的漏洞:

  • 安全扫描可以按计划运行,也可以手动运行。
  • 在默认分支中检测到的漏洞会显示在漏洞报告中。使用此报告排查、分析和修复漏洞。

安全审查任务流会分析合并请求中的业务逻辑漏洞,并补充基于 CI/CD 的安全扫描。

安全扫描#

要充分利用安全扫描,了解以下内容很重要:

  • 如何触发安全扫描。
  • 应用程序或代码仓库的哪些方面会被扫描。
  • 哪些因素决定运行哪些扫描器。
  • 安全扫描如何发生。

触发器#

默认情况下,当变更被推送到项目的代码仓库时,会触发 CI/CD 流水线中的安全扫描。

您还可以通过以下方式运行安全扫描:

检测覆盖范围#

扫描项目的代码仓库并测试应用程序的行为,以发现漏洞:

  • 代码仓库扫描可以检测项目代码仓库中的漏洞。覆盖范围包括应用程序的源代码,以及它所依赖的库和容器镜像。
  • 对应用程序及其 API 的行为测试可以检测仅在运行时出现的漏洞。

代码仓库扫描#

项目的代码仓库可能包含源代码、依赖声明和基础设施定义。代码仓库扫描可以检测其中每一项的漏洞。

代码仓库扫描工具包括:

  • 静态应用程序安全测试(SAST):分析源代码中的漏洞。
  • 基础设施即代码(IaC)扫描:检测应用程序基础设施定义中的漏洞。
  • 密钥检测:检测并阻止密钥被提交到代码仓库。
  • 依赖扫描:检测应用程序依赖项和容器镜像中的漏洞。

行为测试#

行为测试需要可部署的应用程序,以测试已知漏洞和意外行为。

行为测试工具包括:

  • 动态应用程序安全测试(DAST):测试应用程序是否存在已知攻击向量。
  • API 安全测试:测试应用程序的 API 是否存在已知攻击以及输入相关的漏洞。
  • 覆盖率引导的模糊测试:测试应用程序是否存在意外行为。

扫描器选择#

为项目启用安全扫描器的方式有两种:

  • 将扫描器的 CI/CD 模板添加到 .gitlab-ci.yml 文件中,可以直接添加,也可以通过 AutoDevOps 添加。
  • 使用扫描执行策略、流水线执行策略或合规框架强制执行扫描器。此强制执行可以直接应用于项目,也可以从项目的父群组继承。

更多详情,请参见安全配置。

安全扫描流程#

安全扫描流程如下:

  1. 根据 CI/CD 作业条件,那些已启用并计划在流水线中运行的扫描器会作为单独的作业运行。

    每个成功的作业都会输出一个或多个安全报告作为作业产物。这些报告包含分支中检测到的所有漏洞的详情,无论这些漏洞是之前发现的、已忽略的,还是新发现的。

  2. 每个安全报告都会被处理,包括验证和去重。

  3. 当所有作业(包括手动作业)完成后,您可以下载或查看结果。

有关安全扫描输出的更多详情,请参见安全扫描结果。

CI/CD 安全作业条件#

CI/CD 流水线中的安全扫描作业由以下条件决定:

  1. 包含安全扫描模板

    安全扫描作业的选择首先取决于包含或由策略、合规框架强制执行的模板。

    安全扫描默认在分支流水线中运行。要在合并请求流水线中运行安全扫描,您必须专门启用它。

  2. 规则评估

    每个模板都定义了规则,用于决定是否运行分析器。

    例如,某些分析器仅在代码仓库中检测到特定类型的文件时才运行。

  3. 分析器逻辑

    如果模板的规则指示应运行该作业,则会在模板指定的流水线阶段中创建一个作业。但是,每个分析器都有自己的逻辑,用于决定是否运行分析器本身。

    例如,如果依赖扫描在默认深度下未检测到受支持的文件,则不会运行分析器,也不会输出任何产物。

如果作业完成扫描,即使未发现漏洞,作业也会通过。唯一的例外是覆盖率模糊测试,如果它发现了问题,则会失败。所有作业都允许失败,这样它们就不会导致整个流水线失败。请勿更改作业的 allow_failure 设置,因为那会导致整个流水线失败。

数据隐私#

极狐GitLab 在极狐GitLab Runner 上本地处理源代码并执行分析。不会将任何数据传输到极狐GitLab 基础设施(服务器和 Runner)之外。

安全分析器仅在下载最新的签名、规则和补丁集时访问互联网。如果您希望扫描器不访问互联网,请考虑使用离线环境。