掌桥专利:专业的专利平台
掌桥专利
首页

一种面向安全防护的分支结果快速确定方法及装置

文献发布时间:2023-06-19 18:25:54


一种面向安全防护的分支结果快速确定方法及装置

技术领域

本发明属于处理器体系结构安全领域,具体涉及一种面向安全防护的分支结果快速确定方法及装置。

背景技术

分支预测技术是现代处理器用于提高程序执行效率的关键性技术,大大降低了由分支指令带来的流水线延迟,高准确度的分支预测可以给处理器带来极大的性能提升。但是近年来曝光出了幽灵(Spectre)系列的漏洞族,显示出典型现代处理器体系结构的设计存在严重的安全问题,对处理器用户产生了极大的安全威胁。幽灵漏洞族利用了对分支预测技术的误导训练,使得处理器推测执行攻击者精心构造的代码序列,非授权访问由各种处理器和操作系统安全机制保护的数据,进而利用高速缓存等侧信道泄露数据。

防御这类攻击最根本的是从源头进行防护,也就是防止被恶意触发推测执行,攻击者就无法成功瞬态执行非授权访问的代码。现有在源头层面对幽灵漏洞进行防御的措施为防止对所有分支指令进行分支预测,在硬件层面主要方法是禁用分支预测,在软件层面主要方法是编译时在分支指令后插入fence指令。这类防御措施等效于在处理器执行到分支指令后暂停流水线,等到确定分支指令分支结果后再执行,这样处理器相当于未采用分支预测技术,导致程序执行效率下降,牺牲了由分支预测技术带来的巨大性能提升,代价较大。然而,根据幽灵系列漏洞攻击的原理,首先需要触发错误的推测执行,然后在处理器处理错误预测并恢复现场的窗口期内执行恶意代码,恶意代码中包含了泄露秘密信息的代码片段,在处理器处理完毕错误预测时,恶意代码泄露的秘密信息已经留存在了微体系结构状态,最后将秘密信息从微体系结构状态中恢复出来即可。因此,要破坏幽灵系列漏洞攻击的流程,可以通过提前确定分支指令分支结果的方法,缩小处理器处理错误预测并恢复现场的窗口期,进而实现安全防护的目的。

发明内容

本发明要解决的技术问题:针对现有技术的上述问题,提供一种面向安全防护的分支结果快速确定方法及装置,本发明将处理器流水线中执行阶段(EX)才能确定的分支结果提前到指令译码阶段(ID),缩小处理器处理错误预测并恢复现场的窗口期,使得恶意代码没有足够的时钟周期完成任务,从而破坏幽灵系列漏洞攻击的流程,实现安全防护的目的,同时降低了现有防护措施带来的性能损失。

为了解决上述技术问题,本发明采用的技术方案为:

一种面向安全防护的分支结果快速确定方法,包括:

S101,在取指阶段完成对条件分支指令的识别和预译码;

S102,提前在译码阶段对条件分支指令的分支目标地址和分支结果进行计算,并根据分支结果进行流水线控制和程序计数器PC值的选择以读取下一条指令,从而使得条件分支指令的分支结果的确定从执行阶段提前到译码阶段以缩小条件分支指令的恢复窗口。

可选地,步骤S101包括:在取指阶段从指令高速缓存中取出一条指令之后,识别该指令是否是条件分支指令,若不是条件分支指令,则直接向指令计数器选择模块发送选择信号,将程序计数累加值送入指令高速缓存读取模块以读取下一条指令,结束并退出;否则,对分支指令进行预译码,得到条件分支指令的寄存器号、操作符和立即数。

可选地,所述识别该指令是否是条件分支指令具体是指根据将指令的编码上的指定位与对应指令集体系结构下的条件分支指令的预设编码位进行比较,如果两者一致则判定该指令为条件分支指令,否则判定该指令不是条件分支指令。

可选地,所述对分支指令进行预译码是指根据对应指令集体系结构下的指令规范,从指令的指定字段中取出条件分支指令的寄存器号、操作符和立即数。

可选地,步骤S102中在译码阶段包括:

S201,根据预译码得到的条件分支指令的寄存器号获取操作数值;

S202,将操作数值和预译码得到的条件分支指令的立即数,根据预译码得到的条件分支指令的操作符进行比较得到是否发生分支转移的分支结果,使得条件分支指令的分支结果的确定从执行阶段提前到译码阶段以缩小条件分支指令的恢复窗口;

S203,如果分支结果为发生分支转移,则根据对应指令集体系结构下的指令规范计算分支目标地址,将分支目标地址发送到程序计数器PC的选择模块以读取下一条指令,清理处理器现场;如果分支结果为未发生分支转移,则将程序计数器PC的累加值发送到程序计数器PC的选择模块以读取下一条指令,无需清理处理器现场;

S204,将程序计数器PC中存储的地址发送给指令高速缓存读取模块以读取下一条指令。

可选地,步骤S203中将分支目标地址发送到程序计数器PC的选择模块以读取下一条指令或者将程序计数器PC的累加值发送到程序计数器PC的选择模块以读取下一条指令后均包括更新通过指令计数器计数更新指令计数值,所述程序计数器PC的累加值为由指令计数器的指令计数值和预设的地址自增量相加得到。

本发明还提供一种用于应用所述面向安全防护的分支结果快速确定方法的装置,包括:

指令预译码器,用于在取指阶段完成对条件分支指令的识别和预译码;

寄存器堆,用于存放和提供条件分支指令的寄存器号、操作符和立即数;

比较器,用于在译码阶段根据件分支指令的立即数和寄存器号对应的操作数进行比较获得是否发生分支转移的分支结果;

分支目标地址计算单元,用于在分支成功时根据对应指令集体系结构下的指令规范计算分支目标地址;

加法器,用于计算程序计数器的累加值;

地址选择器,用于根据分支结果,在分支目标地址和程序计数器PC的累加值之间择一作为下一条指令地址发送到程序计数器PC的选择模块以读取下一条指令;

所述指令预译码器的输出端分别与寄存器堆以及分支目标地址计算单元相连,所述寄存器堆的输出端与比较器的输入端相连,所述比较器的输出端与地址选择器的控制端相连,所述分支目标地址计算单元、加法器的输出端分别与地址选择器的输入端相连,所述地址选择器的输出端用于输出下一条指令地址并同时作为分支目标地址计算单元的输入。

可选地,所述分支目标地址计算单元包括指令计数器和分支目标地址计算加法器,所述指令计数器与地址选择器的输出端相连以用于根据下一条指令地址进行计数以得到指令计数器地址,所述分支目标地址计算加法器用于将指令预译码器输出的寄存器号、指令计数器地址两者相加后作为分支目标地址;所述加法器用于将指令计数器地址、预设的地址自增量两者相加后作为计算得到的程序计数器的累加值。

可选地,所述比较器的输入端和寄存器堆之间还设有两个比较操作数选择器,用于选择立即数和寄存器号对应的操作数两者之一输入到比较器的一个引脚,以支持寄存器-寄存器比较的条件分支指令和寄存器-立即数比较的条件分支指令。

此外,本发明还提供一种计算机设备,包括相互连接的微处理器和存储器,其特征在于,所述微处理器中包含所述面向安全防护的分支结果快速确定装置。

和现有技术相比,本发明主要具有下述优点:

1、本发明将处理器流水线中执行阶段(EX)才能确定的分支结果提前到指令译码阶段(ID),缩小处理器处理错误预测并恢复现场的窗口期,使得恶意代码没有足够的时钟周期完成任务,从而破坏幽灵系列漏洞攻击的流程,实现安全防护的目的,同时降低了现有防护措施带来的性能损失。

2、不同于现有攻击触发层面进行防护的防御措施,本发明采用的方法是针对幽灵系列漏洞攻击的攻击流程中恶意代码在处理器恢复窗口中执行的阶段,通过缩小恢复窗口实现安全防护,实现性能代价更小。

附图说明

图1为本发明实施例方法的基本流程示意图。

图2为本发明实施例装置的结构示意图。

图3为本发明实施例装置在取指阶段和译码阶段的工作流程示意图。

具体实施方式

根据幽灵系列漏洞攻击的原理,首先需要触发错误的推测执行,然后在处理器处理错误预测并恢复现场的窗口期内执行恶意代码,恶意代码中包含了泄露秘密信息的代码片段,在处理器处理完毕错误预测时,恶意代码泄露的秘密信息已经留存在了微体系结构状态,最后将秘密信息从微体系结构状态中恢复出来即可。因此,要破坏幽灵系列漏洞攻击的流程,可以通过提前确定分支指令分支结果的方法,缩小处理器处理错误预测并恢复现场的窗口期,进而实现安全防护的目的。同于现有攻击触发层面进行防护的防御措施,本发明采用的方法是针对幽灵系列漏洞攻击的攻击流程中恶意代码在处理器恢复窗口中执行的阶段,通过缩小恢复窗口实现安全防护。下面通过具体实施案例和附图对本发明进行进一步详细阐述,此处描述的具体实施案例仅用于解释本发明而不用于限定本发明。

如图1所示,本实施例面向安全防护的分支结果快速确定方法包括:

S101,在取指阶段完成对条件分支指令的识别和预译码;

S102,提前在译码阶段对条件分支指令的分支目标地址和分支结果进行计算,并根据分支结果进行流水线控制和程序计数器PC值的选择以读取下一条指令,从而使得条件分支指令的分支结果的确定从执行阶段提前到译码阶段以缩小条件分支指令的恢复窗口。

本实施例面向安全防护的分支结果快速确定方法针对幽灵系列漏洞攻击的攻击流程,采取缩小恢复窗口的安全防护方法,对于条件分支指令采用提前确定分支结果的方法,将条件分支指令分支结果的确定从执行阶段提前到了译码阶段,大幅缩小了恢复窗口,从而避免了条件分支指令被利用进行幽灵系列漏洞攻击,同时也降低了现有方案导致的性能损失。

本实施例中,步骤S101包括:在取指阶段从指令高速缓存中取出一条指令之后,识别该指令是否是条件分支指令,若不是条件分支指令,则直接向指令计数器选择模块发送选择信号,将程序计数累加值送入指令高速缓存读取模块以读取下一条指令,结束并退出;否则,对分支指令进行预译码,得到条件分支指令的寄存器号、操作符和立即数。

本实施例中指令预译码时需要将指令集中的分支指令划分为两类指令,即非条件分支指令和条件分支指令,具体的划分与特定的指令集体系结构相关,但都可以直接通过对指令进行简单预译码来实现指令类别的识别。本实施例中,所述识别该指令是否是条件分支指令具体是指根据将指令的编码上的指定位与对应指令集体系结构下的条件分支指令的预设编码位进行比较,如果两者一致则判定该指令为条件分支指令,否则判定该指令不是条件分支指令。以RISC-V指令集为例,其控制转移指令有两种:无条件跳转和有条件分支,其中直接跳转指令JAL的后七位编码为1101111,可以通过这七位直接确定该指令为无条件跳转指令,而有条件分支指令后七位编码为1100011,同样可以用轻量级的预译码器识别。

本实施例中,所述对分支指令进行预译码是指根据对应指令集体系结构下的指令规范,从指令的指定字段中取出条件分支指令的寄存器号、操作符和立即数。以RISC-V指令集为例,对于识别到的条件分支指令,其rs1字段和rs2字段直接包含了比较的操作数所在的寄存器号,该指令指示的比较运算也可以通过funct3字段直接确定。其他指令集也是如此,可以根据编码规范实现相应的预译码器进行指令的识别和划分,并确定比较运算的操作符和操作数,其中操作数可以为寄存器值或立即数。

本实施例中,步骤S102中在译码阶段包括:

S201,根据预译码得到的条件分支指令的寄存器号获取操作数值;

S202,将操作数值和预译码得到的条件分支指令的立即数,根据预译码得到的条件分支指令的操作符进行比较得到是否发生分支转移的分支结果,使得条件分支指令的分支结果的确定从执行阶段提前到译码阶段以缩小条件分支指令的恢复窗口;

S203,如果分支结果为发生分支转移,则根据对应指令集体系结构下的指令规范计算分支目标地址,将分支目标地址发送到程序计数器PC的选择模块以读取下一条指令,清理处理器现场;如果分支结果为未发生分支转移,则将程序计数器PC的累加值发送到程序计数器PC的选择模块以读取下一条指令,无需清理处理器现场;

S204,将程序计数器PC中存储的地址发送给指令高速缓存读取模块以读取下一条指令。

本实施例中,步骤S203中将分支目标地址发送到程序计数器PC的选择模块以读取下一条指令或者将程序计数器PC的累加值发送到程序计数器PC的选择模块以读取下一条指令后均包括更新通过指令计数器计数更新指令计数值,所述程序计数器PC的累加值为由指令计数器的指令计数值和预设的地址自增量相加得到。

需要说明的是,步骤S203中计算分支目标地址的方法也和特定的指令集体系结构相关,同样也可以通过简单的译码和计算得到目标地址并确定比较运算的结果。以RISC-V指令集为例,条件分支指令的目标跳转地址为符号拓展的12位立即数,该立即数可以从指令的立即数字段通过字段的位组合得到,然后对该立即数进行符号位拓展,最后再和PC值相加即可得到目标跳转地址。其他指令集也有类似的指令集编码规范,可以依据相关指令集规范实现对应的目标地址计算模块。对于分支结果的计算,以RISC-V指令集为例,直接通过预译码的到的寄存器号从寄存器堆中获取操作数,并依据预译码器提供的操作符进行比较即可。其他指令集可能包含立即数操作数,同样将其作为操作数依据相应的操作符直接进行比较即可。

综上所述,本实施例面向安全防护的分支结果快速确定方法不同于现有攻击触发层面进行防护的防御措施,其原理针对幽灵系列漏洞攻击的攻击流程中恶意代码在处理器恢复窗口中执行的阶段,通过缩小恢复窗口实现安全防护,实现性能代价更小。同时,为了实现恢复窗口的缩小,本实施例面向安全防护的分支结果快速确定方法将分支结果的确定在处理器流水线中的阶段中提前。为了更快地确定分支结果,本实施例面向安全防护的分支结果快速确定方法不再在执行阶段(EX)才确定分支结果,而是在译码阶段(ID)就增加比较单元进行比较,从而大幅提前分支结果的确定。

如图2所示,本实施例还提供一种用于应用前问所述面向安全防护的分支结果快速确定方法的装置,包括:

指令预译码器,用于在取指阶段(IF)完成对条件分支指令的识别和预译码;指令预译码器在取指阶段(IF)确定分支指令是否符合本实施例的方法,并预译码得到用于比较的寄存器号或立即数值以及比较的操作符;

寄存器堆,用于存放和提供条件分支指令的寄存器号、操作符和立即数;

比较器,用于在译码阶段根据件分支指令的立即数和寄存器号对应的操作数进行比较获得是否发生分支转移的分支结果;比较器在译码阶段根据分支指令的操作符对输入的两个操作数进行比较,将比较结果用于处理器核进一步使用;

分支目标地址计算单元,用于在分支成功时根据对应指令集体系结构下的指令规范计算分支目标地址;

加法器,用于计算程序计数器的累加值;

地址选择器,用于根据分支结果,在分支目标地址和程序计数器PC的累加值之间择一作为下一条指令地址发送到程序计数器PC的选择模块以读取下一条指令;

所述指令预译码器的输出端分别与寄存器堆以及分支目标地址计算单元相连,所述寄存器堆的输出端与比较器的输入端相连,所述比较器的输出端与地址选择器的控制端相连,所述分支目标地址计算单元、加法器的输出端分别与地址选择器的输入端相连,所述地址选择器的输出端用于输出下一条指令地址并同时作为分支目标地址计算单元的输入。

如图2所示,本实施例分支目标地址计算单元包括指令计数器和分支目标地址计算加法器(图2中位于上侧的加法器),指令计数器与地址选择器的输出端相连以用于根据下一条指令地址进行计数以得到指令计数器地址,所述分支目标地址计算加法器用于将指令预译码器输出的寄存器号、指令计数器地址两者相加后作为分支目标地址;所述加法器用于将指令计数器地址、预设的地址自增量两者相加后作为计算得到的程序计数器的累加值。

如图2所示,本实施例比较器的输入端和寄存器堆之间还设有两个比较操作数选择器,用于选择立即数和寄存器号对应的操作数两者之一输入到比较器的一个引脚,以支持寄存器-寄存器比较的条件分支指令和寄存器-立即数比较的条件分支指令。

如图3所示,本实施例用于应用前问所述面向安全防护的分支结果快速确定方法的装置的工作过程如下:1)当从指令高速缓存中取出一条指令之后,将该指令送入预译码模块,依据与相关指令集对应编码规范,识别该指令是否为条件分支指令。2)如果该指令不是分支指令,则直接向指令计数器选择模块发送选择信号,将程序计数累加值送入指令高速缓存读取模块读取下一条指令。3)如果该指令是一条条件分支指令,则将预译码得到的操作数对应的寄存器号、操作符和立即数分别送入寄存器堆、比较器和目标地址计算模块。寄存器堆根据寄存器号返回操作数值,将其送入比较器,依据操作符计算比较结果确定是否进行分支。目标地址计算模块依据特定指令集中该指令目标地址的计算方法计算得到目标地址,然后向程序计数器选择模块传输地址,同时程序计数累加值也发送到程序计数器选择模块。4)如果比较器输出表明发生了分支转移,比较器输出控制信号给程序计数器选择模块发送控制指令,选择分支目标地址发送到程序计数器,同时清理处理器现场;如果比较器输出表明未发生分支转移,比较器输出控制信号给程序计数器选择模块发送控制指令,选择程序计数累加值发送到程序计数器,无需清理处理器现场。最后处理器将程序计数器中存储的地址发送给指令高速缓存读取模块读取下一条指令。本实施例用于应用前问所述面向安全防护的分支结果快速确定方法的装置同样也针对幽灵系列漏洞攻击的攻击流程,采取缩小恢复窗口的安全防护方法,这是现有防护技术未使用过的。对于条件分支指令采用提前确定分支结果的方法,将条件分支指令分支结果的确定从执行阶段提前到了译码阶段,大幅缩小了恢复窗口,从而避免了条件分支指令被利用进行幽灵系列漏洞攻击,在防护的同时也降低了现有方案导致的性能损失。

需要说明的是,本实施例方法和装置不依赖于某一种特定的指令集体系结构,而是适用于所有符合条件的指令集体系结构,同时本实施例方法和装置适用于任何包含寄存器-寄存器比较的条件分支指令和/或寄存器-立即数比较的条件分支指令的指令集体系结构。

此外,本实施例还提供一种计算机设备,包括相互连接的微处理器和存储器,微处理器中包含前述面向安全防护的分支结果快速确定装置。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

技术分类

06120115567138