整理丨诺亚
出品 | 51CTO技术栈(微信号:blog51cto)
为了加快向内存安全编程语言的迁移步伐,美国国防部高级研究计划局(DARPA)正积极推动一项名为“TRACTOR”的创新项目。TRACTOR,即“TRanslating All C TO Rust”,是一个旨在利用先进的机器学习技术自动将老旧的C代码转换为Rust语言的工具。
内存安全问题一直是软件开发中的老大难,比如常见的缓冲区溢出漏洞,这些隐患常常潜伏在庞大的代码库中,成为安全威胁的主要来源。DARPA希望通过TRACTOR这样的工具,借助AI的力量来简化这一转化过程,从而使软件变得更加坚固可靠。
TRACTOR项目负责人Dan Wallach在一次声明中描述了这个愿景:“想象一下,你只需访问任何一家大型语言模型网站,与那里的AI聊天机器人对话,简单地说一句‘我这儿有些C代码,能帮我转换成既安全又符合Rust风格的代码吗?’然后复制粘贴代码给它,通常情况下你就会得到满意的结果——当然,不能保证百分之百的成功率。”
不过,Wallach也指出了这项工作的核心挑战:“我们需要大幅提高从C语言到Rust的自动化转换质量,尤其是对于那些最关键和复杂的程序结构。”
1.仅仅依靠漏洞检测工具远远不够
在过去几年里,科技巨头如谷歌和微软一直公开强调内存安全漏洞带来的问题,并积极推广使用除C和C++之外的其他不需要手动管理内存的语言。这种倡导不仅在私营部门产生了影响,也引起了公共部门的关注,后者拥有大量的遗留代码。
白宫和美国网络安全与基础设施安全局(CISA)因此鼓励采用内存安全的编程语言,主要提倡的是Rust,同时也包括C#、Go、Java、Python和Swift等语言。
尽管如此,C和C++的维护者们提出了异议,他们认为只要严格遵循ISO标准,并充分利用现有的测试工具,就能达到与Rust相似的安全水平,而不必彻底重写所有代码。
然而,DARPA对此的看法似乎表明了对C和C++的态度已经转变。
“经过了二十多年的内存安全问题后,软件工程界普遍认识到,”DARPA的研究机构指出,并引用了国家网络安全总监办公室的呼吁,“仅仅依靠漏洞检测工具是远远不够的。”这表明了转向更安全的编程实践的重要性。
2.目前的翻译工具仍然需要大量的人工干预
Rust语言在2015年首次稳定发布,比C语言出现晚了四十多年,它内置了内存安全性,并且也适合用于低级、性能敏感的系统编程。
Rust语言自2015年首次稳定发布以来,虽然比C语言晚了四十多年,但它内置了内存安全性,并且非常适合用于低级别的、性能敏感的系统编程任务。
Rust语言的特性及其日益增长的受欢迎程度催生了诸如Prossimo这样的倡议。这是一个由非营利组织Internet Security Research Group发起的项目,旨在通过用Rust重写关键库和代码来减少安全风险,其中包括网络时间协议(NTP)守护进程(ntpd-rs)。
Prossimo项目的执行董事Josh Aas表示:“鉴于互联网基础设施中运行着大量C代码,使用翻译工具变得极具吸引力。”
Aas还提到:“我们已经在这一领域进行了实验,例如最近我们将基于C的AV1实现翻译为Rust。目前的翻译工具仍然需要大量的人工干预以确保翻译结果的正确性和符合Rust的习惯性编程风格,但我们希望随着进一步的投资,这些工具将变得更加高效。”
Code Metal公司的首席执行官Peter Morales则认为DARPA的TRACTOR项目既具有前景又恰逢其时。Code Metal是一家专注于为边缘硬件转译代码的公司,最近刚筹集了1650万美元。
“我认为TRACTOR项目在实现上非常可行,我相信它将在网络安全领域产生重大影响,因为内存安全已成为该领域的重要议题之一。”Morales说道。
当被问及是否同意DARPA所说的软件社区已经就解决内存安全问题达成共识时,Morales并未完全否定C和C++的价值。
“我认为选择任何一种语言都涉及权衡,但在内核级别,将一部分代码迁移到Rust是有意义的。”他补充道。
3.自动代码转换仍需直面挑战
谈及自动代码转换的挑战,Morales表示:“这确实是一个DARPA级别的难题。”在尝试为不同语言之间的语句转换制定规则时,面临的各种特殊情况数量之多令人望而却步。
TRACTOR项目的负责人Wallach强调,他们的目标是实现高度自动化,但这需要克服一系列复杂的技术挑战。
“例如,大型语言模型在被要求翻译代码时有时能给出惊人的答案,但有时也会产生错误的答案,”他解释道。“另一个挑战在于,C语言允许代码对指针执行操作,包括算术运算,而Rust则禁止这类操作。要跨越这个差距,需要的远不止是简单的逐字翻译。”
当被问及DARPA是否有特定的代码库打算进行转换时,Wallach回答说:“我们的目标是对整个庞大的开源代码世界,以及国防工业基础中使用的代码进行转换。虽然我没有具体的计划,但像Linux内核这样的项目由于存在技术上的限制,目前不适合使用Rust。”
DARPA将于2024年8月26日举办一场活动,针对计划为TRACTOR项目提交提案的人士。参与者可以选择现场参加或远程参与。有意参加的人士必须在2024年8月19日前完成注册。
4.来自开发者的声音
尽管TRACTOR项目获得了官方的支持,但在相关的新闻讨论中,来自民间的声音似乎并不像上层那样信心满满。
Reddit技术论坛上,有开发者直言他对此事的感受“十分复杂”。
“一方面,我看到了在关键系统中确保内存安全的必要性。另一方面……依靠GPT生成的代码来进行转换?真的吗?那些出于安全原因应该转向Rust的系统,似乎是不应该使用任何AI生成代码的那种系统。”
不少人对此有同感。他们认可在关键系统中确保内存安全的重要性,也不否认这的确是Rust的主要卖点。但是,他们对于依赖AI(如GPT)生成的代码来实现这种转换持保留意见。毕竟AI生成的代码可能存在不确定性,总是让人难以完全信任,在这一前提下让其满足关键系统的安全性要求是非常矛盾的。
还有人给出了更为辛辣戏谑的评论:“当一切都变得一团糟时,就是Rust开发者们大赚特赚的时候。”当那些本不适合被转换到新语言(如 Rust)的旧代码或系统被强行要求转换时,当盲目地使用AI来转转换旧代码时,可能会产生更多的问题而不是解决问题。
这些来自民间的声音也印证了Stack Overflow不久前发布的2024年开发者调查数据。尽管美国政府不断呼吁减少对C和C++的依赖,但编程语言的受欢迎程度几乎没有变化。调查结果显示,Rust的使用率从13.5%下降到了12.6%,而C和C++的使用率略有增长。目前没有迹象表明会有大规模从C或C++向其他语言的迁移。
图片