Help us learn about your current experience with the documentation. Take the survey.

静态可达性分析

  • Tier: Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
  • Status: Beta

静态可达性分析(SRA)帮助您优先修复依赖项中的漏洞。SRA 会识别您的应用程序实际使用的依赖项。虽然依赖项扫描可以发现所有易受攻击的依赖项,但 SRA 专注于那些可访问且构成更高安全风险的依赖项,帮助您根据实际威胁暴露情况来优先修复。

快速入门

如果您是静态可达性分析的新手,以下步骤展示了如何为您的项目启用它。

先决条件:

排除项:

  • SRA 不能与扫描执行策略或管道执行策略一起使用。

要启用 SRA:

  • 在左侧边栏,选择搜索或转到并找到您的项目。

  • 编辑 .gitlab-ci.yml 文件,并添加以下内容之一。

    如果您使用 CI/CD 模板,请添加以下内容(确保只有一个 variables: 行):

    variables:
      DS_STATIC_REACHABILITY_ENABLED: true

    如果您使用依赖项扫描组件,请添加以下内容(确保只有一个 include: 行):

    include:
      - component: ${CI_SERVER_FQDN}/components/dependency-scanning/main@0
        inputs:
          enable_static_reachability: true
        rules:
          - if: $CI_SERVER_HOST == "gitlab.com"

此时,SRA 已在您的管道中启用。当依赖项扫描运行并输出 SBOM 时,结果将通过静态可达性分析进行补充。

理解结果

要识别可访问的易受攻击的依赖项,可以:

  • 在漏洞报告中,将鼠标悬停在漏洞的严重性值上。
  • 在漏洞的详细信息页面中,检查可访问性值。
  • 使用 GraphQL 查询列出那些可访问的漏洞。

依赖项可能具有以下可访问性值之一:

Yes
与此漏洞关联的包在代码中被确认为可访问。
Not Found
SRA 成功运行但未检测到易受攻击包的使用。如果易受攻击依赖项的可访问性值显示为未找到,请谨慎处理而不是完全忽略它,因为 SRA 的 Beta 版本可能会产生假阴性。
Not Available
未执行 SRA,因此不存在可访问性数据。

当直接依赖项被标记为正在使用时,其所有传递依赖项也会被标记为正在使用

支持的语言和包管理器

静态可达性分析仅适用于 Python、JavaScript 和 TypeScript 项目。前端框架不受支持。

SRA 补充了新依赖项扫描分析器生成的 SBOM,因此支持相同的包管理器。如果使用不支持依赖关系图的包管理器,所有间接依赖项都会被标记为未找到

语言 支持的包管理器 支持的文件后缀
Python1 pip, pipenv2, poetry, uv .py
JavaScript/TypeScript npm, pnpm, yarn .js, .ts

脚注

  1. 当使用 pipdeptree 进行依赖项扫描时, 可选依赖项 会被标记为直接依赖项而不是传递依赖项。静态可达性 分析可能无法将这些包识别为正在使用。例如,要求 passlib[bcrypt] 可能导致 passlib 被标记为 in_usebcrypt 被标记为 not_found。有关 更多详细信息,请参阅 pip
  2. 对于 Python pipenv,静态可达性分析不支持 Pipfile.lock 文件。仅支持 pipenv.graph.json,因为它支持依赖关系图。

在离线环境中运行 SRA

要在离线环境中使用依赖项扫描组件,您必须先 镜像组件项目

静态可达性分析的工作原理

依赖项扫描生成一个 SBOM 报告,其中标识所有组件及其传递依赖项。静态可达性分析检查 SBOM 报告中的每个依赖项,并向 SBOM 报告添加一个可访问性值。然后,增强的 SBOM 被 GitLab 实例摄取。

以下内容被标记为未找到:

  • 在项目的锁定文件中找到但未在代码中导入的依赖项。
  • 包含在项目的锁定文件中用于本地使用但未在代码中导入的工具。例如,即使本地使用,覆盖率测试或代码检查等工具也会被标记为未找到。