CN112579988B - 影子栈数据完整性保护方法、装置和计算机设备 - Google Patents

影子栈数据完整性保护方法、装置和计算机设备 Download PDF

Info

Publication number
CN112579988B
CN112579988B CN202011457882.6A CN202011457882A CN112579988B CN 112579988 B CN112579988 B CN 112579988B CN 202011457882 A CN202011457882 A CN 202011457882A CN 112579988 B CN112579988 B CN 112579988B
Authority
CN
China
Prior art keywords
integrity check
check data
data
shadow stack
integrity
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
Application number
CN202011457882.6A
Other languages
English (en)
Other versions
CN112579988A (zh
Inventor
姜莹
王海洋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Haiguang Information Technology Co Ltd
Original Assignee
Haiguang Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Haiguang Information Technology Co Ltd filed Critical Haiguang Information Technology Co Ltd
Priority to CN202011457882.6A priority Critical patent/CN112579988B/zh
Publication of CN112579988A publication Critical patent/CN112579988A/zh
Application granted granted Critical
Publication of CN112579988B publication Critical patent/CN112579988B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis

Abstract

本发明提供影子栈数据完整性保护方法、影子栈数据完整性保护装置和计算机设备。影子栈数据完整性保护方法包括以下步骤:第一完整性校验数据生成步骤,执行CALL指令,将函数返回指针写入线程栈和影子栈,并且对函数返回指针生成第一完整性校验数据并写入在内存中;第二完整性校验数据生成步骤,执行RET指令,从影子栈中读出函数返回指针,并对函数返回指针生成第二完整性校验数据;异常判定步骤,对第一完整性校验数据和第二完整性校验数据进行比对,如果判断为二者不相等,则抛出异常。本发明能够在不需要增加专用的内存的情况下来保证可以捕获恶意程序对影子栈数据的篡改。

Description

影子栈数据完整性保护方法、装置和计算机设备
技术领域
本发明涉及电子计算机领域,尤其涉及影子栈数据完整性保护方法、装置和计算机设备。
背景技术
面向返回的编程(Return-oriented Programming,ROP)是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码。攻击者利用程序中的漏洞劫持正常的控制流,可以简单地通过覆盖函数返回地址实现,也可以通过修改函数指针来实现恶意程序的跳转。为了抵御ROP的攻击,提出了控制流强制技术(Control-flow Enforcement Technology,CET)技术,CET通过引入一个影子栈来工作。影子栈仅包括函数返回地址,当子程序受到调用时,如图1所示,返回地址同时写入线程的栈和影子栈中。CET对影子栈进行保护,保证影子栈不会被用户态随意修改。当处理器要执行函数跳转时,如图2所示,会确保在线程栈上的返回地址与影子栈中的地址匹配。如果并不匹配,系统将抛出一个异常,让操作系统能够捕捉并停止执行。
发明内容
发明要解决的技术问题
本发明的目的在于提供一种影子栈数据完整性保护方法、装置和计算机设备。
用于解决课题的技术手段
本发明的一个技术方案提供一种影子栈数据完整性保护方法,其特征在于,
包括以下步骤:
第一完整性校验数据生成步骤,执行CALL指令,将函数返回指针写入线程栈和影子栈,并且对所述函数返回指针生成第一完整性校验数据并写入所述影子栈;
第二完整性校验数据生成步骤,执行RET指令,从影子栈中读出所述函数返回指针和所述第一完整性校验数据,并对所述函数返回指针生成第二完整性校验数据;
异常判定步骤,对所述第一完整性校验数据和所述第二完整性校验数据进行比对,如果判断为二者不相等,则抛出异常。
本发明的一个技术方案提供一种影子栈数据完整性保护装置,其特征在于,包括:
处理器内核模块;
完整性校验数据生成模块;
完整性比对模块;以及
内存,
所述处理器内核模块执行CALL指令,将函数返回指针写入线程栈和影子栈,
所述完整性校验数据生成模块对所述函数返回指针生成第一完整性校验数据,并写入到所述内存中的影子栈中,
所述处理器内核模块执行RET指令,从影子栈中读出所述函数返回指针和所述第一完整性校验数据,并对所述函数返回指针生成第二完整性校验数据,
所述完整性比对模块对所述第一完整性校验数据和所述第二完整性校验数据进行比对,如果判断为二者不相等,则抛出异常。
本发明的一个技术方案提供一种计算机设备,其特征在于,
所述计算机设备包括上述的影子栈数据完整性保护装置。
发明效果
根据本发明的影子栈数据完整性保护方法、装置和计算机设备,能够在不需要增加专用的内存的情况下来保证可以捕获恶意程序对影子栈数据的篡改。
附图说明
图1是示出现有技术中执行CALL指令时利用影子栈的方式的示意图。
图2是示出现有技术中执行RET指令时利用影子栈的方式的示意图。
图3是示出本发明的影子栈数据完整性保护方法中CALL指令调用过程的示意图。
图4是示出本发明的影子栈数据完整性保护方法中RET指令调用过程的示意图。
图5是示出适于用来实现本发明的影子栈数据完整性保护方法的计算机设备的结构示意图。
具体实施方式
下面将结合附图具体说明本发明的示例性实施方式,应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。本发明中提供示例性实施例是为了说明本发明的各方面,而不应被解释为限制本发明的范围。当参考框图或流程图描述示例性实施例时,每个框可以表示用于执行方法步骤的方法步骤或装置元件。根据实现方式,相应的装置元件可以配置为硬件、软件、固件或其组合。
本发明的影子栈数据完整性保护方法可以运行在各种计算机设备中,具体地包括但不限于台式计算机、平板电脑、笔记本电脑等等。
[影子栈数据完整性保护方法]
现有技术中,影子栈数据虽然通过页表的方式进行保护,但是恶意程序仍然可以通过侧信道攻击的办法,获得影子栈的页表信息,从而恶意程序可以绕过硬件直接写数据到影子栈,篡改影子栈数据。而为了抵御这种侧信道攻击,已提出将影子栈数据存放到一个专用的物理内存(一个被称为enclave(飞地)的容器),飞地这段受保护空间实行严格的访问控制从而提供对程序数据的保护,使得即使是Hypervisor(虚拟管理程序)、BIOS,操作系统等特权应用都不能随意访问这段地址空间。然而,这种使用专用存储硬件对影子栈数据的保护方式存在以下缺点:(1)需要在片上增加专用的物理内存,增加芯片的成本;(2)飞地内存由单独页表管理,从而需要增加新的页表结构来表示影子栈位于飞地内存中。
本发明鉴于以上的问题,提供一种不需要增加专用的内存的影子栈数据完整性保护方法。以下具体说明该方法。
图3是示出本发明的影子栈数据完整性保护方法中CALL指令调用过程的示意图。图4是示出本发明的影子栈数据完整性保护方法中RET指令调用过程的示意图。如图3所示,执行CALL指令(子程序调用指令),将函数返回指针A写入线程栈,CPU内核中的完整性校验数据生成模块对该函数返回指针A生成一个完整性检验数据A_integrity,CPU内核生成该完整性检验数据A_integrity的内存地址,CPU内核将该函数返回指针A写入物理内存(影子栈)中并将该完整性检验数据A_integrity写入物理内存中的上述的内存地址处(影子栈中)。
在此,描述了完整性校验数据生成模块位于CPU内核中,但是,不限于此,也可以位于CPU之外。另外,完整性校验数据生成模块可以是硬件,即,具有用于生成完整性校验数据的专用电路。在此情况下,生成完整性校验数据的算法由硬件电路决定,恶意程序不知道影子栈数据的完整性校验算法,因此,能够确保无法伪造完整性校验数据。
另外,在很多CPU中集成有安全处理器,也可以由安全处理器分配完整性校验数据生成用的初始信息(例如SHA256要求的初始向量等),只有完整性校验数据生成模块的硬件可以访问该初始信息,该初始信息对系统软件来说不可见。在此情况下,由于恶意程序不知道影子栈数据的完整性校验的初始信息,所以能够确保无法伪造完整性校验数据。
另外,影子栈数据和完整性校验数据均存放在普通内存中,操作系统为完整性校验数据预留内存空间,并且对该内存空间和其他内存进行统一的页面管理。数据完整性校验数据可以与影子栈中的其它数据(例如函数返回指针)连续存储,也可以不连续存储。在此情况下,由于无需设置专用的物理内存,所以不会增加芯片的成本,而且,也无需针对专用的物理内存单独地进行页表管理,无需增加新的页表结构。
此后,如图4所示,执行RET指令(子程序返回指令),将函数返回指针A从线程栈中读出,CPU内核从影子栈中读出函数返回指针A,为了区别从线程栈和影子栈中读出的函数返回指针A,在此分别称为第一函数返回指针A和第二函数返回指针A。CPU内核从上述的影子栈中读出完整性校验数据A_integrity(以下,也称为第一完整性校验数据)。CPU内核中的完整性校验数据生成模块对于从影子栈中读出的第二函数返回指针A生成一个完整性校验数据A_integrity_r(以下,也称为第二完整性校验数据)。CPU内核中的完整性校验数据比对模块对第一完整性校验数据A_integrity和第二完整性校验数据A_integrity_r进行比对,如果判断为二者不相等,则表示影子栈数据被篡改,CPU内核抛出异常;如果判断为二者相等,则认为影子栈数据没有被篡改,CPU内核继续判断从影子栈中读出的第二函数返回指针A是否等于从线程栈中读出的第一函数返回指针A,如果判断为二者相等,则实现正常函数跳转,如果判断为二者不相等,则抛出异常。
在此,描述了完整性比对模块位于CPU内核中,但是,只要具有完整性比对模块即可,不限于由硬件构成,也可以是软件功能模块或者软硬件结合的方式,也不限于位于CPU内核中,可以位于CPU之外。
另外,本发明中的完整性校验数据的算法可以是通常的算法,并无特别限定,例如常用的MD5、SHA1或SHA256等。
[影子栈数据完整性保护装置]
以上,基于附图说明了影子栈数据完整性保护方法,下面,详细说明本发明的影子栈数据完整性保护装置。
本发明的影子栈数据完整性保护装置用于实施上述的影子栈数据完整性保护方法,对应于上述方法中的各程序步骤而具备相应的硬件模块或者软件功能模块。另外,虽然根据功能或者方法步骤对应性地划分了各模块,但是,这些模块不限于在物理上彼此分开,也可以集成在一起。
本发明的影子栈数据完整性保护装置,包括:处理器内核模块;完整性校验数据生成模块;完整性比对模块;以及内存。处理器内核模块执行CALL指令,将函数返回指针写入线程栈和影子栈。完整性校验数据生成模块对函数返回指针生成一个第一完整性校验数据,并写入到内存中(可以是影子栈中)。处理器内核模块执行RET指令,从线程栈中读出函数返回指针作为第一函数返回指针,从影子栈中读出函数返回指针作为第二函数返回指针,从影子栈中读出第一完整性校验数据。完整性校验数据生成模块对第二函数返回指针生成一个完整性校验数据作为第二完整性校验数据。完整性比对模块对第一完整性校验数据和第二完整性校验数据进行比对,如果判断为二者不相等,则抛出异常;如果完整性比对模块判断为第一完整性校验数据和第二完整性校验数据相等,则处理器内核模块判断第一函数返回指针和第二函数返回指针是否相等,如果判断为不相等,则抛出异常,如果判断为相等,则正常跳转。
在此,虽然以上将处理器内核模块、完整性校验数据生成模块、完整性比对模块分开说明,但是,完整性校验数据生成模块和完整性比对模块的至少一者也可以集成在处理器内核模块中。完整性校验数据生成模块在本发明中可以由硬件电路构成。完整性比对模块可以是硬件、软件或者软硬件结合的方式。
此外,本发明的影子栈数据完整性保护装置还可以具备安全处理器,该安全处理器分配用于生成完整性校验数据的初始信息,(例如SHA256要求的初始向量等),只有完整性校验数据生成模块的硬件可以访问该初始信息。
此外,上述的线程栈的数据、影子栈的数据、完整性校验数据可以都存储在同一个内存中,该内存是普通内存。
根据本发明的影子栈数据完整性保护方法和装置,对影子栈数据增加完整性校验的功能,即使恶意程序同时修改了线程栈的数据和影子栈中的数据,使函数返回指针使其指向恶意程序,但是由于恶意程序不知道影子栈数据的完整性校验算法或初始信息,所以无法伪造完整性校验数据,从而在影子栈数据读出时,硬件通过对影子栈数据的完整性校验可以捕获恶意程序对影子栈数据的篡改而直接抛出异常,不会执行恶意程序的跳转。
[计算机设备]
以上,说明了影子栈数据完整性保护方法和影子栈数据完整性保护装置,影子栈数据完整性保护装置可以是计算机设备的一部分,影子栈数据完整性保护方法在计算机设备的环境下实施,以下说明该计算机设备。
下面参考图5,其示出了适于用来实现本发明实施例的电子设备(例如图1中的终端设备或服务器)500的结构示意图。本发明实施例中的终端设备可以是上述系统中的各种终端设备。图5示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,电子设备500可以包括处理装置(例如中央处理器、图形处理器等)501,用于控制电子设备的整体操作。处理装置可以包括一个或多个处理器来执行指令,以完成上述的方法的全部或部分步骤。此外,处理装置501还可以包括一个或多个模块,用于处理和其他装置之间的交互。
存储装置502用于存储各种类型的数据,存储装置502可以是包括各种类型的计算机可读存储介质或者它们的组合,例如可以是电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
传感器装置503,用于感受规定的被测量的信息并按照一定的规律转换成可用输出信号,可以包括一个或多个传感器。例如,其可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器等,用于检测电子设备的打开/关闭状态、相对定位、加速/减速、温度、湿度和光线等的变化。
处理装置501、存储装置502以及传感器装置503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
多媒体装置506可以包括触摸屏、触摸板、键盘、鼠标、摄像头、麦克风等的输入装置用以接收来自用户的输入信号,在各种输入装置可以与上述传感器装置503的各种传感器配合完成例如手势操作输入、图像识别输入、距离检测输入等;多媒体装置506还可以包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置。
电源装置507,用于为电子设备中的各种装置提供电力,可以包括电源管理系统、一个或多个电源及为其他装置分配电力的组件。
通信装置508,可以允许电子设备500与其他设备进行无线或有线通信以交换数据。
上述各项装置也均可以连接至I/O接口505以实现电子设备500的应用。
虽然图5示出了具有各种装置的电子设备500,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
在本发明的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。
要说明的是,本发明上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。而在本发明中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述计算机设备中所包含的;也可以是单独存在,而未装配入该计算机设备中。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护方法,其特征在于,
包括以下步骤:
第一完整性校验数据生成步骤,执行CALL指令,将函数返回指针写入线程栈和影子栈,并且对所述函数返回指针生成第一完整性校验数据并写入所述影子栈;
第二完整性校验数据生成步骤,执行RET指令,从影子栈中读出所述函数返回指针和所述第一完整性校验数据,并对所述函数返回指针生成第二完整性校验数据;
异常判定步骤,对所述第一完整性校验数据和所述第二完整性校验数据进行比对,如果判断为二者不相等,则抛出异常。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护方法,其特征在于,
所述影子栈存储在预留内存空间中,所述内存统一进行页面管理。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护方法,其特征在于,
在所述预留内存空间中,所述第一完整性校验数据与所述影子栈的其它数据连续存储。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护方法,其特征在于,
在所述预留内存空间中,所述第一完整性校验数据与所述影子栈的其它数据不连续存储。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护方法,其特征在于,
在所述异常判定步骤中,在判断为所述第一完整性校验数据和所述第二完整性校验数据相等的情况下,判断从所述线程栈读取的函数返回指针和从所述影子栈读取的函数返回指针是否相等,如果判断为不相等,则抛出异常,如果判断为相等,则正常跳转。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护方法,其特征在于,
安全处理器分配用于生成完整性校验数据的初始信息。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护方法,其特征在于,
由作为硬件的完整性校验数据生成模块生成所述第一完整性校验数据和所述第二完整性校验数据。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护方法,其特征在于,
由作为硬件的完整性比对模块对所述第一完整性校验数据和所述第二完整性校验数据进行比对。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护装置,其特征在于,包括:
处理器内核模块;
完整性校验数据生成模块;
完整性比对模块;以及
内存,
所述处理器内核模块执行CALL指令,将函数返回指针写入线程栈和影子栈,
所述完整性校验数据生成模块对所述函数返回指针生成第一完整性校验数据,并写入到所述内存中的影子栈中,
所述处理器内核模块执行RET指令,从影子栈中读出所述函数返回指针和所述第一完整性校验数据,并对所述函数返回指针生成第二完整性校验数据,
所述完整性比对模块对所述第一完整性校验数据和所述第二完整性校验数据进行比对,如果判断为二者不相等,则抛出异常。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护装置,其特征在于,
所述影子栈存储在预留内存空间中,所述内存统一进行页面管理。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护装置,其特征在于,
在所述预留内存空间中,所述第一完整性校验数据与所述影子栈的其它数据连续存储。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护装置,其特征在于,
在所述预留内存空间中,所述第一完整性校验数据与所述影子栈的其它数据不连续存储。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护装置,其特征在于,
在所述完整性比对模块判断为所述第一完整性校验数据和所述第二完整性校验数据相等的情况下,所述处理器内核模块从所述线程栈读取的函数返回指针和从所述影子栈读取的函数返回指针是否相等,如果判断为不相等,则抛出异常,如果判断为相等,则正常跳转。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护装置,其特征在于,
还具有安全处理器,该安全处理器分配用于生成完整性校验数据的初始信息。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护装置,其特征在于,
所述完整性校验数据生成模块是硬件。
根据本发明的一个或多个实施例,提供了一种影子栈数据完整性保护装置,其特征在于,
所述完整性比对模块是硬件。
根据本发明的一个或多个实施例,提供了一种计算机设备,其特征在于,
所述计算机设备包括所述的影子栈数据完整性保护装置。
以上描述仅为本发明的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本发明中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本发明中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本发明的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。

Claims (15)

1.一种影子栈数据完整性保护方法,其特征在于,
基于控制流强制技术对影子栈进行保护,
包括以下步骤:
第一完整性校验数据生成步骤,执行CALL指令,将函数返回指针写入线程栈和影子栈,并且对所述函数返回指针生成第一完整性校验数据并写入所述影子栈;
第二完整性校验数据生成步骤,执行RET指令,从影子栈中读出所述函数返回指针和所述第一完整性校验数据,并对所述函数返回指针生成第二完整性校验数据;
异常判定步骤,对所述第一完整性校验数据和所述第二完整性校验数据进行比对,如果判断为二者不相等,则抛出异常,
所述影子栈存储在预留内存空间中,所述内存统一进行页面管理。
2.根据权利要求1所述的影子栈数据完整性保护方法,其特征在于,
在所述预留内存空间中,所述第一完整性校验数据与所述影子栈的其它数据连续存储。
3.根据权利要求1所述的影子栈数据完整性保护方法,其特征在于,
在所述预留内存空间中,所述第一完整性校验数据与所述影子栈的其它数据不连续存储。
4.根据权利要求1所述的影子栈数据完整性保护方法,其特征在于,
在所述异常判定步骤中,在判断为所述第一完整性校验数据和所述第二完整性校验数据相等的情况下,判断从所述线程栈读取的函数返回指针和从所述影子栈读取的函数返回指针是否相等,如果判断为不相等,则抛出异常,如果判断为相等,则正常跳转。
5.根据权利要求1至4的任一项所述的影子栈数据完整性保护方法,其特征在于,
安全处理器分配用于生成完整性校验数据的初始信息。
6.根据权利要求1至4的任一项的影子栈数据完整性保护方法,其特征在于,
由作为硬件的完整性校验数据生成模块生成所述第一完整性校验数据和所述第二完整性校验数据。
7.根据权利要求1至4的任一项所述的影子栈数据完整性保护方法,其特征在于,
由作为硬件的完整性比对模块对所述第一完整性校验数据和所述第二完整性校验数据进行比对。
8.一种影子栈数据完整性保护装置,其特征在于,
基于控制流强制技术对影子栈进行保护,
包括:
处理器内核模块;
完整性校验数据生成模块;
完整性比对模块;以及
内存,
所述处理器内核模块执行CALL指令,将函数返回指针写入线程栈和影子栈,
所述完整性校验数据生成模块对所述函数返回指针生成第一完整性校验数据,并写入到所述内存中的影子栈中,
所述处理器内核模块执行RET指令,从影子栈中读出所述函数返回指针和所述第一完整性校验数据,并对所述函数返回指针生成第二完整性校验数据,
所述完整性比对模块对所述第一完整性校验数据和所述第二完整性校验数据进行比对,如果判断为二者不相等,则抛出异常,
所述影子栈存储在预留内存空间中,所述内存统一进行页面管理。
9.根据权利要求8所述的影子栈数据完整性保护装置,其特征在于,
在所述预留内存空间中,所述第一完整性校验数据与所述影子栈的其它数据连续存储。
10.根据权利要求8所述的影子栈数据完整性保护装置,其特征在于,
在所述预留内存空间中,所述第一完整性校验数据与所述影子栈的其它数据不连续存储。
11.根据权利要求8所述的影子栈数据完整性保护装置,其特征在于,
在所述完整性比对模块判断为所述第一完整性校验数据和所述第二完整性校验数据相等的情况下,所述处理器内核模块从所述线程栈读取的函数返回指针和从所述影子栈读取的函数返回指针是否相等,如果判断为不相等,则抛出异常,如果判断为相等,则正常跳转。
12.根据权利要求8至11的任一项所述的影子栈数据完整性保护装置,其特征在于,
还具有安全处理器,该安全处理器分配用于生成完整性校验数据的初始信息。
13.根据权利要求8至11的任一项所述的影子栈数据完整性保护装置,其特征在于,
所述完整性校验数据生成模块是硬件。
14.根据权利要求8至11的任一项所述的影子栈数据完整性保护装置,其特征在于,
所述完整性比对模块是硬件。
15.一种计算机设备,其特征在于,
所述计算机设备包括权利要求8至14的任一项所述的影子栈数据完整性保护装置。
CN202011457882.6A 2020-12-10 2020-12-10 影子栈数据完整性保护方法、装置和计算机设备 Active CN112579988B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011457882.6A CN112579988B (zh) 2020-12-10 2020-12-10 影子栈数据完整性保护方法、装置和计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011457882.6A CN112579988B (zh) 2020-12-10 2020-12-10 影子栈数据完整性保护方法、装置和计算机设备

Publications (2)

Publication Number Publication Date
CN112579988A CN112579988A (zh) 2021-03-30
CN112579988B true CN112579988B (zh) 2022-12-06

Family

ID=75132133

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011457882.6A Active CN112579988B (zh) 2020-12-10 2020-12-10 影子栈数据完整性保护方法、装置和计算机设备

Country Status (1)

Country Link
CN (1) CN112579988B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112989397B (zh) * 2021-05-17 2021-07-30 支付宝(杭州)信息技术有限公司 一种抗侧信道攻击的数据处理方法和装置
CN114266036A (zh) * 2021-11-29 2022-04-01 中国科学院计算技术研究所 一种基于Intel CET机制的保护通用内存完整性的方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160381050A1 (en) * 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
CN106295258B (zh) * 2016-08-04 2019-03-26 南京大学 用于多线程后向控制流完整性保护的影子栈实现方法
US20180211046A1 (en) * 2017-01-26 2018-07-26 Intel Corporation Analysis and control of code flow and data flow
CN110162967B (zh) * 2019-05-15 2023-02-24 武汉大学 一种基于mpx的内存时间错误防护方法
CN111159781B (zh) * 2019-12-31 2023-09-26 海光云芯集成电路设计(上海)有限公司 存储装置数据完整性保护方法及其控制器、片上系统
CN111680289B (zh) * 2020-04-29 2023-04-14 中国科学院信息工程研究所 一种链式哈希栈运算方法及装置

Also Published As

Publication number Publication date
CN112579988A (zh) 2021-03-30

Similar Documents

Publication Publication Date Title
US10353831B2 (en) Trusted launch of secure enclaves in virtualized environments
CN109960582B (zh) 在tee侧实现多核并行的方法、装置及系统
EP3103056B1 (en) Methods and apparatus for protecting operating system data
US9037873B2 (en) Method and system for preventing tampering with software agent in a virtual machine
US10445154B2 (en) Firmware-related event notification
KR20080027207A (ko) 고 신뢰성 펌웨어
US20090125885A1 (en) Method and system for whitelisting software components
US9703725B2 (en) System and method for providing kernel intrusion prevention and notification
CN112579988B (zh) 影子栈数据完整性保护方法、装置和计算机设备
US10114948B2 (en) Hypervisor-based buffer overflow detection and prevention
CN104798080B (zh) 反恶意软件签名的动态选择和加载
US11775649B2 (en) Perform verification check in response to change in page table base register
WO2023123850A1 (zh) 一种固件可信根的实现方法、装置、设备和可读存储介质
CN113886825A (zh) 代码检测方法、装置、系统、设备及存储介质
Heo et al. Implementing an application-specific instruction-set processor for system-level dynamic program analysis engines
US11429723B2 (en) Multi-domain boot and runtime status code drift detection
Malenko et al. Device driver and system call isolation in embedded devices
EP3044721B1 (en) Automatic pairing of io devices with hardware secure elements
US11501002B2 (en) Protocol security system
US11461490B1 (en) Systems, methods, and devices for conditionally allowing processes to alter data on a storage device
US20200371976A1 (en) Program interrupt code conversion
CN113127148B (zh) 一种虚拟化环境主动动态度量方法和系统
US20230393780A1 (en) Memory controller firmware virtualization
KR102549124B1 (ko) 난독화 된 vbscript를 탐지하고 복호화하기 위한 방법 및 이를 위한 장치
KR20170056369A (ko) 전자 장치를 보호하기 위한 장치 및 방법

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
GR01 Patent grant
GR01 Patent grant