内存安全:Arm 内存标记扩展如何应对业内安全挑战

全面了解内存标记扩展 (Memory Tagging Extension, MTE),如何在 Arm 移动生态系统中实现 MTE,以及为何 MTE 是解决内存安全漏洞这一业界挑战的重要安全功能。

计算的未来将由我们日常生活各个方面的日益数字化所驱动,这也将导致软件和系统复杂性的不断增加。据相关数据报告称,2022 年报告的漏洞数量超过 23,000 个 (其中超过 17,000 个被归类为严重漏洞),连续六年创下新高。

利用构建于最新 Armv9 架构的 Arm CPU,我们可提供内存标记扩展 (Memory Tagging Extension, MTE) 等安全功能,以降低上述复杂性,并为软件开发者、芯片供应商和设备制造商提供影响深远的信息安全、功能安全、成本和上市时间优势。Armv9 安全性改进可将某些类别的漏洞减少高达 95%,例如在所有严重安全漏洞中占比最大的内存安全违规。

Arm 的 MTE 作为 Armv8.5 指令集的组成部分于 2019 年八月首次推出,而后 Arm 于 2021 年五月宣布将其内置于首款兼容 Armv9 的 CPU 中。早在 Armv9 架构推出之前,谷歌就宣布在安卓中采用 Arm 的 MTE,并致力于在整个安卓堆栈中支持 MTE。2022 年年底,荣耀在其开发者大会上宣布,将通过荣耀天网并在未来的 DiagnosisKit 工具中向开发者提供支持 MTE 的 MagicOS 6.x 和 MagicOS 7 设备。未来,这可能搭载在荣耀的移动设备中。

在本文中,我们将回答有关 MTE 的关键问题,包括什么是 MTE,它如何应对诸如内存安全之类的安全挑战,它的优势是什么,以及我们的合作伙伴对该功能做了哪些努力。

MTE 的作用是什么?它如何在 Arm 生态系统中带来更出色的软件?

利用 MTE,开发者可以快速找到内存相关漏洞,加快应用调试和开发流程。此外,该功能支持动态更改配置,这意味着在现场可通过漏洞报告和遥测系统,向开发者回传有关访问故障位置的准确信息。

值得注意的是,许多开发者首次使用 MTE 时可能会发现更多漏洞,远超过他们所能够修复的数量。但是,开发者可决定在产品发布之前先修复最严重的漏洞,然后在更新过程中解决不太严重的漏洞。此外,随着时间推移,开发者的代码将变得越来越清晰,因为在随后的全局扫描中捕捉出的漏洞数量会减少,使这一流程更加省时。崩溃、投诉和演习的频率也会随之降低。

借助 MTE,开发者可在部署前后进行检测并避免内存安全漏洞,从而有利于更广泛的移动生态系统。在部署之前找到并修复漏洞对于确保安全至关重要,因为这可以减少已部署代码的攻击面。在部署之后检测漏洞可以在漏洞被大范围利用之前对漏洞进行反应性修复,而 MTE 可协助开发者进行此类检测。这样就能够有力地抵御试图破坏安全代码的攻击。

解决内存安全违规为什么如此重要?

数十年以来,内存安全一直都是安全漏洞的主要来源。据操作系统供应商 (OSV) 报告,其产品中的大多数安全问题都源于内存安全违规导致的漏洞。谷歌的 Chromium 项目团队表示,内存安全问题在所有严重安全漏洞中占到了 70%。

内存安全违规可能会对用户产生巨大影响。恶意应用可通过不安全的内存来访问敏感数据,比如:用户凭证和密码,这样不法分子就能够访问机密数据。除了安全方面,由未解决的内存安全漏洞导致的中断会降低用户满意度,不仅增加软件开发成本,并且将来要耗费更多时间来解决此类问题。

内存管理问题已经存在了几十年,今天仍非常普遍。相关安全机构近期发布了一项指南[6],旨在帮助软件开发者和运营商防止和减少软件内存安全问题。该机构的“软件内存安全”网络安全信息表重点介绍了恶意网络行为者如何利用内存管理不善的问题来访问敏感数据,发布未获授权的代码执行,以及所造成的其他负面影响。

什么是内存安全违规?

内存安全违规有两种主要类型:空间安全违规和时间安全违规。MTE 可提供在生产代码中检测这两种违规的机制,且无需使用任何仪器。

当在某个对象的真实边界之外访问该对象时,就违反了空间安全。例如:将数据写入缓冲区或其他对象之外时。这可能会被用来改变函数指针、保存寄存器或类似对象的目标地址。

当在某个对象已过期后使用了该对象的参考时,就违反了时间安全,通常是在该对象的内存已释放后——利用现有的“内存释放后使用”漏洞。凭借对分配器的了解,攻击者可以放置新的恶意对象来替代预期版本。

MTE 的工作原理是什么?

Arm 实现的 MTE 为两阶段系统,即“锁”和“密钥”。如果密钥匹配,则允许访问锁内存;否则,访问可能会被记录下来或出错。这样就可以更轻松地检测到难以捕获的内存安全错误,也有助于进行常规调试。

在锁和密钥两阶段系统中,存在两种类型的标记:

地址标记,用作密钥。这将在进程中每个指针的最高位增加四位。地址标记仅适用于 64 位应用,因为它使用了“高字节忽略”功能,这是 Arm 64 位的一个功能。

内存标记,用作锁。内存标记也由四位组成,与应用内存空间中每个对齐的 16 字节区域相连接。Arm 将这些 16 字节区域称为标记颗粒。这四位并不用于应用数据,而且是分开存储。

移动设备为什么需要 MTE?

未来市场上的移动设备将具有更先进的计算能力,因此攻击面也更大。与此同时,通过这些设备获得的个人内容和数据的数量和价值也在不断增加。因此,需要实现一种安全性功能,为终端用户提供安全生态系统和安全的数字体验。

MTE 非常灵活,可在产品开发和部署的各个阶段部署在不同配置中。例如:MTE 可根据进程配置为异步和同步模式。异步模式的运行开销非常低,并且可用于确定存在内存问题的代码区域,而同步模式会在遇到导致安全违规的指令时出错,并在检测到漏洞时产生大量的调试信息。这种灵活性对大规模部署尤其有用,因为 MTE 具有高度的可扩展性,能够在数百万甚至数十亿台设备上运行,为系统和应用软件提供可靠的错误检测功能。

Arm 在 MTE 方面的合作伙伴是谁?

2019 年八月,谷歌宣布在安卓系统中采用 Arm 的 MTE,承诺在安卓堆栈中支持 MTE,并表示通过使用该技术,“哪怕有内存漏洞可利用,也将变得非常困难。”

Arm 与谷歌在 MTE 技术方面的合作旨在检测现有代码库和写入的新代码中存在的内存安全漏洞。以下是谷歌的 Kostya Serebryany 和 Sudhi Herle 的评论:

我们相信,内存标记将能够检测到环境中最常见的几种内存安全漏洞,同时帮助供应商识别并修复这些漏洞,并阻止恶意行为者利用这些漏洞。

安卓 12 添加了一个 MTE 初始实现,可检测到“内存释放后使用”漏洞和“缓冲区溢出”漏洞,而这些都是谷歌代码库中最常见的内存安全漏洞来源。在安卓 13 中,谷歌添加了一个开发者模式启动开关,以便在具有硬件支持但未永久开启 MTE 功能的设备上启用 MTE。对于未来的安卓版本,Arm 和谷歌将重点关注降低 MTE 使用的内存。

芯片供应商和设备制造商如何看待?

MTE 是所有 Armv9 CPU 的固有功能。为了解决软件生态系统中的内存安全漏洞,很多 Arm 合作伙伴已经在其芯片组中构建并启用该功能。其中一家率先使用 MTE 的设备制造商就是荣耀,该公司宣布,将通过荣耀天网并在未来的 DiagnosisKit 工具中向开发者提供支持 MTE 的 MagicOS 6.x 和 MagicOS 7 设备。这有力表明,在即将进入消费市场、基于 Armv9 技术的移动设备上,都可开启 MTE。

这项成果已经开始产生积极影响。快手是一家领先的内容社区及社交平台。快手 App 是中国目前最广泛使用的短视频和直播手机应用之一,根据 2022 年第三季度财报数据,快手应用的平均日活跃用户为 3.63 亿,平均月活跃用户为 6.26 亿,快手的海外产品 (Kwai 和 SnackVideo) 拥有超 1.6 亿用户。该公司目前正与荣耀天网合作,在大型项目中使用 Arm MTE提高内存安全,90% 的内存安全问题可以在 App 正式发布之前就在线下被检测出来,取得了以下收益:

——相较于 ASan,内存安全问题检测速度提高了三倍,内存消耗降低一半

——发现了十几个潜在问题,如果没有 MTE,这些隐蔽问题将难以被发现

以下是快手对 MTE 的评价:

“快手的使命是成为全球最痴迷于为客户创造价值的公司,为了给用户提供极致体验,快手非常重视保护用户隐私和信息安全,快手研发团队长期以来为了保证内存安全付出了巨大努力。但由于传统内存检测工具的性能开销较高,且需要重新编译所有源代码,所以几乎无法在快手移动端大型 C++ 代码库的日常开发实践中使用这些工具,MTE 解决了这些问题,在保证内存安全方面发挥着重要作。”

Arm 为什么将 MTE 内置于其产品和解决方案中?

MTE 是 Armv9 架构中一系列新的及现有安全功能的组成部分,旨在提高所有细分消费品市场的安全性。这意味着,我们的合作伙伴可通过自己在安全措施方面的软件投资来获取更高价值,从而形成一个标准化程度更高且更具扩展性的解决方案,以应对各种安全挑战。

Arm 近期的 MTE 开发成果是什么?

随着 2022 年六月发布的第二代 Armv9 CPU,我们推出了全新的非对称 MTE,在安全漏洞检测速度、精度和针对性之间实现了更高的灵活性。这可提高应用的稳定性,有利于软件开发,同时有助于在整个生态系统中更广泛地推广 MTE。采用 Arm Cortex-X3、Cortex-A715 和 Cortex-A510 最新版本 (A510-r1) CPU 的芯片组都将内置非对称 MTE。

Arm 架构是安全的数字体验的基石

Arm 正在重新定义计算的未来,而 MTE 是提供安全移动体验的一个关键功能。Arm 正在与移动生态系统中的所有合作伙伴(包括芯片供应商、设备制造商、操作系统供应商和开发者)携手推动实现 MTE 功能,以减少开发时间和成本,同时提供安全可靠的用户体验。对于我们的生态系统来说,最重要的是 MTE 可以轻松地进行大规模部署。通过 Armv9 架构——这是全球数十亿移动设备的计算基础,MTE 现已广泛普及,Arm 架构正在成为全球数字化安全的基石。

【本文作者卢旻盛,Arm 终端事业部安全和隐私战略总监】