内存安全

内存不安全

内存安全漏洞(即原生编程语言中处理内存时发生的错误)是 Android 代码库中最常见的问题。在高危级别安全漏洞中,内存安全漏洞占比超过 60%,并且会导致数百万次用户可见的崩溃。

 Memory safety bugs impact
  user experience, costs, and security.
图 1:内存安全漏洞及其对质量、安全性和成本的负面影响

内存安全漏洞会对质量和稳定性产生负面影响,并在最终用户设备上观察到的崩溃中占据很大一部分。因此,内存安全漏洞的高密度与糟糕的用户体验直接相关。
以 C、C++ 和汇编等内存不安全语言编写的原生代码占 Android 平台代码的 70% 以上,并且存在于大约 50% 的 Google Play 商店应用中。
鉴于代码的复杂性不断增加,如果对内存安全漏洞置之不理,那么随着时间的推移,漏洞的数量将会增加。因此,为我们的生态系统提供可以检测和缓解此类漏洞的工具和技术对于我们的长期成功至关重要。
在过去几年中,我们一直与硬件合作伙伴密切合作,开发 Arm 内存标记等硬件技术,并在 Android 代码库中引入了 Rust。
这些技术将加快我们实现内存安全的步伐,并帮助更广泛的软件行业解决一个关键问题领域。

内存安全漏洞会对质量产生负面影响

潜在的内存安全漏洞可能会导致不确定的结果,具体取决于系统的状态。这种不可预测的行为会导致崩溃,并给我们的用户带来困扰。

每天,我们会观察到来自最终用户设备的数百万次原生崩溃,并且随着 GWP-ASan 的引入,我们已将其中大多数崩溃追溯到内存安全漏洞。
此数据点验证了质量与内存安全漏洞密度之间的相关性,并且与我们的 Chrome 同事观察到的情况一致(请参阅 Chrome GWP-ASan 漏洞热列表)。

内存安全漏洞会对安全性产生负面影响

自第一个 Android 版本发布以来,内存安全漏洞一直是 Android 安全漏洞的主要贡献者。

Memory safety bugs negatively affect
  security.
图 2:内存安全漏洞对 Android 漏洞的贡献

令人鼓舞的是,这不仅仅是 Android 的问题(请参阅 ChromeMicrosoft 统计数据),但为了用户的安全,我们需要做得更多。
Google 的 Project Zero 团队 跟踪了在针对用户的真实攻击中使用的零日漏洞利用,并将这些漏洞利用视为零日漏洞。这些并非假设的漏洞,而是积极用于攻击用户的漏洞利用。内存安全漏洞(内存损坏和释放后使用)占绝大多数。

内存安全漏洞会增加成本

使设备保持最新的安全修补程序可确保用户的安全,但这会给我们的生态系统带来资金成本。

低级别供应商代码(通常具有自定义修改)中内存安全漏洞的高密度会显着增加修复和测试成本。但是,在开发周期的早期检测到这些漏洞可以降低这些成本。

研究表明,尽早检测到漏洞可以将成本降低多达六倍。但是,考虑到我们生态系统的复杂性、供应商维护的代码库的平均数量以及软件复杂性的不断增加,节省的成本可能会更高。

内存安全

从 Android 12 开始,我们对 Android 代码库进行了系统性更改,以降低内存安全漏洞的密度。我们正在扩展 Android 内存安全工具,并引入新的要求,以鼓励我们的生态系统解决此类漏洞。随着时间的推移,这些措施应转化为更高的质量、更好的用户安全性以及更低的供应商成本。

内存安全很可能在未来几年内成为质量和安全性的区别因素,而 Android 计划引领潮流。

支持内存安全的要求

Android 兼容性定义文档 (CDD) 强烈建议在开发期间使用内存安全工具。
我们正在与我们的生态系统密切合作,以提高内存安全工具的使用率,并将它们集成到持续集成和测试流程中。
随着时间的推移,我们希望确保每台设备都通过使用内存安全工具运行的完整兼容性测试套件 (CTS) 测试,这表明未发现此类漏洞。例如,Arm v9 平台将需要提供启用内存标记的 CTS 运行,而 Arm v8 平台将被要求提供使用 HWASAN 和 KASAN 的 CTS 运行。

Rust 作为平台代码的新编程语言

Android 12 引入了 Rust 作为平台语言。Rust 在性能水平与 C/C++ 相当的情况下提供内存和线程安全。我们期望 Rust 成为大多数新原生项目的首选。但是,用 Rust 重写所有内存不安全的代码(目前占 Android 平台代码的 70% 以上)是不可行的。展望未来,Rust 将成为内存安全工具的补充。

内存安全工具

Android 支持各种工具,这些工具可帮助检测内存安全漏洞。下图介绍了可用的 Android 内存安全工具的分类。

Memory safety bugs negatively affect
  security.
图 3:Android 内存安全工具概览

我们的工具涵盖了广泛的部署场景和目标。以下文档介绍了每种工具,并提供了在您的产品中使用这些工具的参考。