可达性 (Pro)
如果一个严重 CVE 存在于您的应用程序从未调用过的代码中,其风险与同一个 CVE 出现在实际请求路径上的风险并不相同。可达性正是用来捕捉这一差异:DefectDojo Pro 会记录每个发现项的脆弱代码是否真正可以被到达,向您展示该结论的来源,并将其纳入发现项计算得出的优先级。
可达性是一项**测试版(beta)**功能,默认关闭。超级用户可在 Settings > Feature Flags 下启用该功能。功能关闭时,不会记录任何判定结果,优先级不受影响,也不会出现任何可达性相关的界面。
判定结果
无论判定结果来自哪个工具,都会被统一归一化为以下五种取值:
| 判定结果 | 含义 |
|---|---|
| Reachable(runtime,运行时可达) | 观察到该脆弱代码正在执行。 |
| Reachable(static,静态可达) | 从应用程序入口点到该脆弱代码存在调用路径。 |
| Potentially reachable(可能可达) | 存在部分证据——例如确认使用了脆弱的软件包,但无法确认具体函数。 |
| Unreachable(不可达) | 分析未发现通往该脆弱代码的路径。 |
| Unknown(未知) | 尚无可达性分析覆盖该发现项。 |
进行归一化处理很重要,因为不同工具在措辞上并不一致:一个扫描器所说的“未发现路径”与另一个扫描器所说的“未被使用”含义并不相同,DefectDojo 会将两者都记录为可供比较的判定结果,而不是将其简化为单一的“是/否”。
可达性遵循的规则
以下行为都是刻意设计的,不会因工具而异:
- Unknown 绝不会对发现项造成不利影响。 大多数实例一开始的可达性覆盖率很低,甚至为零。尚未被任何工具分析过的发现项,其评分与关闭该功能时完全一致。
- Unreachable 会降低优先级,但绝不会关闭发现项。 “不可达”的判定结果会压低分数,使真正处于活跃状态的问题排在其前面,但发现项本身仍保持开放和可见。可达性分析并非完美无缺,一个错误的“不可达”判定如果悄悄掩盖了一个实际存在的严重问题,将是最糟糕的失败情形。
- 每个判定结果都会显示其来源。 任何判定结果都不会脱离产生它的工具、其置信度,以及(在已知的情况下)其所分析的提交(commit)单独出现。
- 判定结果会跟随去重逻辑。 当多个扫描器报告同一个漏洞、而其中只有一个报告了可达性时,该判定结果会应用于整个重复集群,因此您不会因为导入了另一个工具而丢失该信号。
判定结果的来源
您无需引入新的扫描器即可从中受益——DefectDojo 会读取您可能已经在运行的工具所产生的可达性数据:
- 在输出中报告可达性的扫描器。 多个受支持的解析器会携带可达性信息,可能是结构化数据,也可能出现在报告文本中。除了照常导入报告外,不需要额外配置。
- 连接器。 支持可达性的连接器会为其同步的产品发送判定结果,并按其正常计划进行刷新。
覆盖范围通常是部分的,这是预期之中的情况。不报告可达性的工具,只会将其发现项保留在 Unknown 状态。
可达性如何改变优先级
可达性是评分与优先级排序中所述优先级分数的又一项输入。可达的判定结果会提高发现项的优先级,不可达则会按来源的置信度按比例降低优先级,而未知则不会产生任何影响。
与其他所有因素一样,该调整的强度可以按优先级排序引擎单独调节:将可达性系数设为 0,即可只记录判定结果而完全不影响分数;也可以调高该系数,让可达性在权重中占据更大比例。您可以在应用之前,使用优先级排序模拟器预览效果。
由于启用可达性会改变分数,启用后请重新检查引擎的风险阈值,以确保发现项落入您预期的分档中。
可达性风险规则
该调整与发现项的严重程度成正比,这意味着它无法表达您可能希望表达的两种情形。一个已确认代码可达的低严重程度发现项,仍然只会获得较小的加成,并停留在较低的分档中;而一个被报告为不可达的严重发现项,仍可能位居队列顶部。优先级排序引擎上的两项可选规则可以直接设定分档,而不是依赖比例调整:
- Reachable risk floor(可达风险下限)——脆弱代码已确认可达的发现项所对应的最低风险分档。它只会提高分档,绝不会降低分档。
- Unreachable risk ceiling(不可达风险上限)——被报告为不可达的发现项所对应的最高风险分档。它只会降低分档,绝不会关闭或隐藏发现项,只是限制其排序所处的位置。
这两项规则默认均为空,因此在您设置之前不会产生任何影响。风险上限还带有一个最低置信度:只有当“不可达”判定结果的置信度达到该数值时,该规则才会生效,因为基于低置信度判定结果去限制分档,正是一个实际存在的严重问题被掩埋的方式。
如果某个发现项的 CVE 被报告为正在野外被主动利用,该发现项绝不会被风险上限所限制——利用证据的优先级高于“不存在路径”的说法。
您将看到什么
在发现项上——会显示一个可达性徽标,以及一个 Reachability Sources(可达性来源) 面板,列出所有对其进行过报告的来源、每个来源的判定结果和置信度,以及当前生效的是哪一个。如果某个工具提供了调用路径,相应的支持证据也会随之显示。
在发现项列表上——提供一个 Reachability(可达性)列和筛选条件,让您可以构建诸如“严重且可达”之类的视图并保存。
在资产上——提供一个 Reachability Coverage(可达性覆盖率) 面板,展示该资产的判定结果分布、其发现项中共有多少携带任意判定结果,以及可达性分析降级或确认了多少个严重发现项。每个数字都会链接到对应的发现项。仍处于 Unknown 状态的占比也会与其他数据一并显示:它说明了目前可达性分析能够对该资产覆盖到的程度。