静态应用程序安全测试(SAST)

如果您使用极狐GitLab CI/CD,您可以使用静态应用程序安全测试 (SAST) 检查源代码中的已知漏洞。您可以在任何级别的版本中运行 SAST 分析器。分析器将 JSON 格式的报告作为作业产物输出。

使用旗舰版,还可以处理 SAST 结果:

  • 在合并请求中进行查看。
  • 在审核工作流程中进行使用。
  • 在安全仪表盘中进行审查。

有关更多详细信息,请参阅功能摘要

SAST results shown in the MR widget

一个流水线由多个作业组成,包括 SAST 和 DAST 扫描。如果任何作业因任何原因未能完成,安全仪表盘不会显示 SAST 扫描仪输出。例如,SAST 作业完成但 DAST 作业失败,则安全仪表盘不会显示 SAST 结果。失败时,分析器会输出退出代码。

要求

SAST 在 test 阶段运行,默认情况下可用。如果在 .gitlab-ci.yml 文件中重新定义阶段,则需要 test 阶段。

要运行 SAST 作业,默认情况下,您需要带有 dockerkubernetes 执行器。 如果您在 JihuLab.com 上使用共享 runner,则默认启用此功能。

caution极狐GitLab SAST 分析器不支持在 Windows 或除 amd64 以外的任何 CPU 架构上运行。
caution如果您使用自己的 runner,请确保安装的 Docker 版本不是 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
  1. 基于 SpotBugs 的分析器支持 GradleMavenSBT。它还可以与诸如 Gradle wrapperGrailsMaven wrapper的变量一起使用。对于基于 Ant 的 Java 或 Scala 项目,我们建议使用基于 Semgrep 的分析器。

  2. 这些分析器在 16.0 版本中达到结束支持状态。
  3. 安全代码扫描在 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 的分析器中

SAST false-positives show in Vulnerability Pages

高级漏洞跟踪

引入于 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 的分析器中

自动解决漏洞

  • 引入于 15.9 版本,项目级功能标志sec_mark_dropped_findings_as_resolved
  • 默认启用于 15.10 版本。在 SaaS 版上,如果您需要为您的项目禁用此功能,请联系技术支持
  • 功能标志移除于 16.2 版本。

为了帮助您关注仍然相关的漏洞,极狐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,您可以:

您可以通过强制扫描执行,在许多项目中启用 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。
note配置工具在没有现有 .gitlab-ci.yml 文件或最小配置文件的情况下效果最佳。如果您有一个复杂的极狐GitLab 配置文件,它可能无法解析成功,并且可能会出现错误。

要使用自定义启用和配置 SAST:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 在左侧边栏中,选择 安全与合规 > 配置
  3. 如果项目没有 .gitlab-ci.yml 文件,在静态应用程序安全测试(SAST)行选择 启用 SAST,否则选择 配置 SAST
  4. 输入自定义 SAST 值。

    自定义值存储在 .gitlab-ci.yml 文件中。对于不在 SAST 配置页面中的 CI/CD 变量,它们的值继承自 SAST 模板。

  5. 或者,展开 SAST 分析器 部分,选择单个 SAST 分析器并输入自定义分析器值。
  6. 选择 创建合并请求
  7. 查看并合并合并请求。

流水线现在包括一个 SAST 作业。

仅使用默认设置 SAST

引入于 13.9 版本。

note配置工具在没有现有 .gitlab-ci.yml 文件或最小配置文件的情况下效果最佳。如果您有一个复杂的极狐GitLab 配置文件,它可能无法解析成功,并且可能会出现错误。

使用默认设置启用和配置 SAST:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 在左侧边栏中,选择 安全 > 安全配置
  3. 在 SAST 部分中,选择 使用合并请求配置
  4. 查看并合并合并请求,来启用 SAST。

流水线现在包括一个 SAST 作业。

覆盖 SAST 作业

caution从 13.0 版本开始,不再支持使用 onlyexcept。覆盖模板时,您必须改用 rules

要覆盖作业定义(例如,更改 variablesdependencies 等属性),请声明与要覆盖的 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 变量的分析器。 有关当前列表,请参阅分析器设置

要使用预编译:

  1. 将项目的依赖输出到项目工作目录中的一个目录,然后通过设置 artifacts:paths 配置,将该目录保存为产物。
  2. 向分析器提供 COMPILE: "false" CI/CD 变量,禁用自动编译。
  3. 将您的编译阶段添加为分析器作业的依赖项。

要允许分析器识别编译的产物,您必须明确指定 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。

caution在将这些更改合并到默认分支之前,应在合并请求中测试极狐GitLab 安全扫描工具的所有自定义。不这样做会产生意想不到的结果,包括大量误报。

以下示例包含用于将 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 版本开始,支持的版本是 1117(默认)。在 15.0 版本之前,支持的版本是 8(默认)和 11
MAVEN_CLI_OPTS SpotBugs mvnmvnw 可执行文件的附加参数。
MAVEN_PATH SpotBugs mvn 可执行文件的路径。
MAVEN_REPO_PATH SpotBugs Maven 本地仓库的路径(maven.repo.local 属性的快捷方式)。
SBT_PATH SpotBugs sbt 可执行文件的路径。
FAIL_NEVER SpotBugs 设置为 1,可以忽略编译失败。
SAST_GOSEC_CONFIG Gosec caution 删除于 14.0 版本 - 改用自定义规则集。Gosec 的配置路径(可选)。
PHPCS_SECURITY_AUDIT_PHP_EXTENSIONS phpcs-security-audit 逗号分隔的附加 PHP 扩展列表。
SAST_DISABLE_BABEL NodeJsScan caution 删除于 13.5 版本。
SAST_SEMGREP_METRICS Semgrep 设置为 false,禁用向 r2c 发送匿名扫描指标。默认值:true
SAST_SCANNER_ALLOWED_CLI_OPTS Semgrep 运行扫描操作时传递给底层安全扫描器的 CLI 选项(带有值或标志的参数)。仅接受一组受限制的选项。使用空格或等号 (=) 字符分隔 CLI 选项及其值,例如:name1 value1name1=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 分析器镜像。

note在 13.3 及更早版本中,名称以以下前缀开头的变量不会传播到分析器容器或 SAST Docker 容器:DOCKER_CIGITLAB_FF_HOMEPWDOLDPWDPATHSHLVLHOSTNAME

报告 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 字符编码。可以通过 cvt2utficonv,在整个项目或每个作业中使用 before_script 功能。

Semgrep 缓慢、意外结果或其他错误

如果 Semgrep 速度慢、报告太多误报或误报、崩溃、失败或以其他方式损坏,请参阅 Semgrep 文档以了解如何进行故障排除

MobSF 作业失败,错误消息 Reading from Info.plist

Info.plist 文件缺少 CFBundleIdentifier 键和字符串值时,会发生此错误。