一种针对投机执行攻击的防御方法

文档序号:1953154 发布日期:2021-12-10 浏览:21次 >En<

阅读说明:本技术 一种针对投机执行攻击的防御方法 (Defense method for speculative execution attack ) 是由 孟筱妮 霍天霖 慈轶为 赵姗 赵培 李明树 于 2021-09-08 设计创作,主要内容包括:本发明提供一种针对投机执行攻击的防御方法,包括:将潜在的与隐蔽信道相关的所有指令标记为不安全指令,对访存指令的分类;提供LFB和TLB划分为常规区域和安全区域的缓存系统,将标记为不安全指令的访存指令在缓存系统内划分的安全区域内进行隐蔽执行和一致性维护。本发明的针对投机执行攻击的防御方法将LFB和TLB器件划分为常规区域和安全区域,安全区域进行独立的隐蔽执行和一致性维护方法,由此,本发明可以在不更改缓存状态的情况下在安全区域执行不安全指令,使得不安全的指令可以像其他指令一样被立即处理,同时避免进行大量硬件更改和由于隐蔽信道相关指令的延迟执行带来的性能开销。(The invention provides a defense method aiming at speculative execution attack, which comprises the following steps: marking all instructions related to the hidden channel as unsafe instructions, and classifying the access instructions; and providing a cache system which divides the LFB and the TLB into a normal area and a safe area, and carrying out hidden execution and consistency maintenance on the access instruction marked as the unsafe instruction in the safe area divided in the cache system. The defense method aiming at speculative execution attack divides the LFB and the TLB into a conventional area and a safe area, and the safe area carries out independent hidden execution and consistency maintenance methods, so that the invention can execute unsafe instructions in the safe area under the condition of not changing the cache state, so that the unsafe instructions can be immediately processed like other instructions, and simultaneously avoids the performance expense caused by a large amount of hardware change and delayed execution of related instructions of hidden channels.)

一种针对投机执行攻击的防御方法

技术领域

本发明涉及一种针对投机执行攻击的防御方法,属于硬件安全领域。

背景技术

投机执行是现代CPU采用的一项重要优化,可通过投机机制提高性能。然而,投机机制允许对程序中指令的执行特征进行猜测,并依据猜测结果最大程度地利用流水线资源来并行执行后续指令。当投机出现错误时,将回滚并清除流水线中错误执行的指令。这些错误执行的指令称为瞬态指令,从进入投机执行状态到发现投机错误并进行回滚的时间间隔被称为投机窗口。然而,投机执行机制引发了严重的漏洞,例如2018年提出的幽灵和熔断攻击。基于投机执行的攻击给硬件安全带来了新挑战。投机执行攻击包括两个步骤:首先,在受攻击者控制的投机窗口内以投机地访问私密数据,并将私密数据加载到寄存器中。然后,通过改变缓存微架构状态的方式构建隐蔽信道以将私密数据传输给攻击者。

防止投机执行攻击的传统防御策略是防止秘密数据的传输,可以分为两种类型:第一种是基于延迟执行的,它会延迟用于构建隐蔽信道的不安全指令的执行,直到它们通过数据流分析成为非推测性指令为止。这些防御策略以性能开销为代价提供了数据保护;第二种类型是通过添加额外硬件部件来临时存储缓存状态的改变,从而隐秘地执行瞬态指令。

在第一种类型中,非推测性数据访问(NDA),上下文敏感防护(CSF),条件推测(CS),投机污点跟踪(STT)和屏蔽推测数据(SpecShield)这类方法首先通过数据流和信息流分析来识别不安全的瞬态指令,然后延迟指令来避免不安全指令构造隐蔽信道,直到该指令可以被取消不安全状态为止。然而,这类防御方法中,对指令的延迟执行会导致性能的严重下降。

在第二种类型中,提出了防止通过避免瞬态指令更改缓存状态的方法来防御投机执行攻击。例如,隐形投机执行(InvisiSpec)利用额外的缓冲区临时保留投机数据,当缓冲区中数据变安全时,可以将数据提交到缓存中。基于撤销执行的安全投机执行(Cleanupspec)提供了一种用于安全处理瞬态指令的预执行方法。为避免阻塞瞬态指令,该方法添加了额外的存储区域来缓存访问之前记录的缓存状态,如此可以正常执行瞬态指令。当发生状态回滚时,可以恢复缓存到投机执行前的状态。现有技术中对硬件的修改要么需要添加额外器件要么需要修改内部结构,这对硬件的影响都是非常大的。尽管以上方法可以提供针对投机执行攻击的保护,但需要额外的硬件组件,增大了硬件开销。

发明内容

本发明的目的在于提供一种针对投机执行攻击的防御方法,以克服现有防护机制中硬件修改量大和性能开销大的不足,基于低成本策略来防御基于投机执行的攻击。

为了实现上述目的,本发明提供一种针对投机执行攻击的防御方法,包括:

S1:将潜在的与隐蔽信道相关的所有指令标记为不安全指令,并根据标记实现对访存指令的分类;

S2:提供LFB和TLB划分为常规区域和安全区域的缓存系统,将标记为不安全指令的访存指令在缓存系统内划分的安全区域内进行隐蔽执行和一致性维护,隐蔽执行指的是安全区域内的微架构状态无法被来自当前物理核或其他物理核的常规指令读取;所述一致性维护用于保证当前核的安全区域内的数据是除了其他物理核独占的和被其他物理核修改的数据之外的其他数据。

在所述步骤S1中,将潜在的与隐蔽信道相关的所有指令标记为不安全指令,包括:通过动态信息流跟踪技术中的污点传播机制,并且基于幽灵模型和全面模型,对投机窗口中所有指令的数据流和控制流进行污点传播分析,以将潜在的与隐蔽信道相关的所有指令的操作数均标记为污染,得到操作数标记为污染的不安全指令。

优选地,对投机窗口中所有指令的数据流和控制流进行污点传播分析,包括:

S11:在每个投机窗口开始时,将该投机窗口的执行环境中的所有的load指令的操作数均标记为污染,得到操作数标记为污染的不安全指令;

S12:利用标记为污染的操作数,进行指令之间的二次传播;

S13:每当投机窗口结束时,将投机窗口内指令的操作数均取消污染,并进行指令之间的二次传播,得到操作数没有标记为污染的常规指令。

在所述步骤S1中,根据标记实现对访存指令的分类,包括:查看各个访存指令的操作数的标记,以将访存指令分为常规load、常规store和不安全load类型的访存指令。

优选地,所述缓存系统包括等级由上至下的一级的高速缓存集合、二级的高速缓存集合和三级的高速缓存集合,所述三级的高速缓存集合位于内存的上一级;一级的高速缓存集合由一级的高速缓存、与一级的高速缓存对应分配的一级的LFB和TLB构成;二级的高速缓存集合由二级的高速缓存、与二级的高速缓存对应分配的二级的LFB和TLB构成;三级的高速缓存集合由三级的高速缓存、与三级的高速缓存对应分配的三级的LFB构成;一级和二级的LFB和TLB均分割为常规区域和安全区域。

优选地,标记为不安全指令的访存指令为不安全load类型的访存指令;所述步骤S2包括步骤S21:根据不安全load类型的访存指令在缓存系统的各级的高速缓存集合和内存中查找,以获取对应的数据,将最终获取的数据响应到数据请求端。

优选地,在缓存系统的各级的高速缓存集合和内存中查找,包括:依次查找一级的LFB的常规区域,一级的高速缓存和一级的LFB的安全区域,得到一级查找结果;根据一级查找结果尝试获取访存指令请求的数据;其中,当一级查找结果为LFB/高速缓存命中或者安全区域命中时,成功获取访存指令请求的数据;当一级查找结果为未命中时,依次查找二级的LFB的常规区域,二级的高速缓存和二级的LFB的安全区域,得到二级查找结果;根据二级查找结果尝试获取访存指令所请求的数据;当二级查找结果为LFB/高速缓存命中或者安全区域命中时,成功获取访存指令请求的数据;当二级查找结果为未命中时,查找三级的高速缓存,得到三级查找结果;根据三级查找结果获取访存指令所请求的数据;当三级查找结果为LFB/高速缓存命中时,成功获取访存指令请求的数据;当三级查找结果为未命中时,则从内存中获取对应的数据;获取的数据在响应到数据请求端的同时,根据一致性维护的要求存储于一级和二级的高速缓存集合的LFB的安全区域中分配的条目中或者不存储。

在步骤S21之前,还可以包括步骤S20:在执行所述不安全load类型的访存指令之前,查找各级的TLB的常规区域和安全区域以及内存,以根据查找结果对不安全load类型的访存指令进行地址转换;且查找结果根据一致性维护的要求存储在TLB中分配的安全区域中,或者不存储。

在进行步骤S2的同时,还包括步骤S2’:将常规的访存指令在缓存系统内的常规区域进行执行和一致性维护;所述步骤S2’包括步骤S21’:根据常规指令在缓存系统的各级的高速缓存集合的常规区域和内存中查找,以获取对应的数据,将最终获取的数据响应到数据请求端。

优选地,;所述一致性维护的要求包括:

1)对于不安全load类型的访存指令:当不安全load类型的访存指令满足以下任意一个条件时将获取到的数据在响应到数据请求端的同时,存储于安全区域中:a)数据是被其他物理核共享的;b)数据是从当前核的一级或二级的高速缓存集合中获取到的;c)数据不存在于缓存系统的任何高速缓存集合中;反之,则将获取到的数据直接响应到数据请求端;

2)对于常规load类型的访存指令:在数据到达三级的高速缓存集合时,数据的状态变为独占,其他物理核的安全区域中相同的数据全部被无效;

3)对于常规store类型的访存指令:当常规store类型的访存指令到达三级的高速缓存集合时,如果请求的数据是多核共享的或未命中三级的高速缓存时,数据的状态变为被修改,所有安全区域中相同的数据全部清除。

本发明的针对投机执行攻击的防御方法的硬件修改仅仅在于将现有的LFB和TLB器件划分为常规区域和安全区域两部分,安全区域与缓存的功能类似但进行独立的隐蔽执行和一致性维护方法;由此,本发明可以在不更改缓存状态的情况下在安全区域执行不安全指令,使得不安全的指令可以像其他指令一样被立即处理,同时避免进行大量硬件更改和由于隐蔽信道相关指令的延迟执行带来的性能开销。也就是说,本发明避免了为投机数据或微架构状态设立的额外的缓冲区器件,且器件内部结构无需改变,仅仅改变器件内部的使用方式就可以达到需求。

另外,本发明基于污点传播机制标记不安全指令,可以精准高效地识别与隐蔽信道相关的指令。再者,本发明提出了一个一致性协议来保证该安全区域中数据的安全性和有效性。

附图说明

图1是本发明的针对投机执行攻击的防御方法的流程示意图。

图2是本发明的针对投机执行攻击的防御方法所采用的缓存系统的系统架构图,其中黑色实线部分为现有技术,虚线部分为改动部分。

具体实施方式

下面通过具体实施例和附图,对本发明做进一步详细说明。

图1是本发明的系统架构图。如图1所示,本发明的针对投机执行攻击的防御方法主要包括以下步骤:

步骤S1:进行指令分类,即,将潜在的与隐蔽信道相关的所有指令标记为不安全指令,并根据标记实现对访存指令的分类;

步骤S2:提供LFB和TLB划分为常规区域和安全区域的缓存系统,将标记为不安全指令的访存指令在缓存系统内划分的安全区域内进行隐蔽执行和一致性维护,从而避免其改变缓存架构状态。其中,隐蔽执行指的是安全区域内的微架构状态无法被来自当前物理核或其他物理核的常规指令读取,由此,当前核中执行不安全指令所产生的与缓存隐蔽信道相关的微架构状态无法被来自当前核或其他核的常规指令读取;所述一致性维护用于保证当前核的安全区域内的数据是非其他物理核独占的。

在进行步骤S2的同时,还包括步骤S2’:将常规的访存指令(即并未标记为不安全指令的访存指令)在缓存系统内的常规区域进行执行和一致性维护。

由此,本发明通过在现有的硬件系统内划分安全区域,实现了以低硬件成本和性能开销来防御投机执行攻击的新机制。

即本发明的包含三个关键点:指令分类,隐蔽执行和一致性维护。

在所述步骤S1中,将潜在的与隐蔽信道相关的所有指令标记为不安全指令,具体包括:通过动态信息流跟踪技术(DIFT)中的污点传播机制对投机窗口中所有指令的数据流和控制流进行污点传播分析,以将潜在的与隐蔽信道相关的所有指令的操作数均标记为污染,得到操作数标记为污染的不安全指令。

其中,数据流是指指令间数据的依赖关系,控制流是指程序执行时指令执行序列是按照如何的控制结构前进的。为了确定是否需要在安全区域中维护不安全load操作,首先通过动态信息流跟踪技术(DIFT)对访存指令进行分类。其中,本发明可以基于以下两种防御模型对访存指令进行分类:幽灵模型和全面模型。幽灵模型用于防御一系列由于控制流指令的错误预测而在投机窗口泄漏机密数据的攻击,该模型下所有由控制流指令引发的投机窗口中的指令都会被DIFT跟踪和标记。全面模型可以防御所有以投机方式泄漏秘密数据的攻击,该模型下所有投机窗口中的指令都会被DIFT跟踪和标记。投机窗口中的指令除了由控制流指令引发还有由地址相关性预测和由异常指令引发的投机窗口。投机窗口中的指令包括访存指令,控制流指令,运算指令等等。投机窗口内的所有指令都会被跟踪,但在现有攻击技术中,会在投机窗口引发安全问题只是投机load指令,因此目前只有不安全load指令会使用安全区域。本发明既可以采用幽灵模型也可以采用全面模型。然后,处理器根据指令的类型在不同的区域中执行它们。访存指令可以分为三种类型:常规load,常规store和不安全load。

污点传播机制实际上是操作数的污染传播,如果一条任意类型的指令(不限于访存指令)的操作数是被污染的,那么这条指令就是不安全的。具体来说,通过动态信息流跟踪技术(DIFT)中的污点传播机制对投机窗口中所有指令的数据流和控制流进行污点传播分析,包括:

步骤S11:在每个投机窗口开始时,将该投机窗口的执行环境中的所有的load指令的操作数均标记为污染,得到操作数标记为污染的不安全指令;

因为投机执行环境中的任意一条load指令都有可能读取私密数据,因此将其视为不安全的访存指令,即污染源。由此,不安全指令的操作数所在的目标寄存器标记为已污染,可以用于进行污点传播。

步骤S12:利用标记为污染的操作数,进行指令之间的二次传播;

具体来说,如果某一个指令的源寄存器是另一条指令的污染的操作数所在的目标寄存器(即某一个指令存在至少一个源操作数是另一个指令的污染的目标操作数),则将该指令的目标操作数标记为污染,即该指令被标记为不安全指令,从而实现了根据指令间的污点传播。也就是说,如果某个指令的操作数与不安全的访存指令相关,则该指令的操作数也必须标记为污染,来保证该指令的安全性。

步骤S13:每当投机窗口结束时,将投机窗口内指令的操作数均取消污染,并进行指令之间的二次传播,得到操作数没有标记为污染的常规指令。

具体来说,如果一条不安全指令所有的源寄存器均变为非污染,则这条指令也变为常规指令。

本质上污点传播与取消传播的污点就是操作数。

在所述步骤S1中,根据标记实现对访存指令的分类,包括:

在将访存指令分发到执行单元(即缓存系统)之前,查看各个访存指令的操作数的标记,以将访存指令分为常规load、常规store和不安全load三类;

具体来说,对于一个load类型的访存指令,在访存指令分发前查看其操作数,如果其存在被污染的操作数,那么该访存指令的分类就是不安全load;否则,该访存指令的分类是常规load。因为本发明的防御方法关注的主要是访存操作,因此虽然所有的指令都是不安全指令,但是本发明的防御方法是根据操作数的标记只将访存指令而非任意指令分为常规load、常规store和不安全load三类。由此,通过阻止基于缓存的隐蔽通道来防御投机执行攻击,该隐蔽通道会通过投机load操作传输私密数据。现有攻击技术中,不安全store不会引发安全问题,因此不考虑标记不安全store。

由此,可以通过分类得到不安全load类型的访存指令,该不安全load类型的访存指令可以随后使用执行单元的安全区域来被执行;而常规指令则按照按常规方式执行。

在所述步骤S2中,为了隔离不安全的访存操作,本发明了设计了一个安全区域来实现不安全load类型的访存指令的隐蔽执行,其中,load类型的访存指令最终的目的是将请求的数据响应到数据请求端。该安全区域由现有硬件组件中的LFB(行填充缓冲区,LineFill Buffer)和TLB(转译后备缓冲区)的一部分存储空间构成并且安全区域修改为随进程切换刷新,以提供仅需少量硬件更改(即对LFB和TLB进行分割修改)的纯硬件防御。

如图2所示,现有的缓存系统包括设置于数据请求端和DRAM之间的多级的高速缓存集合,高速缓存集合包括一级的高速缓存、二级的高速缓存和三级的高速缓存,与一级的高速缓存和二级的高速缓存分别对应分配的LFB(行填充缓冲区,Line Fill Buffer)和TLB(转译后备缓冲区),以及与三级的高速缓存对应分配的LFB(图未示)。由此,一级的高速缓存、一级的LFB和TLB组成了一级的高速缓存集合,二级的高速缓存、二级的LFB和TLB组成了二级的高速缓存集合,三级的高速缓存集合由三级的高速缓存和LFB构成。一级的高速缓存集合、二级的高速缓存集合、三级的高速缓存集合和内存等级由上至下依次排列。因为基于缓存的隐蔽信道主要涉及到缓存系统中LFB和TLB,本发明分别将一级的LFB和TLB和二级的LFB和TLB均分割为两部分,其中一部分保持原有功能且被称为常规区域,另一部分作为安全区域用来执行和维护不安全指令。安全区域的大小与处理器和器件有关,例如,在6代intel处理器L1 LFB的大小为12条存储条目,那么本发明就会将LFB分为6条做原功能使用,6条做安全区域使用。特别地,为了避免对一致性协议进行过多的硬件修改,仅仅在一级的高速缓存集合和二级的高速缓存集合中放置安全区域而不会在三级的高速缓存集合中放置安全区域,因此,三级的高速缓存集合仅仅包括常规区域而没有设置安全区域。同时,安全区域实行了进程隔离,安全区域被绑定到当前执行的进程,因此当发生进程切换时,安全区域会被刷新。

同时,图2展示了不安全load类型的访存指令(虚线)和常规的访存指令(黑色实线)的执行数据流。

如图2所示,标记为不安全指令的访存指令为不安全load类型的访存指令;所述步骤S2具体包括:

步骤S21:根据不安全load类型的访存指令在缓存系统的各级的高速缓存集合和内存中查找,以获取对应的数据,将最终获取的数据响应到数据请求端。

在缓存系统的各级的高速缓存集合和内存中查找,包括:利用一级的高速缓存控制器(即L1缓存控制器)依次查找一级的LFB的常规区域,一级的高速缓存和一级的LFB的安全区域,得到一级查找结果;根据一级查找结果尝试获取访存指令请求的数据。

通常,在所述步骤S21中,将首先查找LFB的常规区域和高速缓存,再查找LFB的安全区域。其中,一级查找结果包括以下三种情况:LFB/高速缓存命中,安全区域命中以及未命中。

对于LFB/高速缓存命中的情况:如果发生LFB/高速缓存命中,则将不安全load类型的访存指令在不改变缓存状态的前提下作为正常load类型的访存指令执行,即根据命中的LFB等待获取请求的数据或者以常规访存操作的方式从高速缓存中获取请求的数据,获取的数据直接响应到数据请求端。具体来说,LFB(行填充缓冲区,Line Fill Buffer)用于暂存访问一级的高速缓存失败的load请求或从二级的高速缓存返回的响应数据,实际上多数情况LFB里面是没有数据的,LFB命中代表在这个load请求来之前已经有其他请求去获取相同数据了,因此不需要再向后面二级/三级等缓存结构查询,而是等前面的请求带着数据回来,直接获取数据即可。

由此,遇到高速缓存命中时,尽管执行的是不安全load类型的访存指令,但由于该访存指令只会从高速缓存获取数据,而不会改变缓存架构状态,从而可以避免构成潜在的基于高速缓存的隐蔽通道。

对于安全区域命中的情况:与处理缓存命中的过程类似,如果可以在LFB的安全区域中找到请求的数据(即一级查找结果为安全区域命中),则可以直接从LFB的安全区域中获取请求的数据,获取的数据直接响应到数据请求端。

对于未命中的情况:当不安全load类型的访存指令所请求的数据未出现在一级的LFB,高速缓存和LFB的安全区域中(即一级查找结果为未命中)时,根据不安全load类型的访存指令从二级的高速缓存集合中尝试获取对应的数据;随后,可以根据一致性维护的要求,为不安全load类型的访存指令分配一级的LFB的安全区域中的新条目,新条目用于保存上述的从下一级别的高速缓存集合或内存(此处为二级的高速缓存集合)中获取的数据,由此新条目中保存的数据可以为后续操作复用,或者,不分配新条目;并将获取的数据直接响应到数据请求端。

需要说明的是,是否分配一级的LFB的安全区域中的新条目来保存数据需要满足下文的一致性维护的要求。具体来说,如果满足1)数据是被其他内核共享的;2)数据是从当前核的一级或二级的高速缓存集合中获取到的;

3)数据不存在于缓存系统的任何高速缓存集合中的任意一条时,则需要分配安全区域中的新条目,并将获取到的数据直接响应到数据请求端;反之,则不需要分配安全区域中的新条目,不需要将获取的数据保存到安全区域中,而是仅仅将获取到的数据直接响应到数据请求端。

也就是说,当步骤S21中的一级查找结果为LFB/高速缓存命中或者安全区域命中,成功获取访存指令请求的数据;当步骤S21中的一级查找结果为未命中时,从二级的高速缓存集合中尝试获取对应的数据;获取数据的方式与上文从一级的高速缓存集合中获取对应的数据的方式完全相同,即,利用二级的高速缓存控制器(即L2缓存控制器)依次查找二级的LFB的常规区域,二级的高速缓存和二级的LFB的安全区域,得到二级查找结果;根据二级查找结果尝试获取访存指令所请求的数据。获取的数据在响应到数据请求端的同时,可以根据一致性维护的要求存储于一级的高速缓存集合的LFB的安全区域中分配的新条目(如果上文分配了新条目的话)或者不存储。

类似地,二级查找结果同样包括:LFB/高速缓存命中,安全区域命中以及未命中。其中,当二级查找结果为LFB/高速缓存命中,安全区域命中时,成功获取访存指令请求的数据;二级查找结果为未命中时,从三级的高速缓存集合中尝试获取对应的数据。

其中,从三级的高速缓存集合中获取对应的数据时,由于三级的高速缓存集合中仅仅包括常规区域而没有设置安全区域,因此,获取数据的方式为:利用三级的高速缓存控制器(即L3缓存控制器)查找三级的高速缓存和三级的LFB,得到三级查找结果;根据三级查找结果尝试获取访存指令所请求的数据。三级查找结果仅仅包括LFB/高速缓存命中以及未命中。

其中,当三级查找结果为LFB/高速缓存命中时,成功获取访存指令请求的数据;当三级查找结果为未命中时(即在LFB和高速缓存都不命中时),则直接从内存中获取对应的数据,即,将不安全load类型的访存指令转发到内存。根据上文所述,获取的数据在直接响应到数据请求端的同时,根据一致性维护的要求存储于二级的高速缓存集合的LFB的安全区域中对应分配的新条目中(如果上文分配了新条目的话)或者不存储。也就是说,不安全load类型的访存指令不可能保存在三级的高速缓存集合中(其中没有安全区域),只可能保存在二级或者更高级别的高速缓存集合的对应的新条目中。获取的数据在响应到数据请求端的同时,根据一致性维护的要求存储于一级和二级的高速缓存集合的LFB的安全区域中分配的条目中或者不存储,而不会存储于三级的高速缓存集合中。

所述步骤S2’具体包括步骤S21’:根据常规指令在缓存系统的各级的高速缓存集合的常规区域和内存中查找,获取对应的数据,将最终获取的数据响应到数据请求端(对应于常规load类型的访存指令)或者逐级地写入各级的高速缓存集合的常规区域(对应于常规store类型的访存指令)。

对于常规store类型的访存指令和常规load类型的访存指令,获取数据的方式与所述步骤S21相同,其区别仅在于,在所述步骤S21’中,一方面,只能在常规区域或者内存查找数据;另一方面,获取的数据在响应到数据请求端的同时,存储于数据所在的高速缓存集合的上级高速缓存集合的常规区域(所述常规区域可以是高速缓存或LFB)中分配的条目中(而非存储于安全区域中)。比如,常规指令从二级高速缓存中获取到指令,会将数据存储到一级高速缓存中;而当从三级高速缓存中获取到数据后,会将数据存储到一级和二级高速缓存中;又比如,当指令请求数据到一级高速缓存中时,如果一级高速缓存中没有数据,那么会在LFB中加入一个条目。当数据从低等级缓存返回一级时,数据会先写回LFB相关项,然后写入一级高速缓存,当一级高速缓存写入完毕,会将LFB对应项清除。其中,根据一致性维护的要求,在数据到达三级的高速缓存集合时,数据在三级的高速缓存集合的高速缓存行中的状态会变为独占(对于常规load类型的访存指令)或者被修改(对于常规store类型的访存指令)。

此外,在步骤S21之前,还可以包括步骤S20:在执行所述不安全load类型的访存指令之前,查找各级的TLB的常规区域和安全区域以及内存,以根据查找结果对不安全load类型的访存指令进行地址转换(即,访存指令中的地址需要从虚拟地址通过翻译转换到物理地址的翻译工作)。指令执行过程中一些部件需要使用物理地址,比如向cache取数据需要使用物理地址进行搜索,但指令中一开始处理器看到的都是虚拟地址,因此需要在向缓存发送访存请求之前先进行地址翻译,将虚拟地址翻译到物理地址。TLB的功能类似高速缓存,TLB可以缓存地址翻译结果,以加速地址翻译,提升处理器性能。否则,虚拟地址向物理地址翻译需要查询走表,耗时很长。

其中,查找结果包括:TLB命中、安全区域命中(即TLB的安全区域命中)以及未命中。在TLB命中或者安全区域命中时,查找结果(即物理地址)送给处理器前端。随后,处理器前端可以根据查找结果向缓存发送访存请求。查找结果根据一致性维护的要求存储在TLB(转译后备缓冲区)中分配的安全区域中,或者不存储。

TLB会缓存最近地址翻译的结果。当TLB查不到结果时,会查询走表来转换得到物理地址并将转换结果置于TLB中,但这种操作会引发安全问题。具体来说,虚拟地址与物理地址的映射关系保存在内存的页表中,当进行地址翻译,且TLB不命中时,就需要去内存查询页表(即走表),x86的处理器中大多保存四级页表,每一级表映射着下一级页表的地址,也就是要查四次页表才能得到正确的物理地址。此外,也有些(也有些处理器保存三级或五级页表。因此,需要将不安全load类型的访存指令的转换结果置于TLB(转译后备缓冲区)中的安全区域中。

此外,在步骤S21’之前,所述步骤S2’还可以包括步骤S20’:在执行所述常规的访存指令之前,查找各级的TLB的常规区域,得到查找结果,根据查找结果对常规的访存指令进行地址转换(即,访存指令中的地址需要从虚拟地址通过翻译转换到物理地址的翻译工作)。

其中,查找结果包括:TLB命中、安全区域命中(即TLB的安全区域命中)以及未命中。常规的访存指令的地址转换结果缓存在TLB的常规区域中,也就是说不修改常规指令的地址翻译操作。缓存方式和前面描述的高速缓存的方式类似。低级的TLB获取到的数据,向其高级的每一级TLB都存储数据。走表的结果也会存储在TLB中。TLB中没有独占状态。

由于安全区域被视为特定的缓存区域。必须保证通过不安全的load可以获得最新版本的访问数据。并且,为了维护安全区域中数据的安全性和有效性,一致性维护用于保证当前核的安全区域内的数据是非其他物理核独占的或者被其他物理核修改的,即,该数据是除了其他物理核独占的和被其他物理核修改的数据之外的其他数据。

一致性维护的具体要求如下:

1)对于不安全load类型的访存指令:

首先,必须确保安全区域中的数据不是过期数据。为此,不允许将其他物理核独占或被其他物理核修改(其他核即非当前核的核)的数据存储在安全区域中,只能将多核共享的、当前物理核独占或被当前物理核修改的数据存储在安全区域中。同时,其他核的任何操作无法获取到当前核的安全区域中的数据,其他核只能跨核获取当前核的常规区域的数据。

数据是否能被存储到安全区域是缓存中的数据状态决定的。更准确地说,当不安全load请求的数据满足以下任意一个条件时可以将从低级的存储结构中获取到的数据填充到当前等级的高速缓存集合的安全区域中:

a)数据是被其他物理核共享的;

其中,数据是否是被其他物理核共享的可以从获取缓存/内存中的数据状态确定。现有的缓存系统维护一套一致性协议,他将缓存中的数据状态分为:不可用,独占,共享,被修改。这个状态在load获取数据时就可以确定。其中,这些状态是由现有的缓存系统的一致性协议自行维护的。

b)数据是从当前核的一级或二级的高速缓存集合(可能是安全区域或者常规区域)中获取到的;

数据状态可以通过查看缓存中的数据状态来确定,需要说明的是,当前核获取到的可能是当前核独占的,也可能是共享或被当前物理核修改的,但这三种状态都是可以被存储到安全区域的。此外,每个核都有各自的一级和二级的高速缓存集合,而三级的高速缓存集合是多核共用的。

c)数据不存在于缓存系统的任何高速缓存集合中;

数据不存在缓存系统中,就是说数据是从内存中获取到的。获取到的数据是没有缓存状态的。获取的数据会直接填充到一级和二级的高速缓存集合的安全区域中。

在条件c)时,保证安全区域内的数据是非其他核独占的原理如下:因为三级的高速缓存集合(即L3缓存)的数据是多核共享的,且原有缓存架构会维护缓存是逐级包含的,也就是说三级的高速缓存集合的数据会包含所有核各自的二级的高速缓存集合的数据,同时还会有二级的高速缓存集合所没有的数据,也就是保证所有二级的高速缓存集合的数据是三级的高速缓存集合的子集。同理,二级的高速缓存集合和一级的高速缓存集合也是这种关系。那么,因为有这种关系存在,根据访存指令所请求的数据在三级的高速缓存集合处的数据状态就可以确定请求的数据是否被保存在其他物理核,是否被其他物理核独占以及是否在三级的高速缓存集合的上级的安全区域中被其他物理核修改。

因此,只需要满足上述条件a)、b)、c)的其中一条条件,就可以存储数据;反之,则将获取到的数据直接响应到数据请求端。

load操作最终的目的是将请求的数据相应到请求端。通常,在执行不安全load类型的访存指令时,数据从低级别存储结构返回(即获取数据)时,需要完成数据填充安全区域和响应请求端两个操作(只需要满足上述条件a)、b)、c)的其中一条条件)。而在“反之”这种情况下,就需要跳过数据填充安全区域的步骤,直接将数据响应到数据请求端。“反之”的情况具体比如,获取到的数据状态是其他物理核独占或被其他物理核修改,这个在三级的高速缓存集合就可以确定。获取到的数据直接响应数据请求端,不用填充安全区域。也就是说,尽管当前核的一级和二级的高速缓存的被修改后的状态可以被保存在安全区域中,但当数据从其他核或三级高速缓存中获取,且数据状态已经是被修改和独占时,该数据不能保存在安全区域中。

对于常规load类型的访存指令,在三级的高速缓存集合中执行常规load类型的访存指令时,在某一个物理核从内存中获取数据,获取的数据在响应到数据请求端的同时,在保存到三级的高速缓存集合(即数据到达三级的高速缓存集合)时,在三级的高速缓存集合的高速缓存行中数据的状态会变为独占。此时,为了避免破坏安全区域数据的非独占性,其他物理核的安全区域中相同的数据需要全部被无效。具体来说,是将安全区域的无效请求发送到当前核以外的所有物理核,无效请求会检查所有安全区域,然后将相关条目无效。

对于常规store类型的访存指令,执行常规store类型的访存指令的步骤包括:先利用常规store类型的访存指令去查询各级的高速缓存集合以获取数据,再将访存指令获取到的数据逐级地写入高速缓存集合,并最终将写好的新数据存储到一级的高速缓存集合,此时当前核的每一级的高速缓存集合都是被修改状态。与常规load类型的访存指令相似,当常规store类型的访存指令获取的数据到达三级的高速缓存集合时,如果请求的数据是多核共享的或未命中三级的高速缓存集合时(查看数据在缓存中状态即可确定数据是否是多核共享的),则将数据的状态变为被修改,违反了安全区域只保存非独占数据的规则,因此需要将所有安全区域中相同的数据需要全部清除。

实验验证结果:

实验环境采用Gem5模拟器,硬件配置为单核(SPEC2006)/四核(PARSEC3.0)处理器。一级的高速缓存32KB,8路;二级的高速缓存256KB,8路;三级的高速缓存2MB,16路。其中常规TLB原有64个条目,在测试中常规TLB分配48个条目,安全区域分配16个条目。常规LFB原有12个条目,在SPEC2006测试中常规LFB分配8个条目,安全区域分配4个条目;在PARSEC3.0测试中常规LFB分配6个条目,安全区域分配6个条目。对于防御可行性测试,在部署本发明的模拟器中执行幽灵攻击,实验结果显示攻击失败,不能获取私密数据。对于性能评估实验,SPEC2006数据集性能负载的实验结果如表1所示。测试PARSEC3.0数据集性能负载的实验结果如表2所示。

表1 SPEC2006实验结果列表

表2.PARSEC3.0实验结果列表

从实验结果看出,对于两个防御模型,在SPEC2006实验中,本发明的性能负载仅为2.38%和3.22%;在PARSEC3.0实验中,本发明的性能负载仅为5.15%和4.62%。与目前最先进的防御机制之一投机污点跟踪技术(STT)相比,对于两个防御模型,在SPEC2006实验中,STT的性能负载为8.5%和14.5%;在PARSEC3.0实验中,STT的性能负载为5.93%和8.31%。可以得出,本发明通过适度的硬件修改和低性能开销来实现有效的防御,大大改善了由于防御机制带来的性能负载。

综上所述,本发明是一种通过避免不安全指令改变缓存状态同时以低硬件成本和性能开销来防御投机执行攻击的新机制。其中提供了两种防御模型:幽灵模型和全面模型,可以有效防御现有的利用缓存隐蔽信道的投机执行攻击。同时,SPEC2006和PARSEC3.0测试集对本防御机制的性能进行了评估。在SPEC2006实验中,幽灵和全面模型分别以2.38%和3.22%的性能开销提供了针对投机执行攻击的防御;在PARSEC3.0实验中,幽灵和全面模型分别以5.15%和4.62%的性能开销提供了针对投机执行攻击的防御。这表明本发明可以通过适度的硬件修改和低性能开销来实现有效的防御。

15页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种用于非易失性存储器的微冲击瞬态自毁芯片及其自毁方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类