打开网易新闻 查看精彩图片

世界上许多关键IT系统仍然漏洞百出,而AI工具可能会让恶意利用这些漏洞变得前所未有的容易。但AI也可能成为解决方案的一部分:一项新倡议旨在自动将易受攻击的代码转换为专注安全的Rust语言,这将消除绝大多数已知的软件漏洞。

AI编程工具的快速发展使得处理那些以往因成本过高或耗时过长而无法承担的软件工程任务变得比以往任何时候都容易。美国进步研究所智库启动了"大重构"倡议,利用这些工具将用C和C++编写的开源软件转换为Rust语言。与前述语言不同,Rust专门设计用于防止一类名为内存漏洞利用的危险bug。

当软件以非预期方式访问或操作内存时,就会出现内存安全问题。这些bug在为开发者提供手动内存控制的较老语言中很普遍。大多数较新的语言都加入了防护机制来预防这类问题,但这通常以降低性能为代价。因此,像C和C++这样内存不安全的语言仍在广泛使用,内存安全漏洞利用仍占软件漏洞的约70%。

Rust于2015年首次发布,旨在匹配C和C++的性能,同时引入内存安全性。包括亚马逊、谷歌和微软在内,渴望加固代码的科技公司快速采用了这种语言,但将旧软件转换为Rust是一个费力且昂贵的过程。

项目负责人、英国剑桥大学博士生赫比·布拉德利表示,大重构的成功依赖于AI工具已经改变了这一等式的想法。该倡议提议建立一个由美国政府资助的"专注研究组织",将使用AI驱动的编程工具,到2030年将关键开源软件库中的1亿行代码转换为Rust。布拉德利估计,投资1亿美元,该项目可以防止数百次累计成本约20亿美元的网络攻击。

"我非常看好AI改变软件开发方式的能力,这显然包括做一些以前被认为成本或时间过于昂贵的事情的潜力,"布拉德利说。"五年后,如果人们想要任何主要库的Rust版本...他们就能实现。"

布拉德利表示,这种方法如此有吸引力的原因在于,它有可能一次性解决大量漏洞,而不必采用逐个处理每个bug的常规方法。这对于那些通常由少数工作过度的志愿者维护的小型开源库的"长尾"来说可能特别有吸引力。

手动将小型C代码库转换为Rust通常需要经验丰富的Rust工程师投入数千小时的人力,而这样的工程师供不应求。但布拉德利表示,最新的AI编程工具现在可以可靠地在很少监督下完成1000行以下程序的翻译。在少量监督下,包含多达5000行的程序也触手可及。布拉德利补充说,这些能力也在快速进步。

一份概述该提案的立场文件表明,一个由不到50名安全工程师、AI研究人员和管理员组成的团队可以在3到5年的时间内对关键开源库产生相当大的影响。初期努力将专注于识别最重要的安全库,并开发强大的工具来验证AI翻译代码的安全性和功能。

该项目希望借助现有努力来创建AI驱动的Rust翻译工具,最值得注意的是美国国防高级研究计划局的"将所有C转换为Rust"(TRACTOR)项目。该项目于2024年启动,旨在研究如何将新兴的生成式AI工具与传统代码分析相结合,实现Rust翻译的自动化。

尽管自启动以来AI代码生成快速改进,项目经理丹·沃拉奇认为混合方法仍可能胜出。他说,该项目资助的六个团队采取了不同的方法,从几乎完全依赖AI到主要构建经典转换工具,仅将问题的部分外包给生成式模型。

"AI看起来很有前途,但我们也有数十年编写软件来分析其他软件的研究,"他说。"TRACTOR的全部意义在于探索所有可能混合搭配经典计算机科学与现代AI的不同方式。"

团队在12月提交了第一轮结果,项目评估团队目前正在分析他们的条目。沃拉奇表示,他们将被评判的两个主要标准是正确性(代码是否按预期工作)和性能,但第三个更主观的衡量标准可能是最重要的。团队面临的挑战是创建"惯用的"Rust代码——遵循最佳实践并以公认方式解决问题的代码。换句话说,"代码看起来是否像熟练的Rust程序员从头开始构建的样子",沃拉奇说。

这对于确保生成的代码易于人类工程师维护至关重要,但为Rust项目做贡献的开源开发者乔什·特里普利特表示,这可能具有挑战性。"如果你使用AI翻译的代码,与手动翻译的代码相比,你可能最终得到人类难以维护的代码,"他说。

特里普利特表示,这可能并不总是问题,他欢迎任何将更多代码转换为Rust的努力。如果一个项目已经在使用AI帮助维护其代码——这种情况越来越常见——那么使用AI翻译为Rust将是完全合理的。但他告诫那些尚未定期使用该技术的团队不要转向它进行代码转换。他还认为对于成千上万其他项目所依赖的流行开源库需要更加谨慎。

"可能你会想在转换中更加小心,也许使用AI来帮助你,但要非常谨慎,"他说。"AI在做错事方面永远不会有100%的稳健性,无论是通过幻觉还是不理解任务。"

乔治敦大学安全与新兴技术中心高级研究分析师杰西卡·吉表示,另一个潜在挑战是,虽然Rust的受欢迎程度在增长,但它仍然拥有相对较小的开发者基础。她在给Spectrum的电子邮件中写道:"假设AI翻译一切顺利,生成的Rust代码需要以某种方式维护和监控。外面的Rust专家比C/C++专家少得多,所以关注代码库的专家眼睛可能会更少。"

然而,吉表示,也许最大的障碍是说服美国政府资助该项目,特别是在设想的规模下。她认为更现实的目标可能是从私营部门为概念验证征求资金。"我认为现在是推销这样提案的好时机,因为AI公司特别有动机展示他们模型的能力,"她说。

布拉德利也在考虑类似的思路。虽然他已经与美国和英国政府代表进行了讨论,但他也在探索该项目作为商业企业是否更有意义,因为大量可能从转换为Rust中受益的易受攻击代码存在于私人公司和关键基础设施提供商中。

Q&A

Q1:大重构倡议是什么?它要解决什么问题?

A:大重构倡议是由美国进步研究所智库启动的项目,旨在使用AI工具将用C和C++编写的开源软件自动转换为Rust语言。它要解决的主要问题是内存安全漏洞,这类漏洞占所有软件漏洞的约70%。

Q2:为什么选择Rust语言进行代码转换?

A:Rust语言于2015年发布,专门设计用于匹配C和C++的性能,同时引入内存安全性,能够防止危险的内存漏洞利用。与C/C++不同,Rust具有内置的安全防护机制,可以有效防止内存安全问题。

Q3:AI代码转换目前能达到什么水平?有哪些限制?

A:目前AI编程工具可以可靠地完成1000行以下程序的翻译,在少量监督下可处理多达5000行的程序。但挑战在于生成的代码可能难以维护,且需要确保代码遵循Rust最佳实践,看起来像熟练程序员编写的"惯用"代码。