近日,来自三星、首尔国立大学和佐治亚理工学院的韩国研究团队的研究人员发现一种以 ARM 的内存标记扩展(MTE)为目标的,名为 "TIKTAG "的新型攻击,黑客可利用这种方式绕过安全防护功能,这种攻击专门针对谷歌浏览器和 Linux 内核的攻击,导致数据泄露几率超过 95%。
MTE是ARM v8.5-A架构(及更高版本)新增的一项功能,旨在检测和防止内存损坏。系统采用低开销标签技术,为 16 字节内存块分配 4 位标签,确保指针中的标签与访问的内存区域相匹配,从而防止内存损坏攻击。
MTE 有三种运行模式:同步、异步和非对称,兼顾了安全性和性能。
研究人员发现,通过使用两个小工具(代码),即 TIKTAG-v1 和 TIKTAG-v2,他们可以利用投机执行在短时间内泄露 MTE 内存标记,成功率很高。
标签泄漏图,来源:arxiv.org
泄露这些标签不会直接暴露敏感数据,如密码、加密密钥或个人信息。但理论上,它可以让攻击者破坏 MTE 提供的保护,使安全系统无法抵御隐蔽的内存破坏攻击。
TIKTAG 攻击
TIKTAG-v1 利用 CPU 分支预测和数据预取行为中的推测收缩来泄漏 MTE 标记。
TIKTAG-v1 代码,来源:arxiv.org
研究人员发现,这个小工具在攻击 Linux 内核时,对投机性内存访问的功能格外有效,不过需要对内核指针进行一些操作。
攻击者使用系统调用调用投机执行路径,并测量缓存状态以推断内存标签。
TIKTAG-v2 利用了投机执行中的存储到加载转发行为,这是一个将值存储到内存地址并立即从同一地址加载的序列。
TIKTAG-v2 代码,来源:arxiv.org
如果标签匹配,值将被转发,加载成功,并影响缓存状态;如果标签不匹配,转发将被阻止,缓存状态保持不变。
因此,通过探测投机执行后的缓存状态,可以推断出标签检查结果。
研究人员展示了 TIKTAG-v2 小工具对谷歌 Chrome 浏览器,尤其是 V8 JavaScript 引擎的有效性,为利用渲染器进程中的内存破坏漏洞开辟了道路。
通过 MTE 旁路实现的攻击场景,来源:arxiv.org
行业响应和缓解措施
研究人员在 2023 年 11 月至 12 月期间向受影响的企业报告了他们的发现,并得到了普遍积极的回应。
发表在 arxiv.org 上的技术论文提出了以下针对 TIKTAG 攻击的缓解措施:
- 修改硬件设计,防止投机执行根据标签检查结果修改高速缓存状态。
- 插入投机障碍(如 sb 或 isb 指令),防止关键内存操作的投机执行。
- 添加填充指令,以扩展分支指令和内存访问之间的执行窗口。
- 增强沙箱机制,将投机性内存访问路径严格限制在安全内存区域内。
虽然 ARM 认识到了情况的严重性,并在几个月前发布了公告,但它并不认为这是对功能的妥协。
ARM 在公告中写道:由于 Allocation Tags 对地址空间中的软件来说并不是秘密,因此揭示正确标签值的投机机制并不被视为对架构原则的破坏。
Chrome 浏览器的安全团队承认存在这些漏洞,但目前并未打算修复。因为他们认为 V8 沙盒的目的不是保证内存数据和 MTE 标记的机密性。
此外,Chrome 浏览器目前默认不启用基于 MTE 的防御功能,因此修复的优先级较低。
Pixel 8 设备中的 MTE 标记已于今年 4 月报告给了安卓安全团队,并被确认为符合悬赏条件的硬件漏洞。