ai-ml

用于漏洞分诊的多智能体辩论

几个月前我们把一个发现关闭为假阳性。那是一个看似存在 SSRF 漏洞的端点:它接受用户提供的 URL,在后端处理,并返回内容。我们的单模型流水线将其标记为"可能是假阳性 — 该 URL 似乎已根据允许列表进行验证"。我们放过了它。

三周后,客户给我们写信:一位外部研究人员报告了正是那个端点。允许列表的绕过是简单的(在 URL 的 userinfo 中使用 @ 的技巧)。形象受损,对话尴尬,教训是:单一模型是糟糕的分诊员,尤其是当证据模糊时。

为什么单一模型是糟糕的分诊员

  • 对上下文的奉承倾向。Sharma et al. (2023) 表明,即使用户客观上是错的,现代模型也会附和。
  • 锚定于第一个假设。Liang et al. (2023) 称之为思维退化(Degeneration-of-Thought):一旦确定了一个看似合理的解决方案,模型就不会生成真正的替代方案。
  • 缺乏对抗性检查。人类分诊员会想"我会如何破坏这个验证?"。零样本 LLM 会想"这合理吗?"。

自一致性(Wang et al., 2022)可以缓解噪声但不能消除系统性偏差。

多智能体辩论:Du et al. (2023)

Improving Factuality and Reasoning through Multiagent Debate 提出:多个实例独立响应;然后每个智能体接收其他智能体的响应并生成新的有条件响应。重复 N 轮。输出:共识或投票。

有趣的是,它不需要微调、不需要外部裁判、也不需要特殊架构。它就是提示工程。改进来自于每个智能体在看到相反论点时,会重新审视它在孤立情况下视为理所当然的推理部分。

我们的实现:三个角色、三轮、一个裁判

  • Gandalf — 批判模式。假设发现是真实的,并构建最糟糕的利用场景。
  • Beorn — 证据模式。只对工件进行推理:HTTP 响应、标头、正文、追踪。我们禁止它推断未经证实的行为。
  • Gwaihir — 技术模式。推理架构:技术栈、框架、已知防御、行业背景。

三者接收相同的数据包。在第 1 轮中独立生成裁决。在第 2-3 轮中,每个人都看到其他人的内容并产生修订版本。一个裁判智能体发出结论:true_positivefalse_positiveneeds_manual

如果在第 2 轮后三者收敛,我们跳过第 3 轮。如果在第 3 轮后仍有分歧,我们升级到人工。这条规则是刻意的 — 正交角色之间持续的分歧是一个有信息量的信号。

追踪示例:SSRF 候选

第 1 轮 — 独立裁决:

Gandalf:"可能的 SSRF。Server: gunicorn 与前端(nginx)不同,表明后端发出请求。?url=http://169.254.169.254/ 返回 403,但 ?url=http://localhost:8080 返回 200 带 HTML。真阳性高置信度。"

Beorn:"两个请求:一个使用绕过(200),另一个针对元数据(403)。403 可能是允许列表或云防火墙。Needs manual。"

Gwaihir:"AWS 上 nginx 后面的 Python + gunicorn 技术栈。403 与强制 IMDSv2 一致,而不是端点缓解措施。可能是真阳性。"

第 2 轮:

Gandalf:"Beorn 说得对,403 不是缓解措施的证据。但针对 localhost:8080 的 200 确实证明了内部访问。我维持真阳性。"

Beorn:"我重新考虑。200 响应包含来自内部管理面板的 HTML。我改为真阳性高置信度。"

Gwaihir:"同意。@ 技巧载荷也将通过允许列表。我建议将测试添加到报告中。"

第 2 轮收敛。裁判:true_positive。报告包含三条不同的证据线。

指标

3 个月,1,847 个发现(412 个真实标签):

  • 真阳性的精确度:0.71(单一)→ 0.89(辩论)。
  • 召回率:0.68 → 0.83。召回率比精确度更重要。
  • 中位延迟:每个发现 8 秒 → 47 秒。
  • 令牌成本:约为单模型的 4.2 倍。
  • 升级到人工:3% → 11%。辩论检测到更多真正模糊的案例。

何时不使用辩论

  • 证据明确的低严重性(缺失的安全标头)。确定性检查就足够了。
  • 简单的二元决策(这是 API 密钥吗?)。正则表达式或带批评的单次调用。
  • 高频流水线。成本会累积。

快速比较

CoT-SC:对噪声有效,对系统性偏差无效。
Tree of Thoughts:对于结构化空间(Game of 24)非常出色。对分诊来说大材小用。
带自我批评的单次调用:同一个模型批评同一个假设,坍缩到同一个不动点。
多智能体辩论:当需要角色的多样性且证据模糊时,我们获胜。

结语

客户的 SSRF 本不应该被错误关闭。我们学到的不是 LLM 是糟糕的分诊员 — 而是单一的 LLM,无论多么优秀,都只有一种观察方式。通过明确定义的角色强制实现多样性并不优雅;它是务实的工程。如果你的流水线在没有辩论的情况下关闭模糊的发现,你可能正在放走真正的漏洞。

参考文献