Google采用Rust语言,安卓内存漏洞大降68%

Google最近透露,他们在Android系统中开始使用一种叫做“内存安全语言”的编程语言(比如Rust),这是他们“设计即安全”策略的一部分。结果发现,过去六年里,Android系统中因为内存问题导致的安全漏洞比例从76%降到了24%。

Google解释说,他们在开发新功能时特别注重“安全编码”,这不仅降低了代码库的整体安全风险,还让这种转变更“容易扩展”且“成本更低”。

Google的两位专家Jeff Vander Stoep和Alex Rebert在一篇文章中提到,随着时间的推移,新的不安全的代码开发会逐渐减少,而新的安全代码开发会取而代之,最终导致内存安全漏洞的数量下降。

更有趣的是,即使新的不安全代码数量增加了,内存安全漏洞的数量还是会下降。这是因为漏洞的数量会随着时间的推移呈指数级减少。研究发现,很多漏洞通常出现在新代码或最近修改过的代码中。

问题主要出在新代码上,所以需要从根本上改变编写代码的方式。代码会随着时间的推移变得更成熟、更安全,因此像重写代码这样的投资回报会随着代码变老而逐渐减少。

Google早在2021年4月就宣布要在Android系统中支持Rust编程语言,实际上他们从2019年就开始优先考虑将新开发转向内存安全语言了。

结果:

  • Android系统中发现的内存安全漏洞数量从2019年的223个降到了2024年的不到50个

当然,这种漏洞减少也得益于技术的进步,比如从被动修补转向主动预防,甚至使用像Clang sanitizers这样的工具来主动发现漏洞。Google还提到,内存安全策略应该进一步发展,优先考虑“高保证预防”,通过将安全设计原则融入代码的基础中。

安全编码能够对代码的特性做出强有力的断言,明确哪些事情可能发生,哪些不可能发生,而不是仅仅依赖过去的经验来预测未来的安全性。”

不仅如此,Google还表示,他们正在专注于提供Rust、C++和Kotlin之间的互操作性,而不是完全重写代码。他们认为这是一种“实用且渐进”的方法,可以逐步采用内存安全语言,最终消除整个漏洞类别。

在新代码中采用安全编码是一种范式转变,即使是在现有的庞大系统中,也可以利用漏洞的自然衰减来让代码变得更安全,提高安全设计的有效性,并缓解现有内存安全策略的可扩展性挑战。

与此同时,Google还加强了与Arm的产品安全和图形处理器(GPU)工程团队的合作,发现了多个问题,并提升了Android生态系统中GPU软件/固件的整体安全性。

  • 这包括在Pixel的驱动代码定制中发现了两个内存问题(CVE-2023-48409和CVE-2023-48421),
  • 以及在Arm Valhall GPU固件和第5代GPU架构固件中发现的另一个问题(CVE-2024-0153)。

Google和Arm表示:主动测试是一种良好的习惯,因为它可以在漏洞被利用之前发现并解决它们。