推出CodeMender:一款专注于代码安全的AI智能体
借助前沿人工智能技术,自动修复关键软件漏洞

今天为大家介绍的是团队在AI代码安全领域的最新探索——CodeMender。该智能体通过先进的人工智能技术,自动增强代码安全性,目前仍处于早期研究阶段。
软件漏洞对于开发者而言无疑是巨大的挑战。即便采用模糊测试等传统自动化手段,漏洞的发现与修复仍然极其耗时且难以察觉。Big Sleep、OSS-Fuzz等基于AI的先行研究已经证明,即使经过充分测试的软件,AI同样能够挖掘出全新的零日漏洞。随着AI驱动的漏洞发现能力日益增强,单纯依靠人工已难以跟上其步伐。
CodeMender的核心理念是从代码安全的全局视角出发,采用更加全面的策略。它不仅能被动地即时修复新发现的漏洞,还能主动重写和保护现有代码,甚至从根源上消除整类漏洞。过去六个月中,团队已利用CodeMender向上游开源项目提交了72个安全补丁,其中部分项目的代码规模高达450万行。通过自动生成并应用高质量的安全修复,CodeMender的AI智能体帮助开发者和维护者解放双手,专注于他们最擅长的事情——构建出色的软件。
CodeMender实际应用
CodeMender的核心机制是借助最新的Gemini Deep Think模型的推理能力,构建一个能够自主调试和修复复杂漏洞的智能体。为此,它配备了一系列强大工具,能够在实际操作前先对代码进行推理分析,随后自动验证修改的正确性,确保不会引发性能退化。
以下动画直观展示了CodeMender修复漏洞的具体过程。
尽管大型语言模型在飞速发展,但代码安全的代价极高,不容任何失误。CodeMender的自动验证流程如同一道安全防火墙——仅将高质量补丁提交人工审核,从多个维度确保代码修改的正确性:根因修复到位、功能正确、不引入性能退化、符合代码风格规范。这些验证环节缺一不可。
作为研究工作的组成部分,团队还开发了一系列新技术与工具,使CodeMender能够更高效地推理代码并验证修改,主要包括:
高级程序分析:借助静态分析、动态分析、差异测试、模糊测试以及SMT求解器等工具,系统性地审查代码模式、控制流与数据流,帮助CodeMender快速定位安全缺陷与架构弱点的根本原因。
多智能体系统:我们开发了多个专用智能体,分别处理底层问题的不同维度。例如,其中一款基于大语言模型的评审工具,能够高亮原始代码与修改后代码之间的差异,专门用于验证修改是否引入性能衰退,一旦发现问题可自动修正。
漏洞修复实战
为了高效修复漏洞并防止复发,CodeMender会调用调试器、源代码浏览器及其他工具,精确定位根本原因,随后设计补丁方案。下面两个视频轮播中的示例,展示了其实际工作流程。
示例一:精准定位漏洞根本原因
该片段展示了智能体在分析调试器输出与代码搜索结果后,对根本原因进行推理的过程。最终补丁仅修改了几行代码,但问题的根源并不容易察觉——崩溃报告指示为堆缓冲区溢出,而实际症结却在于解析XML元素时栈管理出现异常。
示例二:智能体生成非平凡补丁
这个案例更具挑战性:CodeMender智能体提出了一套处理复杂对象生命周期问题的非平凡补丁方案。它不仅找出了漏洞的根本原因,还直接修改了项目中用于生成C代码的自定义系统。
主动重构现有代码,提升安全性
CodeMender的另一核心能力是主动重写现有代码,采用更安全的数据结构与API。具体来说,团队部署CodeMender,将-fbounds-safety注解应用于广泛使用的图像压缩库libwebp的部分代码。这些注解会指示编译器加入边界检查,从而防止攻击者利用缓冲区溢出或下溢执行恶意代码。
数年前,libwebp中的一个堆缓冲区溢出漏洞曾被恶意攻击者用作零点击iOS漏洞利用链的一部分。然而,在引入-fbounds-safety注解后,该漏洞以及项目中应用了注解的大部分缓冲区溢出漏洞,便再无被利用的可能。下方视频轮播展示了智能体的决策流程,包含验证环节。
示例一:智能体推理步骤
在此示例中,CodeMender智能体被要求解决bit_depths指针上的-fbounds-safety错误:
示例二:智能体自动纠正错误与测试失败
CodeMender的另一亮点在于能够自动纠正由其自身注解引发的新错误与测试失败。以下是一个智能体从编译错误中自行恢复的示例。
示例三:智能体验证修改
在该示例中,CodeMender智能体修改了一个函数,随后使用配置为功能等价性检验的LLM评估工具验证功能是否保持一致。一旦发现失败,智能体会根据LLM评估者的反馈进行自我修正。
为所有人守护软件安全
尽管CodeMender的早期成果令人振奋,但团队始终保持审慎,将可靠性置于首位。目前,其生成的所有补丁在提交至上游之前,均需经过人类研究人员的仔细审查。
借助CodeMender,我们已开始向多个关键开源库提交补丁,其中许多已被接受并合并到上游。这一推进过程是渐进的——在确保质量的同时,系统性地处理开源社区的反馈意见。
下一步,团队将逐步向感兴趣的关键开源项目维护者提供CodeMender生成的补丁。通过在这一过程中的反复学习与反馈,最终将CodeMender作为一款正式工具发布,供所有软件开发人员保护其代码库。
还有许多技术成果值得分享,团队计划在未来数月内以技术论文和报告的形式公开发表。通过CodeMender,我们才刚刚开始发掘AI在增强软件安全性方面的巨大潜力——目标是让所有人受益。
致谢
贡献者:FINISHED
