Claude 的自动化攻击面缩减用于软件安全

自动化攻击面分析与缩减通过最小化代码可达性,显著提升已部署软件的安全性,从而在不要求发现或修复单个缺陷的情况下降低未知漏洞的严重性。

传统软件安全依赖于发现并修复单个漏洞,这一过程扩展性较差。相比之下,缩减攻击面限制了攻击者可达的代码范围,使得即使是未知漏洞也更难被利用。这种方法最小化了代码库的整体风险概况。

缩减代码库攻击面的方法

攻击面缩减技术旨在识别并限制大型软件项目中因固有复杂性和变动而产生的不必要代码暴露。此过程将代码移至适当的安全门之后,例如将功能从预认证阶段移至认证后阶段,或从默认启用改为显式选择加入。

Anthropic 专注于三种特定的自动化攻击面分析方法:

  • 默认配置: 识别在默认配置中可达但不被任何默认功能预期的代码。
  • 配置交互: 查找成对的配置选项,这些选项单独看起来合理,但组合时会导致安全问题(例如,静默禁用安全控制)。
  • 早期可达性: 识别在适当安全控制(如认证)之前、无需受害者交互或在协议状态转换之前执行的安全敏感且复杂的代码。

Claude 在开源项目中的发现

将这些技术应用于 25 个大型开源项目,涵盖 C、C++、Java、PHP 和 Python 等语言,超过五百万行代码,发现了 493 个问题。这些发现根据项目的部署模型进行分类:

  • 公开: 设计为服务任何可达用户的项目(例如,DNS 解析器解析上游答案)。
  • 门控: 面向认证用户的项目,功能在认证完成前受限。
  • 私有: 仅为服务运营商私有环境而部署的项目。

门控项目漏洞

Claude 发现所有 11 个门控项目都包含意外可达的代码。具体来说,门控群体在默认配置中显示了 93 个不必要的预认证表面,37 个在认证前执行代码或记录状态的位置,以及 61 个静默削弱管理员配置的预认证控制的配置组合。虽然这些问题单独不能立即利用,但它们显著扩大了必要的攻击面。

配置交互问题的影响

配置交互分析在所有项目类型中产生了一些最有影响力的发现。Claude 发现了 162 个安全敏感的配置组合,这些组合在交互时被接受而没有错误、警告或文档说明。

  • 静默禁用安全控制: 在这些案例中,有 94 个组合设置静默关闭了安全控制。
  • 不一致性: 其余 68 个案例涉及安全机制内部的不一致,例如监听器尽管配置为禁用仍保持可达,或者冲突设置的有效行为取决于配置文件中的顺序。

一个在四个无关项目中独立发现的特定模式涉及失败开放漏洞:管理员使用主机名或通配符模式(而非 IP 地址)作为访问规则,与另一个控制反向 DNS 查找的选项被禁用相结合。当查找关闭时,服务器将规则与客户端的 IP 地址以纯文本进行比较,这永远无法匹配主机名模式,导致拒绝规则失败开放。

案例研究:OpenSSH 攻击面缩减

OpenSSH 是一个经过高度审计的 C 代码库,是 Claude 实现攻击面缩减百分比最大的项目。Claude 追踪了 10.4 版本中 SSH 守护进程的输入路径,发现大约 4,500 行新的实验性代码,用于 ML-DSA-44 后量子签名算法,未经认证的客户端在默认配置中可达。

即使管理员明确排除了该算法,这些代码仍然可达,因为守护进程先解析客户端发送的密钥类型,然后检查该密钥类型是否被允许。这 4,500 行约占默认 sshd 中 OpenSSH 自身预认证代码的 16%。

在初步发现之后,Claude 识别出 10.5 版本中的两个缺口:

  1. 客户端声明不匹配: 检查关注客户端声明的算法名称,但解析器由密钥 blob 内嵌入的类型字符串选择,允许客户端声明一个算法而发送另一种易受攻击的密钥类型。
  2. 证书验证绕过: 证书密钥类型默认启用。攻击者可以提供证书,导致 sshd 在咨询配置之前反序列化嵌入的 CA 公钥并执行完整的签名验证。这使得二进制文件中的每个公钥签名验证器对任何能够完成密钥交换的客户端都可达。

在 10.6 版本中实施的修复将配置检查放置在解析器内部,确保在反序列化或签名验证之前,将编码的密钥类型和证书的 CA 签名算法与配置的允许列表进行比较。此更改移除了 OpenSSH 中未经认证客户端先前可达的约五分之一的代码。

实施与结论

Anthropic 已将这些攻击面缩减技术组合成一个可复用的 Claude 技能,该技能正在集成到 OSS-Scanner 中。此技能分三遍操作:

  1. 检查默认配置中可达但未被预期功能使用的代码。
  2. 检查在硬门(如认证)之前或协议状态机入口点之前运行的代码,无论配置如何。
  3. 评估静默关闭安全控制或降低其效能的配置组合。

对于默认配置发现,该技能设计并实施一个门,验证修改后的构建通过项目现有的测试套件。对于其他两遍,它提出更改,如重新排序配置检查或添加强制状态顺序的防护。

虽然所提出的技术提供了有限的视角,但方法论表明缩减代码库攻击面是提高安全性的一种高度实用且有效的方法。通过最小化不必要的暴露,防御者可以同时降低代码库中所有未知漏洞带来的风险,无论这些漏洞当前是否正在被利用。

Sources