目录
[一、ATF(TF-A)安全通告 TFV-6 (CVE-2017-5753, CVE-2017-5715, CVE-2017-5754)](#一、ATF(TF-A)安全通告 TFV-6 (CVE-2017-5753, CVE-2017-5715, CVE-2017-5754))
[二、Variant 1 (CVE-2017-5753)](#二、Variant 1 (CVE-2017-5753))
[三、Variant 2 (CVE-2017-5715)](#三、Variant 2 (CVE-2017-5715))
[四、Variant 3 (CVE-2017-5754)](#四、Variant 3 (CVE-2017-5754))
一、ATF(TF-A)安全通告 TFV-6 (CVE-2017-5753, CVE-2017-5715, CVE-2017-5754)
|-------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Title | TF-A披露基于cache时间侧信道的前瞻执行处理器漏洞 |
| CVE ID | CVE-2017-5753 / CVE-2017-5715 / CVE-2017-5754 |
| Date | 03 Jan 2018 (Updated 11 Jan, 18 Jan, 26 Jan, 30 Jan and 07 June 2018) |
| Versions Affected | All, up to and including v1.4 |
| Configurations Affected | All |
| Impact | 泄露安全世界的数据到非安全世界 |
| Fix Version | Pull Request #1214, Pull Request #1228, Pull Request #1240 and Pull Request #1405 |
| Credit | Google / Arm |
本安全通告描述了当前对TF-A披露的前瞻执行处理器漏洞的理解,该漏洞是由Google Project Zero团队发现的。要了解Arm系统上这些漏洞的背景和更广泛的影响,请参阅Arm处理器安全更新(Arm Processor Security Update)。
二、Variant 1 ( CVE-2017-5753 )
在撰写本文时,TF-A代码中没有发现任何易受攻击的模式,因此没有任何修复方法被应用或计划应用。
三、Variant 2 ( CVE-2017-5715 )
在易受攻击的cpu上,Arm建议在进入安全世界执行任何分支指令之前,尽早使分支预测器失效。有许多实现定义的方法可以达到这一点。
对于Cortex-A57和Cortex-A72 cpu,这个通告中的Pull Requests (PRs)通过在进入EL3时禁用和重新启用MMU,使分支预测器失效。
对于Cortex-A73和Cortex-A75 cpu,PRs通过在进入EL3时,暂时陷入AArch32 Secure-EL1并执行BPIALL指令使分支预测器失效。这个解决方案比"MMU禁用/启用"的解决方案复杂得多。"MMU禁用/启用"不能有效地使Cortex-A73/Cortex-A75的分支预测器失效。
请注意,如果其他特权软件,例如富操作系统内核,在上下文切换过程中通过发送一个SMC(执行固件分支预测失效)来实现自己的分支预测失效。那么,为了使这些解决方案起作用,就需要依赖于该建议中的PRs。如果其他特权软件能够在本地解决漏洞(例如通过自身实现"MMU禁用/启用"),则不存在这样的依赖。
Pull Request #1240 Pull Request #1240和Pull Request #1405通过实现指定的CVE-2017-5715 SMC调用 (SMCCC_ARCH_WORKAROUND_1)来优化早期的修复,该SMC调用以供非安全世界特权软件使用。这比调用其他任意SMC(例如PSCI_VERSION)更有效。SMCCC_ARCH_WORKAROUND_1的详细信息可以在CVE-2017-5715缓解规范(CVE-2017-5715 mitigation specification)中找到。规范和实现还使非安全世界能够发现这个固件服务的存在。
在Juno R1上,使用上文描述的"MMU禁用/启用"和"在AArch32 Secure-EL1执行BPIALL"解决方案,我们测量了Cortex-A57上的PSCI_VERSION和SMCCC_ARCH_WORKAROUND_1 SMCs的时间延迟。这包括花费在符合AArch64的SMC调用约定(SMCCC)的测试代码上的时间。对于SMCCC_ARCH_WORKAROUND_1,测试代码使用了SMCCC v1.1,这减少了保存/恢复所需的通用寄存器的数量。虽然BPIALL指令在Cortex-A57上不能有效地使分支预测器失效,但是在禁用MMU的情况下进入Secure-EL1,这种解决方法确实有效地使分支预测器失效。因此,这是一个合理的比较。
实际比较结果如下:
|-------------------------------------------------------------|-------------------|
| Test | Time (ns) |
| PSCI_VERSION baseline (without PRs in this advisory) | 515 |
| PSCI_VERSION baseline (with PRs in this advisory) | 527 |
| PSCI_VERSION with "MMU disable/enable" | 930 |
| SMCCC_ARCH_WORKAROUND_1 with "MMU disable/enable" | 386 |
| PSCI_VERSION with "BPIALL at AArch32 Secure-EL1" | 1276 |
| SMCCC_ARCH_WORKAROUND_1 with "BPIALL at AArch32 Secure-EL1" | 770 |
由于这个问题的高度严重性和广泛的适用性,尽管有一些性能和代码大小的开销,上述解决方案在默认情况下是启用的(仅在易受影响的cpu上)。如果平台不需要它们,可以选择在编译时禁用它们。Pull Request #1240对未受影响的平台禁用该解决方案。
怎么禁用呢?
对于易受影响的AArch32-only cpu(例如Cortex-A8, Cortex-A9和Cortex-A17),应该在进入安全世界时尽早使用BPIALL指令。对于Cortex-A8,在早期处理器初始化时也需要将ACTLR[6]设置为1。请注意,BPIALL指令在使Cortex-A15上的分支预测器失效方面并不有效。对于该CPU,在早期处理器初始化期间将ACTLR[0]设置为1,并通过执行一个ICIALLU指令使分支预测器失效。
在AArch32 EL3系统上,monitor和secure-SVC代码通常是紧密集成的,例如作为可信操作系统的一部分。因此,任何Variant 2的解决方案应由该软件供应商提供,且不在TF-A的范围之内。然而,Pull Request #1228中提供了极小的AArch32 Secure Payload (SP_MIN)的实现样例。
其他Arm cpu不容易受到这种或其他变体的攻击。这包括Cortex- A76,Cortex- A53,Cortex- A55,Cortex- A32,Cortex- A7和Cortex- A5。
有关非ARM架构CPU的更多信息,请联系CPU供应商。
四、Variant 3 ( CVE-2017-5754 )
这个变体只能在相同的translation regime的异常级别之间利用,例如在EL0和EL1之间。因此,这种变体不能用于从非安全世界访问安全内存,也不适用于TF-A。然而,Secure Payloads(例如,Trusted OS)应该为易受攻击的cpu提供缓解措施,以保护它们自己不受Secure-EL0应用程序的攻击。
唯一易受此变体影响的Arm CPU是Cortex-A75。
参考: