攻击 Intel SGX 以提取敏感数据或在 enclave 中执行代码

来自中国人民解放军国防科技大学、新加坡国立大学和苏黎世联邦理工学院的研究人员开发了一种攻击孤立飞地的新方法英特尔SGX(Software Guard eXtensions)。 该攻击称为 SmashEx,是由英特尔 SGX 运行时组件运行期间处理异常情况时的重入问题引起的。 如果您可以控制操作系统,则所提出的攻击方法可以确定位于 enclave 中的机密数据,或者组织将代码复制到 enclave 内存中及其执行。

已为运行时基于 Intel SGX SDK (CVE-2021-0186) 和 Microsoft Open Enclave (CVE-2021-33767) 的 enclave 准备了漏洞利用原型。 在第一种情况下,演示了提取 HTTPS Web 服务器上使用的 RSA 密钥的能力,在第二种情况下,可以确定 enclave 内运行的 cURL 实用程序获取的内容。 该漏洞已在 Intel SGX SDK 2.13 和 Open Enclave 0.17.1 版本中以编程方式得到解决。 除了Intel SGX SDK和Microsoft Open Enclave之外,该漏洞还出现在Google Asylo SDK、EdgelessRT、Apache Teaclave、Rust SGX SDK、SGX-LKL、CoSMIX和Veracruz中。

让我们回想一下,SGX(软件防护扩展)技术出现在第六代英特尔酷睿处理器(Skylake)中,它提供了一系列指令,允许用户级应用程序分配封闭的内存区域 - 飞地,其中的内容无法读取和使用。甚至可以被内核修改以及在ring0、SMM和VMM模式下执行的代码。 使用传统的跳转函数以及寄存器和堆栈操作不可能将控制权转移到飞地中的代码 - 使用专门创建的新指令 EENTER、EEXIT 和 ERESUME 将控制权转移到执行权限检查的飞地。 在这种情况下,放置在 enclave 中的代码可以使用经典的调用方法来访问 enclave 内部的函数以及调用外部函数的特殊指令。 Enclave 内存加密用于防止硬件攻击,例如连接到 DRAM 模块。

攻击 Intel SGX 以提取敏感数据或在 enclave 中执行代码

问题在于,SGX 技术允许操作系统通过抛出硬件异常来中止飞地,而飞地无法正确实现用于原子处理此类异常的原语。 与操作系统内核和常规应用程序不同,飞地内的代码在处理异步抛出的异常时无法访问用于组织原子操作的原语。 如果没有指定的原子原语,enclave 可以随时中断并返回执行,即使 enclave 正在执行关键部分并且处于不安全状态时(例如,当 CPU 寄存器未保存/恢复时)。

攻击 Intel SGX 以提取敏感数据或在 enclave 中执行代码

对于正常操作,SGX 技术允许飞地的执行被可配置的硬件异常中断。 此功能允许 enclave 运行时环境实现 enclave 内异常处理或信号处理,但也可能导致可重入错误。 SmashEx攻击是利用SDK中的缺陷,导致无法正确处理重新调用异常处理程序的情况。 重要的是,要利用该漏洞,攻击者必须能够中断 enclave 的执行,即必须控制系统环境的运行。

抛出异常后,攻击者会收到一个小时间窗口,在此期间可以通过操纵输入参数来拦截执行线程。 特别是,如果您有权访问系统(飞地外部的环境),则可以在执行飞地入口指令(EENTER)后立即创建一个新的异常,该异常将在堆栈设置的阶段将控制权返回给系统enclave还没有完成,其中还保存了CPU寄存器的状态。

然后,系统可以将控制权返回给 enclave,但由于 enclave 的堆栈在中断时尚未配置,因此 enclave 将使用驻留在系统内存中的堆栈执行,这可用于采用面向返回的编程 (ROP) )开发技术。面向编程)。 使用 ROP 技术时,攻击者不会尝试将其代码放入内存中,而是对加载的库中已有的机器指令进行操作,以控制返回指令结束(通常,这些是库函数的结尾) 。 该漏洞利用的工作归结为构建对类似块(“小工具”)的调用链以获得所需的功能。

攻击 Intel SGX 以提取敏感数据或在 enclave 中执行代码
攻击 Intel SGX 以提取敏感数据或在 enclave 中执行代码


来源: opennet.ru

添加评论