MoLE: Mitigation of Side-channel Attacks against SGX via Dynamic Data Location Escape【ACSAC`22】

本文主要是介绍MoLE: Mitigation of Side-channel Attacks against SGX via Dynamic Data Location Escape【ACSAC`22】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 摘要
  • 引言
    • 挑战
    • 解决方案
    • 贡献
      • 全面防御
      • 无法追踪的混淆
      • 综合评价
  • 背景
    • Intel SGX
    • Intel TSX
    • 侧信道攻击和相关攻击
      • 缓存侧通道攻击
      • 页表侧通道攻击
      • 瞬态执行攻击
  • 威胁模型
  • MoLE
    • 设计概述
      • RCX和RDX中的随机数
    • MoLE的隧道
    • Escape函数
      • Feint访问
  • 部署
  • 安全分析
    • 缓存SCA
    • 页面表SCA
    • Meltdow攻击
    • 攻击窗口
    • 单步跟踪
  • 评估
    • 环境设置
    • 安全评估
    • 性能评估
  • 相关工作
  • 讨论
    • 在没有执行的情况下倾倒飞地
    • SmashEx
    • TAA
  • 总结

摘要

大量工作已经通过实验表明,Intel Software Guard eXtensions(SGX)容易受到侧通道攻击(SCA)和相关威胁,包括瞬态执行攻击。这些威胁危及SGX保护的应用程序的安全。混淆数据访问模式是防范这些威胁的现实方法。然而,现有的防御措施要么会带来太多的性能开销,要么会带来额外的使用限制(如多线程)。此外,如果攻击者有能力单步执行目标应用程序,这些模糊处理方案可能不再有效

在本文中,我们提出了MoLE,这是一种动态数据位置随机化方案,用于防御针对飞地内敏感数据的SCAs和瞬态执行攻击。通过在运行时不断混淆敏感数据的位置,MoLE防止对手基于数据访问模式直接获取或披露数据。MoLE利用事务同步扩展(TSX),这是英特尔CPU的一项功能,旨在提高并发场景的效率,以防止对手通过单步包围执行来跟踪敏感数据。MoLE也可以在TSX的保护下应用于多线程场景。我们将MoLE实现为一种基于半自动编译器的工具。评估结果表明,MoLE是实用的,在安全性和性能之间提供了可调的折衷。

引言

基于硬件的可信执行环境(TEE)旨在提供一个屏蔽环境,以便在各种安全威胁下安全地执行敏感应用程序。威胁包括恶意或受损的操作系统(OS)、管理程序等。目前,每个平台都有许多相应的TEE解决方案。英特尔软件保护扩展(SGX)[15,24,31]是传统计算设备上最流行的解决方案之一。SGX是一组Intel商品CPU指令,可在与不受信任的操作系统隔离的所谓飞地中执行安全关键应用程序代码。SGX为各种应用程序(包括数据分析、库操作系统和机器学习)提供了强大的保密性和完整性保证。然而,今天的SGX设计被发现存在漏洞。

大量工作[7,12,20,22,33,36,44–46]已经证明,使用侧信道攻击(SCA),特别是缓存SCA[7,20,22,33,36,46]和页表SCA[12,44,45],以及使用侧信道作为检索信息的方式的瞬态执行攻击[8,34,42,43],可能会违反SGX。更令人担忧的是,在SGX的安全假设中,与无特权对手相比,针对SGX的特权对手可以发起更强大的攻击。例如,恶意操作系统可以通过单步进[10,11]降低侧通道的噪声。我们发现,上述针对SGX的攻击需要(1)在攻击程序和受害者程序之间频繁切换;(2) 在攻击程序和受害者程序之间共享某种资源。因此,可以通过打破这两个先决条件中的任何一个来击败这些攻击。

先决条件(1)可以通过在执行关键操作时占用空闲核心来打破[13,28,32]。然而,这些方法会造成核心的浪费,并产生大量的性能开销。

先决条件(2)可以通过隔离受害者使用的资源来打破[14,16,19,27,37,39,41]。然而,这些方法只能根据资源类型防御特定类型的攻击。完全隔离所有类型的资源将严重影响系统运行,这是不可接受的。

除了隔离资源外,不经意执行技术[5,6,35,40,48]还可以防止对手通过共享资源窃取机密。但它们要么会带来更高的性能开销,要么只提供有限的保护范围。例如,OBFSCURO[5]隐藏了SGX飞地的所有访问模式,开销极高(比简单基准测试高51倍),DR.SGX[6]的性能成本很高(至少为3倍,最高可达20倍)。尽管KLOTSKI[48]的性能开销较低(仅为2.3倍),但它无法抵御细粒度攻击。

在本文中,我们提出了MoLE,这是一种针对侧信道攻击的实用防御方法,在安全性和性能开销之间进行了可定制的权衡。此外,我们的方案还对依赖于数据地址的Meltdown型瞬态执行攻击具有防御作用。MoLE的核心思想是在运行时对敏感数据进行连续的随机重定位,即动态数据位置转义。MoLE努力实现性能和用户便利性,同时使对数据流的攻击更加难以发起。

挑战

多年来,在飞地中随机化数据位置一直是抵御侧信道威胁的常用策略。当对手有能力单步执行目标应用程序时,实现有效的数据模糊是一个棘手的挑战。例如,通过自定义高级可编程中断控制器(APIC)并注册自定义异步退出指针(AEP)存根,任何特定于攻击的用户模式或内核级间谍代码都可以很容易地启动,使攻击者能够遵循数据混淆的路径[10]。在SGX飞地内运行的程序没有有效的方法来保护它。此外,大多数基于模糊处理的防御方案对目标应用程序施加了额外的使用限制,其中一些是不可接受的(例如限制多线程)。此外,对应用程序的修改也对开发人员提出了额外的要求。设计一种可推广且对目标应用程序相对透明的防御是一项挑战

解决方案

为了应对上述挑战,MoLE使用Intel事务同步扩展插件(TSX)[23,26]封装了数据位置转义操作。为了更好地混淆,MoLE还访问同一事务中的多个不相关数据。活动的中间结果不会泄露,因为它们被视为同一事务中的原子操作。如果对手试图通过在事务中强制中断来跟踪敏感数据,TSX将立即回滚事务并删除所有中间结果。MoLE确定使用随机数重新定位数据的新地址。出于安全目的,随机数以包围区模式存储在寄存器中。当对手试图以包围区模式显示寄存器的内容时,他必须中断包围区。SGX的异步飞地出口(AEX)屏蔽寄存器存储的随机数。我们开发了MoLE作为一个基于编译器的工具,它由LLVM编译器传递和数据到Escape的运行时组成。MoLE不对目标应用程序施加额外限制。安装MoLE只需要开发人员标记敏感数据变量并重新编译目标应用程序。此外,在LLVM通行证的基础上,MoLE还对敏感数据进行污染分析。

我们评估了MoLE的安全性和性能。我们的实验结果表明:(1)MoLE在SGX场景中对SCAs具有防御作用,对Meltdown型瞬态执行攻击也具有防御作用。(2) 与现有方案相比,MoLE的性能开销是优越的。(3) 安装MoLE的负担很轻。

贡献

全面防御

我们设计并实现了一种动态数据位置转义技术,以保护SGX飞地免受SCA以及Meltdown类型的瞬态执行攻击。

无法追踪的混淆

我们提出了一种结合佯攻访问和TSX的不可追踪的数据模糊方法,以单步能力抵抗强大的攻击者。

综合评价

根据我们的评估,MoLE的性能是可以接受的,平均只产生7.89倍的管理费用。此外,可以使用可调参数来定制性能和安全性之间的权衡。

背景

Intel SGX

英特尔软件保护扩展(SGX)是一个ISA扩展,它提供了一个屏蔽的执行环境,称为飞地隔离内存区域。SGX保护飞地数据的机密性和飞地执行的完整性,以抵御操作系统(OS)和系统管理程序等特权攻击者。包围区的内容和相关联的数据结构存储在作为处理器保留存储器(PRM)的子集的包围页缓存(EPC)中。对该区域的访问通过内存加密引擎(MEE)[21],该引擎在写入/读取时透明地加密/解密缓存行。在包围区初始化过程中测量内容。

当主机应用程序在飞地中运行时,它所在的处理器核心将进入飞地模式。SGX提供EENTER和EEXIT指令,以在不受信任的主机应用程序和飞地。当飞地内发生硬件异常/中断时,处理器在调用系统软件的异常处理程序之前执行异步飞地退出(AEX)过程。SGX首先将encalve的执行状态保存到状态保存区(SSA)[25],并用合成状态替换它们。ERESUME指令允许不受信任的应用程序重新进入以前中断的包围区,并从SSA帧恢复以前保存的处理器状态。

Intel TSX

英特尔事务同步扩展(TSX)是英特尔对硬件事务内存(HTM)的实现,通常用于消除昂贵的软件同步机制。从外部来看,事务可以被视为一个原子操作。如果事务遇到冲突,所有中间读写操作都将回滚,所有中间结果都将清除。具体来说,事务性内存通常分为读取集和写入集。对写集的任何并发访问都会导致事务冲突。

TSX提供XBEGIN、XEND和XABORT指令来启动和终止线程的事务。TSX使用L1高速缓存和LLC作为缓冲器来分别存储读取和写入的中间数据。由于TSX是在CPU缓存层次结构中实现的,导致事务冲突的读写集的大小也由缓存大小决定。

侧信道攻击和相关攻击

在这项工作中,我们主要关注严重破坏SGX安全保障的攻击,如侧通道攻击和瞬态执行攻击。

缓存侧通道攻击

缓存SCA可以允许对手通过以细粒度的方式监控受害者的缓存访问模式来推断秘密信息。这些攻击中最显著的是PRIME+PROBE[33]和FLUSH+RELOAD[47]。其中,由于PRIME+PROBE没有内存限制,因此可以直接威胁SGX。FLUSH+RELOAD需要受害者的共享内存,因此很难针对飞地的内存启动[44]。但是大多数瞬态执行攻击使用基于FLUSH+RELOAD的秘密信道来发送秘密信息。

页表侧通道攻击

页表SCA使用页错误或页表条目(PTE)的标志作为侧通道来揭示程序的页级访问模式。因为飞地程序的PTE可以由操作系统操纵,所以如果操作系统被破坏,则可以探测程序访问的页面。这些攻击可以分为基于页面错误的[45]和基于页面位的[12]。基于页面故障的攻击通过拦截飞地中的所有页面级访问来观察页面故障。基于页面位的攻击使用Accessed和Dirty页面表位作为访问页面的指示,而不会出现页面错误。

瞬态执行攻击

最近对瞬态执行攻击的并行研究表明,瞬态指令可以基于秘密数据调节微体系结构组件的状态。然后,对手可以利用FLUSH+RELOAD攻击来窃取数据。根据最近的分类[9],瞬态执行攻击的两个主要类别是Spectre类型利用错误预测的攻击和利用故障或微码辅助后的瞬态执行的Meltdown类型攻击。由于取消引用未经授权的飞地内存将立即产生中止页面语义,因此像Meltdown[29]这样的本地瞬态执行攻击对SGX无效。但是,通过撤销目标飞地页面上的所有访问权限,已经克服了这一挑战。在受害者访问目标数据并将其加载到缓存或其他内部缓冲区时,对手可以对包围区内存发起瞬态执行攻击。

威胁模型

我们假设的威胁模型与以前的缓解方案相同。对手完全控制着特权软件,尤其是操作系统。他能够在指令级别执行单步包围,在运行时调整CPU相关性,并随时挂起或唤醒任何线程。对手还可以读取、写入、延迟、锁定和重放任何内存区域,不受任何限制,飞地内存除外。但是,对手并不拥有处理器特定的密钥。对手可以发起瞬态执行攻击和众所周知的SCA。

当目标应用程序执行涉及敏感数据的操作时,对手具有以下能力来分别发起这些攻击:

(1)通过缓存访问时间的差异,他可以通过从与其共享的缓存集中加载或存储数据来确定应用程序的缓存访问模式。通过这种方式,对手可以发起缓存SCA。

(2) 为了理解应用程序的页面访问模式,他可以更改和跟踪应用程序使用的页面的每个PTE的状态。此功能允许启动页表SCA。

(3) 他可以使用Meltdown类型的瞬态执行攻击来非法访问飞地内的内存。对手的目标是通过上述攻击暴露飞地的敏感数据。

关于敏感数据,我们认为它的大小受到限制(不会占用大量连续页面),并且我们假设内存布局是根据标准页面层次结构(4KB)构建的。因此,具有巨大页面的攻击,如LLC SCAs,不在本文的范围内

MoLE

在本节中,我们将详细描述MoLE的设计。如上所述,SCA要求在缓存或页面级别固定受害者的数据访问模式。瞬态执行攻击还需要知道确切的数据位置。MoLE通过在运行时动态更改敏感数据的位置来抵御这种攻击,我们称之为动态数据位置逃逸。敏感的数据就像一只警惕的鼹鼠,总是从最后一个地方逃跑,这样捕食者就会失去目标。

设计概述

图1显示了MoLE的概述。隧道和逃生功能是MoLE的两个基本组成部分。敏感数据存储在隧道中,隧道是飞地堆的指定部分。敏感数据在隧道内的不同位置逃逸,以躲避基于位置的攻击。Escape函数使用RCX和RDX中的随机数计算数据重新访问的新地址,因为寄存器对上述攻击免疫,因此可以用作可信的基础。Escape功能可以以数据结构感知的方式以可调的频率执行,以平衡安全性和性能。当敏感数据逃逸时,MoLE还会同时访问多个不相关的数据,以掩盖EScape的痕迹。此外,Escape的整个过程包含在一个事务中。过程中的任何中断都会导致事务回滚。
图1

RCX和RDX中的随机数

用于Escape的随机数是在隧道初始化时生成的。随机数的机密性至关重要,因为它们用于在Escape过程中确定数据的新地址。因此,我们以包围区模式将它们保存在寄存器(RCX和RDX)中。当对手试图揭露寄存器的内容,这将触发AEX.这样,SGX的AEX屏蔽寄存器存储的随机数免受攻击

MoLE的隧道

图2

我们使用飞地堆的一部分作为隧道,隧道也属于EPC。与自由列表【自由列表是一种用于实现特定动态内存分配方案的数据结构。堆中的空闲块由这种结构组织】类似,MoLE使用一个页面列表和几个双链接列表构建隧道。如图2所示,页面列表中的每个项目都指向位于EPC内部的一组连续页面,这些页面的空闲块由双链接列表组织。每个空闲块的元数据存储在它们的头中,包括指向前一个和下一个空闲块的指针以及当前空闲块的大小。当敏感数据需要保护时,MoLE从隧道中的空闲块末尾分配一个区域来存储数据。已分配用于存储数据的每个块的头也存储其自己的元数据。元数据包括存储数据的长度和访问数据的次数。在预定次数的访问之后,MoLE将敏感数据重新定位到新分配的区域,即数据Escapes。同时,MoLE还移动多个不相关的数据。隧道上的所有操作均受TSX保护

隧道𝑙 (每个L1d缓存集包括𝑙 缓存行)项,以便启用Escape。此外,隧道的长度必须等于EPC大小的倍数(4KB),以便对齐页面大小,因为它由许多EPC页面组成。页面列表中每个项目指向的页面数量也是可配置的,这取决于目标应用程序为敏感数据应用程序分配的最大连续内存。

Escape函数

算法1

Escape函数用于动态数据重新定位,并使依赖于固定数据地址的攻击失败。如算法1中所述,Escape函数将敏感数据的最新地址与RCX中的随机数进行异或,并且隧道中与异或结果最近的空闲块将是目的块。之后,RDX中的随机数被用作目标块的起始地址的偏移,其结果为用作敏感数据的目的地地址。跨页面数据的Escape将被拆分,因为我们规定在一个Escape中,一个页面内最多只能移动4KB的数据。

Feint访问

如图2所示,为了确保Escape难以跟踪,当我们移动敏感数据时,我们还会同时访问隧道中与敏感数据大小相同的多个不相关的数据块。同时,我们将这些操作封装在一个事务中,以确保即使应用程序被一个步骤中断,数据移动仍然无法区分。由于TSX使用L1d缓存作为写集缓存,因此在数据转义时应避免L1d缓存逐出。当移入页面数据(小于4KB)时,最多访问所有64个缓存集,并且在同一缓存集中最多可以使用两个缓存行。因此,我们将额外访问𝑙 − 2单个事务中的2个不同页面。我们要求这些不相关的数据地址的位6到11是不同的。这样,Escape的规则性可以尽可能地被破坏,而不会导致事务回滚。

借助数据块标头中的元数据,我们使隧道中的数据在一定次数的访问(表示为阈值𝑇 ). 阈值决定Escape的频率

部署

表1

MoLE由两部分组成:运行库和LLVM通道。运行库用于封装隧道的操作。表1显示了运行时的接口。应用程序可以通过调用这些接口在隧道中执行分配、重新分配、释放和Escape等操作。Tunnels数据结构也由运行时定义。要初始化隧道,应该在飞地之外调用作为Ecall的init()。之后,可以在飞地内部调用其他接口。

尽管我们实现了运行时库,但原始的分配和释放空间的操作需要被库的接口所取代,并且库中的Escape操作需要插入到应用程序中。我们通过在代码中注释变量来识别敏感数据。该过程用于在中间表示(IR)级别,并且插入过程的目标是调用运行库的接口。变量可以通过两种不同的方式分配和释放:从堆(通过使用malloc和free函数)和从堆栈或数据段(例如本地或全局变量)。

如图3所示,在第一种情况下对代码进行检测更简单。我们只需要将分配和释放的调用替换为运行库的相应接口(MoLEMalloc和MoLEFree)。后一种情况更为棘手。对于局部变量,LLVM通过alloca指令在IR中声明它们。我们需要通过替换整个变量和修改所有使用变量的指令来对它们进行检测。此外,由于局部变量没有显式释放,我们不能简单地替换自由指令。因此,我们必须扫描注释变量范围内的所有出口,并在所有出口之前插入额外的MoLEFree指令。至于全局变量,我们用相同类型的指针替换这些变量,并在init()中为它们插入MoLEMalloc指令。因为它们的作用域是整个飞地,所以我们不需要插入MoLEFree指令。除了分配和释放注释变量外,我们还在所有使用注释变量的指令之前插入注释变量的MoLEscape指令。
图3
【MoLE的代码插入。MoLE利用MoLE提供的运行库功能在IR中为目标应用程序提供工具。代码片段就是一个简单的例子。红色部分为原始说明。绿色部分是在编译过程中由MoLE通行证替换或额外添加的说明。】

通过对注释变量进行检测,MoLE可以保护对敏感数据的直接访问。然而,在访问敏感数据时可能存在污染传播,如指针分配、函数调用等。在这种情况下,对注释变量的保护可能不足以保证敏感数据不会泄露。因此,我们还分析并跟踪污点传播(见图4)。
图4

在IR中,指针使用加载指令指向变量。因此,我们将使用带注释变量的加载指令的指针标记为需要保护的对象。在所有使用指针变量的指令之前,我们还插入了MoLEscape指令。除了加载指令外,通过调用指令调用函数时传递参数也会导致污染传播。由于我们无法确定参数是否为敏感数据,因此在这种情况下,我们无法直接检测被调用的函数。因此,我们克隆用带注释的变量调用的函数,并为克隆的函数提供工具。这样,我们只需要将传递参数的被调用函数替换为带注释的变量具有相应的克隆功能。为了避免函数嵌套导致的重复克隆,我们不再在克隆函数中插入调用指令。

安全分析

在本节中,我们分析了在我们的威胁模型下MoLE的安全性。对手的目标是泄露目标飞地的敏感数据。对手可以通过发动SCAs或Meltdown类型的瞬态执行攻击来实现这一点。

缓存SCA

PRIME+PROBE攻击代表了针对SGX的大多数缓存SCA。在这种攻击中,对手用自己的预设数据初始化受害者共享缓存集。一旦受害者开始执行并占用缓存行,这些缓存行上的预处理数据就会被逐出。之后,对手在探测预设时将出现缓存未命中(访问时间更长)从缓存中逐出的数据和缓存命中(较短的访问时间),同时探测其他预设数据。当受害者访问敏感数据时,通过多次重复PRIME+PROBE,对手可以利用缓存访问时间的差异来获得访问该数据的缓存访问模式。

然而,在MoLE中,由于每次对手对数据进行预处理时,对敏感数据的访问可能会导致Escape驱逐各种缓存线的预加载数据,因此对手无法在PROBE阶段获得固定结果。因此,MoLE使得检索敏感数据的缓存访问模式变得具有挑战性。

页面表SCA

页面表SCA以包围区页面的页面表条目(PTE)为目标。例如,当受害者访问具有清除PTE位0(当前标志)的页面时,会引发该页面的页面错误。当页表遍历导致PTE的引用时,其位5(访问标志)被设置。对手可以通过控制或监视PTE来获取关于受害者的页面粒度的知识。当受害者访问不同页面上的数据时,通过收集页面访问模式,对手可以确定当前正在访问哪些数据。

但在MoLE的保护下,Escape将允许敏感数据在每次访问时都位于隧道中的任何页面上。因此,访问不同页面上的数据是无法区分的。

Meltdow攻击

传统的Meltdown型瞬态执行攻击是在事先知道目标数据位置的前提下发起的。这些攻击要求受害者预先访问数据,并将其加载到缓存或其他内部缓冲区中。然后,对手将FLUSH+RELOAD攻击与由故障或协助驱动的瞬态执行相结合,以获得对数据的未经授权的访问并窃取数据。要获得所有数据,对手应重复前面的步骤。

在MoLE中,很难获得数据的确切位置。即使对手在某个时间点知道数据的地址,也需要多次攻击才能窃取所有数据。FLUSH+RELOAD攻击需要重复执行,即使是在单个攻击中也是如此,才能有效。在MoLE中,对数据的多次访问将导致数据到达Escapeto的另一个位置,从而防止数据被完全窃取。

攻击窗口

MoLE有一个攻击窗口,因为隧道中的敏感数据在达到访问阈值之前不会逃逸。我们假设阈值为𝑇 , 这是攻击窗口的大小。在攻击窗口内𝑇 , 对手可以成功发动攻击。我们假设完全攻击需要受害者访问数据𝑛 时间。什么时候𝑛 > 𝑇 , 由于Escape,攻击无法生效。我们可以通过减少𝑇 , 但这样做会增加Escape的频率,从而获得更高的性能。因此𝑇需要根据实际情况进行调整。此外,如果对手在触发Escape时试图通过单步包围执行来跟踪数据的地址,那么它也不会起作用。因为每次数据逃逸时,MoLE都会执行假访问𝑙 − 单个事务中不同页面上的2个附加数据。通过这种方式𝑙 Escape之后数据的可能位置,这使得跟踪变得困难。

单步跟踪

成功发起上述攻击(SCAs或Meltdown类型的攻击)的先决条件是获得数据访问模式甚至内存地址。在MoLE的保护下,对手需要一步一步地跟踪数据的位置,以实现这一前提。因为MoLE将Escape和feint访问的操作封装到同一事务中,所以这些操作是原子操作。当对手试图在交易中单步执行操作时,TSX会将其回滚以使此操作无效。我们通过以下方式模拟单步攻击:(1)使用SgxStep[2]工具注册自定义AEP存根,(2)撤销隧道中所有页面的权限,以及(3)注册故障处理程序以捕获#PF。事实证明,上述攻击对非原子数据位置Escape有效,但在TSX的保护下对MoLE的原子数据位置Escape失败。

评估

环境设置

在本节中,我们评估了MoLE的安全性和性能。所有实验都是在ThinkCentre上进行的,该中心配备了Intel Skylake i7-6700 3.4GHz、32KB L1缓存、16GB RAM和128M PRM。操作系统是Ubuntu 18.04,Linux内核版本4.15.0.140,英特尔SGX SDK和英特尔SGX驱动程序。我们使用Clang(6.0.1版)+LLVM(6.0.1版本)来编译MoLE的源代码。隧道的页面列表包含8个项目,并且每个项目指向EPC中由10个连续页面组成的存储器。

安全评估

首先,我们对莫勒发动了PRIME+PROBE攻击。由于实验机器的L1d缓存大小为32KB,其中包含64个缓存集,每个缓存集有8条缓存线,因此l为8(如4.2所述)。在最坏的情况下,我们认为目标应用程序通过访问敏感数据来迭代所有缓存集。为了实现PRIME+PROBE攻击[4],我们准备了连续8页数据,以填充PRIME阶段的所有缓存集。然后,我们不断地探测受害者核心的兄弟核心上的数据,并测量访问时间。因为L1d缓存是在兄弟内核之间共享的,所以我们可以从访问时间中获得受害者的缓存访问模式。在这个例子中,模式是最明显的(见图5(a))。然后,我们将MoLE应用于目标应用程序。使用Escape,目标数据的地址会不断变化。L1d缓存的位置由其地址的6–11位决定,因此访问数据时留在L1d缓存中的模式不断变化。结果表明,作为访问阈值𝑇 减少,缓存访问模式变得混乱(见图5(b),图5(c))。
图5
我们还评估了MoLE对页面的影响。如上所述,页面表SCA根据页面访问模式的差异来推断访问哪些数据。我们不断访问位于不同页面上的两个变量,并不断记录访问的页面。在没有Escape的情况下,可以很容易地区分这两个数据的页面访问模式(见图6(a)),这允许对手根据当前模式推断访问哪个变量。有了Escape,这两个变量的模式变得混乱,混乱程度与MoLE的访问阈值有关𝑇 (见图6(b)、图6(c))。
图6
然后,我们使用Foreshadow中提出的方法和SGX-Step[2]工具,试图在MoLE的保护下提取飞地中的64字节数据。与SCA不同,瞬态执行攻击可以直接威胁飞地内数据的机密性。我们让受害者不断访问关键数据,并将其加载到缓存中。然后,我们使用SGX Step工具在每次访问关键数据后中断受害者应用程序,并启动预测攻击以提取关键数据。该攻击会吊销页面权限,并在页面故障触发回滚之前使用无序执行将数据读取到缓存中。然后使用FLUSH+RELOAD来获取数据内容。我们使用MoLE来保护关键数据。如图7所示,由于攻击需要受害者多次访问数据,当Escapeis的阈值低于64(数据大小)时,被盗数据量会随着阈值T的降低而减少。因此,为了抵御这种瞬态执行攻击,Escape的阈值应该小于受保护数据的大小。
图7
Escape的新地址是根据数据的最后一个地址和存储在RDX和RCX中的随机数计算得出的。此外,考虑到性能开销,应该不频繁地重新生成随机数。因此,除了攻击之外,我们还评估了Escape在不更新随机数的情况下对数据位置的影响。为了防止Escape时多个数据相互作用,我们只将单个1字节的数据放入Tunnels中,并记录其访问的页面。结果如图8所示。如果结果完全是随机的,Escape算法的输出最好遵循均匀分布。我们计算了克雷默𝑉 [30]具有均匀分布的数据,表示为𝑉 , 以及𝑉 = 0.05529(如果𝑉 < 0.7,该结果被认为是对于均匀分布的良好拟合)。
图8

性能评估

我们选择Nbench基准套件[1]来评估MoLE的性能开销。在MoLE中,开销的主要来源来自Escape,包括在隧道内移动数据和使用事务内存。因为MoLE可以通过调整访问阈值来平衡其安全性和性能开销𝑇 , 我们使用Nbench来评估具有不同阈值的MoLE。此外,MoLE保护的Nbench的数据大小为4kB(来自Nbench的五条数据:encla_buffer1-5),这是MoLE允许的单个Escape的最大数据大小。我们测量了𝑇 ∈ {4,8,16,32,64128}。在图9中,即使访问阈值很小(𝑇 = 4) ,开销的几何平均值仅为7.89×。将阈值增加到8、16、32、64和128,开销的几何形状平均值分别为4.78×、3.14×、2.29×、1.89×和1.48×。Nbench中某些项目的开销太小,无法看到。
图9

为了显示数据大小和多线程场景对MoLE性能的影响,我们在Nbench中对NUMERIC SORT进行了额外的测试。除了访问阈值𝑇 , 受保护数据的大小也会影响性能开销MoLE。图10显示,随着受保护数据的大小增加,MoLE开销也会增加。这主要是因为数据大小的增加导致数据转义时移动的数据量更大,从而导致更大的性能开销。
图10
我们使用MoLE来保护NUMERIC SORT测试的多个线程,以评估MoLE在并发场景中的性能(见图11)。总体性能与并发量成正比。当并发达到一定水平时,性能将达到峰值。
图11

相关工作

已经提出了用于SGX的各种安全增强方案。表2总结了现有方案。在本节中,我们将从各个方面对它们与MoLE进行回顾和比较。
表2
与MoLE类似,一些防御也使用TSX来覆盖目标应用程序的侧信道信息。T-SGX[39]用TSX封装关键代码,以限制飞地的AEX的生成。通过这种方式,T-SGX可以防御通过观察页面故障而启动的页面表SCA。此外,DéjaÉVu[14]还使用TSX实现了一个基于执行的参考时钟,用于检测关键执行的中断。Cloak[19]通过在单个事务中将所有数据和代码预加载到缓存中,使用TSX来防御缓存侧通道攻击。由于TSX的使用,当对手试图单步中断程序以跟踪数据时,这些方案的事务回滚将被触发,从而阻止数据跟踪。同时,TSX还可以保证线程安全,这使得这些方案能够支持多线程场景。然而,这些方案针对的威胁类型相对单一,无法为SGX提供完整的保护。

混淆数据和指令也是SGX的一种安全增强解决方案。大多数模糊处理方案都会带来高性能开销。确定性复用[40]带来了超过4000倍的运行时性能开销。OBFSCURO[5]的开销是简单基准测试的51倍。尽管KLOTSKI[48]具有可接受的性能(仅2.3倍),但它只防御细粒度攻击。DR.SGX[6]以高速缓存线的粒度连续地重新随机化所有包围区数据。但它不适合多线程场景。更重要的是,这些方案的模糊操作不是原子操作,因此存在被特权对手跟踪数据以获取访问模式的风险.

陈提出Racing[13]通过创建影子线程来防御来自兄弟内核的缓存侧通道攻击。它们使用影子线程在飞地的执行过程中占据同级核心。尽管这种方法可以防止对手从核心发起攻击,但兄弟核心无法正常使用。因此,一半的核心无法在多线程场景中正常使用。Varis[32]克服了这一缺点,但它仍然只能防御来自双核的缓存侧通道攻击。因为它们会定期检测线程中是否发生AEX,所以可以发现单步跟踪的行为。

此外,还有其他防御措施。SGX Shield[38]在飞地程序的加载时引入了代码块级别的随机化,但可以通过在线评测来击败它。Godfreyet等人[18]刷新缓存以禁用缓存的重叠方面,作为对缓存攻击的防御。张等[49]通过定期刷新缓存来减少时间共享缓存中的副通道。

讨论

在本节中,我们将解释MoLE的潜在威胁以及克服这些威胁的方法。

在没有执行的情况下倾倒飞地

无论是侧通道攻击还是瞬态执行攻击,大多数技术都需要首先执行受害者飞地。然而,有一种方法可以在不执行的情况下转储整个飞地内容[8]。恶意内核驱动程序可以首先使用ewb从EPC中逐出页面,然后立即使用eldu指令将其加载回。当eldu将页面加载到一级缓存中时,可以在不执行目标飞地的情况下发起Meltdown类型的攻击。MoLE无法防御威胁。但SGX已经通过在SDK中的eldu指令后刷新缓存来修复这个错误。因此,更新SGX SDK可以修复威胁。

SmashEx

最近,出现了针对SGX寄存器的攻击[17]。攻击者利用AEX进程的非原子漏洞重写RSP等寄存器的内容,对飞地发起ROP攻击。由于MoLE使用寄存器存储Escape数据的随机数,因此该攻击对MoLE也是一种威胁。对于RSP寄存器,英特尔的修补方法是检查t_SP在异常处理方面是否与uSP不同。因此,对于其他寄存器,可以引用此方法。

TAA

TSX异步中止(TAA)[3]漏洞类似于MDS。当TAA挂起时,事务中尚未完成的某些加载可能会从微体系结构中读取数据,并推测性地将该数据传递给相关操作。这可能会导致微结构副作用,稍后可以对其进行测量,以推断微结构结构中数据的价值。幸运的是,TAA问题不会影响IA32_RCH_CAPABILITIES.TAA_NO(位8)=1的处理器。

总结

在这项工作中,我们提出了MoLE,一种针对SGX的侧信道攻击的缓解措施。MoLE通过飞地中的动态数据位置逃逸技术来达到防御效果。此外,我们将佯攻访问和TSX结合起来,以确保Escape不可追踪。我们设计并实现了MoLE作为一种基于半自动编译器的工具我们的分析和评估表明,MoLE对侧通道和相关威胁有效,性能可接受。

这篇关于MoLE: Mitigation of Side-channel Attacks against SGX via Dynamic Data Location Escape【ACSAC`22】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383947

相关文章

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

GNSS CTS GNSS Start and Location Flow of Android15

目录 1. 本文概述2.CTS 测试3.Gnss Flow3.1 Gnss Start Flow3.2 Gnss Location Output Flow 1. 本文概述 本来是为了做Android 14 Gnss CTS 的相关环境的搭建和测试,然后在测试中遇到了一些问题,去寻找CTS源码(/cts/tests/tests/location/src/android/locat

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

CentOS下mysql数据库data目录迁移

https://my.oschina.net/u/873762/blog/180388        公司新上线一个资讯网站,独立主机,raid5,lamp架构。由于资讯网是面向小行业,初步估计一两年内访问量压力不大,故,在做服务器系统搭建的时候,只是简单分出一个独立的data区作为数据库和网站程序的专区,其他按照linux的默认分区。apache,mysql,php均使用yum安装(也尝试

使用Spring Boot集成Spring Data JPA和单例模式构建库存管理系统

引言 在企业级应用开发中,数据库操作是非常重要的一环。Spring Data JPA提供了一种简化的方式来进行数据库交互,它使得开发者无需编写复杂的JPA代码就可以完成常见的CRUD操作。此外,设计模式如单例模式可以帮助我们更好地管理和控制对象的创建过程,从而提高系统的性能和可维护性。本文将展示如何结合Spring Boot、Spring Data JPA以及单例模式来构建一个基本的库存管理系统

Go Channel的实现

channel作为goroutine间通信和同步的重要途径,是Go runtime层实现CSP并发模型重要的成员。在不理解底层实现时,经常在使用中对channe相关语法的表现感到疑惑,尤其是select case的行为。因此在了解channel的应用前先看一眼channel的实现。 Channel内存布局 channel是go的内置类型,它可以被存储到变量中,可以作为函数的参数或返回值,它在r

15 组件的切换和对组件的data的使用

划重点 a 标签的使用事件修饰符组件的定义组件的切换:登录 / 注册 泡椒鱼头 :微辣 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes 优势 1、构建了一个用于监督原始视频去噪的基准数据集。为了多次捕捉瞬间,我们手动为对象s创建运动。在高ISO模式下捕获每一时刻的噪声帧,并通过对多个噪声帧进行平均得到相应的干净帧。 2、有效的原始视频去噪网络(RViDeNet),通过探