众所周知,开发者「苦软件漏洞久已」,即使使用模糊测试等传统的自动化方法,也难以发现和将其修复,且耗时耗力。而在 AI 大行其道的当下,用 AI 来修复关键软件漏洞技术与产品也开始涌现,那么,如何才能使得 AI 修复安全代码是值得信任的,答案在于「通过严格的验证」。
近日,DeepMind 最新推出了一种全新的用于代码安全的 AI Agent—CodeMender,它使用 Gemini Deep Think 自动修补关键软件漏洞。它会检查补丁是否正确、是否能够修复根本原因,并且不会引起其他任何破坏。这确保只有高质量的解决方案才会被发送给人工审核。
具体来看,CodeMender 通过一种全面的代码安全方法来帮助解决软件漏洞问题,实现「被动响应」与「主动防御」并重:既能立即修补新的漏洞,也能重写和保护现有代码,并在此过程中消除所有类型的系统性漏洞。
数据显示,在过去六个月开发 CodeMender 的过程中,DeepMind 已经向开源项目上传了 72 个安全修复程序,其中一些修复程序多达 450 万行代码。
通过自动创建和应用高质量的安全补丁,CodeMender 可帮助开发者从繁琐的查找漏洞工作中解脱出来,从而回归本业 —— 专注打造优质软件。
而 CodeMender 一经发布,也引起了一些开发者的关注与讨论。
一位名为 CRISPRKING 的 X 网友认为,CodeMender 的突破不在于发现 bug,而在于确保修复不会破坏其他任何东西,「这是真正的自动化与演示的区别所在。」
另一位网友则认为,CodeMender 的出现将把 QA、安全审计、漏洞赏金的收入都「吃光」。
而据媒体报道,谷歌最近刚刚正式启动了一项专门针对 AI 产品漏洞的奖励计划。而自从谷歌两年前正式邀请 AI 研究人员排查产品 AI 功能滥用风险以来,漏洞猎手们已累计获得超过 43 万美元的奖金。
也有网友对「AI 产生软件漏洞」与「AI 自动修复软件漏洞」的自我博弈产生了兴趣:「我想知道我们是否会陷入一场军备竞赛,一方面 AI 伪装成贡献者(和安全研究人员)试图将漏洞引入流行的库中,另一方面 AI 试图检测并修复这些漏洞……」
事实就是,这是一项开创性的研究,「我们正在进入自我修复软件的时代。」
下面介绍一下 CodeMender 的更多详细信息。
CodeMender 的核心运行机制,是借助最新一代 Gemini 深度思考模型的思维能力,构建出一个能自动调试并修复复杂漏洞的 Agent。为此,CodeMender Agent 配备了强大的工具集,使其能在修改代码前进行逻辑推演,并自动验证修改结果,确保修复正确且不会引发其他问题。
CodeMender 修复漏洞的过程
作为研究的一部分,DeepMind 还开发了新的技术和工具,使 CodeMender 能够推理代码并更有效地验证更改。这些技术和工具包括:
为有效修补漏洞并防止其复发,CodeMender 会综合使用调试器、源代码浏览器等工具来精确定位根本原因,并设计补丁。下方视频轮播展示了两个 CodeMender 修补漏洞的案例。
案例 1:识别漏洞的根本原因
这是 Agent 在分析了调试器输出和代码搜索工具的结果后,对 CodeMender 生成的补丁的根本原因进行的推理。
虽然此案例中的最终补丁仅修改了几行代码,但漏洞的根本原因尚不清楚。在本例中,当时的崩溃报告显示是堆缓冲区溢出,但实际问题出在解析过程中对可扩展标记语言 (XML) 元素的堆栈管理不正确。
案例 2:智能体能够创建非平凡补丁
在此示例中,CodeMender Agent 成功构思出一个处理复杂对象生命周期问题的非平凡补丁。
该 Agent 不仅定位了漏洞根源,还修改了项目内一个完全自定义的 C 代码生成系统。
DeepMind 还还赋予 CodeMender 一项能力:主动重写现有代码,引导其采用更安全的数据结构和 API。
例如,部署 CodeMender,将 - fbounds-safety 注释应用于广泛使用的图像压缩库 libwebp 的部分内容。应用此注释后,编译器会在代码中添加边界检查,以防止攻击者利用缓冲区溢出或下溢执行任意代码。
几年前,libwebp 中的堆缓冲区溢出漏洞 ( CVE-2023-4863 ) 被威胁者利用,用于零点击 iOS 漏洞攻击链的一环,而如果当时就应用 - fbounds-safety 注释,那么这个漏洞以及项目中大多数其他缓冲区溢出漏洞,或将永远无法被利用。
下方视频轮播展示了 Agent 决策过程的案例,包括验证步骤。
示例 1:Agent 的推理步骤
在此示例中,要求 CodeMender Agent 解决 bit_depths 指针上的以下 - fbounds-safety 错误:
示例 2:Agent 自动纠正错误和测试失败
CodeMender 的另一个关键功能是能够自动纠正新错误以及任何由其自身注释引起的测试失败。以下是 Agent 从编译错误中恢复的示例。
示例 3:Agent 验证更改
在此示例中,CodeMender Agent 修改了一个功能,然后使用配置为功能等效性的 LLM Judge 工具来验证该功能是否仍然完好。当该工具检测到故障时,Agent 会根据 LLM Judge 的反馈进行自我修正。
不管是从功能介绍来看,还是实例演示来看,CodeMender 的早期成果都是令人鼓舞的,是迈向自动化安全修复的重要一步,但仍需采取谨慎的态度,注重其可靠性。
官方显示,目前所有 CodeMender 生成的补丁在提交到上游之前都会经过人类研究人员的审核。而 DeepMind 表示,未来几个月内将继续分享技术论文和报告,希望最终能够将 CodeMender 发布为所有开发人员的工具,以增强每个人的软件安全性。
参考链接:
https://deepmind.google/discover/blog/introducing-codemender-an-ai-agent-for-code-security/
https://news.ycombinator.com/item?id=45496533
https://x.com/GoogleDeepMind/status/1975185563763327486
文章来自于微信公众号 “机器之心”,作者 “机器之心”
【开源免费】Browser-use 是一个用户AI代理直接可以控制浏览器的工具。它能够让AI 自动执行浏览器中的各种任务,如比较价格、添加购物车、回复各种社交媒体等。
项目地址:https://github.com/browser-use/browser-use
【开源免费】AutoGPT是一个允许用户创建和运行智能体的(AI Agents)项目。用户创建的智能体能够自动执行各种任务,从而让AI有步骤的去解决实际问题。
项目地址:https://github.com/Significant-Gravitas/AutoGPT
【开源免费】MetaGPT是一个“软件开发公司”的智能体项目,只需要输入一句话的老板需求,MetaGPT即可输出用户故事 / 竞品分析 / 需求 / 数据结构 / APIs / 文件等软件开发的相关内容。MetaGPT内置了各种AI角色,包括产品经理 / 架构师 / 项目经理 / 工程师,MetaGPT提供了一个精心调配的软件公司研发全过程的SOP。
项目地址:https://github.com/geekan/MetaGPT/blob/main/docs/README_CN.md