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 专注于那些可访问且构成更高安全风险的依赖项,帮助您根据实际威胁暴露情况来优先修复。
快速入门
如果您是静态可达性分析的新手,以下步骤展示了如何为您的项目启用它。
先决条件:
- 确保项目使用支持的语言和包管理器。
- 依赖项扫描分析器版本 0.32.0 及更高版本。
- 通过使用 SBOM 启用依赖项扫描。 Gemnasium 分析器不受支持。
- 语言特定的先决条件:
排除项:
- 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 |
脚注:
- 当使用
pipdeptree进行依赖项扫描时, 可选依赖项 会被标记为直接依赖项而不是传递依赖项。静态可达性 分析可能无法将这些包识别为正在使用。例如,要求passlib[bcrypt]可能导致passlib被标记为in_use而bcrypt被标记为not_found。有关 更多详细信息,请参阅 pip。 - 对于 Python
pipenv,静态可达性分析不支持Pipfile.lock文件。仅支持pipenv.graph.json,因为它支持依赖关系图。
在离线环境中运行 SRA
要在离线环境中使用依赖项扫描组件,您必须先 镜像组件项目。
静态可达性分析的工作原理
依赖项扫描生成一个 SBOM 报告,其中标识所有组件及其传递依赖项。静态可达性分析检查 SBOM 报告中的每个依赖项,并向 SBOM 报告添加一个可访问性值。然后,增强的 SBOM 被 GitLab 实例摄取。
以下内容被标记为未找到:
- 在项目的锁定文件中找到但未在代码中导入的依赖项。
- 包含在项目的锁定文件中用于本地使用但未在代码中导入的工具。例如,即使本地使用,覆盖率测试或代码检查等工具也会被标记为未找到。