Android内存安全漏洞数量大幅下降,Rust代码比例上升成关键

alien 237 0

过去十年,内存漏洞占整个产业漏洞的65%,但谷歌发现从2019年到2022年,Android的内存漏洞年度总数,从223个下降到了85个,而有这项安全性进展,谷歌归因于Android的内存安全代码比例增加。

谷歌 过去持续投资工具提高C/C++代码的安全性,之前几个版本,谷歌 在Android设备上引入Scudo 强化分配器、HWASAN、GWP-ASAN 以及 KFENCE,同时增加现有代码库模糊测试的覆盖率,运用这些工具发现更多 C/C++ 代码漏洞,并减少未来新代码所包含的漏洞。

但即便谷歌在C/C++代码上做了这些努力,但他们认为这仍无法解释Android漏洞巨幅减少的变化,而谷歌在审视开发策略后,认为Android从内存不安全语言持续转移到内存安全语言,是这个现象的主要原因。

从Android 12开始,谷歌 就在 Android 支持Rust程式语言,作为 C/C++内存安全替代方案,而从那时起,谷歌 也持续扩展 Android 开源项目(AOSP)中的 Rust 体验和使用。 谷歌表示,他们的目标并不是把现有的C/C++代码都转换成为Rust,而是在新的代码使用内存安全语言开发。

在Android 13中,有约21%的新原生码都是以Rust开发,在AOSP中已经有大约150万行的Rust代码,涵盖各种功能和组件,包括Keystore2、UWB堆叠、DNS-over-http3、Android虚拟化框架等组件和开源相依项目。 这些都是需要系统语言开发的低阶组件,如果没有Rust,谷歌 就必须使用 C++来实作。

到目前为止,在Android的Rust代码中发现的内存漏洞为零,谷歌提到,这是一个重要发现,因为过去Android漏洞密度大于1/kLOC,也就是说,每一千行代码至少会发现一个漏洞,与历史资料相比,Rust可能已经阻挡数百个漏洞进入产品环境。

使用C/C++开发的功能不如预想中的运作迅速,谷歌提到,使用非内存安全语言,反而需要额外添加安全措施,而这些措施会让程序执行的速度更慢。 非内存安全的代码通常意味着开发者必须在安全性和效能之间权衡,像是添加沙盒、执行时缓解措施或是硬件保护等,都对程式码的大小、内存和效能产生负面影响。

谷歌提到,在Android中使用Rust,能以更少的妥协优化安全性和系统健康。 像是使用新的UWB堆叠能够节省数MB的内存,并以现存的程序中执行避免IPC延迟,又或是新的DNS-over-http3实作,能够以安全的方法,使用更少的执行绪处理相同的工作量。

要从C/C++移植到Rust并不是一件简单的事,谷歌持续增加Rust在Android平台上的使用,为了实现更高的安全性和稳定性等目标,谷歌需要在更多原生码中使用Rust,目前他们正在以Rust实作用户空间HAL,并且已经将Android虚拟化框架中的虚拟机器固件移植到Rust,也随着Linux 6.1对Rust的支持,便能够从核心驱动程序开始,对核心提供内存安全。

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~