(论文解读)Prime+Reset_ Introducing A Novel Cross-World Covert-Channel Through Comprehensive Security Analysis on ARM TrustZone
一、基础介绍
ARM TrustZone 是一种强大的安全机制,旨在通过将片上系统硬件和软件划分为两个不同的世界(即正常世界和安全世界)来防范各种威胁。然而,安全世界仍然容易受到恶意攻击,包括侧信道和隐蔽信道漏洞。
本文的主要工作是逆向了 L2 预取器并设计了一种新的跨内核和跨界的隐蔽信道攻击方法,成为 Prime+Reset。该跨界攻击与 其他的隐蔽信道攻击相比,Prime+Reset 是一种与缓存 PMU 无关的攻击,能够有效绕过许多现有的防御措施。
Prime+Reset的吞吐量可达到776 Kib/s,比最先进的技术显著提高了70倍,同时还保持了类似的错误率(< 2%)。
Source Code:https://github.com/yunchen-juuuump/prime-reset
PMU指的是性能监控单元(Performance Monitoring Unit)。PMU是现代处理器中的一个硬件组件,用于监控和记录与处理器性能相关的微架构事件,例如缓存命中/失效、指令执行周期、分支预测错误、内存访问延迟等。这些数据通常用于性能分析和优化,但也可被恶意利用,例如通过侧信道攻击或隐蔽信道攻击来推断敏感信息。
二、安全分析套件
作者团队设计了一个自动识别潜在的硬件侧信道漏洞,从现有的侧信道和隐蔽信道攻击中汲取灵感。侧信道/隐蔽信道攻击有两个基本标准:
- 此类攻击需要并使用跨不同执行域的共享硬件资源来制造资源争用和检测变化(如高速缓存、BPU、发行单元和 TLB)
- 任何能够改变正常执行流程的微体系结构事件都会引入新的泄漏(如超序执行和预处理器)
本文设计的安全分析套件通过检测是否存在硬件组件充当共享资源或在时空上改变执行流来评定是否存在相关问题。
若存在相关问题在进一步深入分析,包括逆向工程和执行特征等等。
2.1 实验环境
- 商用 ARM 硬件平台 HiKey960(采用麒麟 960 SoC [2])

2.2 安全基准套件分析
作者通过使用基准套件分析拓展控制寄存器(ECTLR),该寄存器同时管理内核和非内核系统。
通过作者的分析和 ARM CortexA 验证,我们发现 ARMv8 CortexA 乱序处理器系列中存在默认启用的 L2 步进预取器。鉴于 L2 预取器位于非核心内存系统中,而且以前的工作中没有对其进行详细记录,我们将其确定为新的潜在泄漏源,并通过逆向工程进行了深入分析。
三、逆向分析 L2 预取器
本章节探究 L2 stride 预取器的特征,首次解释索引、更新和触发机制。给予这些新发现的信息,进一步探索跨内核预取效果,并确定预取器的入口数量,从而构建跨内核和跨界的隐蔽信道攻击。
3.1 L2 步进预取器触发
作者为了准确确定触发预取的阈值,设计了一个微基准测试方法,具体实现如下图所示;

上述程序好像写错了一点,Time(men[step * stride]) ==> Time(men[probe + step * stride])
通过上述的微基准测试方法,作者测试跨距离 stride=5 时的预取触发阈值,通过测试经过多少次跨步访问(跨步训练)后才会发生跨步预取,实验结果如下图所示;

3.2 跨距更新策略
作者通过在训练好的预取器后,使用训练好的内存函数访问mem[offset],然后对访问 mem[offset + stride]进行计时,具体实现如下;

测试结果表明,只有当偏移量-最后访问地址=stride 时,mem[offset + stride]才会被预取。这一观察结果表明,预取器在启动预取之前会持续更新 stride。
3.3 索引
为了测试程序计数器在索引中的作用,我们修改了清单 2 中的第 2 行,增加了一条新的内存指令,该指令与经过训练的程序计数器的最后 N 位相匹配。然而,即使 N = 0,预取器仍然被触发,这表明 PC 并不决定预取器的索引。此外,我们还观察到不同的 PC 在同一页面上更新跨距,这证实了跨步预取器依赖于页面地址索引。
3.4 条目
为了确定预取条目的总数,我们在 N 个不同页面上训练预取器,并评估第一个页面是否仍可触发。如下图所示,很明显,只要引入再 10 个预设条目,第一个条目就会被驱逐。考虑到这一观察结果,可以得出结论:预取器有 10 个条目。

3.5 L2 跨步预取器与其他核心相互作用
作者研究了 L2 跨步预取器与不同内核之间的交互。
在研究中,我们设置了两个进程,分别名为 A 和 B,运行在不同的内核上。这两个进程的执行顺序如图 4 所示。起初,A 在正常世界中运行,为一个预取器条目计时,随后引入延迟。与此同时,B 在安全世界中运行,为 L2 预取器中的 10 个条目计时。A 最终通过检查预取器状态来评估 B 是否驱逐了经过训练的条目。然而,即使我们将 B 中的引物条目增加到 20 个,并在正常世界中运行,也没有观察到驱逐现象。这说明 L2 预取器是在不同内核之间静态划分的,每个内核有 10 个条目。

作者发现了一个可能导致泄漏的关键特征:当同一集群中的任何内核产生 SIGSEGV 信号时,L2 预置器状态会重置,通常是由于访问未分配内存或调用 raise() 函数手动触发等操作。我们排除了其他触发信号。重要的是,由此产生的 SIGSEGV 不会清除缓存数据;它只会影响预取器状态。
表 III 总结了我们的发现,揭示了只有当同一集群中的另一个内核产生 SIGSEGV 时,该内核在 L2 预取器状态中的条目才会受到后者的影响。我们假设这种重置是 ARMv8 的硬件特性,与操作系统启动的特权指令无关。鉴于缓存数据不受影响,而且这些进程不共享内存,我们假设该功能可能与内存一致性有关,用于维护内存数据的正确性,但与缓存一致性无关。

四、跨内核、跨界隐蔽信道攻击
基于对 L2 预取器的逆向工程研究成果,本节将介绍一种跨内核和跨世界隐蔽信道攻击的开发,称为 Prime+Reset。Prime+Reset 是在安全世界和正常世界之间传输数据的一种手段。
Prime+Reset 独立于缓存系统或 PMU 运行,这意味着它可以绕过各种现有的缓解技术;
4.1 威胁模型
发送方在安全世界或正常世界中运行,打算将数据传输给同一集群中不同世界的接收方,但接收方使用的是不同的内核。它们不共享内存,也不直接通信。
为了同步发送方和接收方的活动,作者使用新的内核驱动程序实现高分辨率定时器,且在先前的研究中探索了使用用户空间实现定时器,而且无需操作系统权限,因此解除了对操作系统系统级权限的要求。
4.2 Prime+Reset 攻击流
攻击流程如下图所示;接收器为 L2 预取器条目计时,并等待设定的周期数。当发送方想要发送 “1 ”时,它会产生一个 SIGSEGV 信号(清除接收方预取器状态);否则,它会保持空闲。
作者添加了一个信号处理程序,防止程序终止,从而允许进程在信号发出后继续运行,以获得更好的吞吐量。
为了在准确性和吞吐量之间取得平衡,我们发现 500 个周期的延迟是最佳的。延迟结束后,接收方检查预取器状态,以确定发送方发送的是 “1 ”还是 “0”(预取器条目存在则表示发送比特“0”,预取器条目不存在则表示发送比特“1”)。

4.3 攻击场景和结果
在跨界隐蔽信道通信中,数据通常从安全世界传输到正常世界。因为敏感数据主要存在于安全世界。我们还探讨了通信从正常世界流向安全世界的情况,例如当安全世界的接收者等待正常世界发送者的命令时。
图 6、图 7 和图 8 利用传输信息 0x89abcdef 展示了这些场景的结果。



表 4 提供了 Prime+Reset 的吞吐量和错误率概览,并与之前的跨世界交换机进行了比较。值得注意的是,由于采用了统一的同步机制,Prime+Reset 在不同场景下保持了一致的吞吐量。与最先进的技术[18]相比,它的吞吐量提高了 70 倍,同时保持了相似的准确性。

吞吐量大幅提高的主要原因是 Prime+Reset 中使用的 L2 预取器的鲁棒性。以前的工作依赖于从 PMU 收集各种事件,并有可能收集多核系统二级缓存中的噪声,而 Prime+Reset 则不同,它不需要复杂的同步方法。相反,它使用了抗噪声能力更强的二级缓存预取器,从而提高了性能。
五、缓解策略
要减轻 Prime+Reset 的影响,一种方法是禁用 L2 预置器,虽然这可能会影响性能,但能有效消除攻击。