高通 TEE 可信执行环境(QSEE)漏洞的利用分析
2021-06-26 11:20:00 Author: www.4hou.com(查看原文) 阅读量:98 收藏

研究人员在基于 Qualcomm IPQ40xx 的设备上的 QSEE、Qualcomm 可信执行环境 (TEE) 中发现了多个关键软件漏洞(请参阅帖子 #1 和帖子 #2 )。研究人员利用这些漏洞来禁用 QSEE 执行的安全范围检查,以便以最高权限执行任意代码(参见帖子 #4 )。由于这些漏洞是软件漏洞,在研究人员负责任地披露后,高通很容易修复。

在本文研究人员决定分析 Qualcomm IPQ40xx 系列芯片对电磁故障注入 (EMFI) 的恢复能力,研究人员使用了 Linksys EA8300 WiFi 路由器(见帖子 #2 )。

研究人员完全意识到 FI 攻击通常超出了 TEE 威胁模型的范围。实际上,ARM 在他们的文档中非常清楚地说明了这一点。但是,TEE 也用于将 FI 攻击视为合理威胁的设备。因此,即使 FI 攻击超出了 ARM 的 TEE 范围,它们也可能不适用于特定设备。此类设备上的 TEE 可用于保护攻击者感兴趣的资产,使其成为非常有趣的攻击面。每当底层平台(即硬件)容易受到 FI 攻击时,TEE 的安全性就会受到威胁。

起初,你可能认为 ARM TrustZone 硬件原语(例如 NS 位、TrustZone 控制器等)是 FI 攻击最有趣的目标。但是,研究人员决定以执行 QSEE 软件的处理器为目标,以证明其他方法也非常有效。

可信执行环境(TEE)是Global Platform(GP)提出的概念。针对移动设备的开放环境,安全问题也越来越受到关注,不仅仅是终端用户,还包括服务提供者,移动运营商,以及芯片厂商。TEE是与设备上的Rich OS(通常是Android等)并存的运行环境,并且给Rich OS提供安全服务。它具有其自身的执行空间,比Rich OS的安全级别更高,但是比起安全元素(SE,通常是智能卡)的安全性要低一些。但是TEE能够满足大多数应用的安全需求。从成本上看,TEE提供了安全和成本的平衡。

TEE的位置,TEE是运行在设备中的,提供介于普通RichOS和SE(智能卡)之间的安全性的框架。当前的很多安全架构还是基于Rich OS + SE的方式,其实这在方便程度和成本上都不能提供“刚刚好”的契合。因为某些小额的支付,DRM,企业VPN等,所需要的安全保护强度并不高,还不需要一个单独的SE来保护,但是又不能直接放在Rich OS中,因为后者的开放性使其很容易被攻击。所以对于这类应用,TEE则提供了合适的保护强度,并且平衡了成本和易开发性。

EMFI

研究人员使用 Riscure 的 EMFI 工具在芯片中注入 EM 故障。该工具通过线圈驱动高压以产生EMFI。这允许研究人员由于芯片电路内的涡流而在晶体管级引入故障。 EMFI 的概念如下图所示。

1.png

研究人员的设置图如下所示。他们使用了 Riscure Spider、Riscure EMFI Probe 和 Riscure XYZ 平台。此外,研究人员使用固态继电器来控制目标的外部电源。他们使用 Riscure 的 Inspector FI Python 框架控制所有硬件,以便完全自动地控制攻击参数(即位置、时间和glitch power)。

2.png

研究人员通过将 EMFI直接放置在芯片表面上来执行 EMFI 攻击。为了做到这一点,研究人员打开了目标并移除了芯片的散热片,他们没有进行其他物理(侵入性)修改。芯片的实际图片如下所示。

3.png

研究人员经常被问到是否真的需要研究人员由 Riscure 制造的实验室级工具来执行研究人员的攻击。他们相信绝对有可能使用更容易获得的工具(如 NewAE 的 ChipShouter)或构建你自己的工具来执行相同类型的攻击。但是,研究人员使用的工具可以更轻松地识别和重现攻击。尽管如此,如果你正在使用其他工具重现研究人员的研究,研究人员很乐意你联系他。

只要有可能,研究人员都喜欢从 FI 功能测试开始,以确定目标是否易受攻击。研究人员实现了描述代码,如下所示,作为一个U-Boot独立应用程序。这个功能测试的目标是在半控制的环境中确定良好的故障参数(例如位置和功率)。通过重复目标指令(即添加指令),研究人员增加了成功的机会。

4.png

研究人员使用目标的 GPIO 引脚作为触发器来计时功能测试。这允许他们在执行添加指令时准确地注入故障。如果打印在串行接口上的结果计数器值与预期不同,研究人员便成功地修改了软件的预期行为。

在芯片表面进行了大约 20000 次实验后,研究人员观察到了不同的输出,其中一些如下所示。最有趣的当然是返回修改后的计数器值的实验,这表明目标易受攻击。

5.png

研究人员根据实验的分类绘制实验图,以确定 EMFI的最佳位置,如下所示。有趣的是,研究人员观察到所有成功的实验都发生在芯片表面的特定区域。

6.png

尽管研究人员确定目标容易受到 EMFI 的影响,但研究人员还不知道研究人员是否真的可以改变 QSEE 软件本身,因为到目前为止研究人员只针对 U-Boot 代码。然而,由于 U-Boot 和 QSEE 都由同一个处理器执行,只是使用不同的 NS 位,研究人员相信研究人员确定的易受攻击的位置也会在 QSEE 软件中产生故障。因此,研究人员将探头放在研究人员观察到成功故障的位置之一。这允许研究人员在不移动探头的情况下定位 QSEE 软件,有效地从故障参数搜索空间中删除空间参数。

禁用安全范围

如前所述,研究人员决定以 QSEE 软件为目标,而不是底层的 ARM TrustZone 硬件原语(例如 NS-bit、TZASC)。

研究人员从之前进行的QSEE软件分析中了解到,各种安全措施完全是由软件实现的。例如,这包括由SMC处理程序例程对从富执行环境(REE)收到的参数执行的安全范围检查。

研究人员决定以不包含任何软件漏洞的SMC处理程序为目标,确定的候选对象之一是tzbsp_fver_get_version,其反编译如下所示。

7.png

is_ree_range函数检查a2和a2 +3是否指向非安全内存。这个参数是从REE传递过来的,研究人员假设这个参数在攻击者的控制之下。简单地说,这个函数验证从 REE 提供的缓冲区是否与安全内存重叠。如果是,tzbsp_fver_get_version 将立即返回 0xFFFFFFEE。

使用 EM 故障,研究人员的目标是绕过 is_ree_range 函数强制执行的限制。这允许研究人员执行 tzbsp_fver_get_version 的其余部分,以便将 NULL 写入任意地址(包括安全内存)。

研究人员使用 U-Boot 独立应用程序与来自 REE 的 tzbsp_fver_get_version 进行通信,如下所示。

8.png

研究人员使用 GPIO 信号作为触发器来精确计时 tzbsp_fver_get_version 确切执行的时间。 EM 故障恰好在触发器设置为高电平和设置低电平之间注入,大约需要 5.875 微秒(见下图)。

9.png

在上面的代码示例中,通过向0x87EAB204写入NULL,研究人员禁用了安全范围表中定义的一个安全范围。关于它是如何工作的更多细节将在第4篇文章中详细解释。这篇文章足以证明只要认识到成功的攻击将禁用每个SMC处理程序例程的安全范围检查所执行的限制就足够了。

研究人员使用相同的目标地址第二次执行tzbsp_fver_get_version,没有注入任何故障,以便验证攻击是否成功。如果安全范围被成功禁用,is_ree_range将认为从a2中的REE传播的任何地址都是有效的,包括安全内存地址。对安全内存地址的写入也将成功完成。

此外,在代码的最后一行,研究人员从 REE 中取消引用安全范围标志字段。这样做是为了验证恶意 TEE 写入是否确实发生。应该注意的是,由于目标的错误配置,研究人员能够从 REE 中读取安全内存。

通常情况下这是不可能的,或者根本不会发生,否则,QSEE 处理的任何秘密都会暴露给 REE。在研究人员的设置中,研究人员只使用这个错误配置来再次验证实验是否成功。

研究人员期望至少有以下类型的结果:预期的、成功的、处理器异常和复位/静音实验。下表显示了研究人员期望为每个结果接收的串行接口输出。

10.png

研究人员进行了大约 30万次实验,在整个攻击窗口内注入了 EM 故障。研究人员给每个实验一个介于 10% 和 100% 之间的随机功效。 EMFI本身固定在研究人员之前确定的芯片表面上的一个易受攻击的位置。整个活动持续了大约 12 个小时。研究人员绘制了如下图所示的所有实验。

11.png

研究人员将整个过程总结如下:

在区域1中,研究人员观察到许多处理器异常。当U-Boot代码被执行时,提示故障被注入。换句话说,研究人员过早地注入了故障。

在区域2中,研究人员观察到许多成功的实验。这表明现在正是研究人员要注入故障的时候。而且,这证明了tzbsp_fver_get_version就是在此时执行的。

在区域3中,研究人员观察到许多处理器异常。当U-Boot代码被执行时,提示故障被注入。换句话说,研究人员注入故障太晚了。

成功率相当低,研究人员观察到预期反应的大多数实验都是不成功的。尽管如此,研究人员观察到一个0.05%的成功率,在研究人员的测试速度下,这意味着大约每5分钟就有一个成功的实验。

但是,如果研究人员将故障参数(即故障延迟和glitch power)设置为成功实验的参数,则会观察到 5% 的成功率,即大约每20秒就有一次成功实验,这表明绕过范围检查的再现性非常高。这足以证明,研究人员能够通过使用 EM 故障绕过任何配置的范围检查。

如何实现代码执行

研究人员能够在禁用安全范围后实现代码执行,详细过程请点此(https://raelize.com/blog/qualcomm-ipq40xx-achieving-qsee-code-execution/)。

总结

研究人员证明了 Qualcomm IPQ40xx 系列芯片容易受到 EMFI 的影响,他们利用此漏洞绕过 QSEE 执行的安全范围检查,这允许研究人员将受限制的值写入任意地址(包括安全内存)。

攻击可以使用研究人员的FIRM进行描述,如下图所示。一旦找到最佳的故障参数,攻击可以每20秒重复一次,这是一个非常高的成功率。

12.png

研究人员的目标是执行QSEE软件的处理器,而不是ARM TrustZone硬件原语。这意味着加固这些硬件原语不足以保护设备免受FI攻击,研究人员认为强化处理器本身才是根本。

软件漏洞的影响通常比需要物理访问的(硬件)攻击大得多。例如,大规模利用FI攻击是不可能的。尽管如此,研究人员要强调的是,这些类型的攻击不应被视为无害的威胁。例如,它们经常被用来获得对安全代码或数据的访问,以便更容易地利用软件漏洞。

本文翻译自:https://raelize.com/blog/qualcomm-ipq40xx-breaking-into-qsee-using-fault-injection/如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/m8xO
如有侵权请联系:admin#unsafe.sh