CN112256357B - 数据保护系统、方法和计算机可读介质 - Google Patents
数据保护系统、方法和计算机可读介质 Download PDFInfo
- Publication number
- CN112256357B CN112256357B CN202011119526.3A CN202011119526A CN112256357B CN 112256357 B CN112256357 B CN 112256357B CN 202011119526 A CN202011119526 A CN 202011119526A CN 112256357 B CN112256357 B CN 112256357B
- Authority
- CN
- China
- Prior art keywords
- return address
- function return
- stack
- shadow stack
- function
- 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
Images
Classifications
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- 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/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Storage Device Security (AREA)
Abstract
提供一种数据保护系统、方法和计算机可读介质。该数据保护系统包括:线程栈,被包括在内存中;影子栈,被包括在所述内存中,其中当调用函数时,函数返回地址被同时写入所述线程栈和所述影子栈中;加解密模块,被包括在中央处理单元CPU核中,被配置为当所述函数返回地址被写入所述影子栈中时,加密所述函数返回地址,且当从所述影子栈中读取所述函数返回地址时,解密所述加密的函数返回地址。如此,可以保护影子栈数据,并抵御恶意程序对影子栈中数据的修改而造成的程序跳转。
Description
技术领域
本公开涉及集成电路领域,且更具体地,涉及数据保护系统、方法和计算机可读介质。
背景技术
在程序执行时,从子程序返回后,主程序继续执行的指令地址称为"返回地址"(或函数返回地址)。返回地址就是主程序中CALL(调用)指令后面要跳转的下一条指令的地址。面向返回的编程(Return-oriented Programming,ROP)是一种新型的基于代码复用技术的攻击,攻击者可以从已有的库或可执行文件中提取指令片段,构建恶意代码。攻击者利用程序中的漏洞劫持正常的控制流,可以简单地通过覆盖函数返回地址实现,也可以通过修改函数指针来实现恶意程序期望的跳转。
因此,需要抵御ROP的攻击的数据保护技术。
发明内容
根据本发明的一个方面,提供一种数据保护系统,包括:线程栈,被包括在内存中;影子栈,被包括在内存中,其中当调用函数时,函数返回地址被同时写入线程栈和影子栈中;加解密模块,被包括在中央处理单元CPU核中,被配置为当函数返回地址被写入影子栈中时,加密函数返回地址,且当从影子栈中读取函数返回地址时,解密加密的函数返回地址。
根据本发明的另一方面,提供一种数据保护方法,包括:当调用函数时,将函数返回地址写入内存中的线程栈;当调用函数时,加密函数返回地址,将加密后的函数返回地址写入内存中的影子栈;当函数返回时,从影子栈中解密加密的函数返回地址,并读取解密后的函数返回地址。
根据本发明的另一方面,提供一种计算机可读介质,存储了计算机可执行指令,其被处理器执行时执行数据保护方法。
因此,增加了加解密模块使影子栈数据以密文形式存储并解密读出,来保护影子栈数据。加解密密钥对系统软件和恶意软件不可见,即使恶意程序修改了线程栈的数据使函数返回指针使其指向恶意程序,然后通过侧信道攻击的办法获得影子栈的页表,试图修改内存中影子栈的数据,使影子栈中的数据和线程栈中的数据相等,但是由于恶意程序不知道加解密密钥,所以恶意程序无法伪造加密后的数据,当影子栈中的数据被读出后,经过加解密模块用解密密钥解密后的影子栈数据并非线程栈的数据,因此与线程栈的数据不会相等,如此,CPU核可以会抛出异常,不会进行恶意程序期望的跳转,增加了安全性。
附图说明
图1示出了传统的控制流强制技术(CET技术)的线程栈和影子栈的示意图。
图2和图3分别示出了比较线程栈和影子栈中的返回地址的两种不同结果。
图4示出了根据本发明的实施例的数据保护系统的框图。
图5示出了根据本发明的实施例的加密过程的示意图。
图6示出了根据本发明的实施例的解密过程的示意图。
图7示出了根据本发明的实施例的恶意程序修改线程栈数据和影子栈数据之后的抵御恶意程序的过程的示意图。
图8示出了根据本发明的实施例的数据保护方法的示意流程图。
图9示出了适于用来实现本发明实施方式的示例性计算机系统/服务器的框图。
具体实施方式
现在将详细参照本发明的具体实施例,在附图中例示了本发明的例子。尽管将结合具体实施例描述本发明,但将理解,不是想要将本发明限于描述的实施例。相反,想要覆盖由所附权利要求限定的在本发明的精神和范围内包括的变更、修改和等价物。应注意,这里描述的方法步骤都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体、或者两者的组合。
为了使本领域技术人员更好地理解本发明,下面结合附图和具体实施方式对本发明作进一步详细说明。
注意,接下来要介绍的示例仅是一个具体的例子,而不作为限制本发明的实施例必须为示出和描述的具体的外形、硬件、连接关系、步骤、数值、条件、数据、顺序等等。本领域技术人员可以通过阅读本说明书来运用本发明的构思来构造本说明书中未提到的更多实施例。
为了抵御ROP的攻击,Intel公司提出控制流强制技术(Control-flowEnforcement Technology,CET)技术,CET通过引入一个影子堆栈来工作。影子堆栈仅包括函数返回地址,当子程序受到调用(CALL指令)时,返回地址A同时被写入线程的栈(也称为线程栈)和影子堆栈(也称为影子栈)中,如图1所示,图1示出了传统的CET技术的线程栈和影子栈的示意图。CET对影子栈进行保护,保证影子栈不会被用户态随意修改。当处理器执行函数跳转(RET指令)时,会确定在线程栈上的返回地址A与影子栈中的返回地址A是否匹配,如图1所示。
图2和图3分别示出了比较线程栈和影子栈中的返回地址的两种不同结果。如果匹配,则系统将程序跳转到返回地址A,如图2所示。如果并不匹配(例如恶意程序修改线程栈的返回地址为B,而影子栈中的返回地址仍是A),系统将抛出一个异常,让操作系统能够捕捉并停止执行函数,如图3所示。
CET对影子栈通过页表来保护,具体的保护措施包括:新页表增加属性“ShadowStack”(“影子栈”);限制影子栈的访问权限,用户态访问影子栈需要申请访问权限;如果影子栈不在“Shadow Stack”属性的页面上就报错;监测预防任何影子栈溢出或者重定向行为到非“Shadow Stack”。如此,影子栈的内容不能轻易被改变。
但是,CET对影子栈的基于页表的保护存在以下漏洞:
通过侧信道攻击的办法,恶意程序可以获得影子栈的页表信息,然后,例如恶意程序可以绕过硬件直接写数据B到影子栈,将影子栈数据从A篡改为B。即,影子栈的内容仍然可能被恶意程序篡改。
影子栈数据在内存中以明文形式存储,当恶意程序篡改了影子栈数据后,使影子栈中的返回地址与线程栈中的返回地址相等即可实现恶意程序期望的跳转。
因此,针对CET对影子栈的保护机制的主要不足在于:
1)通过侧信道攻击的办法,恶意程序可以获得影子栈的页表信息,从而恶意程序可以绕过硬件直接写数据到影子栈,篡改影子栈数据。
2)影子栈数据在内存中以明文形式存储,当恶意程序修改了影子栈数据后,使影子栈中的指针与线程栈中的指针相等可实现恶意程序期望的跳转。
本公开可以提供一种影子栈数据加密的方案,使得恶意程序无法伪造加密后的影子栈数据,即使恶意程序修改了影子栈的数据,但是由于影子栈中的解密后的数据和线程栈中的数据不相等,从而无法实现恶意程序期望的跳转。
图4示出了根据本发明的实施例的数据保护系统400的框图。
如图4所示的数据保护系统400包括:线程栈402,被包括在内存401中;影子栈403,被包括在内存401中,其中当调用函数时,函数返回地址被同时写入线程栈402和影子栈401中;加解密模块405,被包括在中央处理单元CPU核404中,被配置为当函数返回地址被写入影子栈401中时,加密函数返回地址,且当从影子栈401中读取函数返回地址时,解密加密的函数返回地址。
如此,根据本发明的实施例,可以通过对影子栈中写入和读出的数据进行加密和相应的解密,来保护影子栈数据,从而有效抵御恶意程序对影子栈中数据的修改而造成的程序跳转。
在一个实施例中,系统400还可以包括:安全处理器406,被配置为在初始化过程中分配加解密模块405的加密密钥和解密密钥,其中加密密钥和解密密钥对软件不可见或无法由软件修改。如此,软件无法得知或无法对加解密模块405的加密密钥和解密密钥进行修改,从而保证了加密密钥和解密密钥不会被恶意软件得知或篡改。
加密密钥和解密密钥不依赖于线程栈或影子栈中的任何数据,且加解密模块独立地完成每次加密和加密过程。
在一个实施例中,当函数返回时,确定从线程栈中读取的函数返回地址与从影子栈中读取并解密的函数返回地址是否相匹配。如果匹配,则根据函数返回地址执行函数返回。如果不匹配,则不执行函数返回。在此,可以通过抛出一个异常,让操作系统能够捕捉并停止执行该函数。这里的“匹配”可以与“相等”、“相同”替换。
图5示出了根据本发明的实施例的加密过程的示意图。图6示出了根据本发明的实施例的解密过程的示意图。
如图5所示,CALL指令将函数返回指针(或地址)A写入线程栈;CPU硬件同时将函数返回指针A写入影子栈;函数返回指针A经过加解密模块405用加密密钥加密后,变成数据A+,因此影子栈中存储的函数返回指针为A+。
如图6所示,RET指令将函数返回指针A从线程栈中读出;CPU硬件同时从影子栈中读出函数返回指针A+;从影子栈中读取的函数返回指针A+经过加解密模块405用解密密钥解密后变成A;CPU硬件判断影子栈中的数据A和线程栈数据A相等,实现正常的函数跳转。
图7示出了根据本发明的实施例的恶意程序修改线程栈数据和影子栈数据之后的抵御恶意程序的过程的示意图。
如图7所示,恶意程序修改线程栈中的函数返回地址A为恶意程序的跳转指针B;恶意程序获得影子栈的页表,得到影子栈的内存地址;恶意程序修改内存中影子栈的数据,将影子栈中的函数返回地址A+修改为恶意程序的跳转指针B;RET指令将函数返回指针从线程栈和影子栈中读出;线程栈输出数据B;影子栈被恶意程序修改为B,影子栈存储的是数据B,B经过加解密模块405用解密密钥解密,数据B变为B+并被读出。由于CPU硬件判断从线程栈和影子栈中读出的B和B+不相等,所以程序抛出异常,不会执行到函数返回指针B的跳转。从而,根据本发明的实施例可以抵御恶意程序修改线程栈数据和影子栈数据之后的函数跳转。
在本发明的实施例中,加密过程可以不依赖于线程栈或影子栈中任意其他数据,而且对数据的每一帧的加密过程都可以是完全独立的。从而摆脱了由于恶意软件或其他原因修改了其他数据从而导致加密过程和结果发生变化,增强了安全性和稳定性。
另外,加密密钥和解密密钥可以由安全处理器分配,并初始化到加解密硬件当中,对软件来说不可见,不需要添加额外的硬件生成加解密密钥。
上述比较过程比较的是解密后的影子栈中的数据和线程栈中的数据。这些数据都只利用加解密模块即可,不需要增加额外的硬件来实现,减少了硬件实现的复杂度。
因此,增加了加解密模块使影子栈数据以密文形式存储并解密读出,保护了影子栈数据。加解密密钥对系统软件和恶意软件不可见,即使恶意程序修改了线程栈的数据使函数返回指针使其指向恶意程序,然后通过侧信道攻击的办法获得影子栈的页表,试图修改内存中影子栈的数据,使影子栈中的数据和线程栈中的数据相等,但是由于恶意程序不知道加解密密钥,所以恶意程序无法伪造加密后的数据,当影子栈中的数据被读出后,经过加解密模块用解密密钥解密,影子栈数据与线程栈的数据不会相等,如此,CPU核将会抛出异常,不会进行恶意程序期望的跳转,增加了安全性。
图8示出了根据本发明的实施例的数据保护方法的示意流程图。
如图8所示的数据保护方法800包括:步骤801,当调用函数时,将函数返回地址写入内存中的线程栈;步骤802,当调用函数时,加密函数返回地址,将加密后的函数返回地址写入内存中的影子栈;步骤803,当函数返回时,从影子栈中解密加密的函数返回地址,并读取解密后的函数返回地址。
如此,根据本发明的实施例,可以通过对影子栈中写入和读出的数据进行加密和相应的解密,来保护影子栈数据,从而有效抵御恶意程序对影子栈中数据的修改而造成的程序跳转。
在一个实施例中,该方法800还可以包括:在初始化过程中分配用于分别进行加密和解密的加解密模块的加密密钥和解密密钥,其中加密密钥和解密密钥对软件不可见或无法由软件修改。如此,软件无法得知、也无法对加解密模块405的加密密钥和解密密钥进行修改,从而保证了加密密钥和解密密钥不会被恶意软件得知或篡改。
加密密钥和解密密钥可以不依赖于线程栈或影子栈中的任何数据,且加解密模块独立地完成每次加密和加密过程。
方法800还可以包括:步骤804,当函数返回时,确定从线程栈中读取的函数返回地址与从影子栈中解密并读取的函数返回地址是否相匹配,如果匹配,则在步骤805,根据函数返回地址执行函数返回,如果不匹配,则在步骤806不执行函数返回。
如此,根据本发明的实施例,增加了加解密模块使影子栈数据以密文形式存储并解密读出,保护了影子栈数据。加解密密钥对系统软件和恶意软件不可见,即使恶意程序修改了线程栈的数据使函数返回指针使其指向恶意程序,然后通过侧信道攻击的办法获得影子栈的页表,试图修改内存中影子栈的数据,使影子栈中的数据和线程栈中的数据相等,但是由于恶意程序不知道加解密密钥,所以恶意程序无法伪造加密后的数据,当影子栈中的数据被读出后,经过加解密模块用解密密钥解密,影子栈数据与线程栈的数据不会相等,如此,CPU核将会抛出异常,不会进行恶意程序期望的跳转,增加了安全性。
图9示出了适于用来实现本发明实施方式的示例性计算机系统的框图。
计算机系统可以包括处理器(H1);计算机可读介质(H2),耦合于处理器(H1),且在其中存储计算机可执行指令,用于执行本公开所描述的实施例中的各个功能和/或方法的步骤。
处理器(H1)可以包括但不限于例如一个或者多个处理器或者或微处理器等。
计算机可读介质(H2)可以包括但不限于例如,随机存取存储器(RAM)、只读存储器(ROM)、快闪存储器、EPROM存储器、EEPROM存储器、寄存器、硬碟、软碟、固态硬盘、可移动碟、CD-ROM、DVD-ROM、蓝光盘等。
除此之外,该计算机系统还可以包括数据总线(H3)、输入/输出(I/O)总线(H4),显示器(H5)以及输入/输出设备(H6)(例如,键盘、鼠标、扬声器等)等。
处理器(H1)可以通过I/O总线(H4)经由有线或无线网络(未示出)与外部设备(H5、H6等)通信。
当然,上述的具体实施例仅是例子而非限制,且本领域技术人员可以根据本发明的构思从上述分开描述的各个实施例中合并和组合一些步骤和装置来实现本发明的效果,这种合并和组合而成的实施例也被包括在本发明中,在此不一一描述这种合并和组合。
注意,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本发明的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本发明为必须采用上述具体的细节来实现。
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
本公开中的步骤流程图以及以上方法描述仅作为例示性的例子并且不意图要求或暗示必须按照给出的顺序进行各个实施例的步骤。如本领域技术人员将认识到的,可以按任意顺序进行以上实施例中的步骤的顺序。诸如“其后”、“然后”、“接下来”等等的词语不意图限制步骤的顺序;这些词语仅用于引导读者通读这些方法的描述。此外,例如使用冠词“一个”、“一”或者“该”对于单数的要素的任何引用不被解释为将该要素限制为单数。
另外,本文中的各个实施例中的步骤和装置并非仅限定于某个实施例中实行,事实上,可以根据本发明的概念来结合本文中的各个实施例中相关的部分步骤和部分装置以构思新的实施例,而这些新的实施例也包括在本发明的范围内。
以上描述的方法的各个操作可以通过能够进行相应的功能的任何适当的手段而进行。该手段可以包括各种硬件和/或软件组件和/或模块,包括但不限于硬件的电路、专用集成电路(ASIC)或处理器。
可以利用被设计用于进行在此描述的功能的通用处理器、数字信号处理器(DSP)、ASIC、场可编程门阵列信号(FPGA)或其他可编程逻辑器件(PLD)、离散门或晶体管逻辑、离散的硬件组件或者其任意组合而实现或进行描述的各个例示的逻辑块、模块和电路。通用处理器可以是微处理器,但是作为替换,该处理器可以是任何商业上可获得的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如DSP和微处理器的组合,多个微处理器、与DSP核协作的一个或多个微处理器或任何其他这样的配置。
结合本公开描述的方法或算法的步骤可以直接嵌入在硬件中、处理器执行的软件模块中或者这两种的组合中。软件模块可以存在于任何形式的有形存储介质中。可以使用的存储介质的一些例子包括随机存取存储器(RAM)、只读存储器(ROM)、快闪存储器、EPROM存储器、EEPROM存储器、寄存器、硬碟、可移动碟、CD-ROM等。存储介质可以耦接到处理器以便该处理器可以从该存储介质读取信息以及向该存储介质写信息。在替换方式中,存储介质可以与处理器是整体的。软件模块可以是单个指令或者许多指令,并且可以分布在几个不同的代码段上、不同的程序之间以及跨过多个存储介质。
在此公开的方法包括用于实现描述的方法的一个或多个动作。方法和/或动作可以彼此互换而不脱离权利要求的范围。换句话说,除非指定了动作的具体顺序,否则可以修改具体动作的顺序和/或使用而不脱离权利要求的范围。
上述功能可以按硬件、软件、固件或其任意组合而实现。如果以软件实现,功能可以作为一个或多个指令存储在切实的计算机可读介质上。存储介质可以是可以由计算机访问的任何可用的切实介质。通过例子而不是限制,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光碟存储、磁碟存储或其他磁存储器件或者可以用于携带或存储指令或数据结构形式的期望的程序代码并且可以由计算机访问的任何其他切实介质。如在此使用的,碟(disk)和盘(disc)包括紧凑盘(CD)、激光盘、光盘、数字通用盘(DVD)、软碟和蓝光盘,其中碟通常磁地再现数据,而盘利用激光光学地再现数据。
因此,计算机程序产品可以进行在此给出的操作。例如,这样的计算机程序产品可以是具有有形存储(和/或编码)在其上的指令的计算机可读的有形介质,该指令可由一个或多个处理器执行以进行在此描述的操作。计算机程序产品可以包括包装的材料。
软件或指令也可以通过传输介质而传输。例如,可以使用诸如同轴电缆、光纤光缆、双绞线、数字订户线(DSL)或诸如红外、无线电或微波的无线技术的传输介质从网站、服务器或者其他远程源传输软件。
此外,用于进行在此描述的方法和技术的模块和/或其他适当的手段可以在适当时由用户终端和/或基站下载和/或其他方式获得。例如,这样的设备可以耦接到服务器以促进用于进行在此描述的方法的手段的传送。或者,在此描述的各种方法可以经由存储部件(例如RAM、ROM、诸如CD或软碟等的物理存储介质)提供,以便用户终端和/或基站可以在耦接到该设备或者向该设备提供存储部件时获得各种方法。此外,可以利用用于将在此描述的方法和技术提供给设备的任何其他适当的技术。
其他例子和实现方式在本公开和所附权利要求的范围和精神内。例如,由于软件的本质,以上描述的功能可以使用由处理器、硬件、固件、硬连线或这些的任意的组合执行的软件实现。实现功能的特征也可以物理地位于各个位置,包括被分发以便功能的部分在不同的物理位置处实现。而且,如在此使用的,包括在权利要求中使用的,在以“至少一个”开始的项的列举中使用的“或”指示分离的列举,以便例如“A、B或C的至少一个”的列举意味着A或B或C,或AB或AC或BC,或ABC(即A和B和C)。此外,措辞“示例的”不意味着描述的例子是优选的或者比其他例子更好。
可以不脱离由所附权利要求定义的教导的技术而进行对在此描述的技术的各种改变、替换和更改。此外,本公开的权利要求的范围不限于以上描述的处理、机器、制造、事件的组成、手段、方法和动作的具体方面。可以利用与在此描述的相应方面进行基本相同的功能或者实现基本相同的结果的当前存在的或者稍后要开发的处理、机器、制造、事件的组成、手段、方法或动作。因而,所附权利要求包括在其范围内的这样的处理、机器、制造、事件的组成、手段、方法或动作。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本发明。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本发明的范围。因此,本发明不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本发明的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
Claims (7)
1.一种数据保护系统,包括:
线程栈,被包括在内存中;
影子栈,被包括在所述内存中,其中当调用函数时,函数返回地址被同时写入所述线程栈和所述影子栈中;
加解密模块,被包括在中央处理单元CPU核中,被配置为当所述函数返回地址被写入所述影子栈中时,加密所述函数返回地址,且当从所述影子栈中读取所述函数返回地址时,解密所述加密的函数返回地址,
其中,当调用函数时,将函数返回地址写入内存中的线程栈,加密所述函数返回地址,将加密后的函数返回地址写入内存中的影子栈;
当函数返回时,从所述影子栈中解密所述加密的函数返回地址,并读取解密后的所述函数返回地址,确定从所述线程栈中读取的函数返回地址与从所述影子栈中读取并解密的函数返回地址是否相匹配,如果匹配,则根据所述函数返回地址执行函数返回,如果不匹配,则不执行函数返回。
2.根据权利要求1所述的系统,还包括:
安全处理器,被配置为在初始化过程中分配所述加解密模块的加密密钥和解密密钥,其中所述加密密钥和解密密钥对软件不可见或无法由软件修改。
3.根据权利要求2所述的系统,其中,所述加密密钥和解密密钥不依赖于所述线程栈或影子栈中的任何数据,且所述加解密模块独立地完成每次加密和加密过程。
4.一种数据保护方法,包括:
当调用函数时,将函数返回地址写入内存中的线程栈,且加密所述函数返回地址,将加密后的函数返回地址写入内存中的影子栈;
当函数返回时,从所述影子栈中解密所述加密的函数返回地址,并读取解密后的所述函数返回地址,
当所述函数返回时,确定从所述线程栈中读取的函数返回地址与从所述影子栈中读取并解密的函数返回地址是否相匹配,
如果匹配,则根据所述函数返回地址执行函数返回,
如果不匹配,则不执行函数返回。
5.根据权利要求4所述的方法,还包括:
在初始化过程中分配用于分别进行所述加密和所述解密的加密密钥和解密密钥,其中所述加密密钥和解密密钥对软件不可见或无法由软件修改。
6.根据权利要求5所述的方法,其中,所述加密密钥和解密密钥不依赖于所述线程栈或影子栈中的任何数据,且独立地完成每次加密和加密过程。
7.一种计算机可读介质,存储了计算机可执行指令,其被处理器执行时执行如权利要求4-6中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011119526.3A CN112256357B (zh) | 2020-10-19 | 2020-10-19 | 数据保护系统、方法和计算机可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011119526.3A CN112256357B (zh) | 2020-10-19 | 2020-10-19 | 数据保护系统、方法和计算机可读介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112256357A CN112256357A (zh) | 2021-01-22 |
CN112256357B true CN112256357B (zh) | 2023-03-24 |
Family
ID=74244895
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011119526.3A Active CN112256357B (zh) | 2020-10-19 | 2020-10-19 | 数据保护系统、方法和计算机可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112256357B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114266036A (zh) * | 2021-11-29 | 2022-04-01 | 中国科学院计算技术研究所 | 一种基于Intel CET机制的保护通用内存完整性的方法 |
CN114266082A (zh) * | 2021-12-16 | 2022-04-01 | 北京奕斯伟计算技术有限公司 | 防御控制流攻击的装置、方法、处理器、设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109409084B (zh) * | 2018-09-21 | 2021-06-25 | 中国科学院信息工程研究所 | 一种检测返回地址被篡改的链式数据存储结构 |
CN109508537A (zh) * | 2018-09-21 | 2019-03-22 | 中国科学院信息工程研究所 | 检测堆栈中返回地址被篡改的方法及装置 |
CN109858253B (zh) * | 2019-01-08 | 2021-04-20 | 中国人民解放军战略支援部队信息工程大学 | 基于lbr的栈缓冲区溢出攻击防御方法 |
US10579806B1 (en) * | 2019-08-27 | 2020-03-03 | Zeus Sw Defender, Llc | Systems and methods for dynamic reencryption of code pointers |
-
2020
- 2020-10-19 CN CN202011119526.3A patent/CN112256357B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112256357A (zh) | 2021-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20170288869A1 (en) | Secure key storage using physically unclonable functions | |
US8826035B2 (en) | Cumulative integrity check value (ICV) processor based memory content protection | |
US10354064B2 (en) | Computer implemented method and a system for controlling dynamically the execution of a code | |
US8397082B2 (en) | System and method for thwarting buffer overflow attacks using encrypted process pointers | |
EP3174238B1 (en) | Protecting white-box feistel network implementation against fault attack | |
KR101256149B1 (ko) | 프로그램 카운터 인코딩을 이용한 간접 함수 호출 보호 방법 및 보호 장치 | |
US8347114B2 (en) | Method and apparatus for enforcing a predetermined memory mapping | |
US9390264B2 (en) | Hardware-based stack control information protection | |
US20160188874A1 (en) | System and method for secure code entry point control | |
EP3035582B1 (en) | Binding white-box implementation to reduced secure element | |
CN112256357B (zh) | 数据保护系统、方法和计算机可读介质 | |
EP2922235B1 (en) | Security module for secure function execution on untrusted platform | |
EP3844647B1 (en) | System and method for providing protected data storage in data memory | |
CN106209346B (zh) | 白盒密码技术交错查找表 | |
WO2022003327A1 (en) | Integrity tree for memory security | |
Brož et al. | Practical cryptographic data integrity protection with full disk encryption | |
CN107391970B (zh) | Flash应用程序中的函数访问控制方法及装置 | |
CN106909469B (zh) | 一种文件校验方法和装置 | |
US20240080193A1 (en) | Counter integrity tree | |
Schiess | Governmental Control of Digital Media Distribution in North Korea: Surveillance and Censorship on Modern Consumer Devices | |
KR101173761B1 (ko) | 프로그램의 외부 공격에 대한 공격 방어 및 탐지를 위한 장치 및 방법 | |
KR20220108152A (ko) | 비신뢰 메모리에 저장된 데이터에 대한 액세스를 제어하는 장치 및 방법 | |
EP2940918B1 (en) | Interface compatible approach for gluing white-box implementation to surrounding program | |
CN114547651A (zh) | 一种基于链式加密的操作系统中断上下文保护方法 | |
KR20200136315A (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 |