6 月 18 日消息,韩国安全研究团队曝光了名为 TIKTAG 的全新推测执行攻击手段,以 ARM 的内存标记扩展(MTE)为目标,可以绕过防止内存损坏的关键保护机制,且成功率高达 95% 以上。
MTE 是 ARM v8.5-A 架构(及后续版本)新增的一项功能,主要是检测和防止内存损坏。系统采用低开销标签技术(Lower overhead tagging),分配 4 bits 来标记 16 byte(1 byte= 8 bits)内存块。这种机制有助于确定标签上的指针与被访问内存区域的标签一致,从而减少未经授权的内存访问和滥用。
注:MTE 分为同步、异步和非对称三类,每一类都平衡了安全性和性能。不过 TIKTAG 漏洞表明,即便是再妥善、再高级别的保护也可能存在漏洞。
研究人员观察到两个效率高、速度快的主要程序,包括 TIKTAG-v1 和 TIKTAG-v2,它们以推测执行为目标,泄露 MTE 内存标签。
TIKTAG-v1
TIKTAG-v1 中使用的功能包括分支预测中的推测收缩和 CPU 的数据预取。
研究人员发现,这个小工具在攻击 Linux 内核时,对投机性内存访问的功能格外有效,不过需要对内核指针进行一些操作。
恶意代码会更改内核指针,并通过系统调用函数调用使用高速缓存侧通道;然后访问并推测高速缓存的状态以获取内存标记。
TIKTAG-v2
TIKTAG-v2 主要关注处理器时序推测中的存储到加载转发。
第一步是将值存储到内存地址,并同时从同一地址加载。该值被传递到下一个标签,成功加载并改变共享缓存状态。
另一方面,不匹配会阻止转发,缓存状态保持不变。如果攻击者在投机执行后检查缓存状态,就能推断出标签检查结果。
事实证明,TIKTAG-v2 对目标漏洞进程(谷歌 Chrome 浏览器)是有效的,重点针对 V8 JavaScript 引擎在内的部分。
回应
Arm 公司在公告中表示 TIKTAG 攻击非常强大,然后指出,使用推测方法在体系结构层面披露分配标记仍然是安全的。他们在公告中强调,分配标记在地址空间中并不隐蔽。
ARM 在公告中写道:由于 Allocation Tags 对地址空间中的软件来说并不是秘密,因此揭示正确标签值的投机机制并不被视为对架构原则的破坏。
谷歌 Chrome 浏览器的安全团队指出了这些问题,但选择不修复它们,并指出 V8 沙盒不会对内存数据和 MTE 标记保密。此外,到目前为止,Chrome 浏览器还没有启用基于 MTE 的防御功能,因此修复这些漏洞并不迫切。