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 分析器丰富了分析器的报告输出。它不会直接修改报告内容,而是通过其他属性增强了结果,包括:
过渡到基于 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 镜像仓库必须提供所有官方分析器的镜像。
要让极狐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