SAST 分析器

  • 从旗舰版移动到基础版于 13.3 版本。

静态应用程序安全测试 (SAST) 使用分析器来检测源代码中的漏洞。每个分析器都是第三方代码分析工具 scanner 的包装器。

分析器作为 Docker 镜像发布,SAST 使用这些镜像,为每次分析启动专用容器。我们建议至少使用 4 GB RAM 以确保分析器的一致性能。

SAST 默认镜像由极狐GitLab 维护,但您也可以集成自己的自定义镜像。

对于每个扫描器,一个分析器:

  • 暴露其检测逻辑。
  • 处理其执行。
  • 将其输出转换为标准格式

官方分析器

SAST 支持以下官方分析器:

  • Advanced SAST
  • kubesec (Kubesec)
  • pmd-apex (PMD (Apex only))
  • semgrep (Semgrep)
  • sobelow (Sobelow (Elixir Phoenix))
  • spotbugs (SpotBugs with the Find Sec Bugs plugin (Ant, Gradle and wrapper, Grails, Maven and wrapper, SBT))

如下极狐GitLab 分析器已经不再受支持,所以不会接受到更新。它们被使用极狐GitLab 管理的规则的基于 Semgrep 的分析器取代。

  • bandit (Bandit);支持终止于极狐GitLab 15.4。
  • brakeman (Brakeman);支持终止于极狐GitLab 17.0。
  • eslint (ESLint (JavaScript and React));支持终止于极狐GitLab 15.4。
  • flawfinder (Flawfinder);支持终止于极狐GitLab 17.0。
  • gosec (Gosec);支持终止于极狐GitLab 15.4。
  • mobsf (MobSF);支持终止于极狐GitLab 17.0。
  • nodejs-scan (NodeJsScan);支持终止于极狐GitLab 17.0。
  • phpcs-security-audit (PHP CS security-audit)
  • security-code-scan (Security Code Scan (.NET));支持终止于极狐GitLab 16.0。

极狐GitLab 高级 SAST 分析器

极狐GitLab 高级 SAST 分析器为 Python、Go、Java、JavaScript 和 C# 提供了一个宽泛且更加精确的静态分析,特别是在提供跨函数和跨文件的污点分析方面。

此功能未默认启用。要启用此功能,请参考高级 SAST中的指南。

SAST 分析器功能

对于被视为可用的分析器,预计至少支持以下功能:

Post 分析器

Post 分析器丰富了分析器的报告输出。它不会直接修改报告内容,而是通过其他属性增强了结果,包括:

  • CWE。
  • 位置跟踪字段。
  • 一种识别误报或无关紧要的发现的方法。

过渡到基于 Semgrep 的扫描

除了极狐GitLab 高级 SAST 分析器之外,极狐GitLab 还提供了一个基于 Semgrep 的分析器,涵盖了多种语言。极狐GitLab 维护分析器并为其编写检测规则。这些规则取代了之前版本中使用的特定于语言的分析器。

如果您使用极狐GitLab 管理的 CI/CD 模板,则基于 Semgrep 的分析器与其他特定于语言的分析器一起运行。它使用极狐GitLab 管理的检测规则运行,这些规则模仿其他分析器的检测规则。

您可以选择提前禁用其他分析器,并在默认行为更改之前,,使用基于 Semgrep 的扫描来扫描支持的语言。如果您这样做:

  • 您将享受到更快的扫描速度、更少的 CI 分钟使用量以及更可自定义的扫描规则。
  • 但是,特定语言分析器之前报告的漏洞将在某些条件下再次报告,包括如果您之前已消除漏洞。系统行为取决于:
    • 您过去是否排除了基于 Semgrep 的分析器的运行。
    • 哪个分析器首先发现了项目的漏洞报告中显示的漏洞。

漏洞转换

漏洞管理系统会自动将漏洞从旧分析器移动到基于 Semgrep 的发现(可能时)。对于转换至高级 SAST,请参阅高级 SAST 文档

当发生这种情况时,系统会将每个分析器中的漏洞合并到一个记录中。

但是,如果发生以下情况,漏洞可能会不匹配:

  • 新的基于 Semgrep 的规则在与旧分析器不同的位置或以不同的方式检测到漏洞。
  • 您之前禁用了 SAST 分析器。这会干扰自动翻译,因为无法为每个漏洞记录必要的标识符。

如果漏洞不匹配:

  • 漏洞报告中原先的漏洞会被标记为“不再被检测”。
  • 然后,基于 Semgrep 的发现会创建一个新漏洞。

自定义分析器

在您的 .gitlab-ci.yml 文件中使用 CI/CD 变量 来自定义分析器的行为。

使用自定义的 Docker 镜像

您可以使用自定义的 Docker 镜像,而不是极狐GitLab 镜像仓库,来托管您的分析器镜像。

先决条件:

  • 自定义 Docker 镜像仓库必须提供所有官方分析器的镜像。
note此变量会影响所有的安全分析器,而不仅仅是 SAST 分析器。

要让极狐GitLab 从自定义的 Docker 镜像仓库下载分析器的镜像,使用 SECURE_ANALYZERS_PREFIX CI/CD 变量来定义前缀。

比如,下面的示例指示 SAST 拉取 my-docker-registry/gitlab-images/semgrep 而不是 registry.gitlab.com/security-products/semgrep

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

variables:
  SECURE_ANALYZERS_PREFIX: my-docker-registry/gitlab-images

禁用所有的默认分析器

您可以禁用所有的默认 SAST 分析器,仅启用自定义的分析器

要禁用所有的默认分析器,在您的 .gitlab-ci.yml 文件中将 CI/CD 变量 SAST_DISABLED 设置为 "true"

示例:

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

variables:
  SAST_DISABLED: "true"

禁用指定的默认分析器

分析器会根据检测到的语言自动运行。然而,您可以禁用选择分析器。

要禁用选择的分析器,设置 CI/CD 变量 SAST_EXCLUDED_ANALYZERS 为逗号分隔的字符串,列出您想要禁用的分析器。

例如,要禁用 spotbugs 分析器:

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

variables:
  SAST_EXCLUDED_ANALYZERS: "spotbugs"

自定义分析器

您可以通过在您的 CI/CD 配置中定义作业来提供您自己的分析器。为了和默认分析器保持一致性,您应该添加 -sast 后缀到您的自定义 SAST 作业。

关于继承自定义安全扫描器到极狐GitLab 的更多详情,可查阅安全扫描器集成

自定义分析器示例

此示例显示了如何基于 Docker 镜像 my-docker-registry/analyzers/csharp 来添加一个扫描作业。此作业运行脚本 /analyzer run,并输出 SAST 报告 gl-sast-report.json

在您的 .gitlab-ci.yml 文件中添加以下内容:

csharp-sast:
  image:
    name: "my-docker-registry/analyzers/csharp"
  script:
    - /analyzer run
  artifacts:
    reports:
      sast: gl-sast-report.json