{{< details >}}

  • Tier: 旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

{{< history >}}

  • 引入于极狐GitLab 17.1,针对 Python 作为实验功能。
  • 在极狐GitLab 17.2 中添加了对于 Go 和 Java 的支持。
  • 在极狐GitLab 17.2 中,从实验变为 beta。
  • 在极狐GitLab 17.3 中添加了对于 JavaScript、TypeScript 和 C# 的支持。
  • 在极狐GitLab 17.3 GA。
  • 在极狐GitLab 17.4 中添加了对于 Java Server Pages (JSP) 的支持。

{{< /history >}}

极狐GitLab Advanced SAST 是一个静态应用安全测试 (SAST) 分析器,旨在通过跨函数和跨文件的污点分析来发现漏洞。

极狐GitLab Advanced SAST 是一个选择性启用的功能。当启用时,极狐GitLab Advanced SAST 分析器将扫描所有受支持语言的文件,使用极狐GitLab Advanced SAST 预定义规则集。Semgrep 分析器不会扫描这些文件。

所有由极狐GitLab Advanced SAST 分析器识别的漏洞将被报告,包括以前由基于 Semgrep 的分析器报告的漏洞。当极狐GitLab Advanced SAST 在与基于 Semgrep 的分析器相同的位置定位到相同类型的漏洞时,自动的过渡过程会去重复发现。

功能比较

功能 SAST Advanced SAST
分析深度 检测复杂漏洞的能力有限;分析仅限于单个文件,并且(有限例外)仅限于单个函数。 使用跨文件、跨函数的污点分析检测复杂漏洞。
准确性 由于上下文有限,更容易产生误报。 通过使用跨文件、跨函数的污点分析专注于真正可利用的漏洞,产生更少的误报。
修复指导 漏洞发现通过行号识别。 详细的代码流视图展示了漏洞如何通过程序流动,从而加快修复速度。
与极狐GitLab Duo 漏洞说明和漏洞解决一起工作 是。 是。
语言覆盖范围 更广泛 更有限

何时报告漏洞

极狐GitLab Advanced SAST 使用跨文件、跨函数的扫描与污点分析来追踪用户输入到程序中的流动。通过跟踪用户输入的路径,分析器识别潜在的点,其中不可信数据可能以不安全的方式影响应用程序的执行,确保检测到注入漏洞,例如 SQL 注入和跨站脚本攻击 (XSS),即使它们跨多个函数和文件。

为了减少噪音,极狐GitLab Advanced SAST 仅在有可验证的流动将不可信的用户输入源带到敏感点时报告基于污点的漏洞。其他产品可能会报告验证较少的漏洞。

极狐GitLab Advanced SAST 调整为强调跨越信任边界的输入,例如来自 HTTP 请求的值。不可信输入源集不包括命令行参数、环境变量或其他通常由操作程序提供的输入。

有关极狐GitLab Advanced SAST 检测的漏洞类型的详细信息,请参阅极狐GitLab Advanced SAST CWE 覆盖

从 Semgrep 迁移到极狐GitLab Advanced SAST

当您从 Semgrep 迁移到极狐GitLab Advanced SAST 时,自动过渡过程会去重漏洞。此过程链接先前检测到的 Semgrep 漏洞与相应的极狐GitLab Advanced SAST 发现,并在找到匹配项时替换它们。

漏洞过渡如何工作

在启用 默认分支 中的 Advanced SAST 扫描后(请参阅启用极狐GitLab Advanced SAST 扫描),当扫描运行并检测到漏洞时,它会检查是否有任何漏洞应根据以下条件替换现有的 Semgrep 漏洞。

去重复的条件

  1. 匹配标识符:
    • 极狐GitLab Advanced SAST 漏洞的标识符(不包括 CWE 和 OWASP)中至少有一个必须与现有 Semgrep 漏洞的主要标识符匹配。
    • 主要标识符是漏洞标识符数组中的第一个标识符,位于SAST 报告中。
    • 例如,如果极狐GitLab Advanced SAST 漏洞具有包括 bandit.B506 的标识符,而 Semgrep 漏洞的主要标识符也是 bandit.B506,则满足此条件。
  2. 匹配位置:
    • 漏洞必须与代码中的相同位置相关联。使用SAST 报告中漏洞中的以下字段之一来确定:
      • 跟踪字段(如果存在)
      • 位置字段(如果跟踪字段不存在)

漏洞的变化

当满足条件时,现有的 Semgrep 漏洞将被转换为极狐GitLab Advanced SAST 漏洞。此更新的漏洞会在漏洞报告中出现,以下是变化:

  • 扫描器类型从 Semgrep 更新为极狐GitLab Advanced SAST。
  • 极狐GitLab Advanced SAST 漏洞中存在的任何其他标识符都会添加到现有漏洞中。
  • 漏洞的所有其他详细信息保持不变。

处理重复漏洞

在某些情况下,如果未满足去重复条件,Semgrep 漏洞可能仍会作为重复项出现。要在漏洞报告中解决此问题:

  1. 通过 Advanced SAST 扫描器过滤漏洞,并以 CSV 格式导出结果
  2. 通过 Semgrep 扫描器过滤漏洞。这些可能是未去重的漏洞。
  3. 对于每个 Semgrep 漏洞,检查它是否在导出的 Advanced SAST 结果中有对应匹配项。
  4. 如果存在重复项,请适当地解决 Semgrep 漏洞。

支持的语言

极狐GitLab Advanced SAST 支持以下语言进行跨函数和跨文件的污点分析:

  • C#
  • Go
  • Java,包括 Java Server Pages (JSP)
  • JavaScript, TypeScript
  • Python
  • Ruby

配置

启用极狐GitLab Advanced SAST 分析器,通过执行跨函数和跨文件的污点分析来发现应用程序中的漏洞。然后您可以使用 CI/CD 变量调整其行为。

要求

与其他极狐GitLab SAST 分析器一样,极狐GitLab Advanced SAST 分析器需要 runner 和 CI/CD 流水线;有关详细信息,请参阅SAST 要求

在极狐GitLab 私有化部署上,您还必须使用支持极狐GitLab Advanced SAST 的极狐GitLab 版本:

  • 您应该尽可能使用极狐GitLab 17.4 或更高版本。极狐GitLab 17.4 包含新的代码流视图、漏洞去重以及 SAST CI/CD 模板的进一步更新。
  • SAST CI/CD 模板在以下版本中更新以包含极狐GitLab Advanced SAST:
  • 极狐GitLab Advanced SAST 至少需要版本 17.1 或更高。

启用极狐GitLab Advanced SAST 扫描

极狐GitLab Advanced SAST 包含在标准极狐GitLab SAST CI/CD 模板中,但尚未默认启用。要启用它,设置 CI/CD 变量 GITLAB_ADVANCED_SAST_ENABLEDtrue。根据您如何管理 CI/CD 配置,您可以以不同的方式设置此变量。

手动编辑 CI/CD 流水线定义

如果您已经在项目中启用了极狐GitLab SAST 扫描,请添加一个新的 CI/CD 变量以启用极狐GitLab SAST。

此最小的 YAML 文件包含稳定 SAST 模板并启用极狐GitLab Advanced SAST:

include:
  - template: Jobs/SAST.gitlab-ci.yml

variables:
  GITLAB_ADVANCED_SAST_ENABLED: 'true'

在扫描执行策略中执行

要在扫描执行策略中启用极狐GitLab Advanced SAST,请更新策略的扫描操作以设置 CI/CD 变量 GITLAB_ADVANCED_SAST_ENABLEDtrue。您可以通过以下方式设置此变量:

使用流水线编辑器

要使用流水线编辑器启用极狐GitLab Advanced SAST:

  1. 在您的项目中,选择 构建 > 流水线编辑器
  2. 如果不存在 .gitlab-ci.yml 文件,选择 Configure pipeline,然后删除示例内容。
  3. 更新 CI/CD 配置以:
    • 如果未已包含,请包含极狐GitLab 管理的SAST CI/CD 模板之一。
      • 在极狐GitLab 17.3 或更高版本中,您应该使用稳定模板,Jobs/SAST.gitlab-ci.yml
      • 在极狐GitLab 17.2 中,极狐GitLab Advanced SAST 仅在最新模板 Jobs/SAST.latest.gitlab-ci.yml 中可用。请注意,您不应在单个项目中混合最新和稳定模板
      • 在极狐GitLab 17.1 中,您必须手动将极狐GitLab Advanced SAST 作业的内容复制到您的 CI/CD 流水线定义中。
    • 将 CI/CD 变量 GITLAB_ADVANCED_SAST_ENABLED 设置为 true

    请参阅上面的最小 YAML 示例

  4. 选择 验证 选项卡,然后选择 验证流水线

    消息 模拟已成功完成 确认文件有效。

  5. 选择 编辑 选项卡。
  6. 完成字段。不要在 分支 字段中使用默认分支。
  7. 选择 使用这些更改启动新的合并请求 复选框,然后选择 提交更改
  8. 根据您的标准工作流程完成字段,然后选择 创建合并请求
  9. 根据您的标准工作流程审查和编辑合并请求,然后选择 合并

流水线现在包含一个极狐GitLab Advanced SAST 作业。

禁用极狐GitLab Advanced SAST 扫描

Advanced SAST 扫描不是默认启用的,但可以在群组级别或以影响多个项目的其他方式启用。

要在项目中显式禁用 Advanced SAST 扫描,请将 CI/CD 变量 GITLAB_ADVANCED_SAST_ENABLED 设置为 false。您可以在任何可以配置 CI/CD 变量的地方设置此变量,包括您可以启用 Advanced SAST 扫描的相同方式。

漏洞代码流

{{< history >}}

  • 引入于极狐GitLab 17.3,使用多个功能标志。默认启用。
  • 在极狐GitLab 17.7 中,在私有化部署上启用。
  • 在极狐GitLb 17.7 中 GA。所有功能标志被移除。

{{< /history >}}

对于特定类型的漏洞,极狐GitLab Advanced SAST 提供代码流信息。漏洞的代码流是从用户输入(源)到代码中易受攻击的行(点)的数据路径,经过所有赋值、操纵和清理。此信息帮助您理解和评估漏洞的上下文、影响和风险。代码流信息可用于通过追踪从源到点的输入检测到的漏洞,包括:

  • SQL 注入
  • 命令注入
  • 跨站脚本攻击 (XSS)
  • 路径遍历

代码流信息显示在 代码流 选项卡中,包括:

  • 从源到点的步骤。
  • 相关文件,包括代码片段。

一个跨两个文件的 Python 应用程序的代码流

故障排除

如果在使用极狐GitLab Advanced SAST 时遇到问题,请参阅故障排除指南

定位极狐GitLab Advanced SAST 分析器版本

要定位极狐GitLab Advanced SAST 分析器版本:

  1. 在左侧边栏,选择 搜索或转到 并找到您的项目。
  2. 选择 构建 > 作业
  3. 找到 gitlab-advanced-sast 作业。
  4. 在作业的输出中,搜索字符串 GitLab Advanced SAST analyzer

您应该在包含该字符串的行末找到版本。例如:

[INFO] [极狐GitLab Advanced SAST] [2025-01-24T15:51:03Z] ▶ 极狐GitLab 极狐GitLab Advanced SAST 分析器 v1.1.1

在此示例中,版本是 1.1.1

自定义极狐GitLab Advanced SAST

您可以禁用极狐GitLab Advanced SAST 规则或编辑其元数据,就像其他分析器一样。有关详细信息,请参阅自定义规则集

请求极狐GitLab Advanced SAST 中 LGPL 许可组件的源代码

要请求有关极狐GitLab Advanced SAST 中 LGPL 许可组件的源代码的信息,请联系极狐GitLab 支持

为了确保快速响应,请在您的请求中包含极狐GitLab Advanced SAST 分析器版本。

由于此功能仅在旗舰版级别可用,您必须与该级别支持授权的组织相关联。