CN112613039B - 一种针对幽灵漏洞的性能优化方法及装置 - Google Patents
一种针对幽灵漏洞的性能优化方法及装置 Download PDFInfo
- Publication number
- CN112613039B CN112613039B CN202011464054.5A CN202011464054A CN112613039B CN 112613039 B CN112613039 B CN 112613039B CN 202011464054 A CN202011464054 A CN 202011464054A CN 112613039 B CN112613039 B CN 112613039B
- Authority
- CN
- China
- Prior art keywords
- instruction
- stibp
- function
- module
- indirect jump
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 56
- 238000005457 optimization Methods 0.000 title claims abstract description 28
- 230000009191 jumping Effects 0.000 claims description 3
- 230000006870 function Effects 0.000 description 79
- 238000010586 diagram Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3846—Speculative instruction execution using static prediction, e.g. branch taken strategy
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明的实施例公开一种针对幽灵漏洞的性能优化方法及装置,用于提高处理器硬件对幽灵漏洞攻击的预测准确度。本发明的方法包括:通过指令地址信息判断其中是否包含间接跳转指令;获取该指令的打开/关闭STIBP(单线程间接分支预测器)功能的有关信息;根据所述信息判断打开/关闭STIBP功能。如果关闭STIBP功能,则根据指令译码和执行过程中是否发生分支预测错误,更新所述打开/关闭STIBP的信息。如此反复,处理器可以根据间接跳转指令的执行情况进行训练和学习,从而自适应地打开/关闭STIBP功能,提升分支预测的准确性和效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种针对幽灵漏洞的性能优化方法及装置。
背景技术
幽灵漏洞是一个可以迫使用户操作系统上的其他程序访问其程序电脑存储器空间中任意位置的漏洞。幽灵漏洞可以利用基于时间的旁路攻击,允许恶意进程获得其他程序映射在内存中的数据内容。幽灵漏洞不是单个易于修复的漏洞,而是一类潜在漏洞的总和。它们都利用了一种现代微处理器为降低内存延迟、加快执行速度的常用方法“预测执行”的副作用,含有预测执行功能的现代微处理器均受其影响。
现有的幽灵漏洞修复方案中,Intel/AMD公司提出了自身的漏洞修复方案,其中包含单线程间接分支预测器(Single Thread Indirect Branch Predictors,STIBP),即通过向特殊寄存器的中写入“1”或者“0”来“打开”或者“关闭”STIBP功能。当打开STIBP功能时,针对间接跳转指令,当前线程的分支预测不能利用其余线程的相关的分支预测信息,从而避免恶意进程获取当前计算机中的数据。
上述幽灵漏洞修复方案虽然能够有效地防止线程之间幽灵漏洞的出现,但是,该方案过度依赖于指令操作。即,软件需要对当前的情况作出适当的判断,通过判断有/无攻击威胁来打开/关闭STIBP,但是,从软件角度,其基本感觉不到威胁的存在,因此,实际上很难做出有/无攻击威胁的判断。此外,当没有风险程序运行时,打开STIBP功能,即,线程之间不能共享分支信息。这样会降低分支预测的效率和准确度,导致处理器性能的降低。例如,在应用中,会出现两个线程运行同样的程序段的场景,在打开STIBP功能的前提下,针对同一个分支指令,分支预测部件需要区分指令线程存储多份相同的分支信息,这会导致预测资源的浪费,导致分支预测效率的降低。
发明内容
有鉴于此,本发明实施例提供一种针对幽灵漏洞的性能优化方法及装置,用于解决现有技术对恶意程序通过幽灵漏洞攻击计算机的预测准确性低,容易导致处理器性能降低的问题。本发明提供的方案能够自适应地判断线程之间是否存在恶意的攻击,并有选择的打开/关闭STIBP功能。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明提供一种针对幽灵漏洞的性能优化方法,包括:
判断当前指令地址信息中是否包含间接跳转指令;
若当前指令地址信息中包含间接跳转指令,则获取用于打开/关闭单线程间接分支预测器STIBP功能的置信度;所述置信度为用于标识多线程共享分支指令预测信息安全性高低的参数;
判断当前置信度是否满足关闭STIBP功能的条件;
若当前置信度满足关闭STIBP功能的条件,则关闭STIBP功能,以使多个线程共享分支指令预测信息;
根据指令译码和执行过程中是否发生分支预测错误,对包含所述间接跳转指令的指令地址的分支预测错误标记位进行标记;
在指令释放阶段,根据所述间接跳转指令的指令地址的分支预测错误标记位,更新所述置信度,并继续执行所述判断当前置信度是否满足关闭STIBP功能的条件的步骤。
结合第一方面,在第一方面的第一种实施方式中,在判断当前置信度是否满足关闭STIBP功能的条件之后,还包括:
若当前置信度不满足关闭STIBP功能的条件,则打开STIBP功能;
在指令释放阶段,判断在此阶段释放的指令总数是否等于第一预设值;
若释放的指令总数等于第一预设值,则继续执行所述关闭STIBP功能,以使多个线程共享分支指令预测信息的步骤;
若释放的指令总数不等于第一预设值,则等待任一指令释放后,返回执行所述判断在此阶段释放的指令总数是否等于第一预设值的步骤。
结合第一方面,在第一方面的第二种实施方式中,所述关闭STIBP功能的条件为当前置信度大于第二预设值。
结合第一方面,在第一方面的第三种实施方式中,所述在指令释放阶段,根据所述间接跳转指令的指令地址的分支预测错误标记位,更新所述置信度,包括:
在指令释放阶段,判断所述间接跳转指令的指令地址的分支预测错误标记位是否有效;
若所述间接跳转指令的指令地址的分支预测错误标记位有效,则将当前置信度减小第三预设值;
若所述间接跳转指令的指令地址的分支预测错误标记位无效,则将当前置信度增大第四预设值。
结合第一方面的第一种实施方式,在第一方面的第四种实施方式中,在所述判断当前指令地址信息中是否包含间接跳转指令之前,还包括:
预先设置记录有间接跳转指令和用于打开/关闭STIBP功能的置信度的对应关系的过滤器;
所述判断当前置信度是否满足关闭STIBP功能的条件,包括:
判断是否能从所述过滤器中命中所述间接跳转指令对应的置信度;
若能从所述过滤器中命中到所述间接跳转指令对应的置信度,则判断当前置信度是否满足关闭STIBP功能的条件;
若不能从所述过滤器中命中所述间接跳转指令对应的置信度,则跳转执行所述打开STIBP功能的步骤;
其中,所述更新所述置信度,包括:
更新所述过滤器中记录的所述间接跳转指令对应的置信度,或者,在所述过滤器中新建所述间接跳转指令对应的置信度。
第二方面,本发明实施例提供一种针对幽灵漏洞的性能优化装置,包括:
第一判断模块,用于判断当前地址信息中是否包含间接跳转指令;
获取模块,用于在所述第一判断模块的判断结果为是时,获取用于打开/关闭单线程间接分支预测器STIBP功能的置信度;所述置信度为用于标识多线程共享分支指令预测信息安全性高低的参数;
第二判断模块,用于判断所述获取模块获取的当前置信度是否满足关闭STIBP功能的条件,或者在所述更新模块更新当前置信度后,判断所述当前置信度是否满足关闭STIBP功能的条件;
开关模块,用于在所述第二判断模块的判断结果为是时,关闭STIBP功能,以使多个线程共享分支指令预测信息;
标记模块,用于根据指令译码和执行过程中是否发生分支预测错误,对包含所述间接跳转指令的指令地址的分支预测错误标记位进行标记;
更新模块,用于在指令释放阶段,根据所述间接跳转指令的指令地址的分支预测错误标记位,更新所述当前置信度。
结合第二方面,在第二方面的第一种实施方式中,所述装置还包括:第三判断模块、等待模块;
所述开关模块,还用于在所述第二判断模块的判断结果为否时,打开STIBP功能;还用于在所述第三判断模块的判断结果为是时,关闭STIBP功能,以使多个线程共享分支指令预测信息;
所述第三判断模块,用于在指令释放阶段,,判断在此阶段释放的指令总数是否等于第一预设值;
所述等待模块,用于在所述第三判断模块的判断结果为否时,等待任一指令释放后,通知所述第三判断模块重新判断在此阶段释放的指令总数是否等于第一预设值。
结合第二方面,在第二方面的第二种实施方式中,所述第二判断模块用于判断所述当前置信度是否满足关闭STIBP功能的条件为:当前置信度大于第二预设值。
结合第二方面,在第二方面的第三种实施方式中,所述更新模块,包括:
标记值判断子模块,用于在指令释放阶段,判断所述间接跳转指令的指令地址的分支预测错误标记位是否有效;
第一赋值子模块,用于在所述标记值判断子模块的判断结果为是时,将当前置信度减小第三预设值;
第二赋值子模块,用于在所述标记值判断子模块的判断结果为否时,将当前置信度增大第四预设值。
结合第二方面的第一种实施方式,在第二方面的第四种实施方式中,所述装置还包括:
过滤器设置子模块,用于预先设置记录有间接跳转指令和置信度的对应关系的过滤器;
其中,所述获取模块,具体用于在第一判断模块的判断结果为是时,从所述过滤器中获取用于打开/关闭STIBP功能的置信度;
所述第二判断模块,包括:
匹配子模块,用于判断是否能从所述过滤器中命中所述间接跳转指令对应的置信度;
条件判断子模块,用于将所述匹配子模块命中的置信度作为当前置信度,并判断所述当前置信度是否满足关闭STIBP功能的条件;
所述开关模块,具体用于在所述匹配子模块不能从所述过滤器中命中所述间接跳转指令对应的置信度时,或者条件判断子模块的判断结果为否时,打开STIBP功能;
所述更新模块,具体用于更新所述过滤器中记录的所述间接跳转指令对应的置信度,或者,在所述过滤器中新建所述间接跳转指令对应的置信度。
本发明实施例提供的一种针对幽灵漏洞的方法及装置,在判断当前指令地址信息中是否包含间接跳转指令之后,判断当前置信度是否满足关闭STIBP功能的条件,若是,则关闭STIBP功能,以使多个线程共享分支指令预测信息;并根据指令译码和执行过程中是否发生分支预测错误,对置信度进行维护和更新。可见,本发明通过设置用于标识多线程共享分支指令预测信息安全性高低的置信度,以根据置信度打开/关闭STIBP功能;这个置信度的维护靠处理过的所有的间接跳转指令维持,或者,靠唯一的一个间接跳转指令来维持;处理器硬件能够自适应地判断线程之间是否存在恶意的攻击,根据对是否存在恶意攻击的预测,有选择的打开/关闭STIBP功能,既防止恶意攻击,又提升了分支预测的准确性和效率,提升了处理器的整体性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例一种针对幽灵漏洞的性能优化方法实施例一的流程图;
图2为本发明实施例一种针对幽灵漏洞的性能优化方法实施例二的流程图;
图3为本发明实施例一种针对幽灵漏洞的性能优化方法实施例三的流程图;
图4为本发明提供的过滤器结构示意图;
图5为本发明一种针对幽灵漏洞的性能优化装置实施例一的结构示意图;
图6为本发明一种针对幽灵漏洞的性能优化装置实施例二的结构示意图;
图7为本发明一种针对幽灵漏洞的性能优化装置实施例三的结构示意图;
图8为本发明一种针对幽灵漏洞的性能优化装置实施例四的结构示意图。
具体实施方式
本发明在STIBP的基础上,增加了自适应的功能。即,加入了机器学习逻辑,处理器可以尝试线程之间共享分支信息。如果发现不同线程分支指令最终跳转目的是一致的,那么,认为这两个线程之间运行的程序是相关联的;如果发现两个线程分支指令最终跳转的目的是不一致的,那么怀疑其中有恶意攻击的可能。最终,在指令释放阶段,会更新用于评价是否关闭STIBP功能的置信度。利用这种自适应的方式,可以有效的打开/关闭STIBP功能,从而可以提升分支预测效率和准确度。本发明方案中,所有的间接跳转指令共享一个关闭STIBP功能的置信度,或者,每条间接跳转指令维护属于自己的关闭STIBP功能置信度。
下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1为本发明实施例一种针对幽灵漏洞的性能优化方法实施例一的流程图。参见图1,该方法包括:
步骤101,判断当前指令地址信息中是否包含间接跳转指令;若是,则继续执行步骤102。
步骤102,获取用于打开/关闭STIBP功能的置信度;
本发明实施例中,置信度用于标识多线程共享分支指令预测信息安全性高低,置信度为本发明中为了打开/关闭STIBP功能而专门设置的参数,其初始值可以为0,也可以为用户想要的任一预设值。
本发明实施例中,所有的间接跳转指令可以共享一个置信度,或者,每条间接跳转指令分别维护属于自己的置信度。
步骤103,判断当前置信度是否满足关闭STIBP功能的条件;若是,则继续执行步骤104。
优选地,关闭STIBP功能的条件为当前置信度大于第二预设值,即,将当前置信度与预定的处理器中的设定的门限阈值进行比较。
步骤104,关闭STIBP功能,以使多个线程共享分支指令预测信息。
本实施例中,若当前置信度大于第二预设值则关闭STIBP功能,从而多个线程共享分支指令预测信息。
步骤105,根据指令译码和执行过程中是否发生分支预测错误,对包含所述间接跳转指令的指令地址的分支预测错误标记位进行标记。
此步骤中所述的间接跳转指令为步骤101中当前指令地址信息中包含的间接跳转指令。
本实施例中,在指令译码和执行阶段,根据执行或译码单元反馈的分支预测结果,对包含该分支指令的分支预测错误标记位进行标记,将其标记为有效或者无效,例如可具体标记为0或1,其中0代表分支预测错误标记位无效,1代表分支预测错误标记位有效,当然,还可以采用其他预定义的值来标记所述分支预测错误标记位是否有效。
步骤106,在指令释放阶段,根据所述间接跳转指令的指令地址的分支预测错误标记位,更新所述当前置信度,并继续执行步骤103。
本实施例中,在处理器的指令释放阶段,根据对应的间接跳转指令的分支预测错误标记位的结果,更新用于关闭STIBP功能的置信度。优先地,此处所述“更新”置信度,意为对于已有的置信度直接进行更新,或者,在之前没有置信度时,直接创建相应置信度的信息。
在一可选实施例中,步骤106中,判断所述间接跳转指令的指令地址的分支预测错误标记位是否有效;若是,则将当前置信度减小第三预设值,例如第三预设值为3时,令C=C-3,以更新当前置信度C;否则,将当前置信度增大第四预设值,例如,第四预设值为1时,令C=C+1,以更新当前置信度C。显然,还可以采用除0和1之外的两个不同值或者用“是”和“否”等方式来标记间接跳转指令的指令地址的分支预测错误标记位有没有分支预测错误。
本实施例中,通过设置用于标识多线程共享分支指令预测信息安全性高低的置信度,以根据置信度打开/关闭STIBP功能;其中,可以按照处理过的所有的间接跳转指令维持同一个置信度,或者,每一个间接跳转指令来维持属于自己的置信度,或者,若干数量的间接跳转指令维持同一个置信度;处理器硬件能够自适应地判断线程之间是否存在恶意的攻击,根据对是否存在恶意攻击的预测,有选择的打开/关闭STIBP功能,既防止恶意攻击的,又提升了分支预测的准确性和效率,提升了处理器的整体性能。
图2为本发明实施例一种针对幽灵漏洞的性能优化方法实施例二的流程图。参见图2,该方法包括:
步骤201,判断当前指令地址信息中是否包含间接跳转指令;若是,则继续执行步骤202。
步骤202,获取用于打开/关闭STIBP功能的置信度。
步骤203,判断当前置信度是否满足关闭STIBP功能的条件;若是,则继续执行步骤204,否则,执行步骤207。
步骤204,关闭STIBP功能,以使多个线程共享分支指令预测信息。
步骤205,根据指令译码和执行过程中是否发生分支预测错误,对包含所述间接跳转指令的指令地址的分支预测错误位进行标记。
步骤206,在指令释放阶段,根据所述间接跳转指令的指令地址的分支预测错误标记位,更新所述当前置信度,并继续执行步骤203。
本实施例中,步骤201-206的具体实施方法类似于上述步骤101-106,此处不再赘述。
步骤207,打开STIBP功能。
本实施例中,若当前置信度不满足关闭STIBP功能的条件,则意味着当前可能存在恶意攻击,需要打开STIBP功能,此时,多线程之间不能共享分支预测信息。
步骤208,判断在指令释放阶段释放的指令总数是否等于第一预设值;若是,则跳转执行步骤204,否则,执行步骤209。
本实施例中,打开STIBP功能后,判断在此期间释放的指令总数是否与预设的关闭STIBP功能时对应的指令总数(第一预设值)相等,若相等,则尝试关闭STIBP功能,根据译码、执行单元的有关分支预测错误的反馈信息,修正本次的判断。
步骤209,等待任一指令释放后,继续返回执行步骤208。
本实施例中,当有任一指令释放时,重新返回步骤208判断在此期间释放的指令总数是否等于第一预设值。
本实施例在实施例一的基础上,当置信度未达到关闭STIBP功能的条件时,通过统计在此期间释放的指令总数来尝试关闭STIBP功能,根据译码、执行过程中的有关分支预测错误的反馈信息,修正本次的判断。在保证防止恶意攻击的前提下,增加了关闭STIBP功能的概率,提高了分支预测的准确率和效率。
图3为本发明实施例一种针对幽灵漏洞的性能优化方法实施例三的流程图。参见图3,该方法包括:
步骤301,判断当前指令地址信息中是否包含间接跳转指令;若是,则继续执行步骤302。
本实施例中,步骤301的具体实施方法类似于上述步骤101,此处不再赘述。
步骤302,获取用于打开/关闭STIBP功能的置信度。
本实施例中,步骤302的具体实施方法类似于上述步骤102,此处不再赘述。
步骤303,判断是否能从预先设置的过滤器中命中所述间接跳转指令对应的置信度;若是,则执行步骤304,否则,执行步骤308。
本实施例中,在步骤301之前,预先设置记录有间接跳转指令和置信度的对应关系的过滤器。
在一可选实施例中,如图4所示,所述过滤器包含8路(way0~way7),每一路包含256行条目(Entry0~Entry255);每个条目包括条目标签和与所述条目标签对应的置信度。由于间接跳转指令和PC地址之间是一一对应关系,因此,每个条目的条目标签中存储的是与间接跳转指令对应的PC地址,优选地,存储的是PC[47:12]。
本实施例中,判断是否能从图4所示过滤器中命中所述间接跳转指令对应的置信度的方法具体包括:
步骤A1:以所述间接跳转指令对应的PC地址按照公式PC[47:40]^PC[39:32]^PC[31:24]^PC[23:16]^PC[15:8]^PC[7:0]进行异或计算,得到目标行索引值;即将计算结果作为行索引值索引到过滤器的相应行。其中,符号“^”表示“异或”逻辑运算。
步骤A2:判断所述过滤器的每路第N行中是否能够命中目标条目标签;若是,则确定能从所述过滤器中命中所述间接跳转指令对应的置信度,执行步骤A3,否则,确定不能从所述过滤器中命中所述间接跳转指令对应的置信度。
其中,N为所述目标行索引值;所述目标条目标签为所述间接跳转指令对应的PC地址的第12至47位;例如,若所述上一步步骤定位的目标行是第1行,则需要在第一行中判断way0~way7任一路的条目标签属性值是否等于所述间接跳转指令对应的PC地址的第12到47位,若是,则从所述过滤器中命中所述间接跳转指令。
显然,过滤器的具体结构还可以参照上述实施例进行其他变形,例如路数不仅限于8路结构,也不仅限于每路256个条目,或者,还可以采用PC地址的HASH值等其他方式计算索引,此处不再赘述。
步骤304,将命中的置信度作为当前置信度,并判断所述当前置信度是否满足关闭STIBP功能的条件;若是,则继续执行步骤305,否则,执行步骤308。
本实施例中,判断所述当前置信度是否满足关闭STIBP功能的条件的具体实施方法类似于上述步骤103,此处不再赘述。
步骤305,关闭STIBP功能;
此时,多个线程共享分支指令预测信息。
步骤306,根据指令译码和执行过程中是否发生分支预测错误,对包含所述间接跳转指令的指令地址的分支预测错误标记位进行标记。
步骤307,在指令释放阶段,根据所述间接跳转指令的指令地址的分支预测错误标记位,更新所述过滤器中记录的所述间接跳转指令对应的置信度,或者,在过滤器中新建所述间接跳转指令与置信度的对应关系,并继续执行步骤303。
本实施例中,步骤305-307的具体实施方法类似于上述步骤104-106,此处不再赘述。
步骤308,打开STIBP功能。
本实施例中,步骤308的具体实施方法类似于上述步骤207,此处不再赘述。
步骤309,判断在此期间释放的指令总数是否等于第一预设值;若是,则跳转执行步骤305,否则,执行步骤310。
步骤310,等待任一指令释放,继续返回执行步骤309。
本实施例中,步骤309-310的具体实施方法类似于上述步骤208-209,此处不再赘述。
本实施例中,设计了一个间接跳转指令及其相关置信度的过滤器,用来记录每个间接跳转指令的置信度,并且,根据间接跳转指令出现的频率对置信度进行更新,能够根据处理器的实际处理情况进行调整。
对应于本发明实施例提供的针对幽灵漏洞的性能优化方法,本发明实施例还提供一种针对幽灵漏洞的性能优化装置,图5为本发明一种针对幽灵漏洞的性能优化装置实施例一的结构示意图,如图5所示,本实施例的装置可以包括:第一判断模块11、获取模块12、第二判断模块13、开关模块14、标记模块15和更新模块16;其中:
第一判断模块11,用于判断当前指令地址信息中是否包含间接跳转指令;
获取模块12,用于在第一判断模块11的判断结果为是时,获取用于打开/关闭STIBP功能的置信度;所述置信度为用于标识多线程共享分支指令预测信息安全性高低的参数;
第二判断模块13,用于判断所述当前置信度是否满足关闭STIBP功能的条件,或者在更新模块16更新当前置信度后,判断所述当前置信度是否满足关闭STIBP功能的条件;
开关模块14,用于在第二判断模块13的判断结果为是时,关闭STIBP功能,以使多个线程共享分支指令预测信息;
标记模块15,用于根据指令译码和执行过程中是否发生分支预测错误,对包含所述间接跳转指令的指令地址的分支预测错误标记位进行标记;
更新模块16,用于在指令释放阶段,根据所述间接跳转指令的指令地址的分支预测错误标记位,更新所述当前置信度。
本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图6为本发明一种针对幽灵漏洞的性能优化装置实施例二的结构示意图,如图6所示,本实施例的系统在图5所示系统结构的基础上,进一步地,所述装置还包括:第三判断模块17、等待模块18;
其中,开关模块14,还用于在第二判断模块13的判断结果为否时,打开STIBP功能;开关模块13还用于在第三判断模块17的判断结果为是时,关闭STIBP功能,以使多个线程共享分支指令预测信息;
第三判断模块17,用于在开关模块14打开STIBP功能后,判断在此阶段释放的指令总数是否等于第一预设值;
等待模块18,用于在第三判断模块17的判断结果为否时,等待任一指令释放后,通知第三判断模块17重新判断在此阶段释放的指令总数是否等于第一预设值。
本实施例的装置,可以用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在一可选实施例中,第二判断模块13用于判断所述当前置信度是否满足关闭STIBP功能的条件为:当前置信度大于第二预设值。
图7为本发明一种针对幽灵漏洞的性能优化装置实施例三的结构示意图,如图7所示,本实施例的系统在图5所示系统结构的基础上,进一步地,所述更新模块16,包括:
标记值判断子模块161,用于在指令释放阶段,判断所述间接跳转指令的指令地址的分支预测错误标记位是否有效;
第一赋值子模块162,用于在所述标记值判断子模块151的判断结果为是时,将当前置信度减小第三预设值;
第二赋值子模块163,用于在所述标记值判断子模块151的判断结果为否时,将当前置信度增大第四预设值。
图8为本发明一种针对幽灵漏洞的性能优化装置实施例四的结构示意图,如图8所示,本实施例的系统在图6所示系统结构的基础上,进一步地,所述装置还包括:过滤器设置子模块19,用于预先设置记录有间接跳转指令和置信度的对应关系的过滤器;
其中,获取模块12,具体用于在第一判断模块11的判断结果为是时,从所述过滤器中获取用于打开/关闭STIBP功能的置信度;
其中,第二判断模块13,包括:
匹配子模块131,用于判断是否能从所述过滤器中命中所述间接跳转指令对应的置信度;
条件判断子模块132,用于将匹配子模块131命中的置信度作为当前置信度,并判断所述当前置信度是否满足关闭STIBP功能的条件;
所述开关模块14,具体用于在匹配子模块131不能从所述过滤器中命中所述间接跳转指令对应的置信度时,或者条件判断子模块132的判断结果为否时,打开STIBP功能;
所述更新模块16,具体用于更新所述过滤器中记录的所述间接跳转指令对应的置信度,或者,在所述过滤器中新建所述间接跳转指令对应的置信度。
本实施例的装置,可以用于执行图3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在一可选实施例中,所述过滤器包含8路,每一路包含256行条目;每个条目包括条目标签和置信度属性;
所述匹配子模块131,可以包括:目标行确定单元、匹配单元和确定单元;其中,目标行确定单元,用于以所述间接跳转指令对应的PC地址按照公式PC[47:40]^PC[39:32]^PC[31:24]^PC[23:16]^PC[15:8]^PC[7:0]进行异或计算,得到目标行索引值;匹配单元,用于判断所述过滤器的每路第N行中是否能够命中目标条目标签;其中,N为所述目标行索引值;所述目标条目标签为所述间接跳转指令对应的PC地址的第12至47位;确定单元,用于在所述匹配单元在所述过滤器的任一路第N行中命中所述目标条目标签时,确定能从所述过滤器中命中所述间接跳转指令对应的置信度,并在所述匹配单元在所述过滤器的所有路第N行中都未命中所述目标条目标签时,确定不能从所述过滤器中命中所述间接跳转指令对应的置信度。
本发明在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
为了描述的方便,描述以上装置是以功能分为各种子模块/模块分别描述。当然,在实施本发明时可以把各子模块/模块的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种针对幽灵漏洞的性能优化方法,其特征在于,包括:
判断当前指令地址信息中是否包含间接跳转指令;
若当前指令地址信息中包含间接跳转指令,则获取用于打开/关闭单线程间接分支预测器STIBP功能的置信度;所述置信度为用于标识多线程共享分支指令预测信息安全性高低的参数;
判断当前置信度是否满足关闭STIBP功能的条件;
若当前置信度满足关闭STIBP功能的条件,则关闭STIBP功能,以使多个线程共享分支指令预测信息;
根据指令译码和执行过程中是否发生分支预测错误,对包含所述间接跳转指令的指令地址的分支预测错误标记位进行标记;
在指令释放阶段,根据所述间接跳转指令的指令地址的分支预测错误标记位,更新所述当前置信度,并继续执行所述判断当前置信度是否满足关闭STIBP功能的条件的步骤。
2.根据权利要求1所述的针对幽灵漏洞的性能优化方法,其特征在于,在判断当前置信度是否满足关闭STIBP功能的条件之后,还包括:
若当前置信度不满足关闭STIBP功能的条件,则打开STIBP功能;
在指令释放阶段,判断在此阶段释放的指令总数是否等于第一预设值;
若释放的指令总数等于第一预设值,则继续执行所述关闭STIBP功能,以使多个线程共享分支指令预测信息的步骤;
若释放的指令总数不等于第一预设值,则等待任一指令释放后,返回执行所述判断在此阶段释放的指令总数是否等于第一预设值的步骤。
3.根据权利要求1所述的针对幽灵漏洞的性能优化方法,其特征在于,所述关闭STIBP功能的条件为当前置信度大于第二预设值。
4.根据权利要求1所述的针对幽灵漏洞的性能优化方法,其特征在于,所述在指令释放阶段,根据所述间接跳转指令的指令地址的分支预测错误标记位,更新所述当前置信度,包括:
在指令释放阶段,判断所述间接跳转指令的指令地址的分支预测错误标记位是否有效;
若所述间接跳转指令的指令地址的分支预测错误标记位有效,则将当前置信度减小第三预设值;
若所述间接跳转指令的指令地址的分支预测错误标记位无效,则将当前置信度增大第四预设值。
5.根据权利要求2所述的针对幽灵漏洞的性能优化方法,其特征在于,在所述判断当前指令地址信息中是否包含间接跳转指令之前,还包括:
预先设置记录有间接跳转指令和用于打开/关闭STIBP功能的置信度的对应关系的过滤器;
所述判断当前置信度是否满足关闭STIBP功能的条件,包括:
判断是否能从所述过滤器中命中所述间接跳转指令对应的置信度;
若能从所述过滤器中命中到所述间接跳转指令对应的置信度,则判断当前置信度是否满足关闭STIBP功能的条件;
若不能从所述过滤器中命中所述间接跳转指令对应的置信度,则跳转执行所述打开STIBP功能的步骤;
其中,所述更新所述置信度,包括:
更新所述过滤器中记录的所述间接跳转指令对应的置信度,或者,在所述过滤器中新建所述间接跳转指令对应的置信度。
6.一种针对幽灵漏洞的性能优化装置,其特征在于,包括:
第一判断模块,用于判断当前地址信息中是否包含间接跳转指令;
获取模块,用于在所述第一判断模块的判断结果为是时,获取用于打开/关闭单线程间接分支预测器STIBP功能的置信度;所述置信度为用于标识多线程共享分支指令预测信息安全性高低的参数;
第二判断模块,用于判断所述获取模块获取的当前置信度是否满足关闭STIBP功能的条件,或者在所述更新模块更新当前置信度后,判断所述当前置信度是否满足关闭STIBP功能的条件;
开关模块,用于在所述第二判断模块的判断结果为是时,关闭STIBP功能,以使多个线程共享分支指令预测信息;
标记模块,用于根据指令译码和执行过程中是否发生分支预测错误,对包含所述间接跳转指令的指令地址的分支预测错误标记位进行标记;
更新模块,用于在指令释放阶段,根据所述间接跳转指令的指令地址的分支预测错误标记位,更新所述当前置信度。
7.根据权利要求6所述的针对幽灵漏洞的性能优化装置,其特征在于,所述装置还包括:第三判断模块、等待模块;
所述开关模块,还用于在所述第二判断模块的判断结果为否时,打开STIBP功能;还用于在所述第三判断模块的判断结果为是时,关闭STIBP功能,以使多个线程共享分支指令预测信息;
所述第三判断模块,用于在指令释放阶段,,判断在此阶段释放的指令总数是否等于第一预设值;
所述等待模块,用于在所述第三判断模块的判断结果为否时,等待任一指令释放后,通知所述第三判断模块重新判断在此阶段释放的指令总数是否等于第一预设值。
8.根据权利要求6所述的针对幽灵漏洞的性能优化装置,其特征在于,所述第二判断模块用于判断所述当前置信度是否满足关闭STIBP功能的条件为:当前置信度大于第二预设值。
9.根据权利要求6所述的针对幽灵漏洞的性能优化装置,其特征在于,所述更新模块,包括:
标记值判断子模块,用于在指令释放阶段,判断所述间接跳转指令的指令地址的分支预测错误标记位是否有效;
第一赋值子模块,用于在所述标记值判断子模块的判断结果为是时,将当前置信度减小第三预设值;
第二赋值子模块,用于在所述标记值判断子模块的判断结果为否时,将当前置信度增大第四预设值。
10.根据权利要求7所述的针对幽灵漏洞的性能优化装置,其特征在于,所述装置还包括:
过滤器设置子模块,用于预先设置记录有间接跳转指令和置信度的对应关系的过滤器;
其中,所述获取模块,具体用于在第一判断模块的判断结果为是时,从所述过滤器中获取用于打开/关闭STIBP功能的置信度;
所述第二判断模块,包括:
匹配子模块,用于判断是否能从所述过滤器中命中所述间接跳转指令对应的置信度;
条件判断子模块,用于将所述匹配子模块命中的置信度作为当前置信度,并判断所述当前置信度是否满足关闭STIBP功能的条件;
所述开关模块,具体用于在所述匹配子模块不能从所述过滤器中命中所述间接跳转指令对应的置信度时,或者条件判断子模块的判断结果为否时,打开STIBP功能;
所述更新模块,具体用于更新所述过滤器中记录的所述间接跳转指令对应的置信度,或者,在所述过滤器中新建所述间接跳转指令对应的置信度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011464054.5A CN112613039B (zh) | 2020-12-10 | 2020-12-10 | 一种针对幽灵漏洞的性能优化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011464054.5A CN112613039B (zh) | 2020-12-10 | 2020-12-10 | 一种针对幽灵漏洞的性能优化方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112613039A CN112613039A (zh) | 2021-04-06 |
CN112613039B true CN112613039B (zh) | 2022-09-09 |
Family
ID=75233595
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011464054.5A Active CN112613039B (zh) | 2020-12-10 | 2020-12-10 | 一种针对幽灵漏洞的性能优化方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112613039B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101770358A (zh) * | 2010-02-10 | 2010-07-07 | 北京龙芯中科技术服务中心有限公司 | 微处理器跳转指令分支预测处理系统和方法 |
CN104423929A (zh) * | 2013-08-21 | 2015-03-18 | 华为技术有限公司 | 一种分支预测方法及相关装置 |
CN110069285A (zh) * | 2019-04-30 | 2019-07-30 | 海光信息技术有限公司 | 一种检测分支预测的方法及处理器 |
CN111061512A (zh) * | 2019-12-06 | 2020-04-24 | 湖北文理学院 | 分支指令的处理方法、装置、设备和存储介质 |
WO2020199058A1 (zh) * | 2019-03-30 | 2020-10-08 | 华为技术有限公司 | 分支指令的处理方法、分支预测器及处理器 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7751878B1 (en) * | 2004-11-10 | 2010-07-06 | Sandia Corporation | Real-time human collaboration monitoring and intervention |
US20200372129A1 (en) * | 2018-01-12 | 2020-11-26 | Virsec Systems, Inc. | Defending Against Speculative Execution Exploits |
US10747541B2 (en) * | 2018-01-19 | 2020-08-18 | Marvell Asia Pte, Ltd. | Managing predictor selection for branch prediction |
US10599437B2 (en) * | 2018-01-19 | 2020-03-24 | Marvell World Trade Ltd. | Managing obscured branch prediction information |
US10705848B2 (en) * | 2018-05-24 | 2020-07-07 | Arm Limited | TAGE branch predictor with perceptron predictor as fallback predictor |
US11635965B2 (en) * | 2018-10-31 | 2023-04-25 | Intel Corporation | Apparatuses and methods for speculative execution side channel mitigation |
CN110347432B (zh) * | 2019-06-17 | 2021-09-14 | 海光信息技术股份有限公司 | 处理器、分支预测器及其数据处理方法、分支预测方法 |
CN111638913B (zh) * | 2019-09-19 | 2023-05-12 | 中国科学院信息工程研究所 | 一种基于随机化索引的处理器芯片分支预测器安全增强方法及电子装置 |
CN111241599B (zh) * | 2019-09-19 | 2022-08-23 | 中国科学院信息工程研究所 | 一种处理器芯片安全依赖的动态识别及维护方法 |
-
2020
- 2020-12-10 CN CN202011464054.5A patent/CN112613039B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101770358A (zh) * | 2010-02-10 | 2010-07-07 | 北京龙芯中科技术服务中心有限公司 | 微处理器跳转指令分支预测处理系统和方法 |
CN104423929A (zh) * | 2013-08-21 | 2015-03-18 | 华为技术有限公司 | 一种分支预测方法及相关装置 |
WO2020199058A1 (zh) * | 2019-03-30 | 2020-10-08 | 华为技术有限公司 | 分支指令的处理方法、分支预测器及处理器 |
CN110069285A (zh) * | 2019-04-30 | 2019-07-30 | 海光信息技术有限公司 | 一种检测分支预测的方法及处理器 |
CN111061512A (zh) * | 2019-12-06 | 2020-04-24 | 湖北文理学院 | 分支指令的处理方法、装置、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112613039A (zh) | 2021-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107092467B (zh) | 用于增强分支预测效率的指令序列缓冲器 | |
US11347507B2 (en) | Secure control flow prediction | |
CN104636270B (zh) | 数据处理装置和数据处理方法 | |
Depoix et al. | Detecting spectre attacks by identifying cache side-channel attacks using machine learning | |
US20200341770A1 (en) | Multiple-table branch target buffer | |
US11163576B2 (en) | Systems and methods for invisible speculative execution | |
US10795683B2 (en) | Predicting indirect branches using problem branch filtering and pattern cache | |
US9690707B2 (en) | Correlation-based instruction prefetching | |
CN109643346B (zh) | 控制流完整性 | |
US11385899B2 (en) | Branch prediction cache for multiple software workloads | |
US9684511B2 (en) | Using software having control transfer termination instructions with software not having control transfer termination instructions | |
CN105260659A (zh) | 一种基于qemu的内核级代码重用型攻击检测方法 | |
US20210055954A1 (en) | Systems and methods for post cache interlocking | |
US20190205142A1 (en) | Systems and methods for secure processor | |
US9996356B2 (en) | Method and apparatus for recovering from bad store-to-load forwarding in an out-of-order processor | |
KR20210110598A (ko) | 추론적 실행을 위한 보안 예측기 | |
US11249762B2 (en) | Apparatus and method for handling incorrect branch direction predictions | |
US11379239B2 (en) | Apparatus and method for making predictions for instruction flow changing instructions | |
US11340901B2 (en) | Apparatus and method for controlling allocation of instructions into an instruction cache storage | |
CN112613039B (zh) | 一种针对幽灵漏洞的性能优化方法及装置 | |
US20240095360A1 (en) | Risc-v and o-cfi mechanism-based defense method and apparatus for code reuse attacks | |
Shi et al. | Augmenting branch predictor to secure program execution | |
CN110889147B (zh) | 一种利用填充缓存抵御Cache边信道攻击的方法 | |
US11397685B1 (en) | Storing prediction entries and stream entries where each stream entry includes a stream identifier and a plurality of sequential way predictions | |
US10834255B1 (en) | Target injection safe method for inlining large call tables |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220817 Address after: 610041 building 4, No. 171, hele Second Street, high tech Zone, Chengdu, Sichuan Applicant after: CHENGDU HAIGUANG MICROELECTRONICS TECHNOLOGY Co.,Ltd. Address before: 300 000 Tianjin Binhai New Area Tianjin Huayuan Industrial Zone No. 18 Haitai West Road North 2-204 industrial incubation-3-8 Applicant before: Haiguang Information Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |