广告
广告
广告
广告
广告

L1TF漏洞对Intel SGX的影响及防御方法

当前位置:首页 > 区块链 > 区块链知识 发布时间:2019-01-14编辑:来源:www.chgold.com阅读数: 手机阅读
L1TF漏洞(Foreshadow)是Intel平台近日爆出的严重安全漏洞,该漏洞影响极大、涉及范围广、利用难度低,尤其是对Intel SGX安全扩展带来了冲击,使许多依赖该安全特性的系统面临极大的挑战。TEEX团队首先分析了该漏洞的技术原理以及Intel的官方应对方案,并在此基础上提出了“虚拟化+SGX”安全增强设计,可有效抵御L1TF漏洞,同时对SGX该如何应用于区块链系统做了初步的讨论。什么是Intel L1TF漏洞?L1TF 漏洞允许一个低权限的攻击者窃取被加载至一级缓存中且属于特权级软件的隐私数据。该漏洞有三个变种:

L1 Terminal Fault - SGX:一个用户态攻击者能够窃取位于一级缓存中的属于Enclave的数据;

L1 Terminal Fault - OS/SMM:一个低权限的攻击者能够窃取位于一级缓存中的属于更高权限(OS或者SMM)的数据;L1 Terminal Fault - VMM:一个恶意的客户虚拟机能够窃取位于一级缓存中的属于虚拟机监控器或者其他客户虚拟机的数据。L1TF 几乎影响了所有拥有预测执行技术与页表翻译功能的 Intel 处理器,官方公开的受影响处理器列表几乎包含了 Intel 近几年发布的所有 CPU 型号。1. 背景介绍:页表、缓存、预测执行与隐蔽信道页表:页表是 CPU 管理内存的核心机制。当页表机制启用时,CPU 指令采用虚拟地址(virtual address,又称 linear address)访问内存。随后,CPU 利用页表将该虚拟地址翻译为物理地址(physical address),从而从物理内存中读取/写入数据。页表中,每个虚拟地址页(一般以 4KB 为粒度)都拥有一个自己的页表项。一个页表项中包含了该虚拟地址页对应的物理地址页,以及相应的权限位与控制位。其中有两个特殊位 P位 (present bit)以及预留位(reserved bit)与本次攻击相关。P位表示当前页表项是否有效(P位置零表示当前页表项无效),同样的对于预留位的检查失败也表示当前页表项无效;缓存:缓存是 CPU 内部的一块高速储存区域。CPU 将物理内存中的数据加载到内部的缓存中,之后对于该物理内存的访问将直接在缓存中进行,从而提升 CPU 访问内存的速度。当前处理器的缓存往往分为多个级别,一级缓存、二级缓存以及三级缓存(也称LLC:last level cache)。在多核处理器中,每个 CPU 核(core)都拥有自己的一级与二级缓存。而三级缓存往往是所有CPU核共享的;预测执行:预测执行是当前 CPU 加速指令处理的一项主要技术。当 CPU 执行某些引起控制流跳转(间接跳转、函数调用、中断)时,并无法立刻获得下一条指令时,CPU 将会预测性地继续执行指令。如果预测正确,那么就能有效提升指令处理速度。而如果预测出错,那么 CPU 将会回滚所有由于预测执行而产生的结果;隐蔽信道:隐蔽信道(convert channel)是一种间接的数据传输方式。两个被隔离的程序能够通过控制某些系统状态的变化,间接的传递数据,从而绕开诸多隔离机制。假如 A 希望向 B 传递一个隐私数据,那么 A 首先根据该数据的内容,相应的更改系统状态(例如根据值的不同,将缓存中的不同区域填充)。而 B 之后能够通过观察系统状态变化,从而间接获得 A 传递过来的隐私数据。这种间接的数据传递方式被称为隐蔽信道。2. L1TF 漏洞的详细原理当 CPU 访问某个虚拟地址时,会通过页表将虚拟地址翻译到物理地址。此时,如果页表中的P位被置0,或者预留位被置上,那么意味着该页表项无效,即所对应的虚拟地址没有被映射到物理地址。此时,CPU 中负责地址翻译的模块将立即停止地址翻译过程,并抛出一个 Page Fault。这一特殊的 Page Fault 也被称为 Terminal Fault。然而,当 Terminal Fault 发生之后,拥有预测执行特性的 CPU 并不会立即跳转至错误处理函数,而是会预测执行触发错误的指令。此时,CPU 会根据页表项中的内容(即使该页表项被标记为无效),预测性的将目标虚拟地址翻译为物理地址,并且继续访问内存。具体来说,CPU 会从发生 Fault 的页表项中读取物理页的起始地址,从访问的虚拟地址中获得页内的地址偏移,最终组成一个物理地址。如果该物理地址中的数据已经被加载到当前 CPU 核的一级缓存中,那么该数据将被读取,并且传递给之后的预测执行指令。虽然最终这些预测执行的指令运行结果都将被 CPU 回滚,但是 CPU 无法恢复这些指令对缓存状态产生的影响。因此,这些预测执行的指令能够利用缓存状态建立一条隐蔽信道(Convert Channel)并将读取的目标数据传递给攻击者。由于 Terminal Fault 发生之后,CPU 访问的物理地址是预测生成的,而不是通过页表翻译得出的,因此该次物理地址访问将能够绕过诸多内存访问检查,具体来说有三种:绕开 Intel SGX 的 Enclave 内存保护检查。Enclave 是 Intel SGX 提供的可信执行环境,Enclave 的数据在内存中会被加密,只有被加载至缓存中时才会解密。当完成虚拟地址到物理地址的翻译之后,CPU 会检查目标地址是否属于某一 Enclave 并且当前是否在该 Enclave 中运行;绕开 SMM 的内存保护检查。SMM 模式是 Intel 的一个具有高权限的运行模式。页表翻译完成之后,CPU 会检查目标物理地址是否是属于 SMM 模式的内存,并且检查当前运行模式是否能够对其进行访问;绕开Intel虚拟化技术系统的扩展页表(EPT)。在虚拟化环境中,完成页表翻译之后,得到的物理地址将被扩展页表(EPT)进行第二次翻译,从而得到最终用来进行内存访问的物理地址。扩展页表被广泛用于保证不同虚拟机之间的内存隔离。由于 L1TF 漏洞能够绕开以上三类不同的检查,因此该漏洞也被分为三个不同的变种,L1TF-SGX、L1TF-OS/SMM以及L1TF-VMM。3. L1TF漏洞有哪些依赖条件?L1TF漏洞要求攻击代码所处的 CPU 核的以及缓存中必须存有目标数据。目标数据可以是任何当前权限级别或者用户无法访问的数据。同时 L1TF 要求攻击者能够在目标机器运行攻击代码。具体来说,L1TF 依赖于以下三个攻击条件,只有这些条件均被满足时,攻击才能进行:1. 目标数据必须被加载至攻击者所在 CPU 核的一级缓存中;而一级缓存的大小非常有限,并且内容更替频繁,因此攻击窗口非常小;2. 攻击代码必须运行在一级缓存中存有目标数据的 CPU 核中;同时,攻击代码所用的页表中必须存在能够利用的页表项,从而构造出目标数据的物理地址;3. 攻击代码只能通过预测执行进行目标数据的读取,并且必须通过隐秘信道(convert channel)才能最终获得目标数据。条件1意味着攻击者必须实现通过某些技术保证目标数据已经被加载到一级存中。条件2、3要求攻击代码必须运行在目标数据所缓存的 CPU 核中。在拥有 Hyperthead 技术的 Intel CPU 中,一个 CPU 核会拥有两个能够同时执行并且共享一级缓存的物理线程(Physical Thread),因此攻击代码仅需运行在目标CPU核中的任一物理线程之中。L1TF 对 Intel SGX 有什么影响?Intel SGX 是 Intel CPU 提供的硬件安全特性。SGX 提供了一种可信执行环境 Enclave,允许用户将关键代码与数据运行在 Enclave 中并且保证安全性,同时提供了一些列指令用以创建、管理、销毁 Enclave。Enclave 中的代码和数据均存储在专用的物理内存区域 EPC(Enclave Page Cache)中,EPC 中的数据会以密文形式保存在物理内存之中,只有当其被加载至CPU内部之后,EPC 中的数据才会被解密保存在缓存中。因此,Enclave 除了能够防止来自高权限级别的软件攻击之外,还能够抵御冷启动攻击、总线侦测攻击等物理攻击手段。1. 如何利用L1TF读取Enclave中的加密内存?虽然 Enclave 中的数据在内存中是加密的,但是其在CPU缓存中是以明文存储的。L1TF 漏洞能够绕开 CPU 对 Enclave 内存访问的检查,使得攻击者能够窃取被加载至一级缓存中的Enclave数据。在今年的 USENIX Security 2018 大会上,L1TF 的发现者们发表了论文 “FORESHADOW: Extracting the Keys to the Intel SGX Kingdom with Transient Out-of-Order Execution“[1],阐述了如何利用 L1TF-SGX 漏洞窃取Enclave中的隐私数据。在论文中提到,L1TF 漏洞在攻击 Enclave 时能够被更加容易的实现。Intel SGX 提供了一条特殊指令 *eldu*,用以帮助不可信的操作系统安全的加载 Encalve 的内存。攻击者发现,eldu 指令在加载 Enclave 内存时,会同时将其加载至当前 CPU 的以及缓存之中。也就是说,攻击者无需猜测目标数据何时会被加载至一级缓存中。其能够直接通过 eldu 指令,将任意 Enclave 内存加载至当前 CPU 核的一级缓存,并且利用 L1TF-SGX 漏洞对其进行读取。2. Intel 提供的L1TF漏洞补丁与防御机制针对 L1TF 漏洞,Intel 官方提供了微代码补丁。对于保护 SGX 而言,补丁主要做了两处安全性增强:在进出 Enclave 时,清除当前 CPU 核的一级缓存。保证在退出 Enclave 之后, Enclave 内部的数据不会残留在一级缓存之中,从而无法被窃取;在 Enclave 的远程验证信息中加入当前是否启用 Hyperthread 的报告,同时建议用户拒绝相信运行在开启 Hyperthread 平台中的 Enclave。对于上文提到的 eldu 指令,Intel 的官方文档[2]里并没有提到是否对该指令打上补丁,以防止其被用来进行 L1TF 攻击。如果该指令的行为未被修改,那么攻击者仍然能够利用 L1TF 漏洞读取 Enclave 内部的数据。本方法要求用户拒绝将Enclave运行在开启了 Hyperthread 的平台之上。然而, Hyperthread 的控制主要由 BIOS 完成,无法在运行时动态开启/关闭。这也就意味着,用户为了使用 SGX 必须完全放弃 Hyperthread 技术。与此同时,某些硬件厂商的 BIOS 并不支持关闭 Hyperthread 的操作,导致用户无法安全地在这些平台上使用 SGX 技术。TEEX 团队的“虚拟化+SGX”安全增强方案考虑 eldu 指令是否被修补的未知隐患,以及部分机器可能未打上 Intel 的微代码补丁,同时为了管控 SGX 在将来可能存在的侧信道攻击等安全隐患,TEEX team 提出了一个基于虚拟化技术的 SGX 安全增强方案:TXVisor。该方案利用虚拟化技术,将不同的 Enclave 环境,以及 Enclave 与非 Enclave 环境相隔离,以保证用户数据与代码逻辑不受类似 L1TF 等攻击的影响。该方案包括以下技术点:L1 Cache 隔离:在每次退出 Enclave 时,TXVisor 都将清除当前 CPU 核的一级缓存,从而避免攻击者利用一级缓存,在 Enclave 内外构建隐蔽通道,从根本上杜绝了 L1TF 攻击,即使在没有应用 Intel 补丁的硬件平台也同样适用;ELDU指令安全增强:对于 Intel 官方补丁中未提到的eldu指令,TXVisor 将通过“Trap-and-emulate”的方法,动态捕获该指令的执行,在保证其原有功能的同时增加额外的安全检查,从而防止其破坏一级缓存的隔离;Hyperthread 模式下安全性增强:TXVisor 通过控制调度,防止攻击者利用 Hyperthread 技术在运行时利用 L1TF 漏洞攻击目标 Enclave。通过将 Enclave 环境与非 Enclave 环境的隔离,本方案既能够保证 Enclave 安全,又允许用户在 Enclave 外使用 Hyperthread 技术提升系统性能,从而进一步降低安全防护所带来的性能损失;可信运行环境验证:TXVisor 提出了软硬件结合的双重远程认证方法,使得用户能够安全的验证应用程序是否运行在受 SGX 与 TXVisor 保护的平台之上。该方案可在没有应用 Intel 硬件补丁的平台上完全防御类似 L1TF 等类型的攻击;同时,我们还提出了若干系统优化的方法,以降低安全增强所带来的性能损失。该工作也是继 CHAOS [ISTR'07]、CloudVisor [SOSP']、HyperCoffer [HPCA']、TxIntro [HPCA] (获当年最佳论文提名奖)、CrossOver [ISCA']、SeCage [CCS]、AdAttester [MobiSys]、Nexen [NDSS]、SGX Migration [DSN]、vTZ [USENIX Security]、VButton [MobiSys]、Fidelius [HPCA]、EPTI [USENIX ATC] 之后,在虚拟化与可信隔离环境方面的系列工作之一。SGX与区块链如何保证数据的隐私性一直是区块链领域的难题之一。目前,诸多领域内的技术团队正在探索如何利用 Intel SGX 等硬件安全技术,为区块链提供隐私性保证。虽然当前还未有利用 Intel SGX 解决区块链隐私问题的成熟方法,但研究人员在探索的过程中已经证明,SGX 技术能够有效提升区块链中数据与运算的隐私性。然而,SGX 技术并不是“不坏金身“。无论是此次的 L1TF-SGX 漏洞,还是之前的测信道攻击(如Spectre),都揭示了 SGX 存在着安全隐患。因此,对于区块链系统来说,一个合理的 SGX 使用方案,应当既能够利用 SGX 技术提升区块链的安全性能,也能够在 SGX 存在漏洞的情况下,限制漏洞所造成的影响。现有的部分方案存在过分依赖 SGX 的问题,例如将区块链的一致性协议完全依赖 SGX 的隐私性进行设计。一旦 SGX 的安全性存在漏洞,安全隐患将瞬间蔓延至整个区块链,导致整个链的崩溃。TEEX 团队在利用SGX保证用户数据、计算逻辑安全性的同时,通过结合虚拟化等技术与区块链本身的特性,能够有效控制 SGX 出现漏洞后的影响范围。在利用 SGX 提升区块链隐私性的同时,也不过分依赖于其作为整个系统的安全根。综上,我们认为 TEE 将会与密码学一样,成为区块链的重要支撑技术之一。TEEX 团队希望通过在 TEE 安全技术上的多年积累,为现有和将来的区块链系统提供安全可靠的基础架构服务,进而促进整体生态的繁荣。后续,TEEX会带来更多TEE与区块链结合的讨论,敬请期待。更多区块链信息:www.qukuaiwang.com.cn/news

上一篇区块链密码学:哈希(Hash)

下一篇BEAM挖矿教程

区块链知识本月排行

区块链知识精选