本发明属于处理器微体系结构设计领域,涉及一种基于缓存命中状态识别假安全依赖冲突的安全处理器微体系结构设计方法。
背景技术:
推测执行是高性能处理器中提升指令并行能力的基本性能优化措施之一。然而,“幽灵”类漏洞的披露揭示了现有高性能处理器中,推测执行技术存在安全隐患。从移动端至云端等不同的应用场景下,几乎所有商业高性能处理器都面临着被攻击者在错误推测的窗口期内窃取敏感信息的风险。
“幽灵”类漏洞的产生依赖于两点。1)处理器采用推测执行降低由未被解析的指令导致的流水线堵塞引起的性能损失。但预测机制很难保证完全准确。因此在错误预测时,后续的指令仍然执行,在确定错误预测后,会将体系结构状态恢复至正确状态,重新执行。然而,在错误预测期间对微体系结构上的改变却不会被恢复。2)在计算机体系结构设计中,缓存的初衷即利用程序执行过程中具有显著的空间局部性。考虑到时序、布局布线的影响,靠近核内的缓存不宜过大,故当前处理器采用多级缓存来保证程序的局部性。访问不同级别的缓存延迟不同,越靠近处理器访存管理模块的部分延迟越小。因此,在错误推测执行阶段,对访存内容所处缓存层级的改变有可能被攻击者通过分析延迟差距,反推出敏感程序执行期间的私密信息。
针对这些漏洞,一种解决方法是在发生推测执行时插入栅栏指令,触发推测执行的指令未被解析前,阻止后续访存指令的执行。然而,在正常程序执行过程中,大部分访存操作是安全的。这种方法堵塞所有访存操作,必然会引起严重的性能下降。另一种解决方法是更新微码,在人工或者编译器的帮助下,分析程序执行时可疑的片段,进行定点防御。然而静态分析很难保证覆盖面,动态分析则需要消耗大量的时间。为进一步刻画推测执行侧信道与推测执行指令的联系,安全依赖为触发推测执行操作与超前推测执行指令之间建立了依赖关系,但是简单地堵塞根据依赖关系分析被标记为可疑的访存操作同样会带来严重的性能下降。
技术实现要素:
为了在保证防御基于缓存侧信道的推测执行漏洞的前提下,降低推测执行机制中引入安全特性带来的性能损失,本发明通过区分攻击中缓存状态变化的原因,利用缓存结构的局部性,提出一种基于缓存命中状态的处理器芯片假安全依赖冲突的识别方法,动态识别假安全依赖。本方法仅仅需要在缓存做很小的改动,无需操作系统或软件系统信息,对于软件透明,同时攻击者无法利用软件来干预此类假安全依赖的判断。
安全依赖在未被解析的指令与后续超前推测执行的指令之间建立了依赖关系,并对存在安全依赖的访存指令添加标记,流水线后端可以通过分析依赖关系,采取相应的防御措施。
基于此,本发明采用如下技术方案:
一种基于缓存命中状态的处理器芯片假安全依赖冲突的识别方法,包括以下步骤:
1)在访问缓存单元时,根据当前访存操作请求的安全依赖标记,判断当前访存操作是否在缓存中命中,进而确定当前访存操作的安全依赖的真假;
2)如果当前访存操作的安全依赖为真,则执行防御策略;如果当前访存操作的安全依赖为假,则执行当前访存操作,并将当前从缓存中读取的数据返回到流水线,从而达到安全与性能的平衡。
与现有技术相比,本发明的积极效果为:
本发明采用在程序执行过程中,根据访存操作是否标签(tag)命中,动态地从被判定为存在安全依赖关系的访存操作中识别出假安全依赖的。由于程序执行时往往具备良好的空间局部性,大部分访存操作将在缓存命中。因此,本发明将识别出大量的假安全依赖。允许这些假安全依赖操作正常执行,可以保证性能。对于真相关依赖,阻止其对缓存内容的改变,保证安全性。最终达到安全性与性能的平衡。
附图说明
图1是基于缓存命中状态的假安全依赖冲突识别方法应用示意图。
具体实施方式
为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。
本发明提出的基于缓存命中状态的处理器芯片假安全依赖冲突的识别方法,其所采用的技术方案主要包含以下内容:
一)动态判断假安全依赖
在访问缓存单元时,根据当前访存操作请求的安全依赖标记,并依据当前访存操作是否在该级缓存中标签(tag)命中,即tag数组中是否已经记录当前访存操作请求的内容,来判断该当前访存操作的安全依赖的真假:
如果当前访存操作在缓存中未命中,则当前操作需要从低级缓存或内存中读取新的缓存行至当前缓存。此次操作不仅仅会引入新的缓存行,而且可能会将原有的缓存行替换出去。这些变化都有可能被攻击这利用,反推出敏感信息,则判定当前访存操作的安全依赖为真。
如果当前访存操作在缓存中命中,则说明当前访存操作不会读取新的缓存行,即不会改变缓存内容的状态。此时,判定当前访存操作的安全依赖为假。
二)选择性地执行访存操作
当当前访存操作的安全依赖为真时,则执行防御策略,例如可以阻止该访存操作的执行;当发现安全依赖为假时,则允许该访存操作正常地执行,并将此次从缓存中读取的数据返回到流水线。
针对上述基于缓存命中状态的动态检测假安全依赖冲突识别方法,现列举一实施例,其示意图如图1所示,其主要工作过程包含以下几项内容:
1)安全依赖信息的传递
在仍保留程序执行序的阶段甄别出访存操作是否安全依赖于之前的指令后,需要将标注的安全依赖标签信息伴随访存请求共同传递至缓存单元。安全依赖标签信息可以通过在指令中附加位或者通过单独的表等方法提供给缓存单元。安全依赖标签以一位可以表示是否存在安全依赖,也可以通过多位区分不同级别的安全级别,以进行不同的处理方式。
2)缓存中对安全依赖标签的检查
在缓存的标签(tag)比较结束后,得到当前访存是否在缓存中命中的信息。依据此信息,若此访存操作命中,且1)中传递的安全依赖标签为真,那么此次访存操作的安全依赖为真,否则,此访存操作不存在安全依赖或存在假安全依赖。
3)缓存对访存请求的处理
对于真安全依赖,则阻止其后续的访存操作,直到其安全依赖解决之后,再次从保留当前访存请求的队列中重新发起访存操作。但本发明不限于采用阻止执行的防御方法。对于假安全依赖和不存在安全依赖的访存操作,允许其正常执行,将访存信息返回给流水线,例如读写单元、寄存器等。考虑到缓存中存储的一致性状态也可能存在信息泄露,可以在被依赖的指令解析后,再更新这些信息,或者采用不更新的方法。本发明包括但不限于这两种实现方式。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
1.一种基于缓存命中状态的处理器芯片假安全依赖冲突的识别方法,其特征在于,包括以下步骤:
在访问缓存单元时,根据当前访存操作请求的安全依赖标记,判断当前访存操作是否在缓存中命中,进而确定当前访存操作的安全依赖的真假;
如果当前访存操作的安全依赖为真,则执行防御策略;如果当前访存操作的安全依赖为假,则执行当前访存操作,并将当前从缓存中读取的数据返回到流水线。
2.如权利要求1所述的方法,其特征在于,在判断出安全依赖关系的真假后,将标注的安全依赖标签信息同访存请求一起传递给缓存单元。
3.如权利要求2所述的方法,其特征在于,所述安全依赖标签信息通过在指令中附加位或者通过单独的表传递给缓存单元。
4.如权利要求2所述的方法,其特征在于,安全依赖标签为一位或多位,为一位时用来表示是否存在安全依赖,为多位时用来区分不同安全级别。
5.如权利要求1所述的方法,其特征在于,如果当前访存操作在缓存中未命中,则当前访存操作从低级缓存或内存中读取新的缓存行至当前缓存,引入新的缓存行,并判定当前访存操作的安全依赖为真;如果当前访存操作在缓存中命中,则判定当前访存操作的安全依赖为假。
6.如权利要求1或5所述的方法,其特征在于,命中是指命中缓存中标签,此时标签数组中会记录当前访存操作请求的内容。
7.如权利要求1所述的方法,其特征在于,所述防御策略包括:阻止当前访存操作的执行,直到安全依赖解除,再次从保留当前访存请求的队列中重新发起访存操作。
8.如权利要求1所述的方法,其特征在于,在程序执行序的阶段甄别出当前访存操作是否安全依赖于之前的指令。
9.如权利要求8所述的方法,其特征在于,甄别出之前的被依赖的指令后,选择更新访存信息或者不更新访存信息。
10.如权利要求1所述的方法,其特征在于,流水线包括读写单元、寄存器。
技术总结