在过去五年中,Android 中与内存相关的漏洞数量急剧下降,这要归功于 Google 使用安全设计方法,该方法强调对大多数新代码使用 Rust 等内存安全语言。
缓冲区溢出和释放后使用错误等内存安全问题现在仅占所有 Android 漏洞的 24%,而 2019 年这一比例为 76%。今年到目前为止的数据表明,2024 年全年共有 36 个与 Android 内存相关的漏洞,大约是去年的一半,与 2019 年的 223 个缺陷相去甚远。
Safety-by Design 方法获得回报
在 9 月 25 日的一篇博文中,来自 Google Android 和安全团队的研究人员将这一进展归功于安全编码,这是该公司的一种安全设计方法,优先考虑将 Rust 等内存安全语言用于新代码开发。“根据我们所学到的知识,很明显,我们不需要丢弃或重写所有现有的内存不安全代码,”研究人员写道。“相反,Android 专注于使互操作性安全便捷,作为我们内存安全之旅的主要功能。”
内存安全漏洞传统上占所有应用程序软件漏洞的 60% 以上,并将继续占 60% 以上。与其他缺陷相比,它们也异常严重。例如,在 2022 年,与内存相关的错误仅占所有已识别的 Android 漏洞的 36%,但占操作系统中最严重缺陷的 86%,占已确认利用的 Android 漏洞的 78%。
这在很大程度上与 C 和 C++ 等广泛使用的编程语言允许软件开发人员直接操作内存有关,从而为错误潜入敞开大门。相比之下,Rust、Go 和 C# 等内存安全语言具有自动内存管理和针对常见内存相关错误的内置安全检查功能。包括美国网络安全和基础设施安全局 (CISA) 甚至白宫在内的许多安全利益相关者都对与使用内存不安全语言相关的安全风险增加以及解决这些问题所涉及的大量成本表示担忧。虽然向内存安全语言的转变势头正在缓慢增强,但许多人预计将现有代码库完全迁移到内存安全代码需要数年甚至数十年的时间。
渐进的过渡
Google 解决这个问题的方法是使用内存安全的语言(如 Rust)来实现新的 Android 功能,同时除了修复错误外,保留现有代码基本保持不变。两位 Google 研究人员表示,结果是,在过去几年中,涉及内存不安全语言的新开发活动逐渐放缓,而内存安全开发活动却有所增加。
Google 从 Android 12 中对 Rust 的支持开始过渡,并在 Android 开源项目中逐渐增加对编程语言的使用。Android 13 标志着操作系统中的大部分新代码首次采用内存安全语言。当时,谷歌强调,其目标不是将所有 C 和 C++ 代码转换为 Rust,而是随着时间的推移逐渐过渡到新的编程语言。
在今年早些时候的一篇博文中,Google 安全工程团队的成员指出,他们认为“将 C++ 演变成具有严格内存安全保证的语言没有现实的道路”。但是,Google 不会一下子就放弃它,而是将继续投资于提高 C 和 C++ 内存安全性的工具,以支持公司用这些语言编写的现有代码库。
值得注意的是,Google 发现与内存相关的错误占所有 Android 漏洞的百分比有所下降,这不仅是因为该公司越来越多地使用像 Rust 这样的内存安全语言,还因为旧的漏洞会随着时间的推移而衰减。研究人员发现,与全新的代码相比,五年前的 Android 代码中给定数量的代码中的漏洞数量(通常称为漏洞密度)较低。
研究人员说:“问题主要在于新代码,因此需要从根本上改变我们开发代码的方式。
发表评论
您还未登录,请先登录。
登录