一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

防御控制流攻击的装置、方法、处理器、设备及存储介质与流程

2022-04-02 03:18:39 来源:中国专利 TAG:


1.本技术涉及处理器技术领域,本技术涉及一种防御控制流攻击的装置、方法、处理器、设备及存储介质。


背景技术:

2.控制流攻击是一种严重威胁计算机系统安全的攻击方式。其中,控制流攻击通过改变程序的控制流,使程序根据攻击者预期的行为执行,具有攻击过程隐蔽、攻击效果明显和实现简单的特点,已成为威胁计算机系统安全的重要因素和其他攻击的辅助手段。代码注入攻击通过将恶意代码注入到程序栈中,并将程序控制流引导到程序栈中执行恶意代码来实施攻击,是一种广泛研究的攻击方法。
3.现有的防御方法一般会带来比较大的性能损失或不能有效防御控制流攻击,例如基于代码注入攻击的控制流攻击。因此,目前亟需一种防御控制流攻击的方法,有效防御对程序控制流的攻击。


技术实现要素:

4.本技术提供了一种防御控制流攻击的装置、方法、处理器、设备及存储介质。所述技术方案如下:
5.一方面,提供了一种防御控制流攻击的装置,所述装置包括:
6.密钥获取模块,用于获取物理不可克隆函数puf(physical unclonable function)模块对输入激励所输出的响应数据,并将所述响应数据作为待使用的密钥数据存储至寄存器中;
7.加密模块,用于在处理器执行程序控制流过程中,基于所述密钥数据对所述程序控制流中的目标执行数据进行加密,所述目标执行数据包括间接跳转目标地址处的目标指令或者函数调用返回地址中的至少一项;
8.解密模块,用于当处理器执行所述目标执行数据时,对加密后的目标执行数据进行解密;
9.执行模块,用于基于解密后的目标执行数据,继续执行所述程序控制流。
10.在一个可能实现方式中,所述目标执行数据为函数调用返回地址;
11.相应的,所述加密模块,用于在处理器执行程序控制流过程中,当所述程序控制流包括函数调用指令时,通过硬件引擎从所述寄存器中读取密钥数据;基于所述密钥数据对所述函数调用返回地址进行加密,并将加密后的函数调用返回地址压入到程序栈中;
12.相应的,所述解密模块,用于当所述函数调用指令的被调函数执行结束时,通过所述硬件引擎从所述程序栈中取出所述加密后的函数调用返回地址,并基于所述密钥数据对所取出的函数调用返回地址进行解密。
13.在一个可能实现方式中,所述执行模块,用于通过所述硬件引擎将解密后的函数调用返回地址发送至寄存器;通过所述处理器将程序控制流跳转至解密后的函数调用返回
地址处,以继续执行所述程序控制流。
14.在一个可能实现方式中,所述目标执行数据为间接跳转目标地址处的目标指令;
15.相应的,所述加密模块,用于在处理器执行程序控制流过程中,当所述程序控制流包括间接跳转指令时,通过硬件引擎从所述寄存器中读取密钥数据;在将所述间接跳转指令加载到内存过程中,通过所述硬件引擎基于所述密钥数据对所述间接跳转目标地址处的目标指令进行加密,并将加密后的目标指令加载到内存中。
16.在一个可能实现方式中,所述加密模块,用于通过所述硬件引擎对目标指令执行以下加密过程:在将所述间接跳转指令加载到内存过程中,基于所述密钥数据以及从所述寄存器中获取的加解密长度,对所述目标指令进行加密;
17.相应的,所述解密模块,用于通过所述硬件引擎对加密后的目标指令执行以下解密过程:采用与加密过程相同的加解密长度和相同的密钥数据,对所述加密后的目标指令进行解密。
18.在一个可能实现方式中,所述执行模块,用于通过所述硬件引擎将解密后的目标指令发送至寄存器,并通过所述处理器执行解密后的目标指令。
19.在一个可能实现方式中,所述密钥获取模块,用于当目标系统的内存安全阈值不超过目标阈值时,获取所述puf模块对输入激励所输出的响应数据,并将所述响应数据作为待使用的密钥数据存储至第一特定寄存器中、将加解密长度存储至第二特定寄存器中;当目标系统的内存安全阈值超过目标阈值时,基于异或加解密指令序列保护密钥得到密钥数据,并将所述密钥数据存储至第三特定寄存器中。
20.另一方面,提供了一种防御控制流攻击的方法,所述方法包括:
21.获取物理不可克隆函数puf模块对输入激励所输出的响应数据,并将所述响应数据作为待使用的密钥数据存储至寄存器中;
22.在处理器执行程序控制流过程中,基于所述密钥数据对所述程序控制流中的目标执行数据进行加密,所述目标执行数据包括间接跳转目标地址处的目标指令或者函数调用返回地址中的至少一项;
23.当处理器执行所述目标执行数据时,对加密后的目标执行数据进行解密;
24.基于解密后的目标执行数据,继续执行所述程序控制流。
25.在一个可能实现方式中,所述目标执行数据为函数调用返回地址;
26.相应的,所述在处理器执行程序控制流过程中,基于所述密钥数据对所述程序控制流中的目标执行数据进行加密,包括:
27.在处理器执行程序控制流过程中,当所述程序控制流包括函数调用指令时,通过硬件引擎从所述寄存器中读取密钥数据;
28.基于所述密钥数据对所述函数调用返回地址进行加密,并将加密后的函数调用返回地址压入到程序栈中;
29.相应的,所述当处理器执行所述目标执行数据时,对加密后的目标执行数据进行解密,包括:
30.当所述函数调用指令的被调函数执行结束时,通过所述硬件引擎从所述程序栈中取出所述加密后的函数调用返回地址,并基于所述密钥数据对所取出的函数调用返回地址进行解密。
31.在一个可能实现方式中,所述基于解密后的目标执行数据,继续执行所述程序控制流,包括:
32.通过所述硬件引擎将解密后的函数调用返回地址发送至寄存器;
33.通过所述处理器将程序控制流跳转至解密后的函数调用返回地址处,以继续执行所述程序控制流。
34.在一个可能实现方式中,所述目标执行数据为间接跳转目标地址处的目标指令;
35.相应的,所述在处理器执行程序控制流过程中,基于所述密钥数据对所述程序控制流中的目标执行数据进行加密,包括:
36.在处理器执行程序控制流过程中,当所述程序控制流包括间接跳转指令时,通过硬件引擎从所述寄存器中读取密钥数据;
37.在将所述间接跳转指令加载到内存过程中,通过所述硬件引擎基于所述密钥数据对所述间接跳转目标地址处的目标指令进行加密,并将加密后的目标指令加载到内存中。
38.在一个可能实现方式中,所述通过所述硬件引擎基于所述密钥数据对所述间接跳转目标地址处的目标指令进行加密,包括:
39.通过所述硬件引擎对目标指令执行以下加密过程:
40.在将所述间接跳转指令加载到内存过程中,基于所述密钥数据以及从所述寄存器中获取的加解密长度,对所述目标指令进行加密;
41.相应的,所述对加密后的目标执行数据进行解密,包括:
42.通过所述硬件引擎对加密后的目标指令执行以下解密过程:
43.采用与加密过程相同的加解密长度和相同的密钥数据,对所述加密后的目标指令进行解密。
44.在一个可能实现方式中,所述基于解密后的目标执行数据,继续执行所述程序控制流,包括:
45.通过所述硬件引擎将解密后的目标指令发送至寄存器,并通过所述处理器执行解密后的目标指令。
46.在一个可能实现方式中,所述获取物理不可克隆函数puf模块对输入激励所输出的响应数据,并将所述响应数据作为待使用的密钥数据存储至寄存器中,包括:
47.当目标系统的内存安全阈值不超过目标阈值时,获取所述puf模块对输入激励所输出的响应数据,并将所述响应数据作为待使用的密钥数据存储至第一特定寄存器中、将加解密长度存储至第二特定寄存器中;
48.当目标系统的内存安全阈值超过目标阈值时,基于异或加解密指令序列保护密钥得到密钥数据,并将所述密钥数据存储至第三特定寄存器中。
49.另一方面,提供了一种处理器,包括如上述的防御控制流攻击的装置。
50.另一方面,提供了一种计算机设备,包括存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序以实现上述的防御控制流攻击的方法。
51.另一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的防御控制流攻击的方法。
52.另一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现上述的防御控制流攻击的方法。
53.本技术提供的技术方案带来的有益效果是:
54.本技术提供的防御控制流攻击的装置,包括:密钥获取模块,用于获取物理不可克隆函数puf模块对输入激励所输出的响应数据,并将该响应数据作为待使用的密钥数据存储至寄存器中;充分利用puf基于硬件特性对每一个激励给出一个唯一的响应,具有持久且不可预测性、不可克隆性和防篡改性的优势。并且,该装置还包括加密模块,用于在处理器执行程序控制流过程中,基于该密钥数据对该程序控制流中的目标执行数据进行加密,该目标执行数据包括间接跳转目标地址处的目标指令或者函数调用返回地址中的至少一项;该装置还包括解密模块,用于当处理器执行该目标执行数据时,对加密后的目标执行数据进行解密;该装置还包括执行模块,用于基于解密后的目标执行数据,继续执行该程序控制流。避免攻击者更改程序控制流中间接跳转目标地址处的目标指令、函数调用返回地址等目标执行数据;通过对函数调用返回地址和间接跳转目的地址处的指令进行加密和解密,大大增强处理器的安全能力,从而在处理器级有效防御控制流攻击。
附图说明
55.为了更清楚地说明本技术实施例中的技术方案,下面将对本技术实施例描述中所需要使用的附图作简单地介绍。
56.图1为本技术实施例提供的一种防御控制流攻击的方法的流程示意图;
57.图2为本技术实施例提供的一种处理器加密架构示意图;
58.图3为本技术实施例提供的一种保护函数调用返回地址的方法流程图;
59.图4为本技术实施例提供的一种函数调用发生时的程序栈变化示意图;
60.图5为本技术实施例提供的一种保护函数调用返回地址的方法流程图;
61.图6为本技术实施例提供的一种保护间接跳转目标地址的方法流程图;
62.图7为本技术实施例提供的一种加密间接跳转目标地址处的目标指令的示意图;
63.图8为本技术实施例提供的一种解密间接跳转目标地址处的目标指令的示意图;
64.图9为本技术实施例提供的一种防御控制流攻击的装置的结构示意图;
65.图10为本技术实施例提供的一种计算机设备的结构示意图。
具体实施方式
66.下面结合本技术中的附图描述本技术的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本技术实施例的技术方案的示例性描述,对本技术实施例的技术方案不构成限制。
67.本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本技术实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件(,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当本技术称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“a和/或b”指示实现为“a”,
或者实现为“a”,或者实现为“a和b”。
68.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
69.图1为本技术实施例提供的一种防御控制流攻击的方法的流程示意图。该方法的执行主体可以为电子设备。如图1所示,该方法包括以下步骤101-步骤104。
70.步骤101、获取物理不可克隆函数puf模块对输入激励所输出的响应数据,并将该响应数据作为待使用的密钥数据存储至寄存器中。
71.puf(physical unclonable function,物理不可克隆函数)基于硬件特性对每一个激励给出一个唯一的响应,这可以有效克服puf模块产生的响应并不是完全稳定的问题。
72.在一种可能实施方式中,可以puf模块可以基于输入的激励输出响应数据,本技术中,可以获取该响应数据作为密钥数据。示例性的,根据puf模块输出的响应数据,将响应数据作为密钥数据存储至寄存器key_ctrl_flow_info中,并将配置的加解密长度存储至寄存器len_ctrl_flow_info中。该加解密长度是指加解密时使用的密钥数据的长度,也即是puf给出的响应中仅有一部分作为密钥。例如,该密钥数据可以为32比特的数据,加解密时使用的加解密长度可以为16比特,也即是,加解密时从32比特的密钥数据中选择16比特的密钥数据对目标执行数据进行加解密。
73.在一种可能实施方式中,当目标系统的内存比较安全时,采用异或加密指令序列保护密钥,以减少性能损失。当目标系统的内存安全阈值较低时,采用aes引擎保护密钥,以防止密钥泄露。其中,内存安全阈值的数值大小可以表示内存安全性的高低,可以从寄存器中获取该内存安全阈值。因此,步骤101的过程可以包括:当目标系统的内存安全阈值不超过目标阈值时,获取该puf模块对输入激励所输出的响应数据,并将该响应数据作为待使用的密钥数据存储至第一特定寄存器中、将加解密长度存储至第二特定寄存器中;当目标系统的内存安全阈值超过目标阈值时,基于异或加解密指令序列保护密钥得到密钥数据,并将该密钥数据存储至第三特定寄存器中。其中,该第一特定寄存器、第二特定寄存器和第三特定寄存器可以基于需要进行配置。例如,该第一特定寄存器可以是寄存器key_ctrl_flow_info;该第二特定寄存器可以是寄存器len_ctrl_flow_info。
74.示例性的,在程序被加载到内存之前,使用puf模块生产密钥数据,生成寄存器中key_ctrl_flow_info和len_ctrl_flow_info,puf给出的响应中仅有一部分作为密钥,所用密钥的长度由len_ctrl_flow_info决定。虽然也可以使用随机数或厂商提供的可信密钥代替由puf生成的密钥,但是现有的随机数生成器生成的一般是伪随机数,密钥的安全性没有puf高。使用处理器厂商提供的可信密钥时,任何时候的加密和解密密钥都是不变的,虽然密钥可能被很好的保护,但是这也会向攻击者泄漏更多的可信密钥信息。puf的持久且不可预测性、不可克隆性和防篡改性足以保证攻击者很难猜到被攻击设备的puf生成的密钥。
75.控制流攻击是一种严重威胁计算机系统安全的攻击方式。现有的防御方法一般会带来比较大的性能损失或不能有效防御基于间接跳转指令的控制流攻击。加密解密是一种广泛应用的且非常有效的安全方法,但是密钥的安全又是一个非常严重的问题。本技术提出使用puf来进行加解密,由于puf基于硬件特性对每一个激励给出一个唯一的响应,puf在生成安全密钥方面具有非常大的优势,具有持久且不可预测性、不可克隆性和防篡改性的优势,已经被广泛应用在包括密钥生成、芯片指纹和随机数种子生成等安全应用中。本技术
结合puf和加密解密机制,具体在计算机设备配置有puf模块,采用puf模块来获取加解密时所需的密钥数据。从处理器安全角度研究以较低的开销防御控制流攻击的方法,从而增强高性能处理器的安全能力。
76.具体的,本技术提供一种处理器加密架构,如图2所示,通过puf获取安全密钥,并存储在csr寄存器中,并配置了加解密时采用的密钥长度,也即是加解密长度。其中,该处理器加密架构包括超标量乱序高性能核的关键部件,如取指令单元、指令解码器、高精度混合分支预测器、指令与数据分离的一级高速缓存、二级高速缓存、三级高速缓存、指令快速退休单元、支持多核硬件调试、执行单元支持scalar及vector、虚拟内存管理单元支持多级页表、支持细颗粒度的物理内存保护单元等。另外如图2所示,该处理器加密架构中还可以包括:硬件调试单元、i-cache、d-cache、访存单元、内存管理及保护单元、csr寄存器、保护密钥安全的指令集引擎、防御控制流攻击的处理器引擎、gpr(general purpose register,通用寄存器)/freg(fault register,异常寄存器中)/vgpr(vector general-purpose register,向量通用寄存器)等等。在本技术中,通过配置有该加密结构的处理器,并通过可配置的加解密长度及密钥内容,以及充分利用puf基于硬件特性对每一个激励给出一个唯一的响应,具有持久且不可预测性、不可克隆性和防篡改性的优势。构造一种轻量级加密的处理器体系架构,避免攻击者利用函数调用过程和间接跳转过程更改程序控制流。
77.步骤102、在处理器执行程序控制流过程中,基于该密钥数据对该程序控制流中的目标执行数据进行加密。
78.该目标执行数据包括间接跳转目标地址处的目标指令或者函数调用返回地址中的至少一项。
79.步骤103、当处理器执行该目标执行数据时,对加密后的目标执行数据进行解密。
80.控制流攻击,特别是rop(return-oriented programming,面向返回的编程)和jop(jump-oriented programming,跳转导向编程),往往利用函数调用过程和间接跳转过程更改程序控制流。在函数调用发生时,函数调用返回地址会被压入到程序栈中,在被调函数执行完成之后,函数调用返回地址会被从程序栈中弹出,程序控制流会跳转到函数调用返回地址处继续执行程序。如果程序栈中的返回地址被更改,程序控制流就会改变。此外,间接跳转指令的目标地址一般在寄存器中,如果寄存器的值被更改,程序在执行完间接跳转指令后,控制流会跳转到其它地方执行程序。基于此,本技术提出针对保护函数调用返回地址和保护间接跳转目标地址处的目标指令的方法,分别对应于以下示例一和示例二。
81.示例一,目标执行数据为函数调用返回地址。例如,函数调用时,保护密钥安全的指令级引擎将返回地址加密,并在函数调用返回时将返回地址解密。
82.图3是本技术提供一种保护函数调用返回地址的方法流程图,以函数调用时,保护密钥安全的指令级引擎将返回地址加密,如图3所示,该对函数调用返回地址加解密的过程可以包括以下步骤201-步骤203。
83.步骤201、在处理器执行程序控制流过程中,当该程序控制流包括函数调用指令时,通过该硬件引擎从该寄存器中读取密钥数据。
84.步骤202、基于该密钥数据对该函数调用返回地址进行加密,并将加密后的函数调用返回地址压入到程序栈中。
85.步骤203、当该函数调用指令的被调函数执行结束时,通过该硬件引擎从该程序栈
中取出该加密后的函数调用返回地址,并基于该密钥数据对所取出的函数调用返回地址进行解密。
86.例如,该密钥数据可以为32比特的数据,加解密是使用的加解密长度可以为16比特,也即是,可以从寄存器key_ctrl_flow_info中读取16比特的密钥数据对该函数调用返回地址进行加密。在解密时,可以采用相同的16比特密钥数据进行解密。
87.为保护函数调用返回地址,在函数调用发生时,保护密钥安全的硬件引擎sec_eng使用由puf生成的加密密钥加密返回地址,然后将加密后的返回地址放到程序栈中;在被调函数执行完返回时,硬件引擎sec_eng使用同样的密钥解密从程序栈中取出的返回地址,然后程序的执行流跳转到解密后的返回地址处。如果攻击者更改了程序栈中的返回地址,由于攻击者并不知道加密密钥,因此,在将从程序栈中取出的返回地址解密之后,返回地址就不是攻击者预期的返回地址,从而有效防止攻击者利用返回地址恶意篡改程序控制流。
88.图4展示了函数调用发生时的程序栈变化。如图4所示,该程序栈中可以包括较早的栈帧、调用者的栈帧和被调用者的栈帧。其中,调用者的栈帧中包括相关参数(参数1
……
参数n)以及返回地址,返回地址也即是,函数调用返回地址;调用者的栈帧处对应有帧指针st_ptr。其中,被调用者的栈帧包括被保存的fr_ptr、局部变量以及执行时进栈数据;被调用者的栈帧处对应有栈顶指针st_ptr。当函数调用发生时,函数调用参数、返回地址会被压入到程序栈中,然后程序的执行流跳到被调函数处执行被调函数。被调函数会把调用者的帧指针压入到栈中,然后更改栈顶指针的值,为局部变量和执行时数据提供空间。当函数调用返回时,会把帧指针恢复并把返回地址放到ip寄存器中,然后处理器继续从返回地址处执行程序。如果返回地址被攻击者恶意更改,程序也会跳到弹出的返回地址处执行程序,此时程序的控制流就被篡改。如果攻击者向栈中压入了多个返回地址,每次执行到ret指令时,就会跳到更改后的返回地址处,攻击者就能让程序根据他们预期的方式执行,从而仅通过更改程序的控制流对目标程序实施攻击。
89.示例性的,函数调用指令可以包括call指令和ret指令。puf模块通过加密和解密函数调用返回地址的方式保护函数调用过程,工作流程如图5所示。处理器在执行call指令时将返回地址发送到硬件引擎sec_eng进行加密,然后再将经sec_eng加密后的返回地址压入到程序栈中;在执行ret指令时,处理器从程序栈中弹出加密后的返回地址并发送给sec_eng解密,然后将sec_eng解密后的返回地址发送到ip寄存器,并使程序控制流跳转至该地址处继续执行程序。
90.需要说明的是,如果攻击者修改了程序栈中的返回地址,在函数返回时,sec_eng也会对取出的返回地址做解密操作。由于攻击者不知道加密密钥,解密得到的返回地址就不是攻击者预期的返回地址,从而阻止攻击者实现基于函数调用过程的控制流篡改。此外,解密得到的异常返回地址也很容易是非法的内存空间,当程序试图访问非法或者无权限访问的内存空间时,会触发段错误异常。操作系统会捕获段错误异常并对异常进行处理,从而达到检测基于函数调用过程的控制流攻击的目的。
91.示例二,目标执行数据为间接跳转目标地址处的目标指令。例如,当程序被加载到内存中后,保护密钥安全的指令级引擎加密间接跳转目的处的目标指令,并在间接跳转指令执行时解密目的地址处的指令。
92.图6是本技术提供一种保护间接跳转目标地址的方法流程图,以在函数调用时,保
护密钥安全的指令级引擎将返回地址加密,如图6所示,该对函数调用返回地址加解密的过程可以包括以下步骤301-步骤303。
93.步骤301、在处理器执行程序控制流过程中,当该程序控制流包括间接跳转指令时,通过该硬件引擎从该寄存器中读取密钥数据。
94.步骤302、在将该间接跳转指令加载到内存过程中,通过该硬件引擎基于该密钥数据对该间接跳转目标地址处的目标指令进行加密,并将加密后的目标指令加载到内存中。
95.在一种可能实施方式中,该硬件引擎可以对目标指令执行加密的过程可以包括:在将该间接跳转指令加载到内存过程中,基于该密钥数据以及从该寄存器中获取的加解密长度,对该目标指令进行加密。
96.步骤303、当执行该间接跳转指令时,采用与加密过程相同的加解密长度和相同的密钥数据,对该加密后的目标指令进行解密。
97.例如,该密钥数据可以为32比特的数据,加解密时使用的加解密长度可以为16比特,也即是,可以从寄存器key_ctrl_flow_info中读取16比特的密钥数据对间接跳转目标地址处的目标指令进行加密。在解密时,可以采用相同的16比特密钥数据对间接跳转目标地址处的目标指令进行解密。
98.需要说明的是,为了防御基于间接跳转指令的控制流攻击,在将程序加载到内存中时,puf对间接跳转指令的目标地址处的目标指令进行加密,然后将加密后的指令放到相应的内存地址处;在执行间接跳转指令时,sec_eng将目标地址处的目标指令解密,然后再执行解密后的指令。由于攻击者预期的控制流处的目标指令并没有在程序加载时被加密,在执行间接跳转指令后,处理器执行的解密后的指令就不是攻击者预期的指令,从而防止攻击者使用间接跳转指令更改程序控制流。
99.需要说明的是,在经典处理器设计中,当一个程序需要被执行时,处理器会将程序的数据和代码加载到相应的内存地址处。当indirect jmp指令被执行时,处理器会将目标地址处的目标指令发送给指令寄存器,并从目标地址处执行指令。如果攻击者更改indirect jmp指令的目标地址,指令寄存器中的内容将不会是正常控制流应该具有的指令数据,攻击者就能实现控制流的误导。
100.puf通过加密和解密indirect jmp指令的目标地址处的目标指令,保护间接跳转,具体流程如图7、图8所示。在将程序加载到内存中时,硬件引擎也即是sec_eng根据存储在key_ctrl_flow_info中的密钥和存储在len_ctrl_flow_info中的加密解密长度对间接跳转目标地址处的目标指令进行加密。当处理器执行indirect jmp指令时,sec_eng使用相同的密钥和相同的长度解密目标地址处的目标指令。
101.其中,如图7所示,硬件引擎可以根据cfg(control flow graph,程序控制流图)对间接跳转目标地址处的目标指令进行加密。例如,可以判断间接跳转目标地址是否在cfg中,如果是,则插入间接跳转指令,并将目标地址的目标指令发送给硬件引擎,以使硬件引擎对目标指令进行加密。并将加密后的目标指令加载到内存中,并判断当前是否已对目标指令进行加密并加载至内存中,如果还没有将目标指令加密并加载至内存,则继续加载指令,直至目标指令的全部内容被加密并加载内存中。如果目标地址不在cfg中,则继续加载指令。
102.其中,如图8所示,在解密时,可以先判断是否为indirect jmp指令,如果是,则将
目标地址处的目标指令发送至硬件引擎sec_eng,并通过硬件引擎进行解密,将解密后的目标指令发送至指令寄存器中,并继续执行指令,直至执行完成。
103.需要说明的是,某些isa中指令的长度是可变的,例如:intel x86 isa,因此,解密结果可能并不一定正好是一条完整指令。在本技术中,指令被解密后,处理器会对指令进行解码,然后根据解码结果做后续的取指和访存等运算。由于已经被加载到内存中的指令在执行时并不会被更改,当执行相同的indirect jmp指令时,位于其目标地址处的目标指令的前len_ctrl_flow_info位仍保持加密状态,只要对其解密就行。
104.如果攻击者更改了indirect jmp指令的目标地址,在执行indirect jmp指令后,处理器执行的是更改后的目标地址处指令解密后的指令。当解密未加密的指令并执行解密后的指令时,可能会发生指令错误或引起其它错误,从而阻止并检测控制流的非法更改。但是,当目标地址直接更改为另一个候选跳转目标地址时,由于所有候选目标地址处的目标指令在加载时均已加密,程序还是可以正常执行,因此可能会带来潜在的攻击。不过攻击者可用的指令片段被大大约束在各个间接跳转目标地址处,在目标程序中实现完整的控制流攻击的难度会大大增加。
105.作为一种特殊情况,某些间接跳转目标处的目标指令可能会被顺序执行而无需前面指令的跳转,例如:do-while语句中的第一条指令(后续循环时的跳转目标指令)在第一遍循环时没有被跳转便开始执行。在这种情况下,如果不进行处理,第一次循环时会发生错误,因为sec_eng在没有前面的跳转指令触发的情况下不会解密这些指令。为了使这些指令在顺序执行时也被正常解密,可以考虑indirect jmp指令,该指令只是将程序的执行流重定向到其后续指令,并负责在目标位置处触发解密操作。
106.步骤104、通过处理器基于解密后的目标执行数据,继续执行该程序控制流。
107.当目标执行数据为函数调用返回地址时,通过处理器基于解密后的目标执行数据,继续执行该程序控制流的过程可以包括:过该硬件引擎将解密后的函数调用返回地址发送至寄存器;通过该处理器将程序控制流跳转至解密后的函数调用返回地址处,以继续执行该程序控制流。
108.当目标执行数据为间接跳转目标地址处的目标指令时,通过处理器基于解密后的目标执行数据,继续执行该程序控制流的过程可以包括:通过该硬件引擎将解密后的目标指令发送至寄存器,并通过该处理器执行解密后的目标指令。
109.本技术提供的防御控制流攻击的方法,通过获取物理不可克隆函数puf模块对输入激励所输出的响应数据,并将该响应数据作为待使用的密钥数据存储至寄存器中;充分利用puf基于硬件特性对每一个激励给出一个唯一的响应,具有持久且不可预测性、不可克隆性和防篡改性的优势。并且,通过在处理器执行程序控制流过程中,基于该密钥数据对该程序控制流中的目标执行数据进行加密,该目标执行数据包括间接跳转目标地址处的目标指令或者函数调用返回地址中的至少一项;当处理器执行该目标执行数据时,对加密后的目标执行数据进行解密;通过基于解密后的目标执行数据,继续执行该程序控制流。避免攻击者更改程序控制流中间接跳转目标地址处的目标指令、函数调用返回地址等目标执行数据;通过对函数调用返回地址和间接跳转目的地址处的指令进行加密和解密,大大增强处理器的安全能力,从而在处理器级有效防御控制流攻击。
110.图9为本技术实施例提供的一种防御控制流攻击的装置的结构示意图。如图9所
示,该装置包括:
111.密钥获取模块901,用于获取物理不可克隆函数puf模块对输入激励所输出的响应数据,并将该响应数据作为待使用的密钥数据存储至寄存器中;
112.加密模块902,用于在处理器执行程序控制流过程中,基于该密钥数据对该程序控制流中的目标执行数据进行加密,该目标执行数据包括间接跳转目标地址处的目标指令或者函数调用返回地址中的至少一项;
113.解密模块903,用于当处理器执行该目标执行数据时,对加密后的目标执行数据进行解密;
114.执行模块904,用于基于解密后的目标执行数据,继续执行该程序控制流。
115.在一个可能实现方式中,该目标执行数据为函数调用返回地址;
116.相应的,该加密模块902,用于在处理器执行程序控制流过程中,当该程序控制流包括函数调用指令时,通过该硬件引擎从该寄存器中读取密钥数据;基于该密钥数据对该函数调用返回地址进行加密,并将加密后的函数调用返回地址压入到程序栈中;
117.相应的,该解密模块903,用于当该函数调用指令的被调函数执行结束时,通过硬件引擎从该程序栈中取出该加密后的函数调用返回地址,并基于该密钥数据对所取出的函数调用返回地址进行解密。
118.在一个可能实现方式中,该执行模块,用于通过该硬件引擎将解密后的函数调用返回地址发送至寄存器;通过该处理器将程序控制流跳转至解密后的函数调用返回地址处,以继续执行该程序控制流。
119.在一个可能实现方式中,该目标执行数据为间接跳转目标地址处的目标指令;
120.相应的,该加密模块902,用于在处理器执行程序控制流过程中,当该程序控制流包括间接跳转指令时,通过该硬件引擎从该寄存器中读取密钥数据;在将该间接跳转指令加载到内存过程中,通过该硬件引擎基于该密钥数据对该间接跳转目标地址处的目标指令进行加密,并将加密后的目标指令加载到内存中。
121.在一个可能实现方式中,该加密模块902,用于在将该间接跳转指令加载到内存过程中,基于该密钥数据以及从该寄存器中获取的加解密长度,对该目标指令进行加密;
122.相应的,该解密模块903,用于采用与加密过程相同的加解密长度和相同的密钥数据,对该加密后的目标指令进行解密。
123.在一个可能实现方式中,该执行模块904,用于通过该硬件引擎将解密后的目标指令发送至寄存器,并通过该处理器执行解密后的目标指令。
124.在一个可能实现方式中,该密钥获取模块901,用于当目标系统的内存安全阈值不超过目标阈值时,获取该puf模块对输入激励所输出的响应数据,并将该响应数据作为待使用的密钥数据存储至第一特定寄存器中、将加解密长度存储至第二特定寄存器中;当目标系统的内存安全阈值超过目标阈值时,基于异或加解密指令序列保护密钥得到密钥数据,并将该密钥数据存储至第三特定寄存器中。
125.本技术提供的防御控制流攻击的装置,包括:密钥获取模块,用于获取物理不可克隆函数puf模块对输入激励所输出的响应数据,并将该响应数据作为待使用的密钥数据存储至寄存器中;充分利用puf基于硬件特性对每一个激励给出一个唯一的响应,具有持久且不可预测性、不可克隆性和防篡改性的优势。并且,该装置还包括加密模块,用于在处理器
执行程序控制流过程中,基于该密钥数据对该程序控制流中的目标执行数据进行加密,该目标执行数据包括间接跳转目标地址处的目标指令或者函数调用返回地址中的至少一项;该装置还包括解密模块,用于当处理器执行该目标执行数据时,对加密后的目标执行数据进行解密;该装置还包括执行模块,用于基于解密后的目标执行数据,继续执行该程序控制流。避免攻击者更改程序控制流中间接跳转目标地址处的目标指令、函数调用返回地址等目标执行数据;通过对函数调用返回地址和间接跳转目的地址处的指令进行加密和解密,大大增强处理器的安全能力,从而在处理器级有效防御控制流攻击。
126.本实施例的防御控制流攻击的装置可执行本技术上述实施例所示的防御控制流攻击的方法,其实现原理相类似,此处不再赘述。
127.图10是本技术实施例中提供了一种计算机设备的结构示意图。如图10所示,该计算机设备包括:存储器和处理器;至少一个程序,存储于存储器中,用于被处理器执行时,与现有技术相比可实现:
128.本技术提供的防御控制流攻击的装置,包括:密钥获取模块,用于获取物理不可克隆函数puf模块对输入激励所输出的响应数据,并将该响应数据作为待使用的密钥数据存储至寄存器中;充分利用puf基于硬件特性对每一个激励给出一个唯一的响应,具有持久且不可预测性、不可克隆性和防篡改性的优势。并且,该装置还包括加密模块,用于在处理器执行程序控制流过程中,基于该密钥数据对该程序控制流中的目标执行数据进行加密,该目标执行数据包括间接跳转目标地址处的目标指令或者函数调用返回地址中的至少一项;该装置还包括解密模块,用于当处理器执行该目标执行数据时,对加密后的目标执行数据进行解密;该装置还包括执行模块,用于基于解密后的目标执行数据,继续执行该程序控制流。避免攻击者更改程序控制流中间接跳转目标地址处的目标指令、函数调用返回地址等目标执行数据;通过对函数调用返回地址和间接跳转目的地址处的指令进行加密和解密,大大增强处理器的安全能力,从而在处理器级有效防御控制流攻击。
129.在一个可选实施例中提供了一种计算机设备,如图10所示,图10所示的计算机设备1000包括:处理器1001和存储器1003。其中,处理器1001和存储器1003相连,如通过总线1002相连。可选地,计算机设备1000还可以包括收发器1004,收发器1004可以用于该计算机设备与其他计算机设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器1004不限于一个,该计算机设备1000的结构并不构成对本技术实施例的限定。
130.处理器1001可以是cpu(central processing unit,中央处理器),通用处理器,dsp(digital signal processor,数据信号处理器),asic(application specific integrated circuit,专用集成电路),fpga(fieldprogrammable gate array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本技术公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器1001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等。
131.总线1002可包括一通路,在上述组件之间传送信息。总线1002可以是pci(peripheral component interconnect,外设部件互连标准)总线或eisa(extended industry standard architecture,扩展工业标准结构)总线等。总线1002可以分为地址总
线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
132.存储器1003可以是rom(read only memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,ram(random access memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是eeprom(electrically erasable programmable read only memory,电可擦可编程只读存储器)、cd-rom(compact disc readonly memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
133.存储器1003用于存储执行本技术方案的应用程序代码(计算机程序),并由处理器1001来控制执行。处理器1001用于执行存储器1003中存储的应用程序代码,以实现前述方法实施例所示的内容。
134.其中,计算机设备包括但不限于:计算机设备、终端、服务器等任一电子设备。
135.本技术实施例提供了一种处理器,包括如上述的防御控制流攻击的装置。
136.本技术实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中防御控制流攻击的方法的相应内容。
137.本技术实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述的防御控制流攻击的方法。
138.应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
139.以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献