投机性执行攻击提出了一个巨大的安全威胁,能够在恶意猜测下读取任意程序数据,然后通过微架构隐蔽通道窃取数据。本文提出了一种高安全性、高性能的硬件机制——投机污染跟踪(STT)来阻止这些攻击。其主要思想是,只要我们能够证明转发的结果没有到达潜在的隐蔽通道,就可以安全地执行和选择性转发读取机密的推测指令的结果。本文的技术核心是一个新的抽象,以帮助识别所有微架构隐蔽通道,以及一个快速识别何时隐蔽通道不再构成威胁的体系结构。我们在附带的文档中进一步对该方案进行了详细的形式化分析。在SPEC06工作负载上评估时,STT相对于不安全的机器会产生8.5%或14.5%的性能开销。
投机执行攻击,如幽灵15打开了硬件安全的新篇章。在这些攻击中,恶意的投机执行导致注定要压缩的指令访问后来传输秘密在microarchitectural秘密通道比如处理器缓存。26
考虑“幽灵党V1”(图1)作为例子。在现代处理器上,分支方向在处理器管道的早期被预测,以便在分支谓词解析之前获取后续指令。在投机性执行攻击中,攻击者“误用”分支预测器以预测“已占用”,即使分支谓词最终解析为“未占用”。这意味着在分支预测和解析之间,程序投机性地执行所取(不正确)的路径:访问一个值秘密
可能超出…范围的array1
并将该值作为地址传递给第二个加载读取array2
.在本文的其余部分中,我们将把这种投机性访问的数据视为机密。
图1。Spectre变体1假设缓存行大小为64字节。携带潜在机密数据的变量被标记为绿色。如果如果
条件被预测为true,则array2的缓存行由秘密
加载到缓存中(第3行),即使两个加载最终都被压缩。
在图1,第二负载形成微架构隐蔽通道。具体地说,在现代处理器上,加载的结果是依赖于地址的(通过扩展)秘密
-依赖于)硬件资源的使用,因为存在硬件结构,如缓存。因此,可以监视负载的硬件资源使用情况或程序的执行时间的攻击者可以使用这些信息进行推断秘密
.
更糟糕的是,攻击者可以自由控制从
能重复攻击用不同吗从
泄露受害者记忆中的不同秘密值。此外,尽管上面的例子涉及的是Spectre V1,但是还有许多其他使用类似原理的方法来泄漏机密数据。例如,通过其他类型的处理器错误猜测访问秘密信息,或者通过其他微架构隐蔽通道泄露这些秘密。
1.1.本文的辩护方法
这是一种安全但保守的阻止方式所有投机性执行攻击——不管猜测的来源或微架构隐蔽通道的选择——都是延迟执行所有可以访问秘密的指令,直到这些指令变得非投机性为止。在今天的几乎所有攻击中,这都意味着阻塞所有负载,直到它们是非投机性的,这相当于禁用投机性执行。
本文提出了一种有原则的、高性能的机制,实现了与上述保守方案相同的安全保障。关键是投机执行是安全的,除非投机访问的数据(秘密)到达隐蔽通道。在很多情况下,投机指令要么不接触秘密,要么不形成隐蔽渠道,因此可以在投机下自由执行。例如,Spectre V1的第一次加载(图1)形成一个隐蔽通道,但该通道只泄漏攻击者选择的地址&array1(下)
-而不是存储在那个地址的秘密数据。因此,不需要保护此负载的执行。同样,许多指令(例如简单算术)即使它们的操作数是秘密值也不会形成隐蔽通道。只有当秘密被传递到隐蔽通道(例如,第二次加载)时才会发生图1)必须采取保护措施。
为了实现这个想法,我们提出了投机污染跟踪(STT),这是一个通过飞行指令跟踪投机访问数据流的框架(类似于动态信息流跟踪/DIFT)21)直到它即将到达可能形成隐蔽通道的指令。然后STT将延迟数据的转发,直到它成为非推测状态的函数或由于推测错误而导致执行失败。为了安全和高效,我们应对了两个关键挑战。
现在我们更详细地描述这两个组件。
1.2.描述微架构隐蔽通道的新抽象
隐蔽通道有不同的形状和大小。例如,攻击者可以监视负载如何与缓存交互,15SIMD单元的计时,20.执行管道端口争用,4分支预测状态,1和更多。要全面阻断这些不同渠道的信息泄露,就需要了解它们的共同特点。
为了解决这一挑战,本文提出了一种新的抽象,通过它可以观察投机微架构上的隐蔽通道,发现指令可以创建隐蔽通道的新点,并发现了一类新的隐蔽通道。我们发现所有的隐蔽通道都是两种类型之一,我们称之为显式和隐式通道(与显式和隐式信息流有关,19,22分别)。在一个明确的通道,数据直接传递给指令,指令的执行会产生与操作相关的硬件资源使用情况,而该资源使用情况会显示数据。例如,加载对缓存的影响取决于加载地址,15的第三行图1.在一个隐通道在美国,数据间接影响指令如何(或是否)执行,而这些资源使用的变化会揭示数据。例如,在分支之后执行的指令会显示分支谓词。4,20.根据泄漏发生的时间和形成通道的秘密依赖条件的性质,本文进一步定义了隐式通道的子类。
关键进步:安全预测。通过对隐式通道的研究,取得了重要进展如何安全地使用硬件预测器。“幽灵党”攻击源自于攻击者误以为预测者泄露了秘密。通过对隐式通道的抽象,STT强制执行一种策略,防止任意预测器错误地通过任何微架构隐蔽通道泄露任何机密数据。本文展示了这如何使现有的预测器保持启用状态而不会泄露隐私,从而显著提高性能。在未来,我们希望安全预测的想法能够推动进一步的创新,也就是说,通过支持新的预测器的设计,而不必担心打开新的安全漏洞。事实上,我们的后续工作使用这个想法安全地改进了创建显式通道的指令的性能。28
1.3.快速、安全地禁用保护的机制
一旦我们有了阻止秘密数据进入隐蔽通道的机制,下一个问题是,如果猜测被证明是正确的,何时以及如何取消这种保护。这对性能至关重要,因为延迟数据转发的时间超过必要的时间会增加后面的指令本身被延迟的机会。
STT用一种安全但激进的方法解决了这个问题,一旦数据成为非投机状态的函数,就重新启用数据转发。例如,在图1,这对应于分支谓词解析的时刻。这表示最早的安全点,但通常在硬件中是很难确定的。例如,延迟指令的操作数可能是跨越许多控制流和推测操作的复杂依赖链的结果。直观地说,要确定数据是非推测状态的函数,就需要回溯程序执行的向后部分,这样做的代价很高。
尽管存在上述挑战,STT提出了一种简单的硬件机制,可以在单个周期中对任意指令禁用保护/重新启用转发,使用类似于传统指令唤醒逻辑的硬件。其关键思想是,要确定数据是否是非投机状态的函数,只需确定是否最小的Load(其返回值会影响数据)已经变成非投机性的。检查此条件类似于为每条指令跟踪单个额外的依赖项,而不是执行复杂的向后切片跟踪。
1.4.安全保证和形式分析
在主要论文的同时,我们正式证明了STT执行了一种新的不干涉形式9对于投机性访问的数据。简而言之,我们表明,使用STT,随着时间的推移,硬件资源使用模式与最终压缩的数据无关。我们发布了一份配套的技术报告29对实现STT的处理器模型上的该属性进行了详细的形式化分析和安全性证明。
1.5.把它们放在一起
STT把所有东西放在一起,提供了高安全性和高性能。它不需要分区或刷新微架构资源,也不需要更改缓存/内存子系统或软件堆栈。在SPEC06工作负载上评估时,STT相对于不安全的机器会产生8.5%或14.5%的性能开销(取决于威胁模型)。
我们现在提供关于处理器微架构的更多细节。关于Spectre攻击的基础知识,请参见第1节。
无序的执行。动态调度处理器以并行和程序外顺序执行指令,以提高性能。11,23在处理器中提取和解码指令前端,派出来预订台调度,发布在处理器中执行(功能)单元后端,最后退休(此时它们更新体系结构系统状态)。指令依次通过前端、后端和退休阶段,可能是无序的和有序的。按顺序退出是通过在一种称为重新顺序缓冲区(ROB)的硬件结构中排队指令来实现的。13在指令取指令的顺序中,并在完成指令到达ROB头时收回指令。指令在ROB中按其年龄来引用,也就是说,如果I1之前我2在取的顺序,然后我1是老比我2.
投机执行。投机执行通过执行有效性不确定的指令而不是等待确定其有效性来提高性能。如果这样的投机指令被证明是有效的,它最终会被撤销;否则,它是压扁处理器的状态被回滚到有效状态。(作为一个副产品,所有低于错误猜测点的指令也会被压制。)
现代处理器中有多种类型的推测,与不同的指令和事件相关。例如,为了在分支之后立即获取指令,即在分支的谓词解析之前,现代处理器使用分支预测。分支预测器(通常)是处理器前端的有状态结构,它基于分支的程序计数器和分支历史上是否被占用等信息来预测分支的方向。如果处理器后端稍后解析分支谓词并确定预测不正确,那么随后获取的所有指令都将被压缩,控制流将被转移到正确的路径。
攻击者模型。STT假设一个强大的攻击者可以从系统中的任何地方监视任何微架构隐蔽通道,并诱导任意推测执行以访问机密并创建隐蔽通道。例如,攻击者可以通过缓存/内存系统监视隐蔽通道,15视算术,10港口竞争,4分支预测,1等。
我们注意到,上述攻击者非常强大,甚至可能是不切实际的。我们的目标是通过防御这样的攻击者,进而防御更弱、更现实的攻击者。
范围:保护投机性访问的数据。投机性执行攻击由两个部分组成。14,20.首先,一个指令将一个潜在的秘密读入寄存器,使它能够被更年轻的指令访问。我们称这个指令为访问指令。14第二,较年轻的指令或通过微架构隐蔽通道泄露秘密的指令。访问指令几乎总是一个负载,15,24但有些攻击使用特权寄存器读取。5
我们根据访问指令是否注定要被压缩来区分攻击(瞬态)或注定要退休(nontransient).STT的目标是阻止包含注定要被压缩的访问指令的攻击,如图2.这些攻击可以访问正确执行永远不会访问的数据,这通常导致能够从内存中的任何位置读取。涉及绑定到退出的访问指令的攻击不在范围内。它们只能泄漏已退休(或注定要退休)的注册文件状态,而不是任意内存,它们的泄漏可以由程序员或编译器推理,并使用补充技术(例如,数据无关的isa)阻止27).
图2。STT的范围是保护投机性访问的数据不通过任何微架构隐蔽通道泄漏。保护非投机性访问的值超出了范围。
STT为隐蔽通道提出了一种新的抽象方法(图3).在我们的抽象中,隐蔽通道被分为两类:显式的而且隐式的频道。一个明确的通道,与信息流中的显式流有关,19,22其中是否包含数据(例如,机密)直接传递给指令,该指令的执行会创建与操作相关的硬件资源使用情况,而该资源使用情况会显示数据。一个例子是加载指令对缓存状态的更改。一个隐通道,与隐式流有关,19,22是一个数据间接影响一条指令或多条指令如何执行(或是否执行),而这些资源使用中的变化将揭示数据。一个例子是分支指令,它的结果决定后续指令,从而决定是否使用某个功能单元。
我们进一步发现了隐式通道泄漏的新方式,并发现了全新的隐式通道类别。图4举例说明"传统的" (图4 (a))和新(图4 (b)和(c))通道。我们将通过通道显示的值表示为秘密。这些示例假设攻击者可以监视基于缓存的隐蔽通道,即程序的内存访问模式。我们注意到在许多情况下(例如,图4 (a)和(b)),负载可以被任何指令替换;特别是,不一定要形成显式通道。恰当的例子,秘密
在任何示例中都没有直接作为加载地址传递,但仍然存在泄漏。
图4。隐式隐蔽通道显示的示例秘密
.假设旧的投机访问指令已经被读取秘密
进入寄存器,例如,第2行图1.攻击者可以看到发送到内存系统的加载地址的顺序。对于商店,我们假设在商店退出时发生地址转换和其他与地址相关的操作。处方
,变化中
,rz
寄存器。每一个隐蔽通道都可以作为“隐蔽通道”插入到现有的攻击中图1.例如,我们可以用上面的(a) - (c)中的一个替换第3行。
4.1.基于预测与基于分辨率的泄漏
首先,我们发现隐式通道可能在两个点泄漏:当进行控制流预测时(如果有的话)和当预测被解决时。召回、分支预测和解析分别发生在处理器前端和后端(第2节)。这根据攻击者的能力创建了新的泄漏类型。下面考虑一个分支,它的谓词依赖于一个秘密。
在预测的时间,如果预测器结构在过去的某个时间根据秘密信息更新过,那么在这个分支被提取之后(在分支预测之后但在解析之前)提取的指令序列就会泄露秘密。例如,如果攻击者运行重复的实验,并且基于分支解析的方式推测更新分支预测器,那么分支预测器“学习”秘密,并基于该秘密做出未来的预测。
在解决时间,分支也会泄露秘密即使预测器状态没有根据秘密数据更新,因为不正确的预测将导致管道挤压。参见中的代码片段图4 (b),其时间显示为秘密的函数图5.如果攻击者知道树枝不会被攻击(例如,通过预先启动它)15),“南瓜”表示树枝被拿走了。攻击者可以通过不同的效果观察挤压,例如,程序计时或负载问题两次。
图5。基于分辨率的隐式通道图4 (b)由于依赖于秘密的管道压缩。当分支(B)解决时,它会根据是否发生挤压泄漏秘密,因为这会导致较年轻的负载执行一次或两次。有一个类似的情况,当分支被预测采取。
4.2.显式与隐式分支
其次,我们发现隐式通道可以有两种特征显式的或者一个隐式的分支。例如,在图4 (c),没有显式的控制流指令,加载地址似乎不依赖于秘密数据。
然而,可能仍然存在一个隐含的渠道。例如,考虑一台执行store-to-load转发的机器。通过这种优化,处理器可以转发数据(处方
)直接从较老的飞行存储到较年轻加载的输出寄存器(变化中
),而不是等待存储退役并访问缓存,如果存储/加载地址别名,即if秘密= =rZ。
Store-to-load转发因此创建了一个隐式通道,因为是否执行缓存访问取决于秘密。
另一种具有类似含义的常见技术是记忆依赖推测。18这种优化允许负载(推测地)从缓存中读取,即使较旧的动态存储有未解析的地址,也就是说,它推测不需要存储到加载的转发。在我们的例子中,如果旧的存储地址稍后解析,我们就有了秘密= =rZ,
负载和较年轻的指令将压扁,引起类似的管道扰动,如4.1节所述。(注意,这不是已知的Spectre变种4 (SSB)攻击。12,25在那次袭击中,一个访问指令通过存储绕过读取过期数据。我们的攻击涉及存储绕过作为隐蔽通道。)
一个重要的观察结果是,如上所述的硬件优化可以建模为隐式分支,而显式的控制流指令,如分支,可以视为明确的分支。也就是说,store-load pair在图4 (c)可以重写如图6,如果秘密尚未解析,则预测“隐式分支”方向。从这个意义上说,隐式分支也可能在预测和/或解决时泄漏(章节4.1)。例如,依赖于内存的推测有时是通过一种称为存储集预测器的有状态预测器实现的,6它试图猜测存储-加载对何时会寻址别名,别名也可以“学习”秘密数据的函数。
图6。将存储加载对重写为隐式分支。implIf揭示了一个潜在的隐蔽通道,它是内存混叠到旧存储的函数。如果微架构支持存储到负载转发或内存依赖推测,就会发生这种情况。
4.3.隐性渠道分析的启示
自本文提出以来,隐式通道分类已被证明是一种健壮而有用的方法,可以表示和查明微架构攻击漏洞的根本原因。例如,在NetSpectre攻击中,20.秘密分支谓词有条件地导致SIMD指令发出,从而触发SIMD单元上电事件。一个常见的误解是,攻击的根本原因是SIMD单元上电时间。然而,STT的抽象表明,根本原因是一个显式的分支,“修复”SIMD单元并不能防止攻击。
甚至更微妙的是,该抽象演示并提供了隐式流和隐私泄漏的情况确实发生了尽管没有根据程序语义发生。例如,在软件级别,两者都不是图4 (b)(c)也不会被标记为创建隐蔽通道。图4 (b)不会被认为是通道,因为加载与分支的控制和数据无关。同样的,图4 (c)不会被认为是一个渠道,因为,虽然可能有信息流从处方
来变化中
由于地址混叠,这个信息流(似乎)不会影响内存访问模式。一般来说,分析表明,在高级处理器中,必须考虑到与程序语义正交的微妙微架构决策,以推断可能的微架构隐蔽通道。
最后,抽象应用于大量的微架构优化。例如,store-to-load转发和内存依赖推测的表示(图6)也捕捉到了记忆一致性推测的行为,8值预测,16和其他优化。作为参考,表1指定现有攻击和各种硬件优化的通道类型。正如我们将在下一节中看到的,能够将不同的优化表示为隐式分支的预测将使STT能够应用统一的机制来通过各种结构(如分支、存储集等、预测器)阻止泄漏。
STT以类似于动态信息流跟踪(DIFT)的方式在管道中流动时“污染”秘密(投机性访问)数据。7,21STT框架(第5.1节)定义了哪些数据应该被污染,哪些指令可能泄露数据,因此应该受到保护,以及何时可以禁用保护。与传统的DIFT方案不同,STT跟踪ROB指令之间受污染数据的流动,并在产生数据的指令变为非投机性(章节5.2)时自动“清除”数据。基于污染信息,STT应用新的保护机制来阻塞显式和隐式隐蔽通道(章节5.3)。
5.1.框架和概念
STT要求微架构师定义哪些指令将秘密写入寄存器(访问指令,主要是加载),哪些指令可以形成显式通道(发射器),以及形成隐式通道分支谓词的指令(包括显式和隐式分支)。最后,架构师必须定义可见性点,之后投机被认为是安全的(例如,在最古老的未解决分支的点,或在ROB的头部)。如果可见点指的是比访问指令更老的指令,我们称之为访问指令不安全的;否则,则被考虑安全的。
我们为微架构师提供识别访问和传输指令的指南。如果一条指令有可能返回秘密,它就应该被归类为访问指令。除了负载之外,只有少量这样的指令可以手动识别。
如果一条指令的执行创建了与操作数相关的资源使用,可以(部分或完全)显示操作数,则该指令应该被归类为传输指令。识别隐式分支是类似的:架构师必须分析某些动态指令的资源使用是否作为的函数发生了变化一些其他的指令的操作数。通过(离线)分析信息在sram位和触发器级别的每个功能单元中的流动方式,可以形式化这个定义,以确定资源使用是否依赖于输入值,采用OISA的风格27或GLIFT22正式的框架。自动执行这种分析是未来重要的工作。
5.2.污染和非污染传播
从概念上讲,在每个时钟周期中,STT对ROB中的指令应用以下污染规则:
在实现中,污染传播被装载在无序核心中的现有寄存器重命名逻辑上。因此污染很快。相比之下,在单个周期内很难将“无污染”传播到访问指令的所有依赖项,使其变得安全。我们在第6节中使用一个单周期的un玷污实现来解决这个问题。
与之前的DIFT方案不同,21STT不需要跟踪内存系统的任何部分或跨存储到加载转发的污染。原因在于,因为负载是访问指令,所以只能根据它们是否已达到可见点来确定其输出的污染程度。也就是说,不安全负载的输出总是受污染的。
5.3.阻止秘密通道
鉴于STT的污染/消除污染数据规则及其对隐蔽通道的抽象,STT通过跨每种类型应用统一规则来阻塞所有隐蔽通道。
阻止显式的渠道。STT通过延迟任何操作数被污染的传输指令的执行,直到它们被清除,从而阻塞显式通道。这种方案带来的开销相对较低,因为它只在传输指令具有污染的操作数时才延迟它们的执行。例如,只返回一个秘密而没有(传输)一个秘密操作的加载—例如在第2行上的加载图1及时执行。然而,3号线的负载将被延迟并最终被压扁,从而挫败攻击。
阻塞隐通道。STT通过强制一个不变量来阻塞隐式通道,即获取/执行/压缩的指令序列永远不依赖于受污染的数据。也就是说,STT使程序计数器独立于受污染的数据。为了有效地执行这个不变量,而不需要延迟跟随受污染分支的指令的执行,我们引入了两个通用原则来中和隐式通道的源:
以上原则可以有效地应用于任何硬件预测器不可能被用作泄漏投机性访问数据的隐蔽通道。
从概念上讲,保护机制不需要推断隐式通道是由显式分支还是隐式分支引起的:两种类型都有一个谓词,并且在两种情况下与谓词相关的策略是相同的。但是,实现必须标识谓词。我们通过展示STT微体系结构如何处理显式分支来说明这一点。
应用原则#1(基于预测的通道)。STT要求每个前沿预测器结构仅基于未受污染的数据进行更新。这使得前端获取的执行路径不受不安全访问指令输出的影响。具体地说,STT只在分支的谓词和目标地址不受污染之后,才将分支的解析结果传递给直接/间接分支预测器;如果分支在此之前被压扁,预测器将不会更新。
图7 (c)演示了STT对代码段的推测执行的影响图7 (a),其中的分支B0
被错误地预测为被带走了。无论攻击者进行多少次实验,预测的分支方向B
会不会是一个函数秘密
时,因为分支预测器没有更新B解决了。因此,执行路径不依赖于秘密
(上vs下)—只取决于预测的分支方向(左vs右)。
图7。STT执行(a)中的代码,其中包括一个未受污染的分支B0,一个访问指令读取秘密
,和一个隐式通道(由于分支B)。
应用原则#2(基于分辨率的通道)。STT将延迟压缩被错误预测的分支,直到该分支的谓词恢复正常。结果,一个注定要压缩的具有受污染谓词的分支(如分支B在图7 (c))将永远不会被压缩并重新执行,从而防止4.3节中讨论的隐式通道泄漏。作为图7 (c)显示,注定要被挤压的分支B一旦具有未受污染谓词的旧(错误预测的)分支被压缩,则最终将被压缩。因此,挤压不会泄露任何关于分支解析的信息。重要的是,解析分支是安全的一旦它的谓词将不受污染,即使谓词受污染的旧分支尚未解决。
STT只会增加的延迟恢复从一个污染的分支的错误预测。例如,在图7 (b),加载不会在B解析后立即执行。幸运的是,受污染的分支错误预测只是整个分支错误预测的一小部分,因为成功的投机需要准确的分支预测,所以这在一开始是不常见的。
隐式的分支。本文应用STT的原理来确保几个常见的微架构优化,这些优化可以被定义为隐式分支,即:store-to-load转发、内存依赖推测和内存一致性推测。在此过程中,本文详细介绍了处理隐式通道时所出现的各种优化方法和实例。具体来说,显式/隐式分支是否具有预测步骤可以尽早解决,或者可以通过其他方式进行优化。例如,因为store-to-load转发只能产生两个可观察的结果(发出加载或从先前的存储转发),所以我们通过无条件访问缓存来隐藏发生的结果。
我们以前假设无污染信息会立即沿着数据依赖项传播。这在硬件上很难实现,因为一个字的受污染数据可能是涉及许多访问指令的复杂依赖链的功能。
一旦受污染的寄存器所依赖的所有访问指令到达可见点,即变为安全的,则需要清除受污染的寄存器。我们的关键观察结果是,仅当最小的访问指令变得安全,因为在处理器重新排序缓冲区(ROB)中,程序顺序中的指令变得非投机性。我们称这个最年轻的访问指令为最年轻的菌根(YRoT)。
确定YRoT是通过修改处理器前端的重命名逻辑来完成的。具体来说,被重命名的指令X的YRoT由为X产生参数的指令的YRoT的最大值(1)给出,如果这些指令不是访问指令;或者(2)生成X参数的指令的ROB索引,否则。(按照惯例,我们假设ROB索引从头到尾递增。)重命名后,YRoT与指令一起存储在其保留站中,从概念上讲,它是该指令的额外依赖项。当可见点发生变化时,它的新位置被广播给正在运行的指令,类似于正常的回写广播,并且允许执行YRoT小于可见点新位置的指令(假设它们的其他依赖关系得到满足)。整个体系结构需要对前端重命名逻辑、YRoT在保留站中的存储以及将YRoT与可见点(与正常指令唤醒逻辑相比较)进行比较的逻辑进行适当的更改。
图8显示了一个示例。假设使用Spectre攻击模型,即能见度点将设置为最老的未解析分支的ROB索引。ROB包含3个未解决的分支(b1b3
)和传送指令(M3
),其操作数/地址r8
是两个访问指令的返回值(M1
而且平方米
).M3
是否传输指令(因为它是一个加载指令),并且可能因为对分支的错误推测而潜在地泄露秘密B1
而且B2
是否会影响负载返回的数据M1
而且平方米
的地址M3
通过数据依赖关系。
图8。示例,显示显示ROB状态快照的YRoT跟踪。加法(add)指令用于表示算术(非负载)。如果YRoT设置为'-',则意味着该指令最年轻的依赖访问指令是退休状态的一部分。
一方面,数据依赖链从加载M1
一直到加载M3
是相当复杂的。也就是说,ROB索引6处的指令依赖于索引5和索引3,索引8依赖于索引6,等等。重新遍历这个数据流图以传播无污染的数据,类似于向后跟踪切片,将是昂贵的。另一方面,YRoT依赖链相对简单。每条指令只跟踪构成其依赖链的最年轻的负载(例如load)平方米
参看指令6、8和9)B1
而且B2
解决,能见度点前进到点的分支B3
(ROB索引7).因为7大于5(传输指令的YRoT)M3
),M3
此时允许执行。注意,依赖链本来可以更复杂,使用额外的分支和算法依赖来分离负载平方米
和负载M3
,但这不会改变安全执行load的时刻M3。
重要的是,上述方案只有在应用STT的机制进行阻塞后才是安全的这两个显式和隐式通道(第5节)。也就是说,该方案要求r8
不是投机数据的函数吗在负荷M2变成非投机性的确切时刻。这就需要这个分支B3
不受推测数据(通过对隐式通道的保护实现)和其他可能导致显式通道在同样安全之前不执行的干预指令的影响(通过对显式通道的保护实现)。
我们在配套文件中正式证明29STT执行了一种新颖的不干涉概念:在执行的每一步,a的值注定要失败寄存器(由绑定到压缩的访问指令写入的寄存器)不会影响执行中未来的可见事件。这适用于所有微架构计时和基于干扰的攻击。例如,该属性确保程序的完成时间和硬件资源使用—对于所有硬件结构,如缓存、分支预测器等—完全独立于注定值。
分析中的关键挑战是如何避免“展望未来”来确定一条指令是否注定要被废弃。我们通过将STT机器与一个非投机顺序处理器一起运行来解决这个问题,这允许我们验证STT机器的分支预测,并确定一个预测是否会导致错误猜测。
我们在21个SPEC和9个PARSEC工作负载下评估STT。结果显示在图9.相对于不安全的机器,STT只增加13.0%/18.2%的开销(在SPEC和PARSEC基准测试中平均),这取决于攻击模型是否只考虑控制流猜测(Spectre)或所有类型的猜测(未来)。与第1节中描述的基线安全方案(DelayExecute)相比,STT在Spectre模型中平均减少了4.0X的开销,在future模型中平均减少10.5X的开销。这表明使用STT防御更强的攻击模型是可行的,而不会牺牲太多性能。
图9。SPEC06和PARSEC基准套件的性能评估。对于Spectre和future攻击者模型,STT以更小的性能开销优于基线安全方案(DelayExecute)。
这项工作部分由NSF拨款CNS-1816226, Blavatnik红十字国际委员会在TAU, ISF拨款2005/17,以及英特尔战略研究联盟(ISRA)拨款资助。我们感谢Joel Emer、Sarita Adve和Shubu Mukherjee非常有益的讨论。我们要特别感谢我们在英特尔的同事,他们在整个项目的开发过程中提供了重要的反馈,特别是Fangfei Liu, Matthew Fernandez, Frank McKeen和Carlos Rozas。
1.阿西icmez, O., Seifert, j . p。,Koc, C.K. Predicting secret keys via branch prediction. InIACR 06年(2006)。
2.Aldaya, a.c., Brumley, b.b., ul Hassan, S. García, c.p, Tuveri, N. Port争夺乐趣和利润。在IACR的18(2018)。
3.Andrysco, M., Kohlbrenner, D., Mowery, K., Jhala, R., Lerner, S., Shacham, H.关于亚正常浮点数和异常计时。在标普的15(2015)。
4.Bhattacharyya, A., Sandulescu, A., Neugschwandtner, M., Sorniotti, A., Falsafi, B., Payer, M., Kurmus, A. SMoTherSpectre:通过端口争用利用投机执行。在CCS的19(2019)。
5.Canella, C., Bulck, j.v., Schwarz, M., Lipp, M., von Berg, B., Ortner, P., Piessens, F., Evtyushkin, D., Gruss, D.瞬态执行攻击和防御的系统评估。在USENIX安全的19(2019)。
6.基于存储集的内存依赖预测。在ISCA 98(1998)。
7.Dalton, M., Kannan, H., Kozyrakis, C. Raksha:软件安全的灵活信息流架构。在ISCA 07年(2007)。
8.Gharachorloo, K., Gupta, A., Hennessy, J.提高记忆一致性模型性能的两种技术。在ICPP 91(1991)。
9.Goguen, J.A, Meseguer, J.安全策略和安全模型。在1982年IEEE安全与隐私研讨会(1982)。
10.Großschädl, J., Oswald, E., Page, D., Tunstall, M.加密软件通过早期终止乘法的侧信道分析。在(2009年)。
11.轩尼诗,j.l.,帕特森,检察官计算机体系结构:定量方法6th经济日报。摩根·考夫曼出版公司,2017年。
12.英特尔。2018年Q2投机执行侧通道更新。https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00115.html.
13.约翰逊,M。超标量体系结构的微处理器设计。新泽西州恩格尔伍德悬崖普伦蒂斯大厅,1991年。
14.Kiriansky, V., Lebedev, I.A, Amarasinghe, S.P, Devadas, S., Emer, J. DAWG:在推测执行处理器中对缓存定时攻击的防御。在微的18(2018)。
15.Kocher, P., Genkin, D., Gruss, D., Haas, W., Hamburg, M., Lipp, M., Mangard, S., Prescher, T., Schwarz, M., Yarom, Y. Spectre攻击:利用投机执行。在标普的19(2019)。
16.利帕斯提,威尔克森,C.B,沈,j.p。价值定位和负荷值预测。在ASPLOS 96(1996)。
17.珀西瓦尔,c。为了好玩和利益而丢失了宝藏。在BSDCan 2005论文集(2005)。
18.雷曼,G.,考尔德,B.积极负荷推测的预测技术。在98年微(1998)。
19.基于语言的信息流安全。IEEE j .选取。21 Commun领域。, 1(2003年1月),5-19。
20.Schwarz, M., Schwarzl, M., Lipp, M., Gruss, D. Netspectre:通过网络读取任意内存。在ESORICS的19(2019)。
21.徐国荣,李建伟,张丹,Devadas, S.基于动态信息流跟踪的安全程序执行。在ASPLOS 04年(2004)。
22.Tiwari, M., Wassel, h.m., Mazloom, B., Mysore, S., Chong, f.t., Sherwood, T.完成从门向上的信息流跟踪。在ASPLOS 09年(2009)。
23.一种利用多个算术单位的有效算法。11 . IBM J. Res. Dev, 1(1967), 25-33。
24.Van Bulck, J., Minkin, M., Weisse, O., Genkin, D., Kasikci, B., Piessens, F., Silberstein, M., Wenisch, T.F., Yarom, Y., Strackx, R.预示:提取到英特尔SGX王国的钥匙与短暂的无序执行。在USENIX安全的18(2008)。
25.Yan, M., Choi, J., Skarlatos, D., Morrison, A., Fletcher, C.W., Torrellas, J. InvisiSpec:在缓存层次结构中使投机执行不可见。在微的18(2018)。
26.Yarom, Y., Falkner, K. Flush+Reload:高分辨率,低噪声,L3缓存侧通道攻击。在USENIX安全的14(2014)。
27.余杰,熊丽丽,Hajj, M.E, Fletcher, C.W.数据无关ISA扩展用于侧通道抵抗和高性能计算。在nds的19所示。https://eprint.iacr.org/2018/808.
28.Yu, J., Mantri, N., Torrellas, J., Morrison, A., Fletcher, C.W.投机数据无关执行:为安全和高效的投机执行动员安全预测。在ISCA 20。
29.于,J.,严,M.,凯扎,A.,莫里森,A.,托雷拉斯,J.,弗莱彻,C.W.投机污染跟踪(STT):一种形式分析。技术报告,伊利诺伊大学香槟分校和特拉维夫大学,2019年。http://cwfletcher.net/Content/Publications/Academics/TechReport/stt-formal-tr_micro19.pdf.
©2021 0001 - 0782/21/12 ACM
允许为个人或课堂使用部分或全部作品制作数字或硬拷贝,但不得为盈利或商业利益而复制或分发,且副本在首页上附有本通知和完整的引用。除ACM外,本作品的其他组件的版权必须受到尊重。允许有信用的文摘。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,都需要事先获得特定的许可和/或费用。请求发布的权限permissions@acm.org传真(212)869-0481。
数字图书馆是由计算机协会出版的。版权所有©2021 ACM, Inc.
没有发现记录