全局位置去重(专业版) (Pro)

全局位置去重是 DefectDojo Pro 的一种算法,它纯粹根据共享位置——URL,或依赖项(以其 Package URL 标识)——在所有产品范围内识别重复的发现项。只要两个发现项共享某个已选类型的位置,无论其标题、严重程度、CWE 或漏洞 ID 是否相同,都会被视为重复项——位置本身就是身份标识。

它是全局组件去重在位置感知层面的对应方案,作用于 DefectDojo 的位置数据模型。全局组件仅根据组件名称和版本进行匹配,而全局位置则通过完整的 Package URL匹配同一依赖项,并且根据共享的 URL 进行匹配——因此它能够在各产品之间对 DAST/Web 发现项进行去重,这是全局组件无法做到的。

与作用域受限的算法不同,全局位置匹配并不局限于单个产品或测试活动范围内。导入到产品 B 中的发现项可以被标记为产品 A 中某个较早发现项的重复项,即使这两个产品彼此无关。

前提条件

全局位置是基于 DefectDojo 的位置(Locations)数据模型定义的,仅在启用了位置功能时才提供。在未启用位置功能的实例上,全局位置的功能开关会显示为锁定状态(“需要先启用位置功能”),并且该算法不会出现在调优器中。

启用全局位置算法

全局位置去重由一个功能开关控制,默认关闭。启用位置功能后,超级用户可以在云端和本地部署实例上通过设置 > 功能开关将其启用。请参阅功能开关

启用该功能后,全局位置将会在调优器中的同工具去重和跨工具去重设置的去重算法下拉菜单中显示为可选项。

配置全局位置去重

全局位置可以应用于同工具去重、跨工具去重,或两者兼用,并按安全工具在设置 > 发现项工作流程中进行配置(在仍使用旧版菜单布局的实例上为设置 > Pro 设置 > 去重设置;请参阅设置菜单)。

当您选择全局位置时,哈希代码字段选择器会被隐藏(不适用),取而代之的是一个位置类型选择器。

位置类型

选择参与匹配的位置类型:

  • URL——当两个发现项共享同一个 URL 时匹配(根据已配置的端点字段 DEDUPE_ALGO_ENDPOINT_FIELDS 进行比较)。
  • 依赖项——当两个发现项通过完整的 Package URL 标识引用同一个依赖项时匹配。

至少必须选择一种类型;默认两种类型都会被选中。仅配置为 URL 的工具会忽略共享的依赖项,仅配置为依赖项的工具会忽略共享的 URL。

同工具

当您希望根据共享位置,对单个工具在多个产品中产生的发现项进行去重时,请使用搭配全局位置算法的同工具去重。

  1. 打开同工具去重选项卡。
  2. 安全工具下拉菜单中选择该工具。
  3. 去重算法设置为全局位置
  4. 选择要匹配的位置类型
  5. 提交表单。

跨工具

当您希望在不同的工具和产品之间对共享同一位置的发现项进行去重时,请使用搭配全局位置算法的跨工具去重。

跨工具匹配会读取导入工具所选择的位置类型,因此请在每一个需要参与的工具上配置全局位置,并使用相匹配的位置类型。

  1. 打开跨工具去重选项卡。
  2. 对于每一个需要纳入的工具:从安全工具下拉菜单中选择该工具,将算法设置为全局位置,选择位置类型,然后提交。

匹配原理

当新的发现项与实例中任意位置的现有发现项至少共享一个已选类型的具体位置时,会被标记为该发现项的重复项:

  • 一个 URL,其已配置的端点字段(DEDUPE_ALGO_ENDPOINT_FIELDS)全部匹配,或者
  • 一个依赖项,具有相同的 Package URL(精确的 purl 匹配,因此 pkg:npm/timespan@2.3.0 不会匹配 pkg:npm/timespan@2.3.1)。

该匹配是严格且非空虚的:如果两个发现项都没有已选类型的位置,则永远不会被去重(与作用域受限的位置匹配不同,“二者皆空”并不构成匹配)。如果端点字段比较被禁用(DEDUPE_ALGO_ENDPOINT_FIELDS = []),则 URL 完全无法建立匹配——只有共享的依赖项才可以。

同工具匹配始终局限于单个工具(测试类型)内。跨工具匹配则有意跨越不同工具。此算法会忽略测试活动范围的去重设置;匹配始终是全局性的,并且与其他全局算法一样,service 字段仍然会对去重进行划分。

示例

假设已在某个 DAST 工具(同工具)上启用了全局位置(两种位置类型均启用),并且针对跨工具行,在第二个 DAST 工具上也启用了该算法:

StepImportInto ProductResult
1位于 https://shared.example.com/login 的 DAST 发现项Application 0创建 1 个活动发现项
2相同 URL,不同的漏洞(标题 + 严重程度)Application 1创建 1 个发现项,标记为 Application 0 中发现项的重复项(仅位置匹配)
3第二个 DAST 工具,相同 URLApplication 2创建 1 个发现项,标记为 Application 0 中发现项的重复项(跨工具匹配)
4位于 https://other.example.com/admin 的 DAST 发现项Application 3创建 1 个活动发现项——URL 不同,无共享位置
5没有 URL 也没有依赖项的发现项Application 4创建 1 个活动发现项——没有可共享的位置

每个重复的发现项都会在发现项页面底部的重复项链中显示其原始发现项。

全局组件 与 全局位置的对比

两者都是全局(跨产品)算法,都会忽略测试活动范围,并根据单一身份标识而非哈希字段进行匹配。请根据您的工具中用于识别重复项的依据来做出选择:

Global ComponentGlobal Locations
匹配依据组件名称 + 版本共享的位置:URL 和/或依赖项
依赖项身份标识名称和版本完整的 Package URL(类型、命名空间、名称、版本、限定符)
URL / DAST 发现项不匹配匹配(根据已配置的端点字段)
是否可配置是——可按工具选择 URL、依赖项,或两者兼选
数据模型无论是否启用位置功能均可使用需要位置功能(Pro)
适用场景包名称+版本即为身份标识的 SCA 工具位置模型下的 Web/DAST 工具和 SCA 工具,其中 URL 或精确的依赖项即为身份标识

对于使用位置数据模型的新实例,全局位置是全局组件更精确的后继方案:它以精确的 Package URL 作为依赖项的键,并且还能对基于 URL 的发现项进行去重。对于组件名称+版本即为您所需身份标识的工具,全局组件仍然可用且保持不变。

跨产品可见性

由于全局位置匹配会跨越产品边界,重复项链中的原始发现项可能位于查看该重复项的用户无权访问的产品中。

在这种情况下,该发现项仍然可见并被标记为重复项,但用户将无法打开或跳转到原始发现项。在为发现项对产品级访问控制较为敏感的工具启用全局位置之前,请考虑这一点。

恢复原设置

要停止对某个工具使用全局位置,请打开其去重设置,并将算法切换回某个作用域受限的选项。

对于同工具去重:

  • 哈希代码
  • 来自工具的唯一 ID
  • 来自工具的唯一 ID 或哈希代码

对于跨工具去重:

  • 哈希代码
  • 已禁用

更改算法会触发对该工具现有发现项的去重哈希值进行后台重新计算。