谷歌新的人工智能代理重写代码,自动修复漏洞

谷歌DeepMind部署了一个新的人工智能代理,旨在自主寻找和修复软件代码中的关键安全漏洞。这个名为CodeMender的系统在过去的六个月里已经为已建立的开源项目贡献了72个安全补丁。
识别和修补漏洞是一个众所周知的困难和耗时的过程,即使有fuzzing等传统自动化方法的帮助。谷歌DeepMind自己的研究,包括基于人工智能的项目,如Big Sleep和OSS-Fuzz,已经证明可以有效地在经过良好审计的代码中发现新的零日漏洞。然而,这一成功创造了一个新的瓶颈:随着人工智能加速发现缺陷,人类开发人员修复缺陷的负担也在加剧。
CodeMender旨在解决这种不平衡。它作为一个自主的人工智能代理,采用一种全面的方法来修复代码安全性。它的功能既有反应性,允许它立即修补新发现的漏洞,也有前瞻性,允许它重写现有代码,在安全漏洞被利用之前消除所有类别的安全缺陷。这允许人类开发人员和项目维护人员投入更多的时间来构建特性和改进软件功能。
该系统通过利用谷歌最近的Gemini Deep Think模型的高级推理能力来运行。这个基础允许代理以高度的自主性调试和解决复杂的安全问题。为了实现这一点,系统配备了一套工具,允许它在实现任何更改之前对代码进行分析和推理。CodeMender还包括一个验证过程,以确保任何修改都是正确的,不会引入新的问题,即所谓的回归。
虽然大型语言模型发展迅速,但这是一个错误当谈到代码安全性时会带来昂贵的后果。因此CodeMender的自动验证框架是必不可少的。它系统地检查任何提议的变更是否解决了问题的根本原因,功能是否正确,是否破坏了现有的测试,以及是否符合项目的编码风格指南。只有满足这些严格标准的高质量补丁才会出现以供人工审查。
为了提高代码修复的效率,DeepMind团队为人工智能代理开发了新技术。CodeMender采用高级程序分析,利用一套工具,包括静态和动态分析、差异测试、模糊化和SMT解算器。这些工具允许it系统地检查代码模式、控制流和数据流,以识别安全缺陷和架构弱点的根本原因。
该系统还使用了多代理架构,其中部署了专门的代理来处理问题的特定方面。例如,一个专用的基于大型语言模型的评论工具揭示了原始代码和修改后的代码之间的差异。这允许主要代理验证其提议的改变没有引入非预期的副作用,并在必要时自我校正其方法。
在一个实际例子中,CodeMender解决了一个漏洞,其中崩溃报告指示堆缓冲区溢出。尽管最终的补丁只需要修改几行代码,但根本原因并不明显。通过使用调试器和代码搜索工具,代理确定真正的问题是解析期间可扩展标记语言(XML)元素的错误堆栈管理问题,位于代码库中的其他位置。在另一个案例中,代理为一个复杂的对象生命周期问题设计了一个重要的补丁,修改了一个用于在目标项目中生成C代码的定制系统。
除了简单地对现有的错误作出反应,CodeMender还被设计为主动强化软件以应对未来的威胁。团队部署了代理来申请-边界-安全libwebp的部分注释,lib webp是一个广泛使用的图像压缩库。这些注释指示编译器向代码添加边界检查,这可以防止攻击者利用缓冲区溢出来执行任意代码。
鉴于libwebp中的堆缓冲区溢出漏洞(追踪号为CVE-2023-4863)在几年前被一个威胁参与者用于零点击iOS漏洞利用,这项工作尤其重要。DeepMind指出,有了这些注释,该特定漏洞以及注释部分中的大多数其他缓冲区溢出都将变得不可利用。
人工智能代理的主动代码修复涉及一个复杂的决策过程。当应用注释时,它可以自动纠正新的编译错误和由它自己的更改引起的测试失败。如果其验证工具检测到修改破坏了功能,代理将根据反馈进行自我纠正,并尝试不同的解决方案。
尽管有这些有希望的早期结果,但谷歌DeepMind正在采取谨慎和审慎的部署方法,重点关注可靠性。目前,CodeMender生成的每一个补丁在提交给开源项目之前都要经过人类研究人员的审核。该团队正在逐步增加其提交内容,以确保高质量,并系统地纳入来自开源社区的反馈。
展望未来,研究人员计划通过CodeMender生成的补丁来联系关键开源项目的维护者。通过迭代社区反馈,他们希望最终发布CodeMender作为所有软件开发人员的公共可用工具。
DeepMind团队还打算在未来几个月发表技术论文和报告,分享他们的技术和成果。这项工作代表了探索人工智能代理主动修复代码并从根本上增强每个人的软件安全性的潜力的第一步。