导语:Ohio州立大学的研究人员近日发现了spectre攻击的新变种——SgxSpectre。SgxSpectre攻击可以从Intel SGX enclaves中提取信息。
Intel Software Guard eXtensions (SGX) 是现代Intel处理器的一个特征,允许应用创建enclave。SGX通过从可信计算基(Trusted computing base)中移除特权代码来增强应用的安全性。Enclave是CPU的处理内存中硬件隔离的一个区域,应用可以在此允许处理极度机密的细节,比如加密密钥、密码、用户数据等。
年初的Meltdown和Spectre攻击打破了操作系统和应用之间的隔离,以及应用程序之间的隔离,允许攻击者从OS kernel或其他应用中提取信息。
SgxSpectre攻击示例
下图是SgxSpectre攻击的一个简单示例,灰色区块表示enclave之外的代码和数据,白色区块表示enclave代码和数据。
enclave注入分支目标
污染BTB(branch target buffer)
为了注入分支目标来暂时改变enclave代码的控制流,攻击者需要在目标enclave外运行BTB污染代码。污染的方式有两种:
· 从相同进程注入。攻击者可以用enclave外但是相同进程内的代码污染BTB。因为BTB使用源地址的低32位作为BTB标签和标记,因此攻击者可以逆向4G内存的缓存,运行一个简洁的jump指令,其中源地址应该与目标enclave的低32位地址的分支指令一致,目标地址应该与目标enclave的低32位地址的secret-leaking指令一致。
· 从不同进程注入。攻击者可以从不同的进程注入分支目标。虽然这种攻击方法需要在BTB污染代码和目标enclave程序之间变化上下文环境,但是这种方法的优势在于攻击者可以把BTB代码封装他所控制的其他enclave中。这样就可以隐藏目标enclave程序的分支指令了。
控制enclave中的寄存器
因为所有的寄存器在ERESUME后都会被硬件还原,所以在AEX后当控制权返回到enclave时,攻击者就不能再控制enclave内的任何寄存器了。但是攻击者在enclave进入EENTER后还有机会控制一些寄存器。攻击者可以使用Ecall和0Ret来控制enclave中的寄存器。
通过侧信道泄露机密信息
SGXPectr攻击成功的关键在于推测执行指令会触发缓存,但是当错误发布的指令被处理器丢弃后,却没有适当的撤回(退回)机制。因此CPU缓存的推测执行的副作用就会从enclave中泄露信息。
因为enclave代码可以直接访问enclave外的数据,所以SGXPectre攻击可以推测地执行enclave内的内存引用来访问enclave外的内存位置,如图1所示。攻击者可以在攻击前复制一段内存阵列,然后reload每个记录并度量reload的时间来确定每个记录在推测执行的过程中有没有被enclave代码访问。
除了上面描述的缓存侧信道攻击外,理论上BTB侧信道、TLB侧信道攻击、DRAM缓存侧信道攻击都可以对窃取enclave内的信息。
赢取竞争条件
SGXSpectre攻击的核心是分支指令执行和推测指令执行的竞争,只有当分支指令晚于secret-leaking代码推测执行时,数据泄露才会发生。下图是SGXSpectre攻击中赢取竞争条件的场景。分支指令可以访问D1,secret-leaking代码的推测执行有指令提取I1和数据访问D2和D3。为了赢取竞争条件,攻击者要确保对I1,D2,D3的访问足够快。因为I1和D2是enclave中的,enclave中的TLB和页结构已经复制在AEX或EEXIT中了,攻击者最好的情况是从缓存中执行相应的地址转化。
SGX SDK中的SgxSpectre攻击代码模式分析
Meltdown和Spectre攻击都不能从SGX enclave中提取数据。因为软件库中的特定代码模式允许开发者在APP中增加SGX支持,这也就是SgxSpectre的工作原理。有漏洞的SGX开发套件包括Intel SGX, Rust-SGX和Graphene-SGX。
攻击者利用了SDK引入SGX enclaves的重复代码执行模式,这些模式可以监视缓存大小的微小变化。这是一种经典且非常有效的侧信道攻击。
官方回应
Intel发布的Spectre补丁的帮助不大,因为攻击者可以根据围绕补丁进行攻击。Intel官方消息说,含有SgxSpectre解决方案的Intel SGX SDK会在3月16日发布。开发者需要将新的SDK版本融合到SGX应用中,并向用户发布更新的版本。
总结
SgxPectre攻击可以完全打破SGX enclave的机密性,因为有漏洞的代码模式很难清除,攻击者可以在任意的enclave程序上执行SgxPectre攻击。因为有漏洞的代码模式存在于SDK运行时库中,因此任意所有用Intel官方SGX SDK开发的代码都会受到该攻击的影响,并且与enclave持续的实施方式无关。
参考及来源:
http://web.cse.ohio-state.edu/~zhang.834/papers/SgxPectre.pdf