前沿人工智能模型不仅具备发现并利用安全漏洞的能力,更能在网络安全防御中发挥关键作用。本文总结了我们在自动化攻击面分析与缩减方面的初步研究成果:利用AI模型映射可访问代码,移除或限制非必要暴露的内容,从而在不依赖单一漏洞修复的情况下,实质性提升部署软件的安全性。

传统修补方式难以应对未知漏洞的扩展性挑战,而减少代码可访问性则能降低所有潜在漏洞(包括正在被利用的漏洞)的严重程度。通过最小化代码库的攻击面,即使不查找或修复具体漏洞,也能实现更优的安全态势。

方法论:三维度的攻击面缩减

随着软件复杂度增加,实际行为往往偏离设计初衷,为攻击者留下可乘之机。自动化攻击面分析旨在识别不必要的暴露,并将相关代码置于适当的访问控制之后。我们的研究聚焦于三种主要方法:

  • 默认配置:识别在默认交付状态下可访问,但未被任何默认功能使用的代码。
  • 配置交互:发现单独看似合理、但组合使用时会导致安全控件静默禁用或未定义行为生效的配置选项对。
  • 早期可达性:定位在身份验证等安全控制之前、无用户交互情况下运行的敏感复杂代码,或在协议状态转换前执行的代码。

我们选取了涵盖C、C++、Java、PHP和Python等语言的25个开源项目(超500万行代码)进行测试。Claude建立了超过17,000个配置选项的清单,其中3,842个与安全相关。项目被分为“公共类”(面向任意用户)、“门控类”(需身份验证)和“私有类”(内部环境),以 contextualize 分析结果。

Claude的关键发现

Claude在上述项目中累计发现493个问题,揭示了几个显著的安全模式:

首先,在所有11个“门控类”项目中,均存在意外可访问的代码。包括93个不必要的预认证表面、37个在身份验证前执行代码的位置,以及61个静默削弱安全控制的配置组合。这些问题虽未立即被利用,但显著扩大了攻击面。

其次,配置交互问题影响深远。Claude发现了162种安全敏感的配置组合,它们在无警告或文档说明的情况下被接受。其中94种情况静默关闭了安全控件,其余68种存在机制不一致(如配置显示禁用但监听器仍可访问)。此外,还发现一种普遍模式:当反向DNS查找关闭时,基于主机名的拒绝规则因无法匹配IP地址而失效,导致访问控制列表处于“失效开放”状态。

第三,配置冲突常导致安全检查静默丢弃。例如,某软件中要求客户端证书的配置与延迟检查的代码逻辑冲突,导致服务器在接受任何连接时完全禁用证书检查。这种冲突配置已存在21年,且文档从未提及风险。

案例研究:OpenSSH的深度修复

在审计最严格的OpenSSH代码库中,Claude实现了显著的攻击面缩减。在10.4版本中,Claude发现默认配置下,未认证客户端可访问约4,500行用于ML-DSA-44(后量子签名算法)的实验性代码。尽管该算法默认未启用,但其解析代码在权限检查前即可被触发,占预认证代码的16%。

向开发者报告并提供补丁后,10.5版本将检查移至解析之前。然而,Claude随后指出10.5版本的两个新漏洞:一是客户端advertised算法与发送内容不匹配,绕过检查;二是证书路径中,CA公钥的反序列化和签名验证在咨询配置允许列表之前执行,使得二进制文件中所有签名验证器均可被访问。

经过多轮迭代,最终修复将检查嵌入解析器本身,确保在反序列化或签名验证之前比对配置的允许列表。10.6版本发布的这一更改,消除了默认构建中约五分之一的未认证可访问代码,几乎全部为新的ML-DSA代码。

结论与展望

OpenSSH的案例表明,即使在最高标准的审计下,不必要的代码可达性依然可能存在。减少攻击面是降低未知漏洞风险的有效手段。我们将上述技术整合为可重用的Claude技能,并计划集成至OSS-Scanner中。该技能通过三次独立传递,分别检查默认配置、早期可达性及配置交互,并通过动态跟踪和回归测试验证修复方案。

我们鼓励组织利用AI分析并减少其依赖软件的攻击面。这不仅是提升现有代码安全性的实用方法,更是应对未来AI赋能攻击的关键防御策略。