AI 行业动态

Claude 用数学证明代码安全,OpenSSH 已修复

Anthropic 公布两项研究:Claude 为 123 个开源库生成 1.8 亿行形式化证明,并发现 493 项攻击面暴露,促成 OpenSSH 10.6 修复。本文解释其原理、局限,以及开发者如何借鉴思路用 Claude 做安全审查,并附 Claude Pro/Max 订阅的中性说明。

事件:Claude 从写代码走向证明代码

2026 年 10 月,Anthropic 公布了两项利用 Claude 加固开源软件的研究。一项是让 Claude 为 123 个开源库中的 239 个测试入口生成约 1.8 亿行数学证明,这些证明可由机器逐步核对,用以说明在特定条件下这些入口不会因异常输入而崩溃。另一项是让 Claude 排查 25 个开源项目中“不必要的暴露”,共发现 493 项,其中 OpenSSH 的一处问题直接促成了 OpenSSH 10.6 的安全修复。

这两项成果的意义在于,AI 在代码领域的角色从“辅助编写”延伸到了“辅助验证”。对开发者而言,这意味着可以用 Claude 做更系统的安全审查,而不只是补全代码。

背景:PHP 漏洞暴露的修复困境

就在 Anthropic 发布成果的前一天,一个 PHP 漏洞被公开。据媒体报道,欧洲部分政务服务暂停,日本 pixiv、Niconico 等平台紧急维护,寿司郎的线上服务也受到影响。

这个问题并非突然出现。2024 年 PHP 开发者在修复外部审计问题时,就注意到内存耗尽处理中的隐患。但当时没找到明确的远程代码执行路径,候选修法又各有代价:破坏兼容性、引入新的拒绝服务风险,或牵动大量第三方扩展。PHP 基金会在复盘中承认,决策流程和资源不足拖慢了修复。

这个背景解释了 Anthropic 的思路:与其等漏洞暴露后再修,不如提前关掉不该开的门,并用数学证明必须开的门足够牢。

成果一:收紧攻击面,OpenSSH 10.6 修复顺序问题

Claude 在 25 个开源项目里找出 493 项不必要的“攻击面”。攻击面指的是:一个陌生人连上服务器后,他发来的数据能碰到哪些代码。碰得越多,出问题的概率越大。Claude 发现的暴露大致分三类:默认开启但实际用不上的功能;先跑完复杂逻辑、最后才校验身份的处理顺序;单独看没问题、组合后产生风险的配置。

需要说明的是,这 493 项不等于 493 个可利用漏洞,很多只是“多余的暴露”。但提前收紧它们,攻击者能接触的代码就少了。

OpenSSH 的问题出在“顺序”。OpenSSH 是管理员远程登录服务器的标准工具。在 OpenSSH 10.4 中,对方发来一份密钥时,程序会先解析其中的数据,最后才检查管理员是否允许这种密钥类型。结果是:即使管理员已经关闭相关功能、对方也未登录,约 4500 行处理新签名算法的代码仍可能被触发。

修复方式很简单:把顺序调过来,先判断密钥类型是否允许,不允许就直接拒绝。OpenSSH 10.6 的发布说明纳入了这项改动,并致谢 Chris Rohlf、Claude 与 Anthropic Research。这次修复比 PHP 漏洞公开还早。OpenSSH 维护者还提到,同一问题后来又被其他研究者独立发现。既然大家都能找到,攻击者也能,所以他们决定加快发版节奏。

成果二:1.8 亿行形式化证明,以及它管不到的地方

Anthropic 与专做软件形式化验证的公司 Theorem 合作,让 Claude 证明:在规定运行条件下,指定入口收到任何小于 64 MB 的输入,都不会触发所定义的崩溃。

传统做法是“模糊测试”:自动生成大量损坏、截断、随机的输入,看哪个会让程序出错。但试得再多,也可能恰好漏掉那一种致命组合。形式化验证走的是另一条路:不靠试,靠推导。Claude 写出的每一步推理,都要交给证明助手 Rocq 按形式逻辑规则核对,任何一步不成立就通不过。AI 无法靠“我觉得没问题”蒙混过关。

一个小规模对照实验很能说明差距:研究团队在一个精简版 Python 解释器里故意埋入 7 个错误,随机测试漏掉了 5 个,而这 7 个错误都会让证明无法通过。这批证明代码里,超过一半由 Claude 自己编写的工具自动生成。连程序启动、分配内存这类底层过程也要纳入推导,这是证明规模远超源码的原因。

但证明只对指定入口、指定环境、指定问题类型成立,并不意味着这些库“全面安全”。谁来承担成本也是问题。Theorem 的思路是先验证被大量软件共用的底层组件:他们统计 Nix 软件包后发现,近 1.6 万个软件包运行时直接或间接依赖 OpenSSL。先证明 OpenSSL,上层项目就能复用这部分成果。

开发者如何借鉴:用 Claude 做一轮安全体检

你不需要写 63 万行证明,也能借鉴 Anthropic 这两项研究的思路,用 Claude 给自己的项目做一轮安全体检。

  • 排查攻击面:把路由、API 列表和配置文件交给 Claude,让它列出“未登录用户能触发哪些代码”以及哪些接口默认开放却没人用。
  • 检查校验顺序:让 Claude 重点找“先处理、后鉴权”的代码路径——这正是 OpenSSH 这次问题的根源,在上传接口、支付回调、Webhook 里尤其常见。
  • 生成边界输入:让 Claude 为解析函数编写模糊测试用例,覆盖空值、超长、截断、编码异常等情况。
  • 组合配置审查:把多个配置文件一起发给 Claude,让它判断哪些选项单独无害、叠加后却有风险。
  • 评估修复代价:参考 PHP 的教训,让 Claude 列出每种修法对兼容性和性能的影响,再由你决定怎么改。

整仓库级别的审查需要较长上下文和较多用量,配合 Claude Code 使用效果更好。免费版的额度通常跑不完一个中型项目,这也是多数开发者选择 Claude Pro 或 Max 的原因。

订阅 Claude Pro / Max 的中性说明

对于需要高频使用 Claude 进行代码审查的开发者,官方提供 Claude Pro 和 Claude Max 两档订阅。Pro 适合日常使用和小项目;Max 提供更高用量,适合每天使用 Claude Code 开发或长时间运行 Agent 审计大型代码库。三者功能基本一致,主要差别在用量。具体价格以 Anthropic 官网为准。

国内用户可通过官方渠道或正规第三方渠道获取订阅服务,例如官方礼品卡或授权经销商。选择第三方时应注意甄别,避免账号安全风险。使用前建议确认网络环境稳定,以降低账号风控概率。

常见问题

Claude 写的 1.8 亿行证明到底证明了什么?

它证明的是:123 个开源库中的 239 个测试入口,在 RISC-V + Linux 的规定环境下,收到任意小于 64 MB 的输入都不会触发所定义的崩溃。证明由 Rocq 逐步机械核对,但不代表整个库没有漏洞。

形式化验证和模糊测试有什么区别?

模糊测试是大量试错,只能发现试到的问题;形式化验证是数学推导,对所有符合条件的输入都成立。在 Anthropic 的对照实验中,随机测试漏掉了 7 个预埋错误中的 5 个,而证明对 7 个都会报错。

OpenSSH 需要升级到哪个版本?

Claude 参与发现的密钥类型校验顺序问题已在 2026 年 10 月 6 日发布的 OpenSSH 10.6 中修复。仍在使用 10.4 等旧版本的服务器建议尽快升级。

个人开发者能用 Claude 做代码安全审查吗?

可以。把接口列表、配置和关键代码交给 Claude,让它排查不必要的暴露和“先处理、后鉴权”的路径。整仓库审查用量较大,建议开通 Claude Pro 或 Max 并配合 Claude Code 使用。

继续阅读

微信二维码

扫码添加微信
备注「ChatGPT」优先通过

咨询