谷歌分享了 CodeMender 研究的早期结果,CodeMender 是一种新的人工智能代理,旨在自动提高代码安全性。该代理既可以被动地修补新漏洞,也可以主动重写现有代码以消除整类安全缺陷。随着人工智能工具在发现软件漏洞方面变得更加有效,已识别问题的数量预计将超过人类开发人员修复这些问题的能力。 CodeMender 旨在通过自动创建和应用高质量安全补丁来解决此问题。在过去的六个月里,该项目已经向开源项目提交了 72 个安全修复程序,其中一些项目的代码库多达 450 万行代码。
Google CodeMender 的工作原理
CodeMender 是一个自治代理,使用 双子座深思熟虑 模型来调试和修复复杂的漏洞。它配备了一组工具,可以在进行更改之前对代码进行推理,并自动验证这些更改以确保它们是正确的并且不会导致回归。
验证过程是一个关键组成部分,旨在防止代价高昂的错误。 CodeMender 仅提供高质量补丁供人工审核,这些补丁已确认可以解决问题的根本原因,功能正确,不会导致回归,并遵循项目风格指南。该系统使用多种技术来实现这一目标:
- 高级程序分析: CodeMender 使用静态分析、动态分析、差异测试和模糊测试工具来仔细检查代码模式和数据流。这使得它能够更好地识别安全缺陷的根本原因。
- 多代理系统: 该系统使用专门的代理来执行特定的任务。例如,基于大型语言模型的批评工具会突出显示原始代码和修改后代码之间的差异,以验证提议的更改不会引入新问题,从而允许主代理根据需要进行自我纠正。
修复活跃漏洞
为了有效地修补漏洞,CodeMender 使用调试器和源代码浏览器等工具来查明根本原因,然后再设计解决方案。在一个示例中,崩溃报告表明存在堆缓冲区溢出,但代理的分析确定实际问题是解析期间 XML 元素的堆栈管理不正确。虽然最终的补丁只更改了几行代码,但确定真正的根本原因需要复杂的推理。在另一种情况下,代理创建了一个重要的补丁,通过修改用于在项目中生成 C 代码的自定义系统来修复复杂的对象生命周期问题。
主动保护现有代码
CodeMender 还旨在主动重写代码以使用更安全的数据结构和 API。例如,部署代理以将“-fbounds-safety”注释应用于广泛使用的 libwebp 图像压缩库的部分。应用时,这些注释会指示编译器向代码添加边界检查,这可以防止缓冲区溢出漏洞被利用。
之前在 libwebp 中发现的堆缓冲区溢出 (CVE-2023-4863) 被用作零点击 iOS 漏洞利用的一部分。通过 CodeMender 添加的注释,该漏洞和许多其他类似漏洞将变得无法利用。该代理可以自动更正由其自己的注释引起的新编译错误或测试失败,并且它使用基于 LLM 的工具来验证其更改是否未改变代码的预期功能。
现状及未来计划
目前由 CodeMender 生成的所有补丁在提交给开源项目之前都会经过人类研究人员的审查。谷歌正在逐步增加提交的补丁数量,以确保高质量并系统地解决开源社区的反馈。该团队计划通过 CodeMender 生成的补丁来联系关键开源项目的维护者。通过迭代此过程的反馈,目标是最终将 CodeMender 发布为所有软件开发人员都可以用来帮助确保其代码库安全的工具。





