Google DeepMind 开源的 AI Agent 工具自动检测和修复代码漏洞。可嵌入 CI/CD 流程提升代码质量。
Raluca Ada Popa 和 Four Flynn
使用先进的 AI 自动修复关键软件漏洞
今天,我们分享了我们对 CodeMender 的研究早期成果。CodeMender 是一个新的 AI 驱动的 agent,它能自动改进代码安全。
软件漏洞对开发者来说是出了名的难以发现和修复,即使使用传统的自动化方法,比如 fuzzing。我们之前的 AI 工作,如 Big Sleep 和 OSS-Fuzz,已经证明了 AI 在成熟软件中发现新零日漏洞的能力。随着我们在 AI 驱动的漏洞发现方面取得更多突破,仅靠人力跟上变得越来越困难。
CodeMender 通过采用全面的代码安全方法来解决这个问题,既是反应式的(立即修补新漏洞),也是主动式的(重写和加固现有代码,消除整个类别的漏洞)。在我们开发 CodeMender 的过去六个月中,我们已经向开源项目上游贡献了 72 项安全修复,其中一些项目的代码行数高达 450 万。
通过自动创建和应用高质量的安全补丁,CodeMender 的 AI 驱动 agent 帮助开发者和维护者专注于他们的核心工作——构建好的软件。
CodeMender 的工作原理是利用最新的 Gemini Deep Think 模型的思维能力,以生成能够调试和修复复杂漏洞的自主 agent。
为此,CodeMender agent 配备了强大的工具,使其能够在进行更改之前对代码进行推理,并自动验证这些更改以确保它们是正确的且不会导致回归。
虽然大语言模型正在迅速改进,但代码安全中的错误可能代价高昂。CodeMender 的自动验证流程通过仅向人类审查提交高质量的补丁来确保代码更改在多个维度上都是正确的,例如,修复问题的根本原因、功能正确、不会导致回归且遵循风格指南。
作为研究的一部分,我们还开发了新的技术和工具,让 CodeMender 能够更有效地推理代码和验证更改。这包括:
高级程序分析:我们开发了基于高级程序分析的工具,包括静态分析、动态分析、差分测试、fuzzing 和 SMT 求解器。通过使用这些工具系统地审视代码模式、控制流和数据流,CodeMender 能够更好地识别安全缺陷和架构弱点的根本原因。
多 agent 系统:我们开发了专用 agent,使 CodeMender 能够解决基础问题的特定方面。例如,CodeMender 使用基于大语言模型的批评工具,该工具突出显示原始代码和修改后代码之间的差异,以验证提议的更改不会引入回归,并根据需要自我纠正。
为了有效地修补漏洞并防止其重新出现,CodeMender 使用调试器、源代码浏览器和其他工具来定位根本原因并设计补丁。我们在下面的视频轮播中添加了 CodeMender 修补漏洞的两个示例。
以下是 agent 对 CodeMender 生成的补丁的根本原因进行推理的片段,这是在分析了调试器输出和代码搜索工具的结果后得出的。
虽然此示例中的最终补丁仅修改了几行代码,但漏洞的根本原因并不立即明显。在这种情况下,崩溃报告显示了堆缓冲区溢出,但实际问题出现在别处——在解析期间可扩展标记语言(XML)元素的不正确栈管理。
在此示例中,CodeMender agent 能够想出处理复杂对象生命周期问题的非平凡补丁。
该 agent 不仅能够确定漏洞的根本原因,还能够修改项目内完全自定义的 C 代码生成系统。
我们还设计了 CodeMender 来主动重写现有代码,以使用更安全的数据结构和 API。
例如,我们部署了 CodeMender 来将 -fbounds-safety 注解应用于广泛使用的图像压缩库 libwebp 的部分。当应用 -fbounds-safety 注解时,编译器会向代码添加边界检查,以防止攻击者利用缓冲区溢出或下溢来执行任意代码。
几年前,libwebp 中的堆缓冲区溢出漏洞(CVE-2023-4863)被威胁行为者用作零点击 iOS 漏洞利用的一部分。使用 -fbounds-safety 注解,该漏洞以及我们应用注解的项目中的大多数其他缓冲区溢出都将永久无法被利用。
在下面的视频轮播中,我们展示了 agent 决策过程的示例,包括验证步骤。
在此示例中,CodeMender agent 被要求解决 bit_depths 指针上的以下 -fbounds-safety 错误:
CodeMender 的另一个关键特性是其自动纠正新错误和由其自身注解引起的任何测试失败的能力。这是 agent 从编译错误中恢复的一个示例。
在此示例中,CodeMender agent 修改了一个函数,然后使用为函数等价性配置的 LLM 判断工具来验证功能保持完整。当工具检测到失败时,agent 根据 LLM 判断工具的反馈进行自我纠正。
虽然我们用 CodeMender 取得的早期成果很有希望,但我们采取谨慎的方法,重点关注可靠性。目前,CodeMender 生成的所有补丁在上游提交之前都经过人类研究人员的审查。
使用 CodeMender,我们已经开始向各种关键开源库提交补丁,其中许多已经被接受并上游。我们在逐步推进这个过程,以确保质量并系统地应对开源社区的反馈。
我们还将逐步与有兴趣的关键开源项目维护者联系,提供 CodeMender 生成的补丁。通过迭代这个过程的反馈,我们希望发布 CodeMender 作为一个工具,供所有软件开发者使用,以保持其代码库的安全。
我们将在未来数月内分享许多技术和结果,这些将以技术论文和报告的形式发布。通过 CodeMender,我们才刚刚开始探索 AI 在为所有人增强软件安全方面的巨大潜力。
致谢(按字母顺序列出):
Alex Rebert, Arman Hasanzadeh, Carlo Lemos, Charles Sutton, Dongge Liu, Gogul Balakrishnan, Hiep Chu, James Zern, Koushik Sen, Lihao Liang, Max Shavrick, Oliver Chang 和 Petros Maniatis。
评估先进 AI 的网络安全威胁