导语:近期,研究人员发现一个推测执行攻击的新应用,可以绕过基于硬件的内存保护措施。
2017年底,Google和其他安全研究人员发现了影响现代处理器架构推测执行的漏洞。本地无权限的攻击者利用无序执行CPU的微架构的能力来泄漏受保护的内存中的内容。研究人员扩展了该方法来访问高权限的系统管理模式(System Management Mode,SMM)内存。
影响
因为SMM有访问包括与操作系统隔离的物理内存的权限,本研究说明了基于Spectre的攻击可以泄漏内存中的隐私信息。Spectre和Meltdown漏洞会影响操作系统、系统管理程序和受保护的SGX enclaves的应用。但漏洞对固件的影响之前没有经过证明。而每个系统中都有许多种固件,所以研究人员对主机处理器固件进行了研究。当系统启动时,处理器就会执行主系统固件,即BIOS或UEFI。固件大多只在启动时运行,但在特殊的x86模式下会与操作系统并行,即SMM。因为这段代码的权限非常高,也在操作系统和其他安全应用之外运行,所以这成了安全研究员和高级攻击者的目标。
Intel CPU使用一种内存保护机制来保护SMM内存这样的内存区域的敏感信息。Intel CPU的SMM内存是由SMMR(System Management Range Register)来保护的。本文描述了一种推测执行攻击的变种,可以从基于硬件的Range Register保护机制下窃取内存的内容。POC利用证明了使用Spectre变种来绕过SMM内存的SMRR保护机制。
这些增强的Spectre攻击允许在没有权限的情况下去读取内存的内容,包括应该有range registers保护的内存。这会泄漏SMM的代码和SMM中存储的机密信息。另外,研究人员证明了在SMM上下文环境中进行推内存访问可以用来泄漏内存中的机密信息。
SMM中的边界检查绕过
概览
本文重点描述两个Spectre的变种:
· Bounds Check Bypass, a.k.a. Spectre variant 1 (CVE-2017-5753)
· Branch Target Injection, a.k.a. Spectre variant 2 (CVE-2017-5715)
没有权限的攻击者可以利用Spectre变种1 (CVE-2017-5753)来利用特权代码,这可以在没有任何软件漏洞的情况下去检查位于特权内存中的缓存大小。正常来说,正常地进行边界检查可以防止攻击者访问特权缓存的内容。但如果指令位于间接条件分支指令后的预测指令中,那么利用Spectre变种1就可以执行边界访问的指令。非直接分支目标地址从内存中解析之后,当CPU撤销推测执行out of bound access指令造成的变化时,攻击者就可以从CPU缓存中恢复数据。
实验
PoC代码地址:
https://gist.github.com/jedisct1/3bbb6e50b768968c30629bf734ea49c6
首先,将PoC代码注入内核驱动中,然后确认out-of-bound访问的推测执行是在内核权限级去执行的。然后可以在内核权限级对受保护的内存上进行实验。内核级的PoC利用提供了对不同硬件接口的访问,让攻击者可以更好地控制系统硬件,并且可以访问物理内存、IO、PCI、MMIO接口等不同的物理接口。
然后,将PoC利用融入到CHIPSEC来扩展测试。在实验中,研究人员尝试去读取受保护的SMRAM内存。研究人员将SMRAM的物理地址映射到虚拟地址空间中,然后将SMRAM地址作为利用的目标地址。
示例输出:
在上面的例子中,SMRAM的内容没有被攻击者读取。
之后,研究人员增强了攻击场景。尝试通过MTRR来缓存SMRAM,并将MSR_IA32_MTRR_DEF_TYPE设定为Write-Back。但仍不能访问SMRAM,说明了SMRR的优先级要比MTRR高。这也说明了Spectre1与其他内存事务的工作原理不同:
· Spectre1作用于不可缓存的内存;
· Spectre1不可作用MIMO,因为MIMO访问比内存访问要慢很多;
· 于不可缓存的内存;
· 从内核模式到运行在内核模式下的推测执行流,Spectre1不可作用于SMRAM。因为SMRR保护可以防止推测内存的访问。
将Spectre Variant 1应用到SMM
研究人员对攻击场景进行了修改,并开发了利用Bound check bypass漏洞利用,并绕过SMRR保护机制从SMRAM中读取任意内容的PoC。
攻击场景修改背后的理论如下:
操作系统级的漏洞利用会激活SMI,这会让CPU向SMM过渡,并执行SMI handler固件。
SMI handler可以访问位于SMRAM的数组中的元素。
在访问前,SMI handler会验证要访问元素索引与数据的长度,因为索引是不可信的,而且是由低权限模式提供的。
检查会翻译为CPU执行的一个条件分支。CPU开始解析非直接路径的目标地址。
当CPU在等待解析的分支目标时,会使用分支预测机制来预测目标地址。
推测执行的SMM指令可能会加载使用非可信索引值的数组的边界外的元素的值。这会指向攻击者想要暴露的SMRAM中的位置。
然后数据会从内存中加载,并由CPU在SMRAM外的数据缓存中缓存,这是根据SMRAM值来确定的。
系统级的漏洞利用可以测量使用不同的缓存定时测信道技术来访问不同的非SMRAM位置的访问时间。
访问基于秘密SMRAM值加载数据缓存中的缓存行的时间是很小的。这会导致存储在SMRAM中的秘密值的信息泄漏。
缓解措施
研究人员自3月起与intel进行合作。缓解Spectre变种1的软件也可以应用于SMM。Intel发布的分析推荐使用LEFNCE指令来缓解Spectre变种1。这同样适用于系统厂商和独立BIOS厂商开发的固件。更新系统和应用的方式来缓解攻击时一种非常直接的方式,重新设计和更新固件的方式会明显增加复杂性。因为更新需要去厂商官方下载并手动安装更新,因此许多企业都不会(及时)应用最新的固件更新。硬件厂商引入了一些缓解的措施来应对其他类型的Spectre攻击,比如Intel引入了Indirect Branch Restricted Speculation (IBRS)来缓解Spectre 2变种攻击。根据intel发布的Speculative Execution Side Channel Mitigations文档,在支持IBRS的处理器中,在系统管理中断(SMI)之前执行的软件不能控制SMI之后在SMM中执行的间接分支的预测目标。
另一个缓解的策是让固件限制SMM对内存的访问。大多数固件都会将物理内存与SMM用的页面进行映射。但最新版的Tianocore使用了A Tour Beyond BIOS中描述的技术——UEFI BIOS中的内存保护机制来映射内存中的必要部分。这会大大减少带来的影响。但大多数系统是基于旧版本的Tianocore。固件开发者应该考虑使用该特征来保护用户免受此类SMM漏洞。
结论
研究表明Spectre变种1推测执行边信道攻击可用于跨range register保护边界,并泄漏由range register保护的数据。在攻击示例中,研究人员验证了对x86 SMM系统管理模式的攻击,并从CPU硬件保护的SMR中窃取了数据。这扩大了spectre漏洞带来的影响。除了从受害者进程中窃取数据外,研究人员还发现攻击者可以利用对物理内存的SMM访问来从其他的进程、hypervisor和固件中窃取数据。Intel回应说现有的修复指南对此漏洞是有效的。