CN120046148B - 基于零延迟动态深度ras抵御面向返回编程攻击的方法及系统 - Google Patents
基于零延迟动态深度ras抵御面向返回编程攻击的方法及系统Info
- Publication number
- CN120046148B CN120046148B CN202510522080.5A CN202510522080A CN120046148B CN 120046148 B CN120046148 B CN 120046148B CN 202510522080 A CN202510522080 A CN 202510522080A CN 120046148 B CN120046148 B CN 120046148B
- Authority
- CN
- China
- Prior art keywords
- return address
- return
- stack
- instruction
- zero
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了一种基于零延迟动态深度RAS抵御面向返回编程攻击的方法及系统,属于计算机技术领域,该方法包括:根据重排序缓冲区中当拍待提交指令的类型发出控制信号;在当拍待提交指令的类型为调用指令时,对重排序缓冲区中待提交指令包括的返回地址进行压栈操作;在当拍待提交指令的类型为返回指令时,进行出栈操作,并提供出栈返回地址,比较出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址;根据比较结果确定当拍待提交指令是否有面向返回编程攻击风险。本发明能够在不降低处理器性能的前提下实现对面向返回编程攻击的抵御。
Description
技术领域
本发明属于计算机技术领域,特别涉及一种基于零延迟动态深度RAS抵御面向返回编程攻击的方法及系统。
背景技术
在当今数字化时代,软件安全已成为企业和个人用户关注的焦点。随着网络攻击手段的不断进化,一种名为面向返回编程(Return-Oriented Programming,ROP)的攻击方式,正逐渐成为业界关注的重点。ROP攻击通过精巧地操纵程序的正常控制流,使得攻击者能够在无需编写任何恶意代码的情况下,执行预先存在于目标程序中的代码片段。ROP攻击是一种高级的内存攻击技术,攻击者能在存在安全防御的情况下执行代码,它通常以迫使缓冲区溢出的方式,覆盖程序栈中的返回地址,使程序执行流程跳转到精心构造的ROP链上。ROP攻击的核心原理是利用程序中的已有指令序列,攻击者通过仔细选择和执行这些执行序列,以实现特定的功能,如执行脚本、提升权限等。由于ROP攻击使用的是程序自身的代码,因此可以绕过某些安全机制。
现有抵御ROP攻击的方法多数在软件层面实现,常见的处理方法包括数据执行保护、地址空间布局随机化和控制流完整性等。数据执行保护方法通过在内存中标记某些区域为不可执行来防止恶意代码的执行,因为该方法不允许在禁止的数据段执行代码,所以能有效防止缓冲区溢出攻击。然而,攻击者能仍然能够通过利用非执行保护段的内存区域,绕过数据执行保护进行攻击。地址空间布局随机化方法会在每次程序启动时随机化内存中代码和数据的布局,以此来增加攻击者预测地址的难度。但攻击者仍能够通过一些手段泄露内存布局信息,从而绕过地址空间布局随机化的防御。控制流完整性旨在防止攻击者通过控制流劫持攻击来改变程序的正常执行流程,通过分析程序的控制流图,确保程序的控制流符合其原始的控制流图,在运行过程中,核对间接转移指令的目标是否在白名单中,或是检查软件函数入口及调用返回处的标识符是否与预期一致,以此判断软件是否被篡改从而抵御ROP攻击。然而控制流完整性方法实现起来十分复杂,性能和安全性之间难以平衡,而且,控制流完整性方法仍有被绕过检查从而导致失效的可能。
综上所述,由于现有抵御ROP攻击的方法大多数采用软件技术实现,攻击者均有可能绕过软件设置的保护,从而导致ROP攻击的抵御失效。
发明内容
有鉴于此,本发明提出一种基于零延迟动态深度RAS抵御面向返回编程攻击的方法及系统,通过硬件实现有效抵御ROP攻击,以解决现有抵御ROP攻击软件方法容易失效的技术问题。
第一方面,本发明提供了一种基于零延迟动态深度RAS抵御面向返回编程攻击的方法,所述基于零延迟动态深度RAS抵御面向返回编程攻击的方法包括如下步骤:
根据重排序缓冲区中当拍待提交指令的类型发出控制信号;
在当拍待提交指令的类型为调用指令时,根据控制信号对重排序缓冲区中待提交指令包括的返回地址进行压栈操作;
在当拍待提交指令的类型为返回指令时,根据控制信号进行出栈操作,并提供出栈返回地址,根据控制信号比较提供的出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址;
如果提供的出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址不一致,表明返回地址被修改,产生异常处理请求信号,向重排序缓冲区通知当拍待提交指令有面向返回编程攻击风险,向操作系统发送异常处理请求以对指令进行处理;如果提供的出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址一致,则表明返回地址没有修改,当拍待提交指令不存在面向返回编程攻击风险,控制重排序缓冲区提交当拍指令。
进一步地,在上述的基于零延迟动态深度RAS抵御面向返回编程攻击的方法中,所述方法还包括返回地址栈动态深度调整步骤,所述返回地址栈动态深度调整步骤包括:每次执行完压栈或出栈操作后,根据当前返回地址栈内数据量大小和传输行为阈值,从内存中按序读入重排序缓冲区中的返回地址写至返回地址栈栈底,或者,将返回地址栈内保存的重排序缓冲区中的返回地址从返回地址栈栈底开始按序存入至内存中,其中,如果返回地址栈内数据量达到传输行为阈值的两倍时,将返回地址栈栈底地址至传输行为阈值地址之间的返回地址数据按序存入内存中,如果返回地址栈内数据量未达到传输行为阈值时,从内存中按序取出个数为传输行为阈值的返回地址存入返回地址栈栈底地址至规定地址之间,所述规定地址为栈底地址与传输行为阈值地址的差值。
进一步地,在上述的基于零延迟动态深度RAS抵御面向返回编程攻击的方法中,所述返回地址栈动态深度调整步骤包括:
每次执行完压栈或出栈操作后,先计算返回地址栈栈顶指针与栈底指针之间的差值,得到当前返回地址栈内数据量大小;
若差值等于两倍的传输行为阈值,则将栈底指针至栈底指针加上传输行为阈值的地址之间的返回地址数据按序存入内存中,并将栈底指针的值设定为栈底指针的值与传输行为阈值之和;
若差值小于传输行为阈值,则从内存中按序取出个数为传输行为阈值的返回地址数据存入到返回地址栈的栈底指针至栈底指针减去传输行为阈值的地址中,并将栈底指针的值设定为栈底指针的值与传输行为阈值之差。
进一步地,在上述的基于零延迟动态深度RAS抵御面向返回编程攻击的方法中,所述控制信号提供有3个标志位:有效性标志位、调用标志位和返回标志位;
若重排序缓冲区中当拍待提交指令中有调用指令,则判断当拍待提交指令的类型为调用指令,发出的控制信号的有效性标志位和调用标志位设置为有效,收到控制信号后执行压栈操作,从重排序缓冲区表项中读出当拍待提交指令包括的返回地址并写入返回地址栈栈顶;
若重排序缓冲区中当拍待提交指令中有返回指令,则判断当拍待提交指令的类型为返回指令,发出的控制信号的有效性标志位和返回标志位设置为有效,收到控制信号后执行出栈操作,从返回地址栈栈顶读出返回地址,并与重排序缓冲区表项中的返回地址进行比较;
若来源于重排序缓冲区表项和返回地址栈表项的两个返回地址不一致,产生异常处理请求信号,向重排序缓冲区通知当拍待提交指令有面向返回编程攻击风险,向操作系统发送异常处理请求以对指令进行处理。
第二方面,本发明还提供了一种基于零延迟动态深度RAS抵御面向返回编程攻击的系统,所述系统设置在重排序缓冲区和内存之间并与所述重排序缓冲区及所述内存交互,包括:全局控制单元、返回地址比较单元、零延迟动态深度返回地址栈,其中:
所述全局控制单元根据所述重排序缓冲区中当拍待提交指令的类型发出控制信号;
在当拍待提交指令的类型为调用指令时,所述零延迟动态深度返回地址栈根据所述控制信号对所述重排序缓冲区中待提交指令包括的返回地址进行压栈操作;在当拍待提交指令的类型为返回指令时,所述零延迟动态深度返回地址栈根据所述控制信号进行出栈操作,向所述返回地址比较单元提供出栈返回地址;
在当拍待提交指令的类型为返回指令时,所述返回地址比较单元根据所述控制信号比较所述零延迟动态深度返回地址栈提供的出栈返回地址与所述重排序缓冲区中当拍待提交指令包括的返回地址,如果所述零延迟动态深度返回地址栈提供的出栈返回地址与所述重排序缓冲区中当拍待提交指令包括的返回地址不一致,所述返回地址比较单元产生异常处理请求信号,向所述重排序缓冲区和所述全局控制单元通知当拍待提交指令有面向返回编程攻击风险,所述全局控制单元向操作系统发送异常处理请求以对所述指令进行处理。
进一步地,在上述的基于零延迟动态深度RAS抵御面向返回编程攻击的系统中,所述零延迟动态深度返回地址栈包括:
返回地址栈,用于存储所述重排序缓冲区中的返回地址;
传输控制子单元,用于控制所述返回地址栈和所述内存之间的数据传输,根据当前栈内数据量大小从所述内存中按序读入所述重排序缓冲区中的返回地址写至栈底,或者,将栈内保存的所述重排序缓冲区中的返回地址从栈底开始按序存入至所述内存中;
数据通道,用于在所述返回地址栈和所述内存之间传输数据;
阈值寄存器,用于配置所述传输控制子单元的传输行为阈值,所述传输行为阈值用于衡量所述返回地址栈与所述内存之间是否传输地址数据。
进一步地,在上述的基于零延迟动态深度RAS抵御面向返回编程攻击的系统中,所述全局控制单元包括类型检查子单元和控制子单元,其中,所述类型检查子单元从所述重排序缓冲区中获得当拍待提交指令的操作码,判断当拍待提交指令的类型,通知所述控制子单元发出对应的控制信号,所述控制子单元发出控制信号并控制所述零延迟动态深度返回地址栈和所述返回地址比较单元的行为。
进一步地,在上述的基于零延迟动态深度RAS抵御面向返回编程攻击的系统中,所述返回地址比较单元包括:
地址比较子单元,从所述重排序缓冲区和所述零延迟动态深度返回地址栈获得返回地址并进行比较操作;
通知子单元,从所述地址比较子单元接收比较结果,判断是否通知所述全局控制单元向所述操作系统发送异常处理请求并控制所述重排序缓冲区是否提交当拍指令。
进一步地,在上述的基于零延迟动态深度RAS抵御面向返回编程攻击的系统中,所述控制信号提供有3个标志位:有效性标志位、调用标志位和返回标志位;
若所述重排序缓冲区中当拍待提交指令中有调用指令,则判断当拍待提交指令的类型为调用指令,通知所述控制子单元发出对应的控制信号,所述控制子单元发出的控制信号的有效性标志位和调用标志位设置为有效并传递给所述零延迟动态深度返回地址栈和所述返回地址比较单元,所述零延迟动态深度返回地址栈收到控制信号后执行压栈操作,从所述重排序缓冲区表项中读出当拍待提交指令包括的返回地址并写入所述零延迟动态深度返回地址栈的返回地址栈栈顶;
若所述重排序缓冲区中当拍待提交指令中有返回指令,则判断当拍待提交指令的类型为返回指令,通知所述控制子单元发出对应的控制信号,所述控制子单元发出的控制信号的有效性标志位和返回标志位设置为有效并传递给所述零延迟动态深度返回地址栈和所述返回地址比较单元,所述零延迟动态深度返回地址栈收到控制信号后执行出栈操作,所述返回地址比较单元收到控制信号后从所述零延迟动态深度返回地址栈的返回地址栈栈顶读出返回地址,并与所述重排序缓冲区表项中的返回地址进行比较;
若来源于所述重排序缓冲区表项和所述返回地址栈表项的两个返回地址不一致,所述通知子单元产生异常处理请求信号,向所述重排序缓冲区和所述全局控制单元通知当拍待提交指令有面向返回编程攻击风险,所述全局控制单元向所述操作系统发送异常处理请求以对所述指令进行处理。
本发明的基于零延迟动态深度RAS抵御面向返回编程攻击的方法及系统具有如下优点和有益效果:
本发明通过在重排序缓冲区和内存之间增设一套包括全局控制单元、返回地址比较单元和零延迟动态深度返回地址栈的系统,由全局控制单元识别当拍待提交指令的类型并控制零延迟动态深度返回地址栈和返回地址比较单元的行为,在指令为调用指令时零延迟动态深度返回地址栈对指令中的返回地址进行压栈、指令为返回指令时零延迟动态深度返回地址栈对栈顶保存的返回地址进行出栈操作,返回地址比较单元比较栈顶保存的返回地址数据和重排序缓冲区中当拍待提交指令的返回地址是否一致,从而判断调用指令的返回地址是否被篡改,由此确定当拍待提交指令是否存在面向返回编程的攻击风险,存在面向返回编程攻击风险时,全局控制单元向操作系统发送异常处理请求对该指令进行处理,不存在面向返回编程攻击风险时,全局控制单元控制重排序缓冲区提交当拍指令。
本发明摒弃了现有技术中采用软件技术实现面向返回编程攻击抵御的方式,解决了攻击者均有可能绕过软件设置的保护从而导致面向返回编程攻击抵御失效的问题,在本发明的基于零延迟动态深度RAS抵御面向返回编程攻击的方法及系统中,零延迟动态深度返回地址栈和返回地址比较单元的行为由全局控制单元控制,返回地址压栈和出栈操作、返回地址比较等,均不需要处理器参与,从而通过硬件方式实现在不降低处理器性能的前提下对面向返回编程攻击的有效抵御。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例提供的一种基于零延迟动态深度RAS抵御面向返回编程攻击的方法的流程图;
图2为本发明实施例提供的一种基于零延迟动态深度RAS抵御面向返回编程攻击的方法中返回地址栈动态深度调整步骤的流程示意图;
图3为本发明实施例提供的一种基于零延迟动态深度RAS抵御面向返回编程攻击的系统的构成框图;
图4为本发明实施例提供的一种基于零延迟动态深度RAS抵御面向返回编程攻击的系统的总体结构示意图;
图5为本发明实施例提供的一种基于零延迟动态深度RAS抵御面向返回编程攻击的系统的具体实现框图。
具体实施方式
下面结合附图并举实施例,对本发明提供的技术方案作进一步说明。应理解,本发明实施例中提供的系统结构和业务场景主要是为了说明本发明的技术方案的可能的实施方式,不应被解读为对本发明的技术方案的唯一限定。本领域普通技术人员可知,随着系统结构的演进和新业务场景的出现,本发明提供的技术方案对类似技术问题同样适用。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。如有不一致,以本说明书中所说明的含义或者根据本说明书中记载的内容得出的含义为准。另外,本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。
图1示出了本发明实施例提供的一种基于零延迟动态深度RAS抵御面向返回编程攻击的方法的流程图,如图1所示,该基于零延迟动态深度RAS抵御面向返回编程攻击的方法包括如下步骤:
步骤S1:根据重排序缓冲区中当拍待提交指令的类型发出控制信号。
在本发明实施例中,重排序缓冲区(Re-Order Buffer,ROB)中存储需要执行的指令序列,包含每次指令提交的所有信息,例如索引(index)、操作码(opcode)和返回地址数据(data)。
在每一拍开始时,访问重排序缓冲区中当拍待提交指令的操作码,根据操作码判断当拍待提交指令的类型是调用(call)指令还是返回(ret)指令,根据指令类型发出控制信号,从而根据控制信号执行不同行为。
步骤S2:在当拍待提交指令的类型为调用指令时,根据控制信号对重排序缓冲区中待提交指令包括的返回地址进行压栈操作。
步骤S3:在当拍待提交指令的类型为返回指令时,根据控制信号进行出栈操作,并提供出栈返回地址,根据控制信号比较提供的出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址。
步骤S4:如果提供的出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址不一致,表明返回地址被修改,产生异常处理请求信号,向重排序缓冲区通知当拍待提交指令有面向返回编程攻击风险,向操作系统发送异常处理请求以对指令进行处理;如果提供的出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址一致,则表明返回地址没有修改,当拍待提交指令不存在面向返回编程攻击风险,控制重排序缓冲区提交当拍指令。
在本发明实施例中,RAS表示返回地址栈(Return Address Stack)。
进一步地,为扩展零延迟动态深度返回地址栈空间大小,降低硬件资源消耗,本发明实施例提供的一种基于零延迟动态深度RAS抵御面向返回编程攻击的方法还包括返回地址栈动态深度调整步骤。具体而言,返回地址栈动态深度调整步骤包括:每次执行完压栈或出栈操作后,根据当前返回地址栈内数据量大小和传输行为阈值,从内存中按序读入重排序缓冲区中的返回地址写至返回地址栈栈底,或者,将返回地址栈内保存的重排序缓冲区中的返回地址从返回地址栈栈底开始按序存入至内存中。
具体地,每次执行完压栈或出栈操作后,若返回地址栈内数据量较大,例如达到传输行为阈值的两倍时,将返回地址栈栈底地址至传输行为阈值地址之间的返回地址数据按序存入内存中,并修改栈底地址。也就是说,内存中的部分地址段用于存储返回地址栈中暂时不使用的数据,需要使用到这些数据时再从内存中取出到返回地址栈,由此降低硬件资源消耗。返回地址栈内数据量未达到传输行为阈值时,从内存中按序取出个数为传输行为阈值的返回地址存入返回地址栈栈底地址至规定地址之间,并修改栈底地址,其中规定地址为栈底地址与传输行为阈值地址的差值。由此通过在堆栈表项不足时从内存中将返回地址数据读入栈内,对返回地址栈空间进行扩展,即内存通过数据通道支持堆栈表项不足时的深度扩展。因此,本发明实施例提供的一种基于零延迟动态深度RAS抵御面向返回编程攻击的方法可以实现返回地址栈动态深度调整,由此可以完成对超深函数调用情形下面向返回编程攻击的抵御。
在本发明实施例中,传输行为阈值由用户进行配置,优选地,传输行为阈值配置为小于返回地址栈表项数的一半。
图2为本发明实施例提供的一种基于零延迟动态深度RAS抵御面向返回编程攻击的方法中返回地址栈动态深度调整步骤的流程示意图,如图2所示,返回地址栈动态深度调整具体实施过程如下:
每次执行完压栈或出栈操作后,先计算返回地址栈栈顶指针与栈底指针之间的差值,即栈内容量;
若差值等于两倍的传输行为阈值,即返回地址栈内数据量达到传输行为阈值的两倍时,则将栈底指针至栈底指针加上传输行为阈值的地址之间的返回地址数据,即返回地址栈栈底地址至传输行为阈值地址之间的返回地址数据,按序存入内存中,并将栈底指针的值设定为栈底指针的值与传输行为阈值之和,即栈底指针=栈底指针+传输行为阈值,内存中的部分地址段存储返回地址栈中暂时不使用的数据;
若差值小于传输行为阈值,即返回地址栈内数据量未达到传输行为阈值时,则从内存中按序取出个数为传输行为阈值的返回地址数据存入到返回地址栈的栈底指针至栈底指针减去传输行为阈值的地址中,并将栈底指针的值设定为栈底指针的值与传输行为阈值之差,即栈底指针=栈底指针-传输行为阈值。
其中,在本发明实施例中,在上述返回地址栈动态深度调整步骤中,在比较差值与传输行为阈值时出现default,则结束操作。
进一步地,在本发明实施例中,控制信号提供有3个标志位:有效性标志位(valid)、调用标志位(isCall)和返回标志位(isRet);有效性标志位信号为1时,表明这次传输的信号有效;调用标志位信号为1时,表明这次操作为调用指令;返回标志位信号为1时,表明这次操作为返回指令。
若重排序缓冲区中当拍待提交指令中有调用指令,则判断当拍待提交指令的类型为调用指令,发出的控制信号的有效性标志位和调用标志位设置为有效(设置为1),收到控制信号后执行压栈操作,从重排序缓冲区表项中读出当拍待提交指令包括的返回地址并写入返回地址栈栈顶;
若重排序缓冲区中当拍待提交指令中有返回指令,则判断当拍待提交指令的类型为返回指令,发出的控制信号的有效性标志位和返回标志位设置为有效(设置为1),收到控制信号后执行出栈操作,从返回地址栈栈顶读出返回地址,并与重排序缓冲区表项中的返回地址进行比较;
若来源于重排序缓冲区表项和返回地址栈表项的两个返回地址不一致,产生异常处理请求信号,向重排序缓冲区通知当拍待提交指令有面向返回编程攻击风险,向操作系统发送异常处理请求以对指令进行处理。
如图3-5所示,为了实现本发明实施例提供的上述基于零延迟动态深度RAS抵御面向返回编程攻击的方法,本发明实施例提供了一种基于零延迟动态深度RAS抵御面向返回编程攻击的系统,该系统设置在重排序缓冲区(Re-Order Buffer,ROB)和内存(memory)之间并与重排序缓冲区及内存交互,包括全局控制单元101、返回地址比较单元103和零延迟动态深度返回地址栈102;全局控制单元101根据重排序缓冲区中当拍待提交指令的类型发出控制信号;在当拍待提交指令的类型为调用指令时,零延迟动态深度返回地址栈102根据控制信号对重排序缓冲区中待提交指令包括的返回地址进行压栈操作;在当拍待提交指令的类型为返回指令时,零延迟动态深度返回地址栈102根据控制信号进行出栈操作,向返回地址比较单元103提供出栈返回地址;在当拍待提交指令的类型为返回指令时,返回地址比较单元103根据控制信号比较零延迟动态深度返回地址栈102提供的出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址,如果零延迟动态深度返回地址栈102提供的出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址不一致,返回地址比较单元103产生异常处理请求信号,向重排序缓冲区和全局控制单元101通知当拍待提交指令有面向返回编程攻击风险,全局控制单元101向操作系统发送异常处理请求以对指令进行处理。
参考图5,在本发明实施例中,重排序缓冲区中存储需要执行的指令序列,包含每次指令提交的所有信息,例如索引(index)、操作码(opcode)和返回地址数据(data)。全局控制单元101包含类型检查子单元和控制子单元;类型检查子单元从重排序缓冲区中获得当拍待提交指令的操作码,判断当拍待提交指令的类型,通知控制子单元发出对应的控制信号;控制子单元发出控制信号并控制零延迟动态深度返回地址栈102和返回地址比较单元103的行为,两者使用相同的控制信号,控制信号提供有3个标志位:有效性标志位、调用标志位和返回标志位;有效性标志位信号为1时,表明这次传输的信号有效;调用标志位信号为1时,表明这次操作为调用指令;返回标志位信号为1时,表明这次操作为返回指令。
具体而言,每一拍开始,全局控制单元101中的类型检查子单元访问重排序缓冲区表项中的操作码位,若发现当拍待提交指令中有调用指令,则将控制信号的有效性标志位和调用标志位设置为有效(设置为1)、以及返回标志位设置为无效(设置为0),并传递给零延迟动态深度返回地址栈102和返回地址比较单元103,零延迟动态深度返回地址栈102收到控制信号后执行压栈操作,从重排序缓冲区表项中读出对应的返回地址并写入零延迟动态深度返回地址栈102的返回地址栈栈顶;若发现当拍待提交指令中有返回指令,则将控制信号的有效性标志位和返回标志位设置为有效(设置为1)、以及调用标志位设置为无效(设置为0),并传递给零延迟动态深度返回地址栈102和返回地址比较单元103,零延迟动态深度返回地址栈102收到控制信号后执行出栈操作,返回地址比较单元103收到控制信号后从零延迟动态深度返回地址栈102的返回地址栈栈顶读出返回地址,并与重排序缓冲区表项中的返回地址进行比较;若发现当拍待提交指令中无调用和返回指令,则将有效性标志位信号置为0,其他单元不执行任何动作。
参考图5,零延迟动态深度返回地址栈102根据全局控制单元101传递过来的控制信号与重排序缓冲区和返回地址比较单元103进行数据交互,零延迟动态深度返回地址栈102包含返回地址栈、传输控制子单元、阈值寄存器和数据通道;返回地址栈是具有N个表项的堆栈,N可取32,拥有栈顶指针和栈底指针,其中栈顶指针表示当前栈顶的地址,栈底指针表示当前栈底的地址,返回地址栈通过阈值寄存器存储重排序缓冲区中的返回地址,也就是返回地址栈中每个表项存储每次调用指令提交后的返回地址,并在返回地址比较单元103工作时为其提供返回地址;传输控制子单元用于控制返回地址栈和内存之间的数据传输,具体为:根据返回地址栈当前栈内数据量大小从内存中按序读入重排序缓冲区中的返回地址写至返回地址栈栈底,或者,将返回地址栈内保存的重排序缓冲区中的返回地址从返回地址栈栈底开始按序存入至内存中;数据通道用于在返回地址栈和内存之间传输数据;阈值寄存器用于配置传输控制子单元的传输行为阈值,传输行为阈值用于衡量返回地址栈与内存之间是否传输地址数据;传输行为阈值由用户通过阈值寄存器进行配置,优选地,传输行为阈值由阈值寄存器配置为小于返回地址栈表项数N的一半(即传输行为阈值<N/2)。
当处理器执行到函数调用指令(call指令)时,零延迟动态深度返回地址栈102执行压栈操作,将调用指令的返回地址压入栈顶;当处理器执行到函数返回指令(ret指令)时,零延迟动态深度返回地址栈102执行出栈操作,从栈顶弹出返回地址,程序将返回到这个地址继续执行。由于函数调用和返回通常成对出现,且返回地址在调用时就已经确定,因此,可以利用零延迟动态深度返回地址栈102的特性来判断调用指令的返回地址是否被修改,从而抵御面向返回编程攻击。
优选地,重排序缓冲区每次执行调用指令的提交行为时,零延迟动态深度返回地址栈102从全局控制单元101处接收到的控制信号的有效性标志位和调用标志位为1,将此次调用指令的返回地址写入到栈顶指针对应地址的表项中,并将栈顶指针加一。重排序缓冲区每次执行返回指令的提交行为时,零延迟动态深度返回地址栈102从全局控制单元101处接收到的控制信号的有效性标志位和返回标志位为1,将栈顶指针对应地址表项中的内容读出送到返回地址比较单元103中,并将栈顶指针减一。
返回地址比较单元103包括地址比较子单元和通知子单元;地址比较子单元从重排序缓冲区和零延迟动态深度返回地址栈102获得返回地址并进行比较操作,将比较结果传递给通知子单元。也就是,当返回地址比较单元103接收到全局控制单元101发出的控制信号后,地址比较子单元将来源于重排序缓冲区表项和返回地址栈表项的两个返回地址进行比较操作;通知子单元根据地址比较子单元传送来的结果,判断是否通知全局控制单元101向操作系统发送异常处理请求并控制重排序缓冲区是否提交当拍指令。具体地,若来源于重排序缓冲区表项和返回地址栈表项的两个返回地址一致,通知子单元通知重排序缓冲区和全局控制单元101此次提交的返回指令无风险;若来源于重排序缓冲区表项和返回地址栈表项的两个返回地址不一致,则表明返回地址被修改,通知子单元产生异常处理请求信号,例如exception信号,向重排序缓冲区和全局控制单元101通知此次指令提交有风险,全局控制单元101向操作系统发送异常处理请求以对该指令进行处理。
进一步地,在本发明实施例的一个可选实施方式中, 零延迟动态深度返回地址栈102还包括指针计算模块,用于根据栈顶指针和栈底地址计算栈内数据量大小、在返回地址栈和内存之间的数据传输过程中计算从内存读入至栈内的指针地址以及从栈内读入至内存的指针地址,以实现返回地址栈与内存的地址数据交互。
综上所述,本发明通过在重排序缓冲区和内存之间增设一套包括全局控制单元101、返回地址比较单元103和零延迟动态深度返回地址栈102的系统,由全局控制单元101识别当拍待提交指令的类型并控制零延迟动态深度返回地址栈102和返回地址比较单元103的行为,在指令为调用指令时零延迟动态深度返回地址栈102对指令中的返回地址进行压栈,在指令为返回指令时零延迟动态深度返回地址栈102对栈顶保存的返回地址进行出栈操作,返回地址比较单元103比较栈顶保存的返回地址数据和重排序缓冲区中当拍待提交指令的返回地址是否一致,从而判断调用指令的返回地址是否被篡改,由此确定当拍待提交指令是否存在面向返回编程攻击风险,且在存在面向返回编程攻击风险时,全局控制单元101向操作系统发送异常处理请求以对该指令进行处理,在不存在面向返回编程攻击风险时,全局控制单元101控制重排序缓冲区提交当拍指令。
本发明摒弃了现有技术中采用软件技术实现面向返回编程攻击抵御的方式,解决了攻击者均有可能绕过软件设置的保护从而导致面向返回编程攻击抵御失效的问题,在本发明的基于零延迟动态深度RAS抵御面向返回编程攻击的方法及系统中,零延迟动态深度返回地址栈102和返回地址比较单元103的行为由全局控制单元101控制,返回地址压栈和出栈操作、返回地址比较等,均不需要处理器参与,从而通过硬件方式实现在不降低处理器性能的前提下对面向返回编程攻击的有效抵御。
需要说明的是,本发明所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,上述对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
说明书和权利要求书中的词语“第一、第二、第三等”或模块A、模块B、模块C等类似用语,仅用于区别类似的对象,不代表针对对象的特定排序,可以理解地,在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本发明实施例能够以除了在这里图示或描述的以外的顺序实施。
在上述的描述中,所涉及的表示步骤的标号,并不表示一定会按此步骤执行,还可以包括中间的步骤或者由其他的步骤代替,在允许的情况下可以互换前后步骤的顺序,或同时执行。
说明书和权利要求书中使用的术语“包括”不应解释为限制于其后列出的内容;它不排除其它的元件或步骤。因此,其应当诠释为指定所提到的所述特征、整体、步骤或部件的存在,但并不排除存在或添加一个或更多其它特征、整体、步骤或部件及其组群。因此,表述“包括装置A和B的设备”不应局限为仅由部件A和B组成的设备。
本说明书中提到的“一个实施例”或“实施例”意味着与该实施例结合描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在本说明书各处出现的用语“在一个实施例中”或“在实施例中”并不一定都指同一实施例,但可以指同一实施例。此外,在本发明的各个实施例中,如果没有特殊说明以及逻辑冲突,不同的实施例之间的术语和/或描述具有一致性、且可以相互引用,不同的实施例中的技术特征根据其内在的逻辑关系可以组合形成新的实施例。
注意,上述仅为本发明的较佳实施例及所运用的技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明的构思的情况下,还可以包括更多其他等效实施例,均属于本发明的保护范畴。
Claims (6)
1.一种基于零延迟动态深度RAS抵御面向返回编程攻击的方法,其特征在于,所述基于零延迟动态深度RAS抵御面向返回编程攻击的方法包括如下步骤:
在重排序缓冲区和内存之间设置能够与重排序缓冲区及内存交互的全局控制单元、返回地址比较单元、零延迟动态深度返回地址栈;
利用全局控制单元根据重排序缓冲区中当拍待提交指令的类型发出控制信号;
在当拍待提交指令的类型为调用指令时,利用零延迟动态深度返回地址栈根据控制信号对重排序缓冲区中待提交指令包括的返回地址进行压栈操作;
在当拍待提交指令的类型为返回指令时,利用零延迟动态深度返回地址栈根据控制信号进行出栈操作,并提供出栈返回地址,利用返回地址比较单元根据控制信号比较提供的出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址;
如果提供的出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址不一致,表明返回地址被修改,利用返回地址比较单元产生异常处理请求信号,向重排序缓冲区和全局控制单元通知当拍待提交指令有面向返回编程攻击风险,利用全局控制单元向操作系统发送异常处理请求以对指令进行处理;如果提供的出栈返回地址与重排序缓冲区中当拍待提交指令包括的返回地址一致,则表明返回地址没有修改,当拍待提交指令不存在面向返回编程攻击风险,利用全局控制单元控制重排序缓冲区提交当拍指令;
所述方法还包括返回地址栈动态深度调整步骤,所述返回地址栈动态深度调整步骤包括:每次执行完压栈或出栈操作后,根据当前返回地址栈内数据量大小和传输行为阈值,从内存中按序读入重排序缓冲区中的返回地址写至返回地址栈栈底,或者,将返回地址栈内保存的重排序缓冲区中的返回地址从返回地址栈栈底开始按序存入至内存中,其中,如果返回地址栈内数据量达到传输行为阈值的两倍时,将返回地址栈栈底地址至传输行为阈值地址之间的返回地址数据按序存入内存中,如果返回地址栈内数据量未达到传输行为阈值时,从内存中按序取出个数为传输行为阈值的返回地址存入返回地址栈栈底地址至规定地址之间,所述规定地址为栈底地址与传输行为阈值地址的差值;
所述返回地址栈动态深度调整步骤包括:
每次执行完压栈或出栈操作后,先计算返回地址栈栈顶指针与栈底指针之间的差值,得到当前返回地址栈内数据量大小;
若差值等于两倍的传输行为阈值,则将栈底指针至栈底指针加上传输行为阈值的地址之间的返回地址数据按序存入内存中,并将栈底指针的值设定为栈底指针的值与传输行为阈值之和;
若差值小于传输行为阈值,则从内存中按序取出个数为传输行为阈值的返回地址数据存入到返回地址栈的栈底指针至栈底指针减去传输行为阈值的地址中,并将栈底指针的值设定为栈底指针的值与传输行为阈值之差。
2.根据权利要求1所述的基于零延迟动态深度RAS抵御面向返回编程攻击的方法,其特征在于,所述控制信号提供有3个标志位:有效性标志位、调用标志位和返回标志位;
若重排序缓冲区中当拍待提交指令中有调用指令,则判断当拍待提交指令的类型为调用指令,发出的控制信号的有效性标志位和调用标志位设置为有效,收到控制信号后执行压栈操作,从重排序缓冲区表项中读出当拍待提交指令包括的返回地址并写入返回地址栈栈顶;
若重排序缓冲区中当拍待提交指令中有返回指令,则判断当拍待提交指令的类型为返回指令,发出的控制信号的有效性标志位和返回标志位设置为有效,收到控制信号后执行出栈操作,从返回地址栈栈顶读出返回地址,并与重排序缓冲区表项中的返回地址进行比较;
若来源于重排序缓冲区表项和返回地址栈表项的两个返回地址不一致,产生异常处理请求信号,向重排序缓冲区通知当拍待提交指令有面向返回编程攻击风险,向操作系统发送异常处理请求以对指令进行处理。
3.一种基于零延迟动态深度RAS抵御面向返回编程攻击的系统,其特征在于,所述系统设置在重排序缓冲区和内存之间并与所述重排序缓冲区及所述内存交互,包括:全局控制单元、返回地址比较单元、零延迟动态深度返回地址栈,其中:
所述全局控制单元根据所述重排序缓冲区中当拍待提交指令的类型发出控制信号;
在当拍待提交指令的类型为调用指令时,所述零延迟动态深度返回地址栈根据所述控制信号对所述重排序缓冲区中待提交指令包括的返回地址进行压栈操作;在当拍待提交指令的类型为返回指令时,所述零延迟动态深度返回地址栈根据所述控制信号进行出栈操作,向所述返回地址比较单元提供出栈返回地址;
在当拍待提交指令的类型为返回指令时,所述返回地址比较单元根据所述控制信号比较所述零延迟动态深度返回地址栈提供的出栈返回地址与所述重排序缓冲区中当拍待提交指令包括的返回地址,如果所述零延迟动态深度返回地址栈提供的出栈返回地址与所述重排序缓冲区中当拍待提交指令包括的返回地址不一致,所述返回地址比较单元产生异常处理请求信号,向所述重排序缓冲区和所述全局控制单元通知当拍待提交指令有面向返回编程攻击风险,所述全局控制单元向操作系统发送异常处理请求以对所述指令进行处理;
所述零延迟动态深度返回地址栈包括:
返回地址栈,用于存储所述重排序缓冲区中的返回地址;
传输控制子单元,用于控制所述返回地址栈和所述内存之间的数据传输,根据当前栈内数据量大小从所述内存中按序读入所述重排序缓冲区中的返回地址写至栈底,或者,将栈内保存的所述重排序缓冲区中的返回地址从栈底开始按序存入至所述内存中;
数据通道,用于在所述返回地址栈和所述内存之间传输数据;
阈值寄存器,用于配置所述传输控制子单元的传输行为阈值,所述传输行为阈值用于衡量所述返回地址栈与所述内存之间是否传输地址数据。
4.根据权利要求3所述的基于零延迟动态深度RAS抵御面向返回编程攻击的系统,其特征在于,所述全局控制单元包括类型检查子单元和控制子单元,其中,所述类型检查子单元从所述重排序缓冲区中获得当拍待提交指令的操作码,判断当拍待提交指令的类型,通知所述控制子单元发出对应的控制信号,所述控制子单元发出控制信号并控制所述零延迟动态深度返回地址栈和所述返回地址比较单元的行为。
5.根据权利要求4所述的基于零延迟动态深度RAS抵御面向返回编程攻击的系统,其特征在于,所述返回地址比较单元包括:
地址比较子单元,从所述重排序缓冲区和所述零延迟动态深度返回地址栈获得返回地址并进行比较操作;
通知子单元,从所述地址比较子单元接收比较结果,判断是否通知所述全局控制单元向所述操作系统发送异常处理请求并控制所述重排序缓冲区是否提交当拍指令。
6.根据权利要求5所述的基于零延迟动态深度RAS抵御面向返回编程攻击的系统,其特征在于,所述控制信号提供有3个标志位:有效性标志位、调用标志位和返回标志位;
若所述重排序缓冲区中当拍待提交指令中有调用指令,则判断当拍待提交指令的类型为调用指令,通知所述控制子单元发出对应的控制信号,所述控制子单元发出的控制信号的有效性标志位和调用标志位设置为有效并传递给所述零延迟动态深度返回地址栈和所述返回地址比较单元,所述零延迟动态深度返回地址栈收到控制信号后执行压栈操作,从所述重排序缓冲区表项中读出当拍待提交指令包括的返回地址并写入所述零延迟动态深度返回地址栈的返回地址栈栈顶;
若所述重排序缓冲区中当拍待提交指令中有返回指令,则判断当拍待提交指令的类型为返回指令,通知所述控制子单元发出对应的控制信号,所述控制子单元发出的控制信号的有效性标志位和返回标志位设置为有效并传递给所述零延迟动态深度返回地址栈和所述返回地址比较单元,所述零延迟动态深度返回地址栈收到控制信号后执行出栈操作,所述返回地址比较单元收到控制信号后从所述零延迟动态深度返回地址栈的返回地址栈栈顶读出返回地址,并与所述重排序缓冲区表项中的返回地址进行比较;
若来源于所述重排序缓冲区表项和所述返回地址栈表项的两个返回地址不一致,所述通知子单元产生异常处理请求信号,向所述重排序缓冲区和所述全局控制单元通知当拍待提交指令有面向返回编程攻击风险,所述全局控制单元向所述操作系统发送异常处理请求以对所述指令进行处理。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202510522080.5A CN120046148B (zh) | 2025-04-24 | 2025-04-24 | 基于零延迟动态深度ras抵御面向返回编程攻击的方法及系统 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202510522080.5A CN120046148B (zh) | 2025-04-24 | 2025-04-24 | 基于零延迟动态深度ras抵御面向返回编程攻击的方法及系统 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN120046148A CN120046148A (zh) | 2025-05-27 |
| CN120046148B true CN120046148B (zh) | 2025-08-12 |
Family
ID=95754005
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202510522080.5A Active CN120046148B (zh) | 2025-04-24 | 2025-04-24 | 基于零延迟动态深度ras抵御面向返回编程攻击的方法及系统 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN120046148B (zh) |
Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN105260659A (zh) * | 2015-09-10 | 2016-01-20 | 西安电子科技大学 | 一种基于qemu的内核级代码重用型攻击检测方法 |
Family Cites Families (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN113641995B (zh) * | 2021-07-08 | 2022-12-09 | 中国人民解放军战略支援部队信息工程大学 | 一种面向Cisco IOS的ROP攻击定位与代码捕获方法 |
| CN114266036B (zh) * | 2021-11-29 | 2026-01-23 | 中国科学院计算技术研究所 | 一种基于Intel CET机制的保护通用内存完整性的方法 |
| CN117294455A (zh) * | 2022-06-16 | 2023-12-26 | 三六零数字安全科技集团有限公司 | 路由器入侵检测方法、装置、设备及存储介质 |
-
2025
- 2025-04-24 CN CN202510522080.5A patent/CN120046148B/zh active Active
Patent Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN105260659A (zh) * | 2015-09-10 | 2016-01-20 | 西安电子科技大学 | 一种基于qemu的内核级代码重用型攻击检测方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN120046148A (zh) | 2025-05-27 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5915085A (en) | Multiple resource or security contexts in a multithreaded application | |
| US11347507B2 (en) | Secure control flow prediction | |
| EP2443553B1 (en) | Annotating virtual application processes | |
| US8516589B2 (en) | Apparatus and method for preventing virus code execution | |
| US8528075B2 (en) | Accelerating the execution of anti-virus programs in a virtual machine environment | |
| US10255088B2 (en) | Modification of write-protected memory using code patching | |
| EP2842041B1 (en) | Data processing system and method for operating a data processing system | |
| KR102862122B1 (ko) | 추론적 실행을 위한 보안 예측기 | |
| US10083129B2 (en) | Code loading hardening by hypervisor page table switching | |
| CN104978284B (zh) | 处理器子程序高速缓冲存储器 | |
| JP2007272576A5 (zh) | ||
| CN110442380B (zh) | 一种数据预热方法及计算设备 | |
| CN114756856A (zh) | 一种基于函数动态载入的代码重用攻击防御方法 | |
| US12475267B2 (en) | Information processing method and apparatus for obtaining a display result by a terminal device | |
| US9501667B2 (en) | Security domain prediction | |
| CN120046148A (zh) | 基于零延迟动态深度ras抵御面向返回编程攻击的方法及系统 | |
| CN119473401B (zh) | 数据处理方法、分支预测器及相关设备 | |
| Wilhelm | Timing analysis and timing predictability | |
| CN109190383B (zh) | 访问指令的处理方法、装置及设备 | |
| US8839274B2 (en) | Accelerated class check | |
| CN117744067B (zh) | 访问空间切换方法、装置、处理器、设备及存储介质 | |
| US20210397705A1 (en) | Return-oriented programming protection | |
| CN113420287B (zh) | 一种抵御基于高速缓存的侧信道攻击的方法 | |
| CN118410500A (zh) | 权限管控方法、电子设备及存储介质 | |
| Dinerman | Speculating on Speculative Execution |
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 |