最近的研究表明,可信执行环境,如Intel Software Guard Extensions,容易受到特权软件的各种攻击,包括侧通道攻击。
现有的解决方案,如T-SGX、Daughejàa Vu、Cloak和Varys,在运行时检测侧通道攻击。但是它们受到设计的限制,因为这些检测方法中错误检测是不可避免的,因此任何在这些机制之上开发的安全策略都必须容忍一些恶意操作来实现实际的误报检测率。
在本文中,我们提出了可验证执行契约的概念,它要求特权软件为发起攻击变得非常困难的飞地提供良性执行环境,如果不是不可能的话。
由于特权软件不受信任,我们设计了验证执行合约的方法。通过提出的可验证执行合同,我们分析了如何减轻现有攻击。
Software Guard eXtension (SGX) 通过创建称为 enclave 的可信执行环境 (TEE) 来提高应用程序的安全性,其中代码和数据受到其他软件的保护,包括特权软件,例如操作系统 (OS) 和管理程序。它强大的安全保障引起了学术界和工业界的广泛关注。已经开发了各种使用Intel SGX的新应用、工具和框架,以拥抱其安全承诺[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19]。
然而,研究表明,SGX内部的秘密仍可能通过各种旁道泄露。虽然传统的侧通道,如缓存定时[20]、[21]、[22]、[23]和DRAM定时[24]仍然可用,但操作系统级别的对手甚至可能发起新的侧通道攻击。这种新的侧通道攻击之一是利用页面故障侧通道[25]。控制操作系统的对手在执行飞地代码时可能会引入页面错误,从而了解页面级代码访问模式,从而推断飞地机密。其他攻击利用TLB[24]、分支预测单元[26]等。而侧信道攻击主要专注于破坏飞地应用程序的机密性,还存在其他威胁特定应用程序完整性的攻击,例如针对有状态应用程序的重放攻击[19]。
已经提出了缓解这些攻击的对策[27]、[28]、[29]、[30]、[31]、[32]。Shinde等人[27]和Shih等人[28]旨在解决基于页面故障的侧通道问题。Cloak以缓存侧通道为目标[29]。DejaVu专注于需要频繁中断受害者飞地执行的侧通道攻击[30]。HyperRace[31]和Varys[32]旨在关闭由超线程启用的副通道。其中许多方法的一个基本限制是,它们本质上是基于签名的检测技术,容易受到逃避攻击。
例如,当Varis每秒触发异步Enclave eXit(AEX)超过100次(100Hz)时,它们会检测到侧信道攻击[32]。不可能选择较低的阈值,因为常规定时器中断将以至少100Hz的速率传递到运行包围区程序的CPU核心以进行进程调度。然而,这使得对手能够以低于100 Hz的速率发起攻击,并保持未被发现的状态[33]。这种规避攻击的根本原因是,侧信道攻击(例如,AEX)的特征不是攻击活动独有的;一些正常的系统活动具有相同的特征。
在本文中,我们引入了可验证执行契约的概念,旨在在操作系统和飞地之间创建一个契约,描述飞地的有保证的执行环境,在该环境中,对飞地发起攻击即使不是不可能,也会变得非常困难。可验证执行契约的基本思想是要求操作系统以一种可以帮助飞地减轻威胁的方式(在契约中定义)行事。例如,通过请求操作系统以不发生页面故障的方式管理包围区的页面表,可以完全减轻基于页面故障的攻击。作为一个简单的扩展,执行合同可以开发用于防止由于飞地的操作系统依赖性而引起的攻击(称为操作系统依赖攻击),例如针对有状态飞地的重放攻击和通信延迟攻击。然而,由于操作系统是不可信的,可能会违反执行契约,因此可靠地验证执行契约是否正确履行的能力成为我们工作中需要解决的主要挑战。
本文提出了可验证执行契约的概念,它定义了一个有保证的执行环境,以在不受信任的操作系统上运行SGX飞地,并且可以由飞地本身进行验证,因此侧通道攻击和依赖于操作系统的攻击即使不是不可能,也是非常困难的。
本文设计了三类执行契约,详细介绍了实现执行契约所需的操作系统内核修改和在运行时验证执行契约的飞地代码插入。
本文分析了执行契约带来的安全收益,并通过一组实例说明了如何防止针对飞地的各种侧通道攻击。
本文描述了所提出的可验证执行契约的原型实现,并评估了它们的有效性和效率。
英特尔SGX是在最近的英特尔处理器中引入的一组扩展。它旨在保护对安全敏感的应用程序的机密性和完整性,使其免受恶意操作系统和/或流氓管理员等特权对手的攻击。具体来说,敏感数据是在一个称为飞地的执行环境中操作的,该环境有一个专用的内存区域(飞地页面缓存或EPC),该区域受到保护,不被任何其他程序访问。
异步Enclave eXit(AEX)。当发生中断、异常或任何其他事件,请求运行飞地程序的处理器暂时离开飞地模式时,处理器将存储执行状态,即,将值注册到飞地受保护的虚拟地址空间(称为ELRANGE)内的状态保存区(SSA)。然后,执行状态将替换为合成值在处理器退出包围区模式以防止执行状态被泄露之前。操作系统处理中断事件后,控制权将转移到由异步退出指针(AEP)指向的trampoline代码。trampoline代码执行ERESUME指令以重新进入飞地后,处理器将使用SSA中的内容恢复执行状态,包括指令指针(RIP)。
微代码更新和CPU安全版本。除了硬件修改外,SGX指令还以微码实现。微代码更新版本反映在一个名为CPU安全版本(CPUSVN)的128位值中。CPUSVN包含在各种飞地特定机密的派生中,并用作底层平台的SGX实现是否最新的指标。
本地和远程认证。SGX向飞地提供本地和远程证明,以向另一个实体证明所声称的飞地正在受信任的SGX平台上运行。本地认证用于说服在同一平台上运行的另一个“本地”飞地。具体地,EREPORT指令由被证明飞地使用目标飞地的签名密钥来生成证明签名,并且EGETKEY指令由目标飞地使用来导出用于验证的签名密钥。远程证明用于说服远程实体。SGX采用了一种匿名签名方案,称为Intel Enhanced Privacy ID(EPID),用于生成证明签名。英特尔引入了两个特权飞地,称为供应飞地(PvE)和报价飞地(QE),以促进这一过程。
密封储存。SGX为飞地提供了一种称为密封的机制,用于加密和完整性保护将存储在飞地之外的机密。称为密封密钥的对称加密密钥可以使用包围区内的EGETKEY指令导出。
SGX可信平台服务。利用Intel Converged Security and Management Engine(CSME),Intel提供了一个名为平台服务飞地(PSE)的特权飞地,为应用程序飞地提供可信服务,包括可信时间和单调计数器。可信时间服务用于测量两次读取之间的经过时间(以秒为单位),可信单调计数器用于解决重放攻击。
缓存侧信道。缓存侧通道通过缓存命中和缓存未命中之间的时间差泄漏受害者的内存访问模式。使用高速缓存侧通道的典型技术包括P RIME+P ROBE[34]、[35]、[36]、[37]、[38]、[39]、[40]、[41]和F LUSH+RELOAD[42]、[43]、[44]、[45]、[46]、[47]。它们利用受害者程序和攻击程序之间的共享缓存集或行,在攻击程序的内存访问中引起时间差异。
页面表侧信道。由于飞地的页表由操作系统管理,当被滥用时,它们可以用来泄露飞地程序的页级访问模式。徐等人介绍了控制信道攻击,该攻击通过引入页面故障来收集页面级访问模式[25]。Van Bulk等人[48]和Wang等人[24]证明类似的访问模式可以通过监视特定的页表条目位来收集,例如访问位和脏位,而不会触发页故障。
超线程。“英特尔超线程”是英特尔专有的同时多线程(SMT)实现。在支持“超线程”的情况下,单个物理内核提供两个逻辑内核(或超线程),可以同时执行两个代码流。同一物理核心上的两个超线程共享各种资源,例如转换后备缓冲器(TLB)和分支预测单元(BPU)。
缓存分配技术。Intel Cache Allocation Technology(CAT)是操作系统或Hypervisor配置不同应用程序可用资源量的一种机制,例如,Last Level Cache(LLC)。特别地,应用程序可以被分配给由处理器提供的一组服务类别(COS)。每个COS都有一个容量位掩码(CBM),可以配置该容量位掩码来指示该COS中的应用程序所限制的缓存空间。不同COS的缓存空间可能重叠或隔离。当应用程序被安排在逻辑核心上时,操作系统会将其COS分配给该核心,从而限制其缓存使用。
事务同步扩展。英特尔事务同步扩展插件(TSX)是英特尔对硬件事务内存(HTM)的实现。它最初是为了简化并发编程而引入的。关键部分可以在事务中执行。当事务成功时,所有更新都将以原子方式提交。如果事务执行失败,则称为事务中止的进程将回滚执行并丢弃所有更新。事务可能由于各种原因而中止。特别地,当在事务中写入的存储器内容从L1高速缓存被逐出或者在事务中读取的存储器内容被从LLC逐出时,事务将中止,状态表示为CONFLICT。
在本节中,我们首先描述了本文中考虑的威胁模型,然后讨论了针对SGX飞地的已知攻击以及现有缓解方案的局限性。最后,我们将概述我们提出的解决方案,即可验证的执行合同,以解决这些限制。
在本文中,我们考虑一个控制所有特权软件组件的对手,即操作系统、系统管理程序、系统管理模式(SMM)软件和基本输入/输出系统(BIOS)。因此,要保护的飞地的执行完全由对手控制,包括其在CPU核上的调度、对存储器的访问、输入/输出操作。考虑到这样一个强大的威胁模型,可以公平地假设对手可以启动(尽可能多的副本)、暂停(通过导致页面故障异常或中断)、恢复(通过AEP)、重复(通过ECalls)并终止目标飞地的执行。
针对飞地[49]、[50]的内存劫持攻击超出了范围。我们假设飞地代码没有可利用的漏洞,这些漏洞允许对手更改其控制流。此外,我们假设SGX平台本身是安全的:供应密钥、密封密钥和证明密钥在包围区内得到了很好的保护。
然而,最近的一些研究[51]、[52]、[53]、[54]、[55]、[56]表明,英特尔的秘密可能会因推测性执行漏洞而泄露。据称,这些攻击可以通过微码修补程序得到缓解。利用此类硬件漏洞的类似攻击的威胁超出了范围。
在本节中,我们总结了本文中考虑的SGX面临的现有威胁。这些威胁分为两类:侧通道泄漏和操作系统相关威胁。
虽然SGX提供了强大的机密性和完整性保证,但通过微体系结构单元(如CPU缓存)进行的侧通道攻击仍然是主要的威胁类型。在这些侧信道攻击中,对手需要(1)同时与受害者共享相同的微架构单元,或者(2)以交错的方式与受害者共享这些单元。表1显示了已知的主要微结构侧通道。它还指示它们是否必须在同一CPU核心上被利用,或者可以从不同的核心(即跨核心)被利用,以及在交叉执行受害者和对手时它们是否可被利用。根据表1,针对SGX飞地有三类侧信道:
浮点单元(FPU)、存储缓冲区和转换后备缓冲区(TLB)在同一核心上共享,不能通过交错执行利用,因为FPU和存储缓冲区只能通过并发执行利用,并且TLB在处理器离开包围区模式时被刷新。为了利用这些副通道,对手需要利用“超线程”在受害者线程的兄弟超线程上运行攻击代码,以进行并发利用。
分支预测单元(BPU)和L1/L2高速缓存由整个CPU核心共享,并且在上下文切换时不刷新。因此,它们可以从同级超线程中使用,也可以通过交错执行来利用。
LLC、DRAM和页表是跨核心共享的,因此使用这些资源的攻击可以从不同的核心发起。此外,它们也可以通过交错执行来利用。特别地,特权对手可以利用页表侧通道,例如引入页错误(导致包围区和OS的页错误处理程序的交织),或者监视页表条目的特定比特(例如,访问的)。
特别是在SGX的威胁模型中,飞地执行的管理依赖于被认为不可信的操作系统。操作系统负责启动和执行SGX飞地,管理飞地的内存映射,并处理飞地与其外部世界之间的所有通信。如表1所示,这种强依赖性不仅促进了上述侧信道威胁,而且引入了新的威胁。
一种威胁是重放攻击,特别是针对有状态飞地应用程序的攻击。恶意操作系统试图以过时的状态运行飞地,目的是破坏飞地程序的完整性。尽管SGX可信平台服务提供了可信单调计数器来应对此类攻击,但其实用性受到质疑[19]。
由于操作系统操纵飞地与其外部世界之间的通信,因此引入了另一种威胁。对手可能会给通信带来任意延迟。这会影响时间敏感的应用程序。例如,考虑一个基于时间的数字版权管理(DRM)应用程序。提供了一个秘密以及一个租赁期限。尽管SGX可信平台服务提供的可信定时器可以用于防止在租约到期后访问机密,但对手可以在租约期限内向定时器转发请求,但将响应延迟到稍后的时间,以便在有效租约期限之外使用机密。
已提出防御措施以应对上述威胁。DejaVu[30]旨在检测基于页面故障的攻击。Cloak[29]利用TSX来解决缓存侧通道攻击。HyperRace[31]缓解了由“超线程”和Varys[32]启用的同核心侧通道攻击,保护包围区免受缓存定时和页表侧通道攻击。从本质上讲,这些方法类似于基于签名的入侵检测技术。他们需要正确描述侧通道攻击活动的特征,以建立其签名,然后在运行时监控系统行为,将其与这些签名进行比较。
然而,正如Wagner等人[57]所提到的,“基于签名的方案通常是微不足道的,只需稍微改变攻击即可绕过。”对于这些侧信道攻击检测方案也是如此。例如,Oleksenko等人假设100 Hz的AEX速率为“正常”[32],因为定期中断将以这样的速率传递给运行飞地程序的CPU核心。然而,这允许对手以低于100Hz的速率发起攻击,并且保持未被发现。尽管攻击的保真度较低,但对手可以重复采样相同算法的执行轨迹,以改进攻击。
这种规避攻击的根本原因是侧信道攻击(例如AEX)的特征并非攻击活动所独有。一些正常的系统活动具有相同的特征。因此,为了避免误报,不可避免地要将入侵检测系统调整为较低的误报和较高的误报。因此,可以通过模仿正常的系统活动来进行偷偷摸摸的攻击。
我们对这一挑战的解决方案是限制类似于侧通道攻击的正常操作系统操作,这样系统活动就不会被错误地检测为攻击。因此,可以调整攻击检测系统以最小化甚至消除假阴性,同时保持非常低的假阳性。因此,模仿攻击变得非常困难,如果不是不可能的话。这个想法背后的理念是要求操作系统权衡其操作的性能和兼容性,以获得可信执行环境的更强安全保障。
在本文中,我们提倡一个新的概念,我们称之为执行契约,来描述底层操作系统提供的SGX飞地的执行环境。为了保护SGX飞地免受来自操作系统的各种恶意攻击,飞地所有者首先与托管操作系统协商执行合同,以保证飞地在不可能执行攻击的环境中执行。
理由是,由于飞地程序通常具有更高的安全要求,因此要求托管操作系统承担限制其常规操作和遵守对飞地更有利的合同的责任是合理的。这种定制的执行环境旨在最大限度地减少甚至消除潜在的攻击窗口,即使不是不可能,也很难让对手发起攻击。例如,如果服务提供商同意修改其操作系统,以便在飞地的执行过程中不会发生页面故障,则基于页面故障的攻击将完全消除。在本文中,我们设想可以提供以下三类执行合同:
资源保留契约专门为飞地保留某些资源,以防止同时执行的侧信道攻击。
运行时交互契约在运行时限制操作系统和飞地之间的交互,以通过交错执行来减轻侧通道攻击。
服务合同要求操作系统不要滥用其在管理飞地和处理飞地通信方面的作用。
可验证的执行合同。由于执行契约是由不受信任的操作系统提供的,因此飞地程序验证契约是否正确履行(无需特权软件组件的帮助)的能力至关重要。我们将使用术语“可验证执行契约”来表示所有可验证的执行契约的子集。我们将在第5节中讨论可验证执行合同的验证方法。