-
-
谷歌称用Rust编写代码,五年漏洞数下降了68%
-
发表于: 2024-9-27 09:28 1773
-
在网络安全领域,代码的安全性一直是开发者和安全专家关注的焦点。近年来,随着技术的不断进步,新的编程语言和工具不断涌现,旨在提高代码的安全性和可靠性。其中,Rust语言因其内存安全特性而备受关注。最近,谷歌发布的一项研究显示,通过在Android系统中使用Rust编写代码,五年来内存安全漏洞的数量大幅下降了68%。
从Android 12开始,谷歌就在Android系统中引入了Rust语言的支持,作为C/C++的替代方案。谷歌的目标并不是将现有的C/C++代码全部转换为Rust,而是在新编写的代码中使用Rust语言开发。通过将越来越多的Rust代码集成到Android操作系统中,谷歌在减少漏洞方面的努力最终获得了回报。
根据谷歌发布的最新公告,在过去五年的Android系统版本中,内存安全漏洞的数量大幅下降了68%。这远远低于之前在Chromium中发现的70%,使Android成为大型项目如何在不破坏向后兼容性的情况下逐步、有条不紊地转向安全领域的绝佳范例。
谷歌表示,实现这一结果的方法是优先使用Rust等内存安全语言编写新代码,从而随着时间的推移最大限度地减少新漏洞的引入。与此同时,对旧代码也进行了最小限度的修改,重点放在重要的安全修复上,而不是进行大范围的重写,因为重写也会破坏互操作性。
谷歌在报告中写道:“根据我们所了解到的情况,很明显,我们不需要丢弃或重写所有现有的内存不安全代码。相反,Android正专注于将互操作性的安全和便捷作为我们内存安全之旅的主要能力。”
随着时间的推移,这种策略会使旧代码变得更加成熟和安全,从而减少与内存相关的漏洞数量,无论这些漏洞是用哪种语言编写的。Android构建策略中的这两大支柱产生了协同效应,使世界上使用最广泛的移动平台的内存漏洞大幅减少。
谷歌解释说,虽然让旧代码基本保持不变似乎有风险,而且新代码有望得到更好的测试和审查,但事实恰恰相反,尽管这似乎有违直觉。这是因为最近的代码修改引入了大多数漏洞,因此新代码几乎总是包含安全问题。与此同时,除非开发人员对旧代码进行大量修改,否则旧代码中的漏洞就会被消除。
内存漏洞概率与代码寿命的关系,来源:谷歌
谷歌表示,包括其自身在内,业界在处理内存安全漏洞方面主要经历了以下四个阶段:
- 被动打补丁:最初的重点是在发现漏洞后进行修复。这种方法导致持续的成本,因为需要频繁更新,而用户在此期间仍然容易受到攻击。
- 主动缓解:下一步是实施策略,增加漏洞利用的难度(如堆栈金丝雀、控制流完整性)。然而,这些措施往往需要牺牲性能,并导致与攻击者之间的猫鼠游戏。
- 主动发现漏洞:这一代人使用模糊处理和消毒器等工具主动发现漏洞。这种方法虽然有用,但只能治标,需要持续的关注和努力。
- 高保障预防(安全编码):最新的方法强调通过使用Rust等内存安全语言从源头上预防漏洞。这种“设计安全”方法提供了可扩展的长期保证,打破了被动修复和代价高昂的缓解措施的循环。
谷歌解释称:“通过这些方法,整个行业的产品都得到了显著增强,我们将继续致力于应对、缓解和主动查找漏洞。尽管如此,越来越明显的是,这些方法不仅不足以在内存安全领域达到可接受的风险水平,而且还会给开发人员、用户、企业和产品带来持续且不断增加的成本。正如包括CISA在内的众多政府机构在其‘按设计保证安全’报告中所强调的,只有采用按设计保证安全的做法,我们才能打破不断创建和应用修复程序的恶性循环。”
去年6月,美国网络安全和基础设施安全局(CISA)警告说,在使用最广泛的开源项目中,有52%使用了内存不安全的语言。即使是用内存安全语言编写的项目,也往往依赖于用内存不安全语言编写的组件,因此安全风险的解决非常复杂。CISA建议软件开发人员使用Rust、Java和Go等内存安全语言编写新代码,并将现有项目,特别是关键组件过渡到这些语言。
这一研究结果不仅展示了Rust语言在提高代码安全性方面的潜力,也为其他开发者和企业提供了宝贵的经验。随着越来越多的公司和项目开始采用Rust,我们有理由相信,未来的软件开发将更加安全,漏洞数量将进一步减少。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)