攻击检测方法、处理器、电子设备和存储介质与流程

未命名 09-13 阅读:83 评论:0


1.本技术实施例涉及处理器技术领域,尤其涉及一种攻击检测方法、处理器、电子设备和存储介质。


背景技术:

2.跳转导向编程(jump-oriented programming,jop)攻击和返回导向编程(return-oriented programming,rop)攻击是两种代码重用攻击,它们可以重用易受攻击程序的合法代码,无需注入代码即可构造攻击程序。jop攻击利用程序间接跳转指令和间接调用指令来改变程序的控制流,rop攻击利用返回指令(ret指令)来改变程序的控制流。
3.目前,jop攻击和rop攻击采用的不同的防护方式,jop攻击可以通过验证内部函数跳转控制流是否完整来进行防护,rop攻击可以通过地址空间布局随机化进行防护。
4.然而,由于jop攻击和rop攻击采用不同的方式进行防护,jop攻击防护和rop攻击防护均需要消耗处理器较多的计算资源,进而导致会对处理器性能产生较大的影响。


技术实现要素:

5.有鉴于此,本技术实施例提供一种攻击检测方法、处理器、电子设备和存储介质,以至少部分解决上述问题。
6.根据本技术实施例的第一方面,提供了一种攻击检测方法,包括:响应于间接分支指令被执行,将所述间接分支指令的着陆状态参数写入分支着陆状态寄存器,其中,所述间接分支指令包括间接跳转指令、函数调用指令或返回指令,间接跳转指令、函数调用指令和返回指令对应不同的着陆状态参数;确定从所述间接分支指令跳转至的检查点指令;根据所述检查点指令的类型、及所述检查点指令的指令参数与所述分支着陆状态寄存器中着陆状态参数的差异,对所述检查点指令进行合法性检查;若所述检查点指令不合法,则发出报警信息。
7.根据本技术实施例的第二方面,提供了一种处理器,包括:电连接的分支着陆状态寄存器和指令执行单元,所述指令执行单元用以:响应于间接分支指令被执行,将所述间接分支指令的着陆状态参数写入分支着陆状态寄存器,其中,所述间接分支指令包括间接跳转指令、函数调用指令或返回指令,间接跳转指令、函数调用指令和返回指令对应不同的着陆状态参数;确定从所述间接分支指令跳转至的检查点指令;根据所述检查点指令的类型、及所述检查点指令的指令参数与所述分支着陆状态寄存器中着陆状态参数的差异,对所述检查点指令进行合法性检查;若所述检查点指令不合法,则发出报警信息。
8.根据本技术实施例的第三方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;存储器用于存放至少一可执行指令,可执行指令使处理器执行上述第一方面所述方法对应的操作。
9.根据本技术实施例的第四方面,提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一方面所述的方法。
10.由上述技术方案可知,在间接分支指令被指令后,将间接分支指令的着陆状态参数写入分支着陆状态寄存器,并确定从间接分支指令跳转至的检查点指令,进而根据检查点指令的类型、及检查点指令的指令参数与分支着陆状态寄存器中着陆状态参数的差异,对检查点指令进行合法性检查,如果检查点指令不合法,则发出报警信息。从间接分支指令跳转至的目标指令具有特定的指令类型,而且间接分支指令与着陆状态参数与目标指令的指令参数相匹配,如果处理器受到rop攻击或jop攻击,会改变目标指令的类型或目标指令的指令参数,因此可以根据检查点指令的类型、及检查点指令的指令参数与分支着陆状态寄存器中着陆状态参数的差异,对检查点指令的合法性进行检查,确定处理器是否受到rop攻击或jop攻击,实现了jop攻击和rop攻击的统一检测和防护,减小jop攻击防护和rop攻击防护所消耗的计算资源,从而可以提高处理器性能。
附图说明
11.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
12.图1是本技术一个实施例的处理器的示意图;
13.图2是本技术一个实施例的攻击检测方法的流程图;
14.图3是本技术一个实施例的返回地址堆栈的示意图;
15.图4是本技术一个实施例的分支着陆状态寄存器写入过程的示意图;
16.图5是本技术一个实施例的针对间接跳转指令的攻击检测过程的示意图;
17.图6是本技术另一个实施例的针对间接跳转指令的攻击检测过程的示意图;
18.图7是本技术一个实施例的针对函数调用指令的攻击检测过程的示意图;
19.图8是本技术另一个实施例的针对函数调用指令的攻击检测过程的示意图;
20.图9是本技术一个实施例的针对返回指令的攻击检测过程的示意图;
21.图10是本技术另一个实施例的针对返回指令的攻击检测过程的示意图;
22.图11是本技术一个实施例的电子设备的示意图。
具体实施方式
23.以下基于实施例对本技术进行描述,但是本技术并不仅仅限于这些实施例。在下文对本技术的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本技术。为了避免混淆本技术的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
24.首先,对本技术实施例进行描述的过程中出现的部分名词或术语适用于如下解释。
25.缓冲区溢出:缓冲区溢出(buffer overflow)是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行,通过程序跳转获取程序或系统的控制权。
26.返回导向编程攻击:返回导向编程(return-oriented programming,rop)攻击是
指利用缓冲区溢出来破坏堆栈帧,并在堆栈上修改当前执行函数的返回地址,修改后的返回地址将作为分支目标,引导程序控制流并执行攻击。
27.跳转导向编程攻击:跳转导向编程(jump-oriented programming,jop)攻击利用间接分支指令,通过缓冲区溢出非法修改寄存器内容,以跳转到指定的程序片段,通过跳转到的程序片段实施攻击。
28.间接跳转指令:间接跳转(indirect jump)指令是跳转的目标地址在寄存器中的跳转指令。间接跳转指令可以是jr指令,jr指令可以跳转到寄存器,jr指令的格式为jr rs,其中jr表示jump register,rs为寄存器地址。
29.函数调用指令:函数调用(function call)指令用于调用函数,函数执行完毕后通过返回指令返回原程序控制流。函数调用指令包括直接函数调用(direct function call)指令和间接函数调用(indirect function call)指令,直接函数调用指令以立即数(立即编码)作为目标地址,间接函数调用指令的操作数是寄存器,该寄存器中的内容是所要调用函数的地址。直接函数调用指令包括函数调用指令jal(jump and link),间接函数调用指令包括函数调用指令jalr(jump and link register)。
30.返回指令:返回指令(return)包括于被调用函数中,当被调用函数执行到该返回指令后,会返回到原调用函数的程序控制流。
31.本技术的应用环境
32.本技术实施例提出了一种处理器攻击检测方案。整个处理器攻击检测方案相对较为通用,可以用于包括基于进阶精简指令集机器(advanced risc machine,arm)、第五代精简指令集计算机(risc-v)等指令集架构的处理器的各种硬件设备,比如,用于数据中心、多处理服务器、用物联网(internet of things,iot)设备、嵌入式设备等。
33.处理器
34.图1是本技术一个实施例的处理器10的示意性框图。如图1所示,处理器10可以包括用于处理指令的一个或多个处理器核11,指令的处理和执行是可以被用户(例如通过应用程序)和/或系统平台控制的。处理器核11可以用于处理特定的指令集,指令集可以支持复杂指令集计算(complex instruction set computing,cisc)、精简指令集计算((reduced instruction set computing,risc)或基于超长指令字(very long instruction word,vliw)的计算,特别需要说明的是,处理器核11适用于处理risc-v指令集。不同的处理器核11可以各自处理不同或相同的指令集。处理器核11还可以包括其他处理模块,比如数字信号处理器(digital signal processor,dsp)等。作为一种示例,图1中示出了处理器核1至处理器核m,m是正整数。
35.高速缓冲存储器可以被全部或部分集成于处理器10中。根据架构的不同,高速缓冲存储器可以是位于各个处理器核11之内和/或之外的单个或多级的内部高速缓冲存储器(如图1示出的3级高速缓冲存储器l1和l2,图1中统一标识为18),也可以包括面向指令和指令高速缓存和面向数据的数据高速缓存。处理器10中的各部件可以共享至少一部分的高速缓存存储器,例如,处理器核1至m可以共用第二级高速缓冲存储器l2。处理器10还可以包括外部高速缓存(未示出),其他高速缓存结构也可以作为处理器10的外部高速缓存。
36.如图1所示,处理器10可以包括寄存器堆(register file)111,寄存器堆111可以包括用于存储不同类型的数据和/或指令的多个寄存器,这些寄存器可以是不同类型,比如
寄存器堆111可以包括整数寄存器、浮点寄存器、状态寄存器、指令寄存器和指针寄存器等。寄存器堆111中的寄存器可以选用通用寄存器来实现,也可以根据处理器10的实际需求采用特定的设计。
37.处理器10可以包括内存管理单元(memory management unit,mmu)112,用于实现虚拟地址到物理地址的转译。内存管理单元112中缓存有页表中的一部分表项,内存管理单元112也可以从内存中获取未被缓存的表项。处理器核11中可以设置一个或多个内存管理单元112,不同处理器核11中的内存管理单元112可以与位于其他处理器10或处理器核11中的内存管理单元112实现同步,使得处理器10或处理器核11可以共享统一的虚拟存储系统。
38.处理器10用于执行指令序列(即程序)。处理器10执行指令的过程包括:从存放指令的存储器中取出指令,对取出的指令进行译码,执行译码后的指令,及保存指令执行结果等步骤,如此循环,直到执行完指令序列中的全部指令或遇到停机指令。
39.为了实现上述过程,处理器10可以包括取指令单元113、指令译码单元114、指令发射单元(未示出)、指令执行单元115和指令提交单元(未示出)等。
40.取指令单元113作为处理器10的启动引擎,用于将指令从存储器20中搬运到指令寄存器(可以是图1示出的寄存器堆111中的一个用于存放指令的寄存器)中,并接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法可以是根据指令长度递增地址或递减地址。
41.取出指令后,处理器10进入指令译码阶段,指令译码单元114按照预定的指令格式,对取回的指令进行解码,以获得取回的指令所需的操作数,从而为指令执行单元115的操作作准备。操作数可以包括指向立即数、寄存器或其他能够提供源操作数的软件/硬件。
42.指令发射单元通常存在于高性能的处理器10中,位于指令译码单元114与指令执行单元115之间,用于指令的调度和控制,以将各个指令高效地分配至不同的指令执行单元115,使得多个指令的并行操作成为可能。指令经取指、译码并被调度到相应的指令执行单元115之后,相应的指令执行单元115开始执行该指令,即执行该指令所指示的操作,实现相应的功能。
43.指令提交单元(或称为指令写回单元)主要用于负责将指令执行单元115产生的执行结果写回到相应的存储位置(例如为处理器10内部的寄存器),以使后序指令能够从该存储位置快速获取相应的执行结果。
44.对于不同类别的指令,可以在处理器10中相应地设置不同的指令执行单元115。指令执行单元115可以是运算单元(例如包含算术逻辑单元、整型处理单元、矢量运算单元等,用于根据操作数进行运算并输出运算结果)、内存执行单元(例如用于根据指令访问内存以读取内存中的数据或向内存写入指定的数据等)以及协处理器等。在处理器10中,各个指令执行单元115可以并行运行并输出相应的执行结果。
45.指令执行单元115在执行某类指令(例如访存指令)时,需要访问存储器20,以获取存储器20中存储的信息或提供需要写入存储器20中的数据。需要说明的是,用于执行访存指令的指令执行单元115也可以简称为内存执行单元,该内存执行单元可以为加载存储单元(load store unit,lsu)和/或其他用于内存访问的单元。
46.访存指令被取指令单元113获取之后,指令译码单元114可以对访存指令进行译码处理,使得访存指令的源操作数可被获取。译码处理后的访存指令被提供至相应的指令执
行单元115,该指令执行单元115可以对访存指令的源操作数进行相应的运算(例如由算术逻辑单元对存储于寄存器中的源操作数进行运算)以获得访存指令对应的地址信息,并根据该地址信息发起相应的请求,例如地址转译请求、写访问请求等。
47.访存指令的源操作数通常包括地址操作数,指令执行单元115对该地址操作数进行运算以获得访存指令对应的虚拟地址或物理地址。当内存管理单元112被禁用时,指令执行单元115可以直接通过逻辑运算获得访存指令的物理地址。当内存管理单元112被启用时,相应的指令执行单元115根据访存指令对应的虚拟地址发起地址转译请求,该地址转译请求包括与访存指令的地址操作数对应的虚拟地址;内存管理单元112响应地址转译请求,并根据与该虚拟地址匹配的表项将地址转译请求中的虚拟地址转换为物理地址,使得指令执行单元115可以根据转译后的物理地址访问高速缓冲存储器18和/或存储器20。
48.根据功能的不同,访存指令可包括加载指令和存储指令。加载指令的执行过程通常不需要对存储器20或高速缓冲存储器18中的信息进行修改,指令执行单元115只需要根据加载指令的地址操作数读取存储于存储器20、高速缓冲存储器18或外部的存储设备中的数据。不同于加载指令,存储指令的源操作数不仅包括地址操作数,还包括数据信息,存储指令的执行过程通常需要对存储器20和/或高速缓冲存储器18中的信息进行修改。存储指令的数据信息可以指向写入数据,该写入数据的来源可以是运算指令、加载指令等指令的执行结果,也可以是处理器10中的寄存器或其他存储单元提供的数据,还可以是立即数。
49.指令执行单元115在执行间接分支指令后,程序控制流会跳转至目标指令,如果处理器10受到rop攻击或jop攻击,目标指令将被修改为非法指令,指令执行单元115执行非法指令造成程序运行被破坏,或者程序或系统的控制权被非法获取。为检测处理器10是否受到rop攻击和jop攻击,指令执行单元115在执行间接分支指令后,可以将该间接分支指令的着陆状态参数写入分支着陆状态寄存器,不同类型的间接分支指令对应不同的着陆状态参数,在指令执行单元115执行从间接分支指令跳转至的检查点指令之前,根据检查点指令的类型、及检查点指令的指令参数与分支着陆状态寄存器中着陆状态参数的差异,对检查点指令进行合法性检查,如果检查结果为检查点指令不合法,则发出报警信息。
50.如果处理器10受到rop攻击或jop攻击使检查点指令将被篡改,将会导致检查点指令的类型或指令参数发生改变,从而在对检查点指令进行合法性检查时,将检查出检查点指令不合法,进而发出报警信息,以提示用户进行处理或停止执行检查点指令。
51.分支着陆状态寄存器用于存储间接分支指令的着陆状态参数,随着指令执行单元115所执行指令的变化,分支着陆状态寄存器中的着陆状态参数相应变化。分支着陆状态寄存器可以是寄存器堆111中的一个寄存器,也可以是寄存器堆111之外的寄存器,对此本技术实施例不作限定。
52.在开发由处理器10执行的程序时,从间接分支指令跳转至的检查点指令的指令参数,与间接分支指令的着陆状态参数相匹配,且检查点指令为指定类型的指令,从而在处理器10未受到rop攻击和jop攻击时,对检查点指令进行合法性检查的结果为检查点指令合法,保证程序能够正常运行。
53.本技术实施例主要着眼于指令执行单元115执行指令过程中rop攻击和jop攻击的检测,在后文中会对rop攻击和jop攻击的检测过程进行详细描述。
54.攻击检测方法
55.图2是本技术一个实施例的攻击检测方法的流程图,该攻击检测方法可由上述实施例中的指令执行单元115执行。如图2所示,该攻击检测方法包括如下步骤:
56.步骤201、响应于间接分支指令被执行,将间接分支指令的着陆状态参数写入分支着陆状态寄存器。
57.间接分支指令可以是间接跳转指令、函数调用指令或返回指令,针对间接跳转指令、函数调用指令和返回指令分别设定有相对应的着陆状态参数,且间接跳转指令、函数调用指令和返回指令对应不同的着陆状态参数。对于非间接分支指令,也设定有相对应的着陆状态参数,非间接分支指令的着陆状态参数与间接分支指令的着陆状态参数不同。分支着陆状态寄存器的默认值为非间接分支指令的着陆状态参数。比如,间接跳转指令的着陆状态参数为0b0001,函数调用指令的着陆状态参数为0b0010等,非间接分支指令的着陆状态参数为0b0000,其中,0b表示着陆状态参数的数据类型为二进制数。
58.当指令执行单元115执行程序中的一个指令时,如果该指令为间接分支指令,则根据该间接分支指令的类型,将相对应的着陆状态参数写入分支着陆状态寄存器,如果该指令为非间接分支指令,则分支着陆状态寄存器维持默认值。
59.步骤202、确定从间接分支指令跳转至的检查点指令。
60.间接分支指令用于实现程序流程的跳转,指令执行单元155执行间接分支指令后,将不再执行该间接分支指令后的指令,而是跳转至该间接分支指令所定义的目标指令,间接分支指令定义的目标指令即为检查点指令。
61.根据间接分支指令的类型不同,检查点指令在程序流程中的位置不同。当间接分支指令为间接跳转指令时,检查点指令为间接分支指令的跳转目标。当间接分支指令为函数调用指令时,检查点指令为间接分支指令所调用函数入口的第一条指令。当间接分支指令为返回指令时,检查点指令为程序流程中调用该返回指令所在函数的函数调用指令的下一条指令。
62.在开发由处理器10执行的程序时,可以针对程序中的间接分支指令设置相对应的分支着陆指令,在程序执行过程中,检查从间接分支指令跳转至的检查点指令是否为分支着陆指令,如果检查点指令不是分支着陆指令,则可以确定程序受到rop攻击或jop攻击,导致间接分支指令的跳转目标被篡改。
63.步骤203、根据检查点指令的类型、及检查点指令的指令参数与分支着陆状态寄存器中着陆状态参数的差异,对检查点指令进行合法性检查。
64.在处理器未受到rop攻击和jop攻击时,从间接分支指令跳转至的检查点指令应为特定类型的指令,比如程序开发时将间接分支指令的跳转目标设置为分支着陆指令。如果间接分支指令执行时,检查到从该间接分支指令跳转至的检查点指令不是特定类型的指令,比如不是分支着陆指令,则可以确定检查点指令被篡改。
65.在开发由处理器10执行的程序时,为间接分支指令的跳转目标设置相应的指令参数,比如间接分支指令的跳转目标为分支着陆指令,则为分支着陆指令设置相应的指令参数,该指令参数与间接分支指令的着陆状态参数相匹配。如果处理器未受到rop攻击和jop攻击,间接分支指令的着陆状态参数与检查点指令的指令参数应当匹配,如果间接分支指令的状态数据与检查点指令的指令参数不匹配,则可以确定检查点指令被篡改。
66.结合检查点指令的指令类型、及检查点指令的指令参数与当前分支着陆状态寄存
器内容的差异,对检查点指令的合法性进行检查,以确定检查点指令是否被篡改。
67.步骤204、若检查点指令不合法,则发出报警信息。
68.对检查点指令进行合法性检查后,如果确定检查点指令不合法,说明处理器受到rop攻击或jop攻击,进而发出报警信息。在发出报警信息后,由处理器或用户针对rop攻击或jop攻击进行处理,本技术实施例不对基于报警信息所采用的后序处理进行限定。
69.在本技术实施例中,在间接分支指令被指令后,将间接分支指令的着陆状态参数写入分支着陆状态寄存器,并确定从间接分支指令跳转至的检查点指令,进而根据检查点指令的类型、及检查点指令的指令参数与分支着陆状态寄存器中着陆状态参数的差异,对检查点指令进行合法性检查,如果检查点指令不合法,则发出报警信息。从间接分支指令跳转至的目标指令具有特定的指令类型,而且间接分支指令与着陆状态参数与目标指令的指令参数相匹配,如果处理器受到rop攻击或jop攻击,会改变目标指令的类型或目标指令的指令参数,因此可以根据检查点指令的类型、及检查点指令的指令参数与分支着陆状态寄存器中着陆状态参数的差异,对检查点指令的合法性进行检查,确定处理器是否受到rop攻击或jop攻击,实现了jop攻击和rop攻击的统一检测和防护,减小jop攻击防护和rop攻击防护所消耗的计算资源,从而可以提高处理器性能。
70.在一种可能的实现方式中,不同类型的间接分支指令对应不同的着陆状态参数,间接跳转指令对应的着陆状态参数为第一着陆状态参数,函数调用指令对应的着陆状态参数为第二着陆状态参数,第一着陆状态参数与第二着陆状态参数不同,比如,第一着陆状态参数为0b0001,第二着陆状态参数为0b0010。当间接分支指令被指令时,根据间接分支指令的指令类型将相应着陆状态参数写入分支着陆状态寄存器。
71.如果间接分支指令是间接跳转指令,则响应于间接分支指令的执行,将第一着陆状态参数写入分支着陆状态寄存器,比如将0b0001写入分支着陆状态寄存器。如果间接分支指令是函数调用指令,则响应于函数调用指令的执行,将第二着陆状态参数写入分支着陆状态寄存器,比如将0b0010写入分支着陆状态寄存器。
72.在本技术实施例中,间接跳转指令和函数调用指令对应不同的着陆状态参数,当间接跳转指令被执行时将第一着陆状态参数写入分支着陆状态寄存器,当函数调用指令被执行时将第二着陆状态参数写入分支着陆状态寄存器,从而可以分别针对间接跳转指令和函数调用指令进行jop攻击防护,提高jop攻击防护策略的攻破难度,提高对jop攻击防护的效果。
73.在一种可能的实现方式中,如果间接分支指令为返回指令,则根据该返回指令对应的函数调用指令的类型,在该返回指令被执行时,将该返回指令的着陆状态参数写入分支着陆状态寄存器。
74.由于返回指令对应的函数调用指令可以是直接函数调用指令,也可以是间接函数调用指令,因此可以根据返回指令对应的函数调用指令的类型,确定返回指令的着陆状态参数。对应不同类型函数调用指令的返回指令的着陆状态参数不同,比如,对应直接函数调用指令的返回指令的着陆状态参数为第三着陆状态参数,第三着陆状态参数可以是0b0100,对应间接函数调用指令的返回指令的着陆状态参数为第四着陆状态参数,第四着陆状态参数可以是0b1000。
75.需要说明的是,同一返回指令可以针对直接函数调用指令返回,也可以针对间接
函数调用指令返回,所以同一返回指令在对应不同类型的函数调用指令时,该返回指令对应的着陆状态参数是不同的。
76.在本技术实施例中,返回指令针对不同类型的函数调用指令执行返回动作,根据返回指令对应的函数调用指令的类型,确定返回指令的着陆状态参数,对应不同函数调用指令的返回指令的着陆状态参数不同,从而可以针对不同类型函数调用指令对应的返回指令进行rop攻击防护,提高rop攻击防护策略的攻破难度,提高对rop攻击防护的效果。
77.在一种可能的实现方式中,为了根据函数调用指令的类型确定返回指令的着陆状态参数,在执行直接函数调用指令时,将该直接函数调用指令的返回地址和直接调用指令标识写入返回地址堆栈(return address stack),在执行间接函数调用指令时,将该间接函数调用指令的返回地址和间接调用指令标识写入返回地址堆栈。返回地址堆栈用于确定返回指令的着陆状态参数。
78.返回指令的着陆状态参数基于函数调用指令的类型确定,执行函数调用指令后,在返回指令之前还有多个指令需要执行,返回指令之前的指令可以是间接分支指令或非间接分支指令,如果在执行函数调用指令后将相应返回指令的着陆状态参数写入分支着陆状态寄存器,位于返回指令之前的指令的着陆状态参数会将返回指令的着陆状态参数覆盖,导致rop攻击误识别。为此,需要在函数调用指令执行后,记录函数调用指令的类型,进而在该函数调用指令对应的返回指令被执行时,基于所记录的函数调用指令的类型,将返回指令的着陆状态参数写入分支着陆状态寄存器。
79.返回地址堆栈是先进后出缓冲区,用于缓存函数调用指令的返回地址(return address),通过对返回地址堆栈进行扩展,使得返回地址堆栈可以缓存函数调用指令的返回地址、及函数调用指令的调用指令标识。图3是本技术一个实施例的返回地址堆栈的示意图,返回地址堆栈包括返回地址和调用指令标识两个字段,返回地址用于缓存函数调用指令的返回地址,调用指令标识用于缓存函数调用指令的调用指令标识。不同类型的函数调用指令对应不同的调用指令标识,直接函数调用指令的调用指令标识为直接调用指令标识,间接函数调用指令的调用指令标识为间接调用指令标识,在一个例子中,直接调用指令标识为0,间接调用指令标识为1。
80.将函数调用指令的调用指令标识写入返回地址堆栈,当执行到函数调用指令对应的返回指令时,可以根据返回地址堆栈缓存的函数调用指令的调用指令标识,确定返回地址的着陆状态参数。比如,如果返回地址堆栈中记录返回指令所对应函数调用指令的调用指令标识为0,即缓存的是直接调用指令标识,则确定该返回指令的着陆状态参数为0b0100,如果返回地址堆栈中记录返回指令所对应函数调用指令的调用指令标识为1,即缓存的是间接调用指令标识,则确定该返回指令的着陆状态参数为0b1000。
81.直接函数调用指令可以是jal指令,jal指令的格式为jal rd,#imm,其中,rd为链路寄存器(比如risc-v架构中的x1或x5),imm表示立即数。在获取到jal指令后,处理器包括的分支预测单元将该jal指令的返回地址及直接调用指令标识0写入返回地址堆栈。
82.间接函数调用指令可以是jalr指令,jalr指令的格式为jalr rd,#imm(rs),其中,rd为链路寄存器,imm(rs)表示寄存器。在获取到jalr指令后,处理器包括的分支预测单元将该jalr指令的返回地址及间接调用指令标识1写入返回地址堆栈。
83.在本技术实施例中,执行函数调用指令后,在执行该函数调用指令对应的返回指
令之前需要执行多个其他指令,为了在执行返回指令时能够确定对应的函数调用指令的类型,在执行函数调用指令后,将函数调用指令的调用指令标识写入返回地址堆栈,进而在执行到返回指令时,可以根据返回地址堆栈记录的调用指令标识确定对应的函数调用指令的类型,进而确定返回指令的着陆状态参数,并将返回指令的着陆状态参数写入分支着陆状态寄存器,保证能够准确确定返回指令的着陆状态参数,进而保证rop攻击防护的准确性。
84.在一种可能的实现方式中,如果间接分支指令为返回指令,在该间接分支指令被执行时,检查返回地址堆栈是否生发下溢,若返回地址堆栈未发生下溢,则从返回地址堆栈中读取最新一条数据,如果所读取数据包括直接调用指令标识,则将直接函数调用指令对应的第三着陆状态参数写入分支着陆状态寄存器,如果所读取数据包括间接调用指令标识,则将间接函数调用指令对应的第四着陆状态参数写入分支着陆状态寄存器。
85.执行函数调用指令进入函数体后,函数体中还可以包括函数调用指令,此时会出现在两个或更多个函数调用指令之间没有返回指令的情况。在执行函数调用指令时向返回地址堆栈中写入数据,在执行返回指令时从返回地址堆栈中读出数据,当连续执行多个函数调用指令(执行两个函数调用指令之间没有执行返回指令)时,会向返回地址堆栈写入多条数据。比如,函数调用指令1用于调用函数体1,函数体1包括函数调用指令2,函数调用指令2用于调用函数体2,在执行函数调用指令1时,向返回地址堆栈写入函数体1的返回地址和函数调用指令1的调用指令标识,在执行函数调用指令2时,向返回地址堆栈写入函数体2的返回地址和函数调用指令2的调用指令标识,此时向返回地址堆栈写入2条数据。
86.由于函数调用指令与返回指令是成对出现的,而返回地址堆栈是先进后出缓冲区,在执行函数调用指令时向返回地址堆栈写入数据,在执行返回指令时从返回地址堆栈中读出数据,所以在返回地址堆栈未发生下溢的前提下,在执行返回指令时,返回地址堆栈中最新一条数据即为该返回指令所对应函数调用指令的相关数据,因此可以根据返回地址堆栈中最新一条数据包括的调用指令标识,确定返回地址的着陆状态参数。比如,依次执行函数调用指令1和函数调用指令2,函数调用指令1与返回指令1相对应,函数调用指令2与返回指令2相对应,在执行函数调用指令1时将数据1写入返回地址堆栈,在执行函数调用指令2时将数据2写入返回地址堆栈,数据1先于数据2被写入返回地址堆栈。返回指令2先于返回指令1被指令,当执行返回指令2时,返回地址堆栈中最新一条数据为数据2,从而将数据2从返回地址堆栈中读出,并基于数据2确定返回指令2的着陆状态参数。在将数据2从返回地址堆栈读出后,返回地址堆栈中最新一条数据为数据1,从而在执行返回指令1时,将数据1从返回地址堆栈中读出,并基于数据1确定返回指令1的着陆状态参数。
87.当获取到返回指令时,硬件从返回地址堆栈中弹出最新的一条数据,如果该条数据包括的调用指令标识为0(直接调用指令标识),则向分支着陆状态寄存器中写入0b0100(第三着陆状态参数),如果该条数据包括的调用指令标识为1(间接调用指令标识),则向分支着陆状态寄存器中写入0b1000(第四着陆状态参数)。
88.在本技术实施例中,由于可以连续执行两条函数调用指令,而在这两条函数调用指令之间没有返回指令,所以返回地址堆栈会缓存多条数据,而执行函数调用指令时向返回地址堆栈中写入数据,执行返回地址时从返回地址堆栈中读出数据,所以在返回地址堆栈未发生下溢的前提下,当执行到一条返回指令时,返回地址堆栈中最新一条数据即为该返回指令对应的函数调用指令的相关数据,进而在检查点指令为返回指令时,可以从返回
地址堆栈中读取最新一条数据,根据读取到的该条数据确定返回指令的着陆状态参数,保证能够将正确的着陆状态参数写入分支着陆状态寄存器,进而保证对rop攻击进行检查的准确性。
89.在一种可能的实现方式中,由于返回地址堆栈会出现下溢的情况,当返回地址堆栈发生下溢时,将无法准确地从返回地址堆栈中读取到返回指令对应的函数调用指令的相关数据,即无法从返回地址堆栈中准确地读取到返回指令所对应函数调用指令的返回地址、及函数调用指令的调用指令标识。所以在执行返回指令时,如果返回地址堆栈发生下溢,则将与直接函数调用指令和间接函数调用指令相对应的第五着陆状态参数写入分支着陆状态寄存器。
90.当返回地址堆栈发生下溢时,无法确定返回指令所对应函数调用指令的类型,返回指令实际对应的函数调用指令可以为直接函数调用指令或间接函数调用指令,此时将第五着陆状态参数写入分支着陆状态寄存器。如果处理器未受到rop攻击,返回指令对应的函数调用指令为直接函数调用指令或间接函数调用指令时,由返回指令跳转至的检查点指令的指令参数均与第五着陆状态参数相匹配。
91.比如,返回指令对应的函数调用指令为直接函数调用指令时,从该返回指令跳转至的目标指令的指令参数为0b0100,返回指令对应的函数调用指令为间接函数调用指令时,从该返回指令跳转至的目标指令的指令参数为0b1000,第五着陆状态参数为0b1100。在对检查点指令进行合法性检查时,将检查点指令的指令参数与分支着陆状态寄存器中着陆状态参数进行位与运算,检查点指令的指令参数为0b0100或0b1000时,检查点指令的指令参数与第五着陆状态参数的位与运算结果均不等于0,即检查点指令的指令参数与分支着陆状态寄存器中存储的第五着陆状态参数相匹配,在检查点指令为特定类型指令时,会确定检查点指令为合法指令。
92.在本技术实施例中,在间接分支指令为返回指令时,如果返回地址堆栈发生下溢时,将第五着陆状态参数写入分支着陆状态寄存器,第五着陆状态参数与直接函数调用指令和间接函数调用指令均对应,即返回指令对应的函数调用指令为直接函数调用指令或间接函数调用指令时,返回指令跳转至的检查点指令的指令参数均与第五着陆状态参数相匹配,保证在返回地址堆栈发生下溢后仍可以对rop攻击进行检查,避免由于返回地址堆栈下溢而导致的rop攻击误报,还可以避免非法程序通过使返回地址堆栈下溢而绕过rop攻击防护,从而可以提高rop攻击防护的准确性和有效性。
93.在一种可能的实现方式中,由于处理器在执行程序流的过程中会进行分支预测,分支预测存在预测正确和预测错误两种结果,当分支预测正确时预测会被执行的间接分支指令被提交,以使该间接分支指令被处理器执行,当分支预测错误时预测会被执行的间接分支指令会被清除,处理器不会执行该间接分支指令。
94.当一条间接分支指令为返回指令,且预测该间接分支指令会被执行时,在获取到该间接分支指令后,根据返回地址堆栈中最新一条数据包括的调用指令标识,将第三着陆状态参数、第四着陆状态参数或第五着陆状态参数写入分支着陆缓冲区。如果预测会被执行的返回指令被提交,则将分支着陆缓冲区中缓存的第三着陆状态参数、第四着陆状态参数或第五着陆状态参数读出,并将读出的第三着陆状态参数、第四着陆状态参数或第五着陆状态参数写入分支着陆状态寄存器。预测预测会被执行的返回指令是预测错误的分支指
令,则将分支着陆缓冲区清空。
95.图4是本技术一个实施例的分支着陆状态寄存器写入过程的示意图。如图4所示,当预测一条返回指令会被执行时,从返回地址堆栈中读取最新一条数据,并获取该条数据包括的调用指令标识。如果调用指令标识为0b00(直接调用指令标识),则将第三着陆状态参数0b0100写入分支着陆缓冲区,如果调用指令标识为0b01(间接调用指令标识),则将第四着陆状态参数0b1000写入分支着陆缓冲区,如果返回地址堆栈发生下溢(对应于调用指令标识为0b10或0b11),则将第五着陆状态参数0b1100写入分支着陆缓冲区。
96.分支着陆缓冲区为先进先出(first-in,first-out,fifo)数据缓存器。如果分支预测正确,在返回指令退休(retried)时将分支着陆缓冲区中缓存的着陆状态参数读出,并将读出的着陆状态参数写入分支着陆状态寄存器。如果分支预测错误,则在返回指令被清空(flushed)时,将分支着陆缓冲区中该返回指令对应的着陆状态参数、及后序缓存的内容均清除。
97.在本技术实施例中,由于处理器具有分支预测功能,在预测会执行返回指令时,先根据返回地址堆栈中最新一条数据包括的调用指令标识,将相应的着陆状态参数写入分支着陆缓冲区,如果分支预测正确,则在该返回指令被提交时从分支着陆缓冲区读取着陆状态参数,并将读取到的着陆状态参数写入分支着陆状态寄存器,如果分支预测错误,则在该返回指令被清空时将分支着陆缓冲区清空,从而保证将被执行的返回指令的着陆状态参数写入分支着陆状态寄存器,而分支预测错误的返回指令的着陆状态参数不会被写入分支着陆状态寄存器,避免将分支预测错误的返回指令的着陆状态参数写入分支着陆状态寄存器而导致rop攻击误差,进而保证对rop攻击防护的准确性。
98.在一种可能的实现方式中,在根据检查点指令的类型、及检查点指令的指令参数与分支状态寄存区中着陆状态参数的差异,对检查点指令进行合法性检查时,可以按照如下逻辑确定检查点指令的合法性:
99.(i)若检查点指令不是分支着陆指令,则确定检查点指令不合法。
100.(ii)若检查点指令是分支着陆指令,且检查点指令的指令参数与分支着陆状态寄存器中的着陆状态参数不匹配,则确定检查点指令不合法;
101.(iii)若检查点指令时分支着陆指令,且检查点指令的指令参数与分支着陆状态寄存器中的着陆状态参数相匹配,则确定检查点指令合法。
102.在开发由处理器执行的程序时,将间接分支指令的跳转目标设置为分支着陆指令,即在处理器未受到jop攻击和rop攻击时,直接跳转指令、间接跳转指令和返回指令跳转至的检查点指令均为分支着陆指令。分支着陆指令的格式可以是bld#imm,其中,imm为分支着陆指令的指令参数。
103.如果间接分支指令跳转至的检查点指令不是分支着陆指令,说明处理器受到jop攻击或rop攻击,导致间接跳转指令的跳转目标被篡改,因此确定检查点指令不合法。如果检查点指令是分支着陆指令,则进一步判断检查点指令的指令参数是否与分支着陆状态寄存器中的着陆状态参数相匹配。
104.在开发由处理器执行的程序时,根据间接分支指令的类型设置相对应分支着陆指令的指令参数,使得在处理器未受到jop攻击和rop攻击时,分支着陆指令的指令参数与相对应间接分支指令的着陆状态参数相匹配。在一个例子中,指令参数与着陆状态参数相匹
配是指两者位与运算的结果不等于0,如下表1示出了间接分支指令的着陆状态参数、及由间接分支指令跳转至的分支着陆指令的指令参数的对应关系。
105.表1
[0106][0107]
如果检查点指令是分支着陆指令,而分支着陆指令的指令参数与相对应间接分支指令的着陆状态参数不匹配,说明处理器受到jop攻击或rop攻击,通过伪造分支着陆指令的方式篡改间接跳转指令的跳转目标,进而确定检查点指令不合法。如果检查点指令是分支着陆指令,且分支着陆指令的指令参数与相对应间接分支指令的着陆状态参数相匹配,则确定检查点指令合法。
[0108]
在本技术实施例中,在开发程序时,将从间接分支指令返回的目标指令设置为分支着陆指令,并使分支着陆指令的指令参数与相对应间接分支指令的着陆状态参数相匹配,从而在间接分支指令被执行时,判断从间接分支指令跳转至的检查点指令是否为分支着陆指令,并判断检查点指令的指令参数是否与相对应间接分支指令的着陆状态参数相匹配,进而根据上述两个判断操作的判断结果,确定检查点指令是否为合法指令,以确定处理器是否受到jop攻击或rop攻击,保证能够正确检测jop攻击或rop攻击。
[0109]
在一种可能的实现方式中,与间接分支指令的着陆状态参数相对应,分支着陆指令的指令参数包括第一着陆状态参数、第二着陆状态参数、第三着陆状态参数、第四着陆状态参数、第五着陆状态参数和第六着陆状态参数。
[0110]
当分支着陆指令的指令参数为第一着陆状态参数时,该分支着陆指令对应的间接分支指令为间接跳转指令。当分支着陆指令的指令参数为第二着陆状态参数时,该分支着陆指令对应的间接分支指令为函数调用指令。当分支着陆指令的指令参数为第三着陆状态参数时,该分支着陆指令对应的间接分支指令为对应于直接函数调用指令的返回指令。当分支着陆指令的指令参数为第四着陆状态参数时,该分支着陆指令对应的间接分支指令为对应于被间接函数调用指令的返回指令。当分支着陆指令的指令参数为第五着陆状态参数时,该分支着陆对应的间接分支指令为对应于直接函数调用指令和间接函数调用指令的返回指令。当分支着陆指令的指令参数为第六着陆状态参数时,该分支着陆对应的间接分支指令为间接跳转指令或函数调用指令。
[0111]
当指令参数与着陆状态参数相匹配是指两者位与运算的结果不等于0时,如下表2示出了间接分支指令与着陆状态参数的对应关系,如下表3示出了间接分支指令与指令参数的对应关系。
[0112]
表2
[0113][0114]
在上述表2中,在通过返回地址堆栈将着陆状态参数写入分支着陆状态寄存器时,由于返回地址堆栈可以发生下溢,当返回地址堆栈发生下溢后无法准确确定返回指令所对应函数调用指令的类型,所以设置第五着陆状态参数0b1100,直接函数调用指令对应的分支着陆指令的指令参数、及间接函数调用指令对应的分支着陆指令的指令参数,均与第五着陆状态参数相匹配,详见如下表3。
[0115]
间接跳转指令可以是jr指令,直接函数调用指令可以是jal指令,间接函数调用指令可以是jalr指令。
[0116]
表3
[0117][0118]
在上述表3中,由于一些返回指令既可以针对直接函数调用指令执行返回,也可以针对间接函数调用指令执行返回,所以这些返回指令跳转至的分支着陆指令的指令参数为第五着陆状态参数0b1100,使得在未受到rop攻击的情况下,返回指令针对直接函数调用指令或间接函数调用指令执行返回时,均不会将分支着陆指令确定为非法指令,避免误报情况的发生。
[0119]
一些分支着陆指令既可以从间接跳转指令跳转,也可以从返回指令跳转,所以将这些分支着陆指令的指令参数设置为第六着陆状态参数0b0011,间接跳转指令和函数调用
指令的着陆状态参数,均与第六着陆状态参数相匹配,详见上述表2。
[0120]
在本技术实施例中,间接分支指令的着陆状态参数包括第一着陆状态参数至第五着陆状态参数,与间接分支指令的着陆状态参数相对应,分支着陆指令的指令参数包括第一着陆状态参数至第五着陆状态参数、及第六着陆状态参数,在开发程序时为分支着陆指令设置相应的指令参数,在间接分支指令执行时将相对应的着陆状态参数写入分支着陆状态寄存器,从而可以根据检查点指令的类型、及检查点指令的指令参数与分支着陆状态寄存器中着陆状态参数的匹配性,确定检查点指令是否合法,进而确定是否受到jop攻击和rop攻击,通过较少的计算资源消耗实现jop攻击防护和rop攻击防护。
[0121]
下面结合上述表2所示的着陆状态参数和图3所示的指令参数,通过几个例子对攻击检测过程进行说明。
[0122]
图5是本技术一个实施例的针对间接跳转指令的攻击检测过程的示意图。如图5所示,在执行到间接跳转指令jr x9时,将第一着陆状态参数0b0001写入分支着陆状态寄存器,在执行从间接跳转指令jr x9跳转到的分支着陆指令bld#0b0001之前,验证分支着陆指令的指令参数与分支着陆状态寄存器中的着陆状态参数是否匹配,由于分支着陆指令bld#0b0001的指令参数0b0001与分支着陆状态寄存器内容相匹配,所以确定分支着陆指令bld#0b0001合法,不会发出报警信息。
[0123]
图6是本技术另一个实施例的针对间接跳转指令的攻击检测过程的示意图。如图6所示,在执行到间接跳转指令jr x9时,将第一着陆状态参数0b0001写入分支着陆状态寄存器,在执行从间接跳转指令jr x9跳转到的分支着陆指令bld#0b0010之前,验证分支着陆指令的指令参数与分支着陆状态寄存器中的着陆状态参数是否匹配,由于分支着陆指令bld#0b0010的指令参数0b0010与分支着陆状态寄存器内容不匹配,所以确定分支着陆指令bld#0b0010不合法,发出报警信息。
[0124]
图7是本技术一个实施例的针对函数调用指令的攻击检测过程的示意图。如图7所示,在执行到间接函数调用指令falr x2时,将第二着陆状态参数0b0010写入分支着陆状态寄存器,在执行从间接函数调用指令falr x2跳转到的分支着陆指令bld#0b0010之前,验证分支着陆指令的指令参数与分支着陆状态寄存器中的着陆状态参数是否匹配,由于分支着陆指令bld#0b0010的指令参数0b0010与分支着陆状态寄存器内容相匹配,所以确定分支着陆指令bld#0b0010合法,不会发出报警信息。
[0125]
图8是本技术另一个实施例的针对函数调用指令的攻击检测过程的示意图。如图8所示,在执行到间接函数调用指令falr x2时,将第二着陆状态参数0b0010写入分支着陆状态寄存器,在执行从间接函数调用指令falr x2跳转到的指令add x1,x2,x3之前,验证指令add x1,x2,x3不是分支着陆指令,所以确定指令add x1,x2,x3不合法,发出报警信息。
[0126]
图9是本技术一个实施例的针对返回指令的攻击检测过程的示意图。如图9所示,在执行到间接函数调用指令falr x2时,将第二着陆状态参数0b0010写入分支着陆状态寄存器,在执行从间接函数调用指令falr x2跳转到的分支着陆指令bld#0b0010之前,验证分支着陆指令bld#0b0010的指令参数0b0010与分支着陆状态寄存器内容相匹配,所以确定分支着陆指令bld#0b0010合法,不会发出报警信息。在执行到返回指令ret时,将第四着陆状态参数0b1000写入分支着陆状态寄存器,在执行从返回指令ret跳转到的分支着陆指令bld#0b1000之前,验证分支着陆指令bld#0b1000的指令参数0b1000与分支着陆状态寄存器
内容相匹配,所以确定分支着陆指令bld#0b1000合法,不会发出报警信息。
[0127]
图10是本技术另一个实施例的针对返回指令的攻击检测过程的示意图。如图10所示,在执行到间接函数调用指令falr x2时,将第二着陆状态参数0b0010写入分支着陆状态寄存器,在执行从间接函数调用指令falr x2跳转到的分支着陆指令bld#0b0010之前,验证分支着陆指令bld#0b0010的指令参数0b0010与分支着陆状态寄存器内容相匹配,所以确定分支着陆指令bld#0b0010合法,不会发出报警信息。在执行到返回指令ret时,将第四着陆状态参数0b1000写入分支着陆状态寄存器,在执行从返回指令ret跳转到的指令add x1,x2,x3之前,验证指令add x1,x2,x3不是分支着陆指令,所以确定指令add x1,x2,x3不合法,发出报警信息。
[0128]
处理器可以通过中断指令在不同模式下切换,比如基于risc-v架构的处理器,可以通过中断指令可以从虚拟化用户模式(virtualized user mode,vu-mode)切换至虚拟化管理模式(virtualized supervisor mode,vs-mode),通过中断指令可以从虚拟化管理模式切换至虚拟化扩展管理模式(hypervisor-extended supervisor mode,hs-mode)。
[0129]
处理器执行中断指令后,会停止当前操作而执行其他操作,为了避免在中断指令之前缓存到分支着陆状态寄存器中的着陆状态参数被覆盖,在接收到中断指令后,可以将分支着陆状态寄存器中缓存的着陆状态参数转移至其他缓存位置,在执行中断指令并返回后,再将转移到其他缓存位置的着陆状态参数转移回分支状态中的原位置,保证中断返回后仍可继续基于分支着陆状态寄存器中的着陆状态参数进行jop攻击防护和rop攻击防护。
[0130]
在一种可能的实现方式中,响应于接收到的第一中断指令,将间接分支指令的着陆状态参数从分支着陆状态寄存器的第一字段转移至第二子单元,在执行第一中断指令并返回后,将间接分支指令的着陆状态参数从分支着陆状态寄存器的第二字段转移至第一字段。
[0131]
在另一种可能得实现方式中,响应于接收到的第二中断指令,将间接分支指令的着陆状态参数从分支着陆状态寄存器转移到备用分支着陆状态寄存器,分支着陆状态寄存器与备用分支着陆状态寄存器为不同的寄存器,执行第二中断指令并返回后,将备用分支着陆状态寄存器中的着陆状态参数转移至分支着陆状态寄存器。
[0132]
在本技术实施例中,在接收到中断指令后,将着陆状态参数从分支着陆状态寄存器中的第一字段转移至第二字段,或者将着陆状态参数从分支着陆状态寄存器转移至备用分支着陆状态寄存器,执行中断指令并返回后,将被转移的着陆状态参数转移回分支着陆状态寄存器中的原位置,从而保证中执行中断指令时也能够正常进行jop攻击防护和rop攻击防护,提高进行jop攻击防护和rop攻击防护的全面性和可靠性。
[0133]
电子设备
[0134]
图11是本技术实施例提供的一种电子设备的示意性框图,本技术具体实施例并不对电子设备的具体实现做限定。如图11所示,该电子设备可以包括:处理器(processor)1102、通信接口(communications interface)1104、存储器(memory)1106、以及通信总线1108。其中:
[0135]
处理器1102、通信接口1104、以及存储器1106通过通信总线1108完成相互间的通信。
[0136]
通信接口1104,用于与其它电子设备或服务器进行通信。
[0137]
处理器1102,用于执行程序1110,具体可以执行前述任一攻击检测方法实施例中的相关步骤。
[0138]
具体地,程序1110可以包括程序代码,该程序代码包括计算机操作指令。
[0139]
处理器1102可能是cpu,或者是特定集成电路asic(application specific integrated circuit),或者是被配置成实施本技术实施例的一个或多个集成电路。智能设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。
[0140]
risc-v是一种基于精简指令集(risc)原则的开源指令集架构,其可以应用于单片机和fpga芯片等各个方面,具体可应用在物联网安全、工业控制、手机、个人计算机等领域,且由于其在设计时考虑了小型、快速、低功耗的现实情况,使得其尤其适用于仓库规模云计算机、高端移动电话和微小嵌入式系统等现代计算设备。随着人工智能物联网aiot的兴起,risc-v指令集架构也受到越来越多的关注和支持,并有望成为下一代广泛应用的cpu架构。
[0141]
本技术实施例中的计算机操作指令可以是基于risc-v指令集架构的计算机操作指令,对应地,处理器1102可以基于risc-v的指令集设计。具体地,本技术实施例提供的电子设备中的处理器的芯片可以为采用risc-v指令集设计的芯片,该芯片可基于所配置的指令执行可执行代码,进而实现上述实施例中的攻击检测方法。
[0142]
存储器1106,用于存放程序1110。存储器1106可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
[0143]
程序1110具体可以用于使得处理器1102执行前述任一实施例中的攻击检测方法。
[0144]
程序1110中各步骤的具体实现可以参见前述任一攻击检测方法实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
[0145]
通过本技术实施例的电子设备,在间接分支指令被指令后,将间接分支指令的着陆状态参数写入分支着陆状态寄存器,并确定从间接分支指令跳转至的检查点指令,进而根据检查点指令的类型、及检查点指令的指令参数与分支着陆状态寄存器中着陆状态参数的差异,对检查点指令进行合法性检查,如果检查点指令不合法,则发出报警信息。从间接分支指令跳转至目标指令具有特定的指令类型,而且间接分支指令与着陆状态参数与目标指令的指令参数相匹配,如果处理器受到rop攻击或jop攻击,会改变目标指令的类型或目标指令的指令参数,因此可以根据检查点指令的类型、及检查点指令的指令参数与分支着陆状态寄存器中着陆状态参数的差异,对检查点指令的合法性进行检查,确定处理器是否受到rop攻击或jop攻击,实现了jop攻击和rop攻击的统一检测和防护,减小jop攻击防护和rop攻击防护所消耗的计算资源,从而可以提高处理器性能。
[0146]
计算机存储介质
[0147]
本技术还提供了一种计算机可读存储介质,存储用于使一机器执行如本文所述的攻击检测方法的指令。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或cpu或mpu)读出并执行存储在存储介质中的程序代码。
[0148]
在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实
施例的功能,因此程序代码和存储程序代码的存储介质构成了本技术的一部分。
[0149]
用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-ram、dvd-rw、dvd+rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上下载程序代码。
[0150]
计算机程序产品
[0151]
本技术实施例还提供了一种计算机程序产品,包括计算机指令,该计算机指令指示计算设备执行上述多个方法实施例中的任一对应的操作。
[0152]
本领域的技术人员能够理解,本公开可以实现为系统、方法和计算机程序产品。因此,本公开可以具体实现为以下形式,即完全的硬件、完全的软件(包括固件、驻留软件、微代码),还可以实现为软件和硬件结合的形式。此外,在一些实施例中,本公开还可以实现为一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0153]
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如但不限于为电、磁、光、电磁、红外线或半导体的系统、装置或器件,或其他任意以上的组合。计算机可读存储介质的更具体的例子包括:具体一个或多个导线的电连接,便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或者闪存)、光纤、便携式紧凑磁盘只读存储器(cd rom)、光存储器、磁存储器或者上述任意合适的组合。在本文中,计算机可读的存储介质可以是任意包含或存储程序的有形介质,该程序可以被处理单元、装置或者器件使用,或者与其结合使用。
[0154]
计算机可读信号介质可以包括在基带中或者作为截波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或者其他任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质之外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令系统、装置或器件使用或者与其结合使用的程序。
[0155]
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、rf等等,以及上述任意合适的组合。
[0156]
可以以一种或者多种程序设计语言或者组合来编写用于执行本公开实施例的计算机程序代码。所述程序设计语言包括面向对象的程序设计语言,例如java、c++,还可以包括常规的过程式程序设计语言,例如c。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(lan)或广域网(wan)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0157]
需要说明的是,本公开实施例所涉及到的与用户有关的信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于对模型进行训练的样本数据、用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
[0158]
应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于装置和系统实施例中描述的方法,所以描述的比较简单,相关之处参见其他实施例的部分说明即可。
[0159]
应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0160]
应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
[0161]
还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。

技术特征:
1.一种攻击检测方法,包括:响应于间接分支指令被执行,将所述间接分支指令的着陆状态参数写入分支着陆状态寄存器,其中,所述间接分支指令包括间接跳转指令、函数调用指令或返回指令,间接跳转指令、函数调用指令和返回指令对应不同的着陆状态参数;确定从所述间接分支指令跳转至的检查点指令;根据所述检查点指令的类型、及所述检查点指令的指令参数与所述分支着陆状态寄存器中着陆状态参数的差异,对所述检查点指令进行合法性检查;若所述检查点指令不合法,则发出报警信息。2.根据权利要求1所述的方法,其中,所述响应于间接分支指令被执行,将所述间接分支指令的着陆状态参数写入分支着陆状态寄存器,包括:若所述间接分支指令为间接跳转指令,则响应于所述间接分支指令的执行,将间接跳转指令对应的第一着陆状态参数写入分支着陆状态寄存器;若所述间接分支指令为函数调用指令,则响应于所述间接分支指令的执行,将函数调用指令对应的第二着陆状态参数写入分支着陆状态寄存器。3.根据权利要求2所述的方法,其中,所述响应于间接分支指令被执行,将所述间接分支指令的着陆状态参数写入分支着陆状态寄存器,包括:若所述间接分支指令为返回指令,则根据所述返回指令对应的函数调用指令的类型,在所述返回指令被执行时将所述返回指令的着陆状态参数写入分支着陆状态寄存器,对应不同类型函数调用指令的返回指令的着陆状态参数不同。4.根据权利要求3所述的方法,所述方法还包括:在执行直接函数调用指令时,将该直接函数调用指令的返回地址和直接调用指令标识写入返回地址堆栈;在执行间接函数调用指令时,将该间接函数调用指令的返回地址和间接调用指令标识写入所述返回地址堆栈;其中,所述返回地址堆栈用于确定返回指令的着陆状态参数。5.根据权利要求4所述的方法,其中,所述根据所述返回指令对应的函数调用指令的类型,在所述返回指令被执行时将所述返回指令的着陆状态参数写入分支着陆状态寄存器,包括:在所述返回指令被执行时,若所述返回地址堆栈未发生下溢,从所述返回地址堆栈中读取最新一条数据;如果所读取数据包括所述直接调用指令标识,则将直接函数调用指令对应的第三着陆状态参数写入分支着陆状态寄存器;如果所读取数据包括所述间接调用指令标识,则将间接函数调用指令对应的第四着陆状态参数写入分支着陆状态寄存器。6.根据权利要求5所述的方法,其中,所述根据所述返回指令对应的函数调用指令的类型,在所述返回指令被执行时将所述返回指令的着陆状态参数写入分支着陆状态寄存器,包括:在所述返回指令被执行时,若所述返回地址堆栈发生下溢,则将与直接函数调用指令和间接函数调用指令相对应的第五着陆状态参数写入分支着陆状态寄存器。
7.根据权利要求6所述的方法,所述方法还包括:在所述间接分支指令为返回指令时,根据所述返回地址堆栈中最新一条数据包括的调用指令标识,将所述第三着陆状态参数、所述第四着陆状态参数或所述第五着陆状态参数写入分支着陆缓冲区;若所述返回指令被提交,则将所述分支着陆缓冲区中缓存的所述第三着陆状态参数、所述第四着陆状态参数或所述第五着陆状态参数读出,并将读出的所述第三着陆状态参数、所述第四着陆状态参数或所述第五着陆状态参数写入所述分支着陆状态寄存器;若所述返回指令为预测错误的分支指令,则将所述分支着陆缓冲区清空。8.根据权利要求6所述的方法,其中,所述根据所述检查点指令的类型、及所述检查点指令的指令参数与所述分支着陆状态寄存器中着陆状态参数的差异,对所述检查点指令进行合法性检查,包括:若所述检查点指令不是分支着陆指令,则确定所述检查点指令不合法;若所述检查点指令是分支着陆指令,且所述检查点指令的指令参数与所述分支着陆状态寄存器中的着陆状态参数不匹配,则确定所述检查点指令不合法;若所述检查点指令是分支着陆指令,且所述检查点指令的指令参数与所述分支着陆状态寄存器中的着陆状态参数相匹配,则确定所述检查点指令合法。9.根据权利要求8所述的方法,其中,所述分支着陆指令的指令参数包括所述第一着陆状态参数、所述第二着陆状态参数、所述第三着陆状态参数、所述第四着陆状态参数、所述第五着陆状态参数或第六着陆状态参数;当所述分支着陆指令的指令参数包括所述第一着陆状态参数时,所述间接分支指令为间接跳转指令;当所述分支着陆指令的指令参数包括所述第二着陆状态参数时,所述间接分支指令为函数调用指令;当所述分支着陆指令的指令参数包括所述第三着陆状态参数时,所述间接分支指令为对应于直接函数调用指令的返回指令;当所述分支着陆指令的指令参数包括所述第四着陆状态参数时,所述间接分支指令为对应于间接函数调用指令的返回指令;当所述分支着陆指令的指令参数包括所述第五着陆状态参数时,所述间接分支指令为对应于直接函数调用指令和间接函数调用指令的返回指令,所述第五着陆状态参数与所述第三着陆状态参数和所述第四着陆状态参数匹配;当所述分支着陆指令的指令参数包括所述第六着陆状态参数时,所述间接分支指令为间接跳转指令或函数调用指令,所述第六着陆状态参数与所述第一着陆状态参数和所述第二着陆状态参数匹配。10.根据权利要求1-9中任一所述的方法,所述方法还包括:响应于接收到的第一中断指令,将所述间接分支指令的着陆状态参数从所述分支着陆状态寄存器的第一字段转移至第二字段;执行所述第一中断指令并返回后,将所述间接分支指令的着陆状态参数从所述分支着陆状态寄存器的第二字段转移至第一字段。11.根据权利要求1-9中任一所述的方法,所述方法还包括:
响应于接收到的第二中断指令,将所述分支着陆状态寄存器中的着陆状态参数存储到备用分支着陆状态寄存器;执行所述第二中断指令并返回后,将所述备用分支着陆状态寄存器中的着陆状态参数转移至所述分支着陆状态寄存器。12.一种处理器,包括:电连接的分支着陆状态寄存器和指令执行单元,所述指令执行单元用以:响应于间接分支指令被执行,将所述间接分支指令的着陆状态参数写入分支着陆状态寄存器,其中,所述间接分支指令包括间接跳转指令、函数调用指令或返回指令,间接跳转指令、函数调用指令和返回指令对应不同的着陆状态参数;确定从所述间接分支指令跳转至的检查点指令;根据所述检查点指令的类型、及所述检查点指令的指令参数与所述分支着陆状态寄存器中着陆状态参数的差异,对所述检查点指令进行合法性检查;若所述检查点指令不合法,则发出报警信息。13.一种电子设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;存储器用于存放至少一可执行指令,可执行指令使处理器执行如权利要求1-11中任一项方法对应的操作。14.一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如权利要求1-11中任一项的方法。

技术总结
本申请实施例提供了一种攻击检测方法、处理器、电子设备和存储介质,该攻击检测方法包括:响应于间接分支指令被执行,将所述间接分支指令的着陆状态参数写入分支着陆状态寄存器,其中,所述间接分支指令包括间接跳转指令、函数调用指令或返回指令,间接跳转指令、函数调用指令和返回指令对应不同的着陆状态参数;确定从所述间接分支指令跳转至的检查点指令;根据所述检查点指令的类型、及所述检查点指令的指令参数与所述分支着陆状态寄存器中着陆状态参数的差异,对所述检查点指令进行合法性检查;若所述检查点指令不合法,则发出报警信息。本方案能够降低进行JOP攻击防护和ROP攻击防护消耗的计算资源。防护消耗的计算资源。防护消耗的计算资源。


技术研发人员:张仕健 黄嘉逸 吴优 段立德
受保护的技术使用者:阿里巴巴(中国)有限公司
技术研发日:2023.06.09
技术公布日:2023/9/12
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐