依赖扫描分析器

依赖扫描依赖于封装在我们所谓的“分析器”中的底层第三方工具。分析器包装了一个特定的工具来:

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

依赖扫描支持以下官方分析器:

  • bundler-audit
  • gemnasium
  • gemnasium-maven
  • gemnasium-python
  • retire.js

分析器以 Docker 镜像的形式发布,依赖扫描使用这些镜像为每次分析启动专用容器。

依赖扫描分析器的当前主要版本号是 2。

依赖扫描预先配置了一组由极狐GitLab 维护的默认镜像,但用户也可以集成他们自己的自定义镜像

cautionbundler-audit 分析器已弃用,将在 15.0 版本中删除,因为它重复了 gemnasium 分析器的功能。
cautionretire.js 分析器已弃用,将在 15.0 版本中删除,因为它重复了 gemnasium 分析器的功能。

官方默认分析器

对官方分析器的任何自定义更改都可以通过在 .gitlab-ci.yml 中使用 CI/CD 变量来实现。

使用自定义 Docker 镜像

您可以切换到自定义 Docker 镜像库,该镜像库以不同的前缀提供官方分析器镜像。例如,下面的示例指示依赖扫描拉取 my-docker-registry/gl-images/gemnasium。在 .gitlab-ci.yml 中定义:

include:
  template: Security/Dependency-Scanning.gitlab-ci.yml

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

此配置要求您的自定义镜像库为所有官方分析器提供镜像。

禁用特定分析器

您可以选择不想运行的官方分析器。以下示例展示如何禁用 bundler-auditgemnasium 分析器。 在 .gitlab-ci.yml 中定义:

include:
  template: Security/Dependency-Scanning.gitlab-ci.yml

variables:
  DS_EXCLUDED_ANALYZERS: "bundler-audit, gemnasium"

禁用默认分析器

DS_EXCLUDED_ANALYZERS 设置为官方分析器列表会禁用它们。 在 .gitlab-ci.yml 中定义:

include:
  template: Security/Dependency-Scanning.gitlab-ci.yml

variables:
  DS_EXCLUDED_ANALYZERS: "gemnasium, gemnasium-maven, gemnasium-python, bundler-audit, retire.js"

当完全依赖自定义分析器时使用此选项。

自定义分析器

您可以通过在 CI 配置中定义 CI 作业来提供自己的分析器。为保持一致性,您应该在自定义依赖扫描作业后加上 -dependency_scanning。下面介绍如何添加基于 Docker 镜像 my-docker-registry/analyzers/nuget 的扫描作业,并在执行 /analyzer run 时生成依赖扫描报告 gl-dependency-scanning-report.json。在 .gitlab-ci.yml 中定义以下内容:

nuget-dependency_scanning:
  image:
    name: "my-docker-registry/analyzers/nuget"
  script:
    - /analyzer run
  artifacts:
    reports:
      dependency_scanning: gl-dependency-scanning-report.json

分析器数据

下表列出了每个官方分析仪可用的数据。

Property \ Tool Gemnasium bundler-audit Retire.js
Severity 𐄂
Title
File
Start line 𐄂 𐄂 𐄂
End line 𐄂 𐄂 𐄂
External ID (for example, CVE)
URLs
Internal doc/explanation 𐄂 𐄂
Solution 𐄂
Confidence 𐄂 𐄂 𐄂
Affected item (for example, class or package)
Source code extract 𐄂 𐄂 𐄂
Internal ID 𐄂 𐄂
Date 𐄂 𐄂
Credits 𐄂 𐄂
  • ✓ => 我们有这些数据
  • ⚠ => 我们有这些数据,但它是部分可靠的,或者我们需要从非结构化内容中提取该数据
  • 𐄂 => 我们没有这些数据,或者需要开发特定或低效/不可靠的逻辑来获取它。

这些工具提供的值是异构的,因此它们有时会被标准化为通用值(例如,severityconfidence 等)。