Perface
几十年来,内存安全一直是安全漏洞的主要来源。如今,软件供应商报告说,由于违反内存安全而导致的漏洞占其产品中的大部分安全问题。这得到了研究的支持。根据 2019 年 BlueHat 的演示,Microsoft产品中解决的所有安全问题中有 70% 是由违反内存安全引起的。谷歌也报告了类似的数据,其中超过75%的漏洞违反了内存安全。
有几种针对内存安全的软件缓解技术,例如 ASan 和 HWSAN。但是,这些在性能和电池寿命方面可能都很昂贵,因此不适合广泛部署。Arm 的 Armv8.5-A 内存标记扩展 (MTE) 解决了这些挑战,带来了高性能且可扩展的硬件解决方案,可减少以不安全语言编写的代码中可能存在的内存安全违规行为的可利用性。
谷歌公告
就在最近,谷歌宣布将在Android中采用Arm的MTE。这是一个令人兴奋的消息,谷歌展示了其对Android生态系统安全的持续承诺。它还显示了我们MTE产品的优势,文章指出该技术使“利用内存错误非常困难(如果不是不可能的话)。除了安全优势外,不解决内存安全错误造成的中断还会降低用户满意度并增加软件开发成本。面对Android生态系统面临的所有这些威胁,您可以理解为什么Google对MTE做出了承诺!
内存安全违规
内存安全违规主要有两种类型:空间安全和时间安全。MTE 提供了一种机制,无需检测即可在生产代码中检测这两种类型。
当对象在其真实边界之外被访问时,将违反空间安全。例如,当数据写入缓冲区或其他对象之外时。这可被利用来更改函数指针、保存寄存器或类似内容的目标地址。
当对对象的引用在过期后使用时,通常会在释放对象的内存后使用,从而违反时间安全性 - 利用现有的“释放后使用”错误。利用分配器的知识,攻击者可以放置一个新的恶意对象来代替预期的版本。在该对象上调用的任何函数都会导致对提供给攻击者的程序流的控制权。这也可以构成几种类型攻击的基础。
MTE 如何提供帮助
MTE 有利于安全性,因为它可以在部署前后定位内存安全漏洞。它旨在快速检测内存安全违规,并提供针对试图破坏代码的攻击的可靠性。MTE 实现了对内存的锁和密钥访问。如果密钥匹配,则允许锁定内存访问;否则,可能会记录或错误访问。通过这种方式,可以更轻松地检测难以捕获的内存安全错误,这也有助于常规调试。
在部署之前定位和修复漏洞可减少已部署代码的攻击面,MTE 提高了测试和模糊测试的有效性。部署后大规模检测漏洞支持在漏洞被广泛利用之前被动修复漏洞,MTE 协助进行此检测。
大规模部署 MTE
MTE 非常灵活,可以在产品开发和部署的不同阶段以不同的配置部署。MTE 的大规模灵活性允许在最低开销和最准确的报告之间进行权衡。动态更改配置的能力意味着,在现场,有关访问故障位置的准确信息可以通过错误报告和遥测系统中继回其开发人员。