使用先进AI自动修复关键软件漏洞
今日,我们分享了一项名为CodeMender的新型AI驱动智能体的早期研究成果,该智能体可自动提升代码安全性。
软件漏洞对于开发者来说,即便使用模糊测试等传统自动化方法,也难以发现和修复,且极其耗时。像Big Sleep和OSS-Fuzz这类基于AI的工作,已证明AI能够在经过充分测试的软件中发现新的零日漏洞。随着在AI驱动的漏洞发现方面取得更多突破,仅靠人力将越来越难以跟上步伐。
CodeMender通过采取一种全面的代码安全方法来帮助解决此问题:既能被动地即时修补新漏洞,也能主动地重写和保护现有代码,并在此过程中消除整类漏洞。在构建CodeMender的过去六个月中,我们已经向上游开源项目提交了72个安全修复,其中一些项目的代码量高达450万行。
通过自动创建和应用高质量的安全补丁,CodeMender的AI智能体帮助开发者和维护者专注于他们最擅长的事情——构建优秀的软件。
CodeMender的工作原理是利用近期Gemini Deep Think模型的思考能力,打造一个能够调试和修复复杂漏洞的自主智能体。
为此,CodeMender智能体配备了强大的工具,使其能够在进行更改之前对代码进行推理,并自动验证这些更改以确保其正确性且不会导致性能衰退。
动画展示了CodeMender修复漏洞的过程。
虽然大型语言模型正在迅速改进,但代码安全中的错误代价可能非常高昂。CodeMender的自动验证过程通过只将高质量补丁提交给人工审查,确保代码更改在多个维度上是正确的。例如,这些补丁能修复问题的根本原因、功能正确、不引起性能衰退并遵循代码风格指南。
作为研究的一部分,我们还开发了新技术和工具,让CodeMender能够更有效地推理代码并验证更改。这包括:
为了有效地修补漏洞并防止其再次出现,CodeMender使用调试器、源代码浏览器和其他工具来精确定位根本原因并设计补丁。我们在下方的视频轮播中添加了两个CodeMender修补漏洞的示例。
以下是智能体在分析调试器输出和代码搜索工具的结果后,针对CodeMender生成的补丁,对根本原因进行推理的片段。
尽管此示例中的最终补丁只更改了几行代码,但漏洞的根本原因并不明显。在这种情况下,崩溃报告显示了一个堆缓冲区溢出,但实际问题出在别处——解析可扩展标记语言元素时栈管理不正确。
在此示例中,CodeMender智能体能够提出一个处理复杂对象生命周期问题的非平凡补丁。
该智能体不仅能找出漏洞的根本原因,还能修改项目中一个完全用于生成C代码的自定义系统。
我们还设计了CodeMender,使其能够主动重写现有代码,以使用更安全的数据结构和应用程序编程接口。
例如,我们部署CodeMender,将-fbounds-safety注解应用到一个广泛使用的图像压缩库libwebp的部分代码中。当应用-fbounds-safety注解时,编译器会向代码添加边界检查,以防止攻击者利用缓冲区溢出或下溢来执行任意代码。
几年前,libwebp中的一个堆缓冲区溢出漏洞被威胁行为者用作零点击iOS漏洞利用链的一部分。有了-fbounds-safety注解,这个漏洞以及项目中我们应用注解的大部分其他缓冲区溢出漏洞,将永远无法被利用。
在下面的视频轮播中,我们展示了智能体决策过程的示例,包括验证步骤。
在此示例中,CodeMender智能体被要求解决bit_depths指针上的以下-fbounds-safety错误:
CodeMender的另一个关键特性是其能够自动纠正由其自身注解引起的新错误和任何测试失败。这是一个智能体从编译错误中恢复的示例。
在此示例中,CodeMender智能体修改了一个函数,然后使用配置为功能等价性的LLM评判工具来验证功能是否保持不变。当该工具检测到失败时,智能体会根据LLM评判者的反馈进行自我修正。
虽然我们在CodeMender上取得的早期成果令人鼓舞,但我们正采取审慎的方法,重点关注可靠性。目前,CodeMender生成的所有补丁在提交到上游之前,都会由人类研究人员进行审查。
使用CodeMender,我们已经开始向各种关键的开源库提交补丁,其中许多已被接受并合并到上游。我们正在逐步推进这一过程,以确保质量并系统地解决来自开源社区的反馈。
我们还将逐步向感兴趣的关键开源项目维护者提供CodeMender生成的补丁。通过在此过程中反复吸取反馈,我们希望将CodeMender作为一款工具发布,供所有软件开发人员用于保护其代码库的安全。
我们有许多技术和成果要分享,并计划在未来几个月内以技术论文和报告的形式发表。有了CodeMender,我们才刚刚开始探索AI在增强软件安全性方面的巨大潜力,惠及所有人。
贡献者FINISHED
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。