- 要求
- 支持的语言和框架
- 多项目支持
- 误报检测
- 高级漏洞跟踪
- 自动解决漏洞
- 支持的发行版
- 配置
- 报告 JSON 格式
- 在 SELinux 中运行 SAST
-
故障排除
- SAST 调试日志记录
- 作业日志中的
exec /bin/sh: exec format error
消息 Error response from daemon: error processing tar file: docker-tar: relocation error
- 收到警告信息
gl-sast-report.json: no matching files
- 使用
rules:exists
的限制 - SpotBugs UTF-8 无法映射的字符错误
- SpotBugs Error:
Project couldn't be built
- Flawfinder 编码错误
- Semgrep 缓慢、意外结果或其他错误
- MobSF 作业失败,错误消息
Reading from Info.plist
静态应用程序安全测试(SAST)
如果您使用极狐GitLab CI/CD,您可以使用静态应用程序安全测试 (SAST) 检查源代码中的已知漏洞。您可以在任何级别的版本中运行 SAST 分析器。分析器将 JSON 格式的报告作为作业产物输出。
使用旗舰版,还可以处理 SAST 结果:
- 在合并请求中进行查看。
- 在审核工作流程中进行使用。
- 在安全仪表盘中进行审查。
有关更多详细信息,请参阅功能摘要。
一个流水线由多个作业组成,包括 SAST 和 DAST 扫描。如果任何作业因任何原因未能完成,安全仪表盘不会显示 SAST 扫描仪输出。例如,SAST 作业完成但 DAST 作业失败,则安全仪表盘不会显示 SAST 结果。失败时,分析器会输出退出代码。
要求
SAST 在 test
阶段运行,默认情况下可用。如果在 .gitlab-ci.yml
文件中重新定义阶段,则需要 test
阶段。
要运行 SAST 作业,默认情况下,您需要带有 docker
或 kubernetes
执行器。
如果您在 JihuLab.com 上使用共享 runner,则默认启用此功能。
19.03.0
。有关详细信息,请参阅故障排除信息。支持的语言和框架
极狐GitLab SAST 支持扫描多种编程语言和框架。 一旦您启用 SAST,即使您的项目使用多种语言,正确的分析器集也会自动运行。
语言/框架 | 扫描分析器 | 支持的最低极狐GitLab 版本 |
---|---|---|
.NET Core3 | Security Code Scan | 13.10 |
.NET Framework3 | Security Code Scan | 13.10 |
.NET (所有版本,仅 C#) | 使用极狐GitLab 管理规则的 Semgrep | 15.4 |
Apex (Salesforce) | PMD | 13.10 |
C | 使用极狐GitLab 管理规则的 Semgrep | 14.2 |
C/C++ | Flawfinder | 13.10 |
Elixir (Phoenix) | Sobelow | 13.10 |
Go2 | Gosec | 13.10 |
Go | 使用极狐GitLab 管理规则的 Semgrep | 14.4 |
Groovy1 | 使用 find-sec-bugs 插件的 SpotBugs | 13.10 (Gradle) & 13.10 (Maven, SBT) |
Helm Charts | Kubesec | 13.10 |
Java (任何构建系统) | 使用极狐GitLab 管理规则的 Semgrep | 14.10 |
Java1, 2 | 使用 find-sec-bugs 插件的 SpotBugs | 13.10 (Maven)、13.10 (Gradle) 和 13.10 (SBT) |
Java (Android) | MobSF (beta) | 13.5 |
JavaScript2 | ESLint security plugin | 13.10 |
JavaScript | 使用极狐GitLab 管理规则的 Semgrep | 13.10 |
Kotlin (Android) | MobSF (beta) | 13.5 |
Kotlin (General)1 | 使用 find-sec-bugs 插件的 SpotBugs | 13.11 |
Kubernetes manifests | Kubesec | 13.10 |
Node.js | NodeJsScan | 13.10 |
Objective-C (iOS) | MobSF (beta) | 13.5 |
PHP | phpcs-security-audit | 13.10 |
Python2 | bandit | 13.10 |
Python | 使用极狐GitLab 管理规则的 Semgrep | 13.9 |
React2 | ESLint react plugin | 13.10 |
React | 使用极狐GitLab 管理规则的 Semgrep | 13.10 |
Ruby | brakeman | 13.9 |
Ruby on Rails | brakeman | 13.10 |
Scala (任何构建系统) | 使用极狐GitLab 管理规则的 Semgrep | 16.0 |
Scala1 | SpotBugs,具有 find-sec-bugs 插件 | 13.10 (SBT)、113.10 (Gradle、Maven) |
Swift (iOS) | MobSF (beta) | 13.5 |
TypeScript2 | ESLint security plugin | 13.10 、13.2(合并时使用 Eslint) |
TypeScript | 使用极狐GitLab 管理规则的 Semgrep | 13.10 |
-
基于 SpotBugs 的分析器支持 Gradle、Maven 和 SBT。它还可以与诸如 Gradle wrapper、Grails 和 Maven wrapper的变量一起使用。对于基于 Ant 的 Java 或 Scala 项目,我们建议使用基于 Semgrep 的分析器。
- 这些分析器在 16.0 版本中达到结束支持状态。
- 安全代码扫描在 16.0 版本中达到结束支持状态。
多项目支持
引入于 13.7 版本。
SAST 可以扫描包含多个项目的仓库。
以下分析器具有多项目支持:
- Bandit
- ESLint
- Gosec
- Kubesec
- NodeJsScan
- MobSF
- PMD
- Security Code Scan
- Semgrep
- SpotBugs
- Sobelow
为安全代码扫描启用多项目支持
安全代码扫描中的多项目支持需要仓库根目录中的解决方案 (.sln
) 文件。有关解决方案格式的详细信息,请参阅 Microsoft 解决方案 (.sln
) 文件。
误报检测
- 对 Ruby 的支持引入于 14.2 版本。
- 对 Go 的支持引入于 15.8 版本。
极狐GitLab SAST 可以在其他工具的输出中识别某些类型的误报结果。 这些结果在漏洞报告和漏洞页面中被标记为误报。
- Go,在基于 Semgrep 的分析器中
- Ruby,在基于 Brakeman 的分析器中
高级漏洞跟踪
引入于 14.2 版本。
源代码易变;随着开发人员进行更改,源代码可能会在文件内或文件之间移动。 安全分析器可能已经报告了漏洞报告中正在跟踪的漏洞。 这些漏洞与特定的有问题的代码片段相关联,以便可以找到并修复它们。 如果代码片段在移动时没有被可靠地跟踪,则漏洞管理会更加困难,因为可能会再次报告相同的漏洞。
SAST 使用先进的漏洞跟踪算法来更准确地识别由于重构或无关更改而在文件中移动的相同漏洞。
- C,在基于 Semgrep 的分析器和 Flawfinder 分析器中
- C++,仅在 Flawfinder 分析器中
- C#,仅在基于 Semgrep 的分析器中
- Go,仅在基于 Semgrep 的分析器中
- Java,在基于 mobsf、Semgrep 的分析器和 SpotBugs 分析器中
- JavaScript,在基于 Semgrep 的分析器和 NodeJS-Scan 的分析器中
- PHP,在 phpcs-security-audit 分析器中
- Python,仅在基于 Semgrep 的分析器中
- Ruby,在基于 Brakeman 的分析器中
自动解决漏洞
为了帮助您关注仍然相关的漏洞,极狐GitLab SAST 在以下情况自动解决漏洞:
- 您禁用了预定义规则。
- 我们从默认规则集中删除了一条规则。
自动解决仅适用于基于 Semgrep 的分析器的结果。 漏洞管理系统会在自动解决的漏洞上留下评论,因此您仍然拥有漏洞的历史记录。
如果您稍后重新启用该规则,将重新打开发现(findings)以便进行分类。
支持的发行版
默认扫描器镜像是在基本 Alpine 镜像的基础上构建的,以确保大小和可维护性。
FIPS-enabled 镜像
引入于 14.10 版本。
极狐GitLab 提供了一个基于 Red Hat UBI 基础镜像的镜像版本,它使用 FIPS 140-验证的密码模块。要使用 FIPS-enabled 的镜像,您可以:
- 将
SAST_IMAGE_SUFFIX
设置为-fips
。 - 将
-fips
扩展添加到默认图像名称。
variables:
SAST_IMAGE_SUFFIX: '-fips'
include:
- template: Security/SAST.gitlab-ci.yml
FIPS-compliant 镜像仅适用于基于 Semgrep 的分析器。
要以 FIPS-compliant 的方式使用 SAST,您必须排除其他分析器运行。
每个级别的功能摘要
不同的产品级别提供不同的功能,如下表所示:
功能 | 基础版和专业版 | 旗舰版 |
---|---|---|
使用适当的分析器自动扫描代码 | ||
配置 SAST 扫描器 | ||
自定义 SAST 设置 | ||
下载 JSON 报告 | ||
在合并请求部件中查看新的发现 | ||
管理漏洞 | ||
访问安全仪表盘 | ||
在 UI 中配置 SAST | ||
自定义 SAST 规则集 | ||
检测误报 | ||
跟踪移动的漏洞 |
配置
SAST 扫描在您的 CI/CD 流水线中运行。 当您将极狐GitLab 管理的 CI/CD 模板添加到您的流水线时,正确的 SAST 分析器会自动扫描您的代码并将结果保存为 SAST 报告产物。
要为项目配置 SAST,您可以:
- 使用 Auto DevOps 提供的 Auto SAST。
- 在 CI/CD YAML 中配置 SAST。
- 使用 UI 配置 SAST(引入于 13.3 版本)。
您可以通过强制扫描执行,在许多项目中启用 SAST。
在 CI/CD YAML 中配置 SAST
要启用 SAST,您必须包括 SAST.gitlab-ci.yml
模板,模板作为极狐GitLab 安装实例的一部分提供。
将以下内容添加到您的 .gitlab-ci.yml
文件中:
include:
- template: Jobs/SAST.gitlab-ci.yml
包含的模板在您的 CI/CD 流水线中创建 SAST 作业,并扫描您项目的源代码以查找可能的漏洞。
结果保存为 SAST 报告产物,下载时,您始终会收到可用的最新 SAST 产物。
使用 UI 配置 SAST
您可以使用默认设置或自定义在 UI 中启用和配置 SAST。 您可以使用的方法取决于您的极狐GitLab 产品级别。
使用自定义配置 SAST
- 从 UI 中移除个人 SAST 分析器配置选项于极狐GitLab 16.2。
.gitlab-ci.yml
文件或最小配置文件的情况下效果最佳。如果您有一个复杂的极狐GitLab 配置文件,它可能无法解析成功,并且可能会出现错误。要使用自定义启用和配置 SAST:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目。
- 在左侧边栏中,选择 安全与合规 > 配置。
- 如果项目没有
.gitlab-ci.yml
文件,在静态应用程序安全测试(SAST)行选择 启用 SAST,否则选择 配置 SAST。 -
输入自定义 SAST 值。
自定义值存储在
.gitlab-ci.yml
文件中。对于不在 SAST 配置页面中的 CI/CD 变量,它们的值继承自 SAST 模板。 - 或者,展开 SAST 分析器 部分,选择单个 SAST 分析器并输入自定义分析器值。
- 选择 创建合并请求。
- 查看并合并合并请求。
流水线现在包括一个 SAST 作业。
仅使用默认设置 SAST
引入于 13.9 版本。
.gitlab-ci.yml
文件或最小配置文件的情况下效果最佳。如果您有一个复杂的极狐GitLab 配置文件,它可能无法解析成功,并且可能会出现错误。使用默认设置启用和配置 SAST:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目。
- 在左侧边栏中,选择 安全 > 安全配置。
- 在 SAST 部分中,选择 使用合并请求配置。
- 查看并合并合并请求,来启用 SAST。
流水线现在包括一个 SAST 作业。
覆盖 SAST 作业
only
和 except
。覆盖模板时,您必须改用 rules
。要覆盖作业定义(例如,更改 variables
或 dependencies
等属性),请声明与要覆盖的 SAST 作业同名的作业。将此新作业放在模板包含之后,并在其下指定任何其他键。例如,为 spotbugs
分析器启用 FAIL_NEVER
:
include:
- template: Security/SAST.gitlab-ci.yml
spotbugs-sast:
variables:
FAIL_NEVER: 1
固定到镜像小版本
极狐GitLab 管理的 CI/CD 模板指定一个主要版本,并自动在该主要版本中提取最新的分析器版本。
在某些情况下,您可能需要使用特定版本。 例如,您可能需要避免在以后的版本中出现回归。
要覆盖自动更新行为,请在包含的 SAST.gitlab-ci.yml
模板中设置 SAST_ANALYZER_IMAGE_TAG
CI/CD 变量。
仅在特定作业中设置此变量。 如果您将其设置在顶层,则您设置的版本将用于其他 SAST 分析器。
您可以将标签设置为:
- 主要版本,例如
3
。您的流水线将使用在此主要版本中发布的任何次要更新或补丁更新。 - 次要版本,例如
3.7
。您的流水线将使用在此次要版本中发布的任何补丁更新。 - 补丁版本,比如
3.7.0
。您的流水线不会收到任何更新。
此示例使用特定次要版本的 semgrep
分析器和特定补丁版本的 brakeman
分析器:
include:
- template: Security/SAST.gitlab-ci.yml
semgrep-sast:
variables:
SAST_ANALYZER_IMAGE_TAG: "3.7"
brakeman-sast:
variables:
SAST_ANALYZER_IMAGE_TAG: "3.1.1"
使用 CI/CD 变量为私有仓库传递凭据
一些分析器需要下载项目的依赖项才能执行分析。反过来,此类依赖项可能存在于私有 Git 仓库中,因此需要用户名和密码等凭据才能下载它们。根据分析器的不同,可以通过自定义 CI/CD 变量向其提供此类凭据。
使用 CI/CD 变量将用户名和密码传递给私有 Go 仓库
如果您的 Go 项目依赖于私有模块,请参阅从私有项目中获取模块,了解如何通过 HTTPS 提供身份验证。
要通过 ~/.netrc
指定凭据,请提供包含以下内容的 before_script
:
gosec-sast:
before_script:
- |
cat <<EOF > ~/.netrc
machine gitlab.com
login $CI_DEPLOY_USER
password $CI_DEPLOY_PASSWORD
EOF
使用 CI/CD 变量将用户名和密码传递给私有 Maven 仓库
如果您的私有 Maven 仓库需要登录凭据,您可以使用 MAVEN_CLI_OPTS
CI/CD 变量。
启用 Kubesec 分析器
您需要将 SCAN_KUBERNETES_MANIFESTS
设置为 "true"
,来启用 Kubesec 分析器。在 .gitlab-ci.yml
中,定义:
include:
- template: Security/SAST.gitlab-ci.yml
variables:
SCAN_KUBERNETES_MANIFESTS: "true"
预编译
大多数 SAST 分析器直接扫描您的源代码,而无需先编译它。 但是,出于技术原因,一些分析器只能扫描编译后的代码。
默认情况下,这些分析器会自动尝试获取依赖项并编译您的代码,以便对其进行扫描。如果出现以下情况,自动编译可能会失败:
- 您的项目需要自定义构建配置。
- 您使用分析器中未内置的语言版本。
要解决这些问题,您可以跳过分析器的编译步骤,而是直接提供流水线早期阶段的产物。这种策略称为预编译。
预编译可用于支持 COMPILE
CI/CD 变量的分析器。
有关当前列表,请参阅分析器设置。
要使用预编译:
- 将项目的依赖输出到项目工作目录中的一个目录,然后通过设置
artifacts:paths
配置,将该目录保存为产物。 - 向分析器提供
COMPILE: "false"
CI/CD 变量,禁用自动编译。 - 将您的编译阶段添加为分析器作业的依赖项。
要允许分析器识别编译的产物,您必须明确指定 vendored 目录的路径。
此配置可能因分析仪而异。对于 Maven 项目,您可以使用 MAVEN_REPO_PATH
。
有关可用选项的完整列表,请参阅分析器设置。
以下示例预编译了一个 Maven 项目并将其提供给 SpotBugs SAST 分析器:
stages:
- build
- test
include:
- template: Security/SAST.gitlab-ci.yml
build:
image: maven:3.6-jdk-8-slim
stage: build
script:
- mvn package -Dmaven.repo.local=./.m2/repository
artifacts:
paths:
- .m2/
- target/
spotbugs-sast:
dependencies:
- build
variables:
MAVEN_REPO_PATH: $CI_PROJECT_DIR/.m2/repository
COMPILE: "false"
artifacts:
reports:
sast: gl-sast-report.json
可用的 CI/CD 变量
可以使用 .gitlab-ci.yml
中的 variables
参数配置 SAST。
以下示例包含用于将 SAST_GOSEC_LEVEL
变量覆盖为 2
的 SAST 模板。模板是之前评估的流水线配置,因此最后提及的变量优先。
include:
- template: Security/SAST.gitlab-ci.yml
variables:
SAST_GOSEC_LEVEL: 2
日志级别
引入于 13.1 版本。
要控制日志的详细程度,请设置 SECURE_LOG_LEVEL
环境变量。输出此日志级别或更高级别的消息。
从最高到最低严重性,日志记录级别是:
fatal
error
warn
-
info
(默认) debug
自定义证书颁发机构
要信任自定义证书颁发机构,请将 ADDITIONAL_CA_CERT_BUNDLE
变量设置为您希望在 SAST 环境中信任的 CA 证书包。ADDITIONAL_CA_CERT_BUNDLE
值应包含 X.509 PEM 公钥证书的文本表示形式。例如,要在 .gitlab-ci.yml
文件中配置此值,请使用以下命令:
variables:
ADDITIONAL_CA_CERT_BUNDLE: |
-----BEGIN CERTIFICATE-----
MIIGqTCCBJGgAwIBAgIQI7AVxxVwg2kch4d56XNdDjANBgkqhkiG9w0BAQsFADCB
...
jWgmPqF3vUbZE0EyScetPJquRFRKIesyJuBFMAs=
-----END CERTIFICATE-----
ADDITIONAL_CA_CERT_BUNDLE
值也可以配置为 UI 中的自定义变量,或者配置为 file
,它需要证书的路径;或者作为变量,它需要证书的文本表示。
Docker 镜像
以下是 Docker 镜像相关的 CI/CD 变量。
CI/CD 变量 | 描述 |
---|---|
SECURE_ANALYZERS_PREFIX |
覆盖提供默认镜像(代理)的 Docker 镜像库的名称。阅读有关自定义分析器的更多信息。 |
SAST_EXCLUDED_ANALYZERS |
不应运行的默认镜像的名称。阅读有关自定义分析器的更多信息。 |
SAST_ANALYZER_IMAGE_TAG |
覆盖默认版本的分析器镜像。阅读更多关于固定分析器镜像版本。 |
SAST_IMAGE_SUFFIX |
添加到镜像名称的后缀。如果设置为 -fips ,则使用 FIPS-enabled 镜像进行扫描。有关详细信息,请参阅FIPS-enabled 镜像。引入于 14.10 版本。 |
漏洞过滤器
一些分析器可以过滤掉特定阈值下的漏洞。
CI/CD 变量 | 默认值 | 描述 |
---|---|---|
SAST_EXCLUDED_PATHS |
spec, test, tests, tmp |
根据路径从输出中排除漏洞。这是一个逗号分隔的模式列表。Patterns 可以是 glob(有关支持的 patterns,请参阅 doublestar.Match )、文件或文件夹路径(例如,doc、spec )。父目录也匹配模式。您可能需要排除构建工具使用的临时目录,因为这些可能会产生误报。要排除路径,请复制并粘贴默认排除路径,然后添加您自己的要排除的路径。如果您未指定默认排除路径,您将覆盖默认值,并且只有您指定的路径将从 SAST 扫描中排除。 |
SEARCH_MAX_DEPTH |
4 | SAST 搜索仓库,检测使用的编程语言,并选择匹配的分析器。设置 SEARCH_MAX_DEPTH 的值来指定搜索阶段应该跨越多少个目录级别。选择分析器后,将分析整个仓库。 |
SAST_BANDIT_EXCLUDED_PATHS |
要从扫描中排除的路径的逗号分隔列表。使用 Python 的 fnmatch 语法;例如:'*/tests/*, */venv/*' 。 |
|
SAST_BRAKEMAN_LEVEL |
1 | 在给定的置信水平下忽略 Brakeman 漏洞。整数,1=低 3=高。 |
SAST_FLAWFINDER_LEVEL |
1 | 忽略给定风险级别下的 Flawfinder 漏洞。整数,0=无风险,5=高风险。 |
SAST_GOSEC_LEVEL |
0 | 在给定的置信水平下忽略 Gosec 漏洞。整数,0=未定义,1=低,2=中,3=高。 |
分析器设置
一些分析器可以使用 CI/CD 变量进行自定义。
CI/CD 变量 | 分析器 | 描述 |
---|---|---|
SCAN_KUBERNETES_MANIFESTS |
Kubesec | 设置为 true ,扫描 Kubernetes 清单。 |
KUBESEC_HELM_CHARTS_PATH |
Kubesec |
helm 用于生成 kubesec 扫描的 Kubernetes 清单的 Helm chart 的可选路径。 如果定义了依赖项,则应该在 before_script 中运行 helm dependency build 以获取必要的依赖项。 |
KUBESEC_HELM_OPTIONS |
Kubesec |
helm 可执行文件的附加参数。 |
COMPILE |
Gosec, SpotBugs | 设置为 false 以禁用项目编译和依赖项获取。SpotBugs 分析器引入于 13.1 版本,Gosec 分析器引入于 14.0 版本。 |
ANT_HOME |
SpotBugs |
ANT_HOME 变量。 |
ANT_PATH |
SpotBugs |
ant 可执行文件的路径。 |
GRADLE_PATH |
SpotBugs |
gradle 可执行文件的路径。 |
JAVA_OPTS |
SpotBugs |
java 可执行文件的附加参数。 |
JAVA_PATH |
SpotBugs |
java 可执行文件的路径。 |
SAST_JAVA_VERSION |
SpotBugs | 使用哪个 Java 版本。从 15.0 版本开始,支持的版本是 11 和 17 (默认)。在 15.0 版本之前,支持的版本是 8 (默认)和 11 。 |
MAVEN_CLI_OPTS |
SpotBugs |
mvn 或 mvnw 可执行文件的附加参数。 |
MAVEN_PATH |
SpotBugs |
mvn 可执行文件的路径。 |
MAVEN_REPO_PATH |
SpotBugs | Maven 本地仓库的路径(maven.repo.local 属性的快捷方式)。 |
SBT_PATH |
SpotBugs |
sbt 可执行文件的路径。 |
FAIL_NEVER |
SpotBugs | 设置为 1 ,可以忽略编译失败。 |
SAST_GOSEC_CONFIG |
Gosec | 删除于 14.0 版本 - 改用自定义规则集。Gosec 的配置路径(可选)。 |
PHPCS_SECURITY_AUDIT_PHP_EXTENSIONS |
phpcs-security-audit | 逗号分隔的附加 PHP 扩展列表。 |
SAST_DISABLE_BABEL |
NodeJsScan | 删除于 13.5 版本。 |
SAST_SEMGREP_METRICS |
Semgrep | 设置为 false ,禁用向 r2c 发送匿名扫描指标。默认值:true 。 |
SAST_SCANNER_ALLOWED_CLI_OPTS |
Semgrep | 运行扫描操作时传递给底层安全扫描器的 CLI 选项(带有值或标志的参数)。仅接受一组受限制的选项。使用空格或等号 (= ) 字符分隔 CLI 选项及其值,例如:name1 value1 或 name1=value1 。多个选项必须用空格分隔,例如:name1 value1 name2 value2 。引入于 15.3 版本。 |
安全扫描器配置
SAST 分析器在内部使用 OSS 安全扫描器来执行分析。我们为安全扫描程序设置了推荐配置,这样您就不必担心调整它们。但是,在极少数情况下,我们的默认扫描器配置不符合您的要求。
要允许对扫描器行为进行一些自定义,您可以向底层扫描器添加一组受限制的标志。在 SAST_SCANNER_ALLOWED_CLI_OPTS
CI/CD 变量中指定标志。 这些标志被添加到扫描器的 CLI 选项中。
分析器 | CLI 选项 | 描述 |
---|---|---|
Semgrep | --max-memory |
设置对单个文件运行规则时要使用的最大系统内存。以 MB 为单位。 |
Flawfinder | --neverignore |
永远不要忽略安全问题,即使在评论中有忽略指令。添加此选项可能会导致分析器检测到无法自动解决的其他漏洞发现。 |
自定义 CI/CD 变量
除了上述 SAST 配置 CI/CD 变量之外,如果使用 SAST 供应模板,所有自定义变量都会传播到底层 SAST 分析器镜像。
DOCKER_
、CI
、GITLAB_
、FF_
、HOME
、PWD
、OLDPWD
、PATH
、SHLVL
、HOSTNAME
。报告 JSON 格式
SAST 以 JSON 格式输出报告文件。报告文件包含所有发现的漏洞的详细信息。 要下载报告文件,您可以:
- 从 CI/CD 流水线页面下载文件。
- 在合并请求的流水线选项卡中,将
artifacts: paths
设置为gl-sast-report.json
。
有关信息,请参阅下载作业产物。
在 SELinux 中运行 SAST
默认情况下,托管在 SELinux 上的实例支持 SAST 分析器。在被覆盖的 SAST 作业中添加 before_script
可能不起作用,因为托管在 SELinux 上的 runner 权限受限。
故障排除
SAST 调试日志记录
将全局 CI 变量中的安全扫描器日志详细程度调整到 debug
,以帮助排除 SAST 作业的故障。
variables:
SECURE_LOG_LEVEL: "debug"
作业日志中的 exec /bin/sh: exec format error
消息
极狐GitLab SAST 分析器仅支持在 amd64
CPU 架构上运行。
此消息表明该作业正在不同的体系结构上运行,例如 arm
。
Error response from daemon: error processing tar file: docker-tar: relocation error
当运行 SAST 作业的 Docker 版本为 19.03.0
时会出现此错误。考虑更新到 Docker 19.03.1
或更高版本。旧版本不受影响。
收到警告信息 gl-sast-report.json: no matching files
有关这方面的信息,请参阅一般应用程序安全故障排除部分。
使用 rules:exists
的限制
SAST CI 模板使用rules:exists
参数。出于性能原因,针对给定的 glob 模式进行最大匹配数。 果匹配数超过最大值,则 rules:exists
参数返回 true
。根据仓库中的文件数量,即使扫描程序不支持您的项目,也可能会触发 SAST 作业。有关此问题的更多详细信息,请参阅 rules:exists
文档。
SpotBugs UTF-8 无法映射的字符错误
当 SpotBugs 构建中未启用 UTF-8 编码并且源代码中有 UTF-8 字符时,会发生这些错误。要修复此错误,请为项目的构建工具启用 UTF-8。
对于 Gradle 构建,将以下内容添加到您的 build.gradle
文件中:
compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
对于 Maven 构建,将以下内容添加到您的 pom.xml
文件中:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
SpotBugs Error: Project couldn't be built
如果您的作业在构建步骤中失败并显示 Project couldn't be built
消息,这很可能是因为您的作业要求 SpotBugs 使用不属于其默认工具的工具进行构建。
解决方案是使用预编译。预编译确保 SpotBugs 所需的图像在作业的容器中可用。
Flawfinder 编码错误
当 Flawfinder 遇到无效的 UTF-8 字符时会发生这种情况。要解决此问题,请将项目中的所有源代码转换为 UTF-8 字符编码。可以通过 cvt2utf
或 iconv
,在整个项目或每个作业中使用 before_script
功能。
Semgrep 缓慢、意外结果或其他错误
如果 Semgrep 速度慢、报告太多误报或误报、崩溃、失败或以其他方式损坏,请参阅 Semgrep 文档以了解如何进行故障排除。
MobSF 作业失败,错误消息 Reading from Info.plist
当 Info.plist
文件缺少 CFBundleIdentifier
键和字符串值时,会发生此错误。