CN115659322B - 一种基于运行时顺序调度装载的代码复用攻击防御方法 - Google Patents

一种基于运行时顺序调度装载的代码复用攻击防御方法 Download PDF

Info

Publication number
CN115659322B
CN115659322B CN202211609172.XA CN202211609172A CN115659322B CN 115659322 B CN115659322 B CN 115659322B CN 202211609172 A CN202211609172 A CN 202211609172A CN 115659322 B CN115659322 B CN 115659322B
Authority
CN
China
Prior art keywords
function
loading
information
area
address
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
CN202211609172.XA
Other languages
English (en)
Other versions
CN115659322A (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.)
Ocean University of China
Original Assignee
Ocean University of China
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 Ocean University of China filed Critical Ocean University of China
Priority to CN202211609172.XA priority Critical patent/CN115659322B/zh
Publication of CN115659322A publication Critical patent/CN115659322A/zh
Application granted granted Critical
Publication of CN115659322B publication Critical patent/CN115659322B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明属于信息安全中系统安全领域,具体涉及一种基于运行时顺序调度装载的代码复用攻击防御方案,包括基于运行时装载函数的方案和基于先来先服务调度的随机化代码方案;将可执行文件的装载过程推迟至程序运行时,确保减少内存中的gadget数量;基于先来先服务调度的随机化代码方法是函数在装载的过程时按照先来先服务的调度分配函数地址,使之实现函数地址代码随机化,其优点在于,减少实现代码复用攻击的概率,同时因为函数顺序的调度,使得内存页内碎片减少,使之提高资源利用率。

Description

一种基于运行时顺序调度装载的代码复用攻击防御方法
技术领域
本发明属于信息安全中系统安全领域,具体涉及一种基于运行时顺序调度装载的代码复用攻击防御方案。
背景技术
近十几年来,安全社区一直与可能导致代码注入的内存损坏漏洞作斗争。尽管现代操作系统已采取相应的漏洞利用缓解措施,但最近的代码复用攻击的对抗性进展仍然允许攻击者绕过这些缓解措施并成功进行漏洞利用。具体来讲,攻击者通过缓冲区漏洞将控制流非法劫持,之后串联程序中的代码片段(称之为gadget)来达到攻击者进行漏洞利用的目的。总的来说,要实现代码复用攻击需同时具备程序的控制流被劫持、内存中的gadget数量达到最小攻击面以及gadget的位置信息被获取这三种条件。针对控制流劫持攻击,已经提出控制流完整性(CFI)的防御机制。其核心思想是限制程序中的控制转移,使之只能在预期的范围内运行。但现有的CFI存在安全性和性能开销失衡的情况,导致粗粒度的CFI安全性不够,而细粒度的CFI性能开销太大。同时CFI仅针对控制流跳转攻击的情况,而不能防御Data-oriented Programming(DOP)等的代码复用攻击。针对内存中gadget的数量,已经提出了去膨胀技术来减少冗余代码,从而减少程序内存中的gadget数量,使其因数量原因而实现不了代码复用攻击。现已经提出基于函数动态装载和卸载的去膨胀技术来减少代码重用攻击的概率。但因函数载入需求将函数多次换入换出,导致内存页内碎片过多,CPU命中率降低,造成时间和空间上的浪费。针对内存中目标代码片段的位置信息被获取的情况,现操作系统一般部署地址空间布局随机化(ASLR)防御措施。ASLR通过随机数据区域的地址使得攻击者获取的gadget位置信息失效,使之不能实现代码复用攻击。但ASLR仅随机化整个内存段的地址基址,这时候攻击者可以通过泄露的地址信息来推导别的信息,这样代码段的地址都可以推导出来,以致获取所需gadget的位置信息,进而完成代码复用攻击。总之,现有的防御技术存在安全性和性能开销失衡不足的情况。为此,需要一种方法,以实现一种基于运行时顺序调度装载的代码复用攻击防御方法。
发明内容
为了克服当前防护技术中安全性和性能开销失衡的情况,本发明技术方案提出了一种基于运行时顺序调度装载的代码复用攻击防御方案,在程序运行时再把代码段中的函数装载至内存中,确保内存中的gadget数量,减少实现代码复用攻击的概率。通过对函数载入的顺序进行先来先分配地址的调度,使之实现函数地址的代码随机化,即使攻击者通过漏洞获取的gadget位置信息也会因随机化而失效。同时因为函数顺序的调度,使得内存页内碎片减少,使之提高资源利用率。其技术方案为,
一种基于运行时顺序调度装载的代码复用攻击防御方法,包括基于运行时装载函数的方法和基于先来先服务调度的随机化代码方法;
基于运行时装载函数的方法是在程序运行时根据调用关系动态地装载函数至内存中,实质是将可执行文件的装载过程推迟至程序运行时,减少内存中的gadget数量;基于先来先服务调度的随机化代码方法是函数在装载的过程时按照先来先服务的调度分配函数地址,使之实现函数地址代码随机化。
优选的,搭建运行时装载系统,包括解析模块、函数修补表、装载模块、分配模块和监控模块;
解析模块:通过IDA python工具获取代码段各函数信息,在此基础上进行静态分析;使用ROPgadget工具获取二进制可执行文件中所有gadget,并记录函数中的gadget数量;
装载模块:父进程通过fork()函数创建子进程,父进程负责装载函数和监控子进程的状态信息,当子进程需要调用虚拟内存中的函数时,此时产生int3中断,发出SIGTRAP信号,父进程捕获到SIGTRAP信号,将子进程调用的函数装载至虚拟内存中;
分配模块:实现函数顺序调度装载;
创建函数修补表,此表存储所有的函数信息;
监控模块:父进程采用wait()函数来监控子进程的状态信息,依据子进程返回的不同状态信息,进行相应的处理。
优选的,基于运行时装载函数的方法,包括以下步骤,
S11.对二进制可执行文件进行预处理,通过静态分析获取二进制文件中可装载段的地址、偏移信息以及代码段内的函数地址和大小信息;
S12.对获取到的信息进行处理,将处理信息保存至副本中;
S13.对内存区域和函数修补表进行初始化;在物理内存空间开辟一段存储可装载段函数信息的内存空间,将副本信息装载至该区域,该区域称之为备用区域;将原本装载至进程虚拟映像的代码段区域初始化置0xCC,使之整个区域变成int3中断区,该区域称为运行区域;同时创建数据结构函数修补表,该表存储着所有的函数信息,等函数被调用以及分配地址后,会更新所调用的函数信息;
S14.通过父进程创建子进程,实现函数装载和运行。
优选的,步骤S13中初始化之后,正式使用装载的函数信息,此时进入程序运行状态;为了避免多次执行execve()函数的多次调用,采用fork机制,其中子进程与父进程共享内存空间,利用copy-on-write的特性,在进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程,此时大幅度降低资源开销。
优选的,通过副本信息中代码段的起始地址和终止地址计算出代码段的大小信息,之后定义物理内存中一个偏移基址,通过对代码段起始和终止的偏移计算出装载至该区域的地址,通过mmap()函数将副本中代码段函数信息映射至备用区域,完成备用装载;通过mprotect()函数将备用装载的权限设置为只可读;同时通过mprotect()函数将运行区域的权限设置为可读和可执行,防止攻击者对该区域进行恶意修改并执行。
优选的,步骤S14中,将CPU的指令寄存器设置成可执行文件的入口地址,父进程通过fork()函数创建子进程;子进程继承父进程的堆栈信息,之后跳转_start()函数开始程序运行;父进程负责装载函数和监控子进程的状态信息,当子进程需要调用进程虚拟映像的执行区域函数时,产生int3中断,发出SIGTRAP信号,父进程捕获到SIGTRAP信号,将备用区域中所调用的函数装载至运行区域。
优选的,父进程采用wait()函数来监控子进程的状态信息,依据子进程返回的不同状态信息,进行相应的处理:当捕获到SIGTRAP时,进行装载;捕获其他状态时,打印堆栈信息,提示错误信息,子进程、父进程开始退出;
当子进程需要调用进程虚拟映像的执行区域函数时,产生int3中断,监控模块开始监控,首先初始化函数队列,此队列记录装载的函数信息;创建装载函数时间限值ALIVE_MAX,即ALIVE_MAX为限制装载函数时间的最大限值;父进程一直等待并捕获子进程的状态信息,若子进程异常退出那么父进程结束;若父进程捕获子进程的状态为SIGTRAP时,说明产生子进程中断,此时父进程获取子进程rip和rsp寄存器信息,通过获取的寄存器信息将备用区域中所调用的函数装载至运行区域;若父进程捕获不到,此刻发生错误,则子进程、父进程退出。
优选的,基于先来先服务调度的随机化代码方法步骤如下,
S21.判断调用函数时是否产生中断?否,系统产生错误,则父进程退出;是,进行S22;
S22.查询函数修补表中该函数是否调用?是,跳转并执行该函数,否,执行S23;
S23.按照顺序调度装载实现部分随机化;
S24.修改函数修补表中该函数信息,跳转并执行该函数。
优选的,每次函数调度时都将先调用的函数先分配地址,下一个需调用的函数分配至上一个调用函数的偏移处,以达到大部分函数地址随机化以及页内函数紧凑,减少页内碎片的效果;同时更改函数修补表中该函数的地址和调用信息,之后程序执行该函数;若该函数已调用,说明该函数已装载至运行区域中,查询函数修补表中该函数地址,执行该函数。
有益效果
与现有技术相比,选择本发明的有益效果为:
1)本发明在去膨胀技术的基础上,提出一种基于运行时装载的代码复用攻击防御方案,将内存中gadget的攻击构造面减少到接近于0,以抵御代码复用攻击。
2)本发明的函数在运行中基于顺序调度的装载机制,可以实现函数代码位置随机化,即使攻击者通过漏洞获取函数信息,此时攻击也会失效。
3)相对与其他技术,本发明开销小,且保证程序执行的稳定性和高实用性。
4)本发明执行效率高,无需对可执行文件进行多余操作,仅对可执行文件进行信息分析和提取,同时具有较高的扩展性。
附图说明
图1为本发明实施的基于运行时顺序调度装载的代码复用攻击防御方案流程图。
图2为本发明实施的基于运行时顺序调度装载的代码复用攻击防御方案模型图。
图3为本发明实施的运行时产生中断和装载的示意图。
图4为本发明实施的函数修补表的数据信息图。
图5为本发明实施的未采用调度装载示意图。
具体实施方式
以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。
依据代码重用攻击的特点,本发明提出了一种基于运行时顺序调度装载的代码复用攻击防御方法。该方法能够对gadget的攻击构造面减少,阻止攻击者进行代码重用攻击。本发明的设计思路通用于现代计算机系统,但由于各个系统平台的差异性,导致具体实现机理不同。同时静态链接和动态链接的可执行文件因链接时间不同,不过设计思路依旧通用于这两种文件。本发明具体在Linux操作系统下对静态链接的文件进行防护并阐述。
一种基于运行时顺序调度装载的代码复用攻击防御方案,包括基于运行时装载函数的方法和基于先来先服务调度的随机化代码方法;基于运行时装载函数的方法是在程序运行时根据调用关系动态地装载函数至内存中,实质是将可执行文件的装载过程推迟至程序运行时,减少内存中的gadget数量;基于先来先服务调度的随机化代码方法是函数在装载的过程时按照先来先服务的调度分配函数地址,使之实现函数地址代码随机化。图1为本发明实施的基于运行时顺序调度装载的代码复用攻击防御方案流程图。
整体来说,该方案首先对二进制可执行文件进行预处理,主要进行静态分析并且把二进制文件中代码段的函数信息处理至副本文件中。之后对内存区域和函数修补表进行初始化,将副本文件中的代码段函数信息装载至部分内存区域中。将CPU的指令寄存器设置为二进制可执行文件的入口地址,之后程序运行。判断调用函数时是否产生中断,若产生中断则查询函数修补表中内容,之后按照顺序调度装载至内存中。总体来说,本发明的实质是将可执行文件的装载过程推迟至程序运行时,确保减少内存中的gadget数量。同时函数在装载的过程时按照先来先服务的调度分配函数地址,使之实现函数地址代码随机化,即使攻击者通过漏洞泄漏获得的gadget位置信息也会失效。
本方法搭建了一个运行时装载的系统,包括图2中的解析模块,函数修补表,装载模块,分配模块和监控模块。
本方案的架构如图2所示,分为对二进制程序运行前和运行时的干预。在程序运行前,通过静态分析将可执行文件获取所需要的信息,这些信息用于维护初始化函数修补表和内存区域以及运行时装载。在程序运行时,需要实现对二进制可执行程序的干预,使函数在程序执行需要时被装载,并按照先来先服务的调度装载至内存。此外,在运行前和运行时之中,需要设计信息传递的渠道,使运行时的装载和调度需要静态分析的函数信息。
根据代码重用攻击的特点,以细粒度的函数作为基本单位装载最为合适。因此,在程序运行之前获取代码段中函数信息尤为重要。尤其对代码段中所有函数进行明确的界定,即代码段中函数虚拟地址和函数偏移信息以及函数大小信息。
首先对二进制可执行文件进行预处理,通过静态分析获取二进制文件中可装载段的信息(虚拟内存中的地址信息,内存中的大小信息,起始位置的偏移信息,文件中的大小信息),以及代码段内的函数信息(主要是函数起始地址信息,函数大小信息,函数返回地址信息,函数内关键指令信息以及函数入口信息)。同时对获取到的信息进行处理,将处理信息保存至副本中。该过程相当于实现了解析器。同时为了减少开销,本发明实现了一个简易的HashMap(哈希映射)。将函数信息先存放在实现的HashMap中,大幅度提高增添、校验函数信息的效率,同时减少程序开销。此外,为了衡量本发明的代码重用攻击防护能力,需计算内存中每个函数包含的gadget数量。
解析模块:本发明通过IDA python工具获取代码段各函数信息,在此基础上进行静态分析。此外,本发明使用ROPgadget工具获取二进制可执行文件中所有gadget,并记录函数中的gadget数量。
装载模块:为实现函数运行时装载,则需实现代码段的装载模块。因此需要在内存中开辟两段独立内存,一个用于存储原二进制程序中代码段中函数信息,此区域在物理内存开辟。一个在进程映像中原代码段装载区域,此区域在虚拟内存中开辟。为实现函数顺序调度装载,因此需要分配模块,图2所示。为减少开销,防止重复调用函数后重复装载函数,故此创建函数修补表,此表存储实时的函数装载信息。
对内存区域和函数修补表进行初始化。在内存空间开辟一段存储可装载段函数信息的内存空间,将副本内的函数信息装载至该区域。具体来说,首先通过副本信息中代码段的起始地址和终止地址计算出代码段的大小信息。之后定义物理内存中一个偏移基址,通过对代码段起始和终止的偏移计算出装载至该区域的地址。通过mmap()函数将副本中代码段函数信息映射至该区域,完成备用装载。该区域称之为备用区域。同时通过mprotect()函数将该区域的权限设置为只可读。对原本装载至进程虚拟内存中的代码段区域初始化置0xCC,使之整个区域变成int3中断区,该区域称为运行区域。同时通过mprotect()函数将该区域的权限设置为可读和可执行,防止攻击者对该区域进行恶意修改并执行。创建并初始化数据结构函数修补表,该表存储着所有的函数地址信息(原函数地址信息,修补函数地址信息,函数信息,包括函数大小信息,函数是否装载信息,函数偏移信息,以及返回地址信息)。如图4所示。
做好初始化工作后,便要正式使用这些函数信息。此时进入程序运行时状态。为了避免多次执行execve()函数的多次调用,本方案采用fork机制,其中子进程与父进程共享内存空间。利用copy-on-write(写时复制)的特性,在进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程,此时大幅度降低资源开销。
此时将CPU的指令寄存器设置为二进制可执行文件的入口地址,程序开始执行。父进程通过fork()函数创建子进程。子进程继承父进程的堆栈内存信息,之后跳转_start()函数保持程序运行。父进程负责装载函数和监控子进程的状态信息。此时相当于实现了图2的监控模块,具体来说,采用wait()函数来监控子进程的状态信息。依据子进程返回的不同状态信息,进行相对的处理(当捕获到SIGTRAP时,进行相应装载。捕获其他状态时,打印堆栈信息,提示错误信息,进程开始退出)。当子进程需要调用进程虚拟映像的执行区域函数时,产生int3中断,监控模块开始监控,首先初始化函数队列,此队列记录装载的函数信息。创建装载函数时间限值ALIVE_MAX,该变量限制装载函数时间的最大限值。父进程一直等待并捕获子进程的状态信息,若子进程异常退出那么父进程结束。若父进程捕获子进程的状态为SIGTRAP时,说明产生子进程产生中断。此时父进程获取子进程rip和rsp寄存器信息(32位可执行程序为eip和esp)。通过获取的寄存器信息将备用区域中所调用的函数装载至运行区域。若父进程捕获不到,此刻系统发生错误,则父进程退出。如图3运行时产生中断和装载的示意图。
在实际装载过程中,如图2中的运行时内存函数分配的过程。其中将小方格逻辑抽象为函数,而标记深色的方格抽象为需要被调用的函数。若不采用调度装载,如图5所示,在装载的过程中,将备用区域代码段中的函数一一按位置映射装载至运行区域中。因二进制可执行文件以页映射的方式装载内存,一个页内存在部分函数装载至内存,部分函数为空,因此导致页内碎片过多,使其页内空间得不到充分利用,导致浪费内存空间,降低CPU命中效率。
对此调用函数按照先来先分配的调度分配地址,实现函数地址随机化。当调用函数装载至运行区域时,首先查询函数修补表中该函数是否之前调用,若无调用,则在调度中采用先来先服务调度算法。该算法的实质是将调用的函数根据顺序累加,对于函数的选择参考了操作系统常见的先来先服务调度算法。具体来说,每次函数调度时都将先调用的函数先分配地址,下一个需调用的函数分配至上一个调用函数的偏移处,以达到大部分函数地址随机化以及页内函数紧凑,减少页内碎片的效果。如图2中的运行时内存函数分配的过程。同时更改函数修补表中该函数的地址和调用信息,之后程序执行该函数。若该函数已调用,说明该函数已装载至运行区域中,无需在重复装载,之后查询函数修补表中该函数地址,最后执行该函数。
对此,根据函数调用以及顺序调度的装载,本发明在程序正常运行的前提上旨在保证程序能够抵抗一定的代码重用攻击。
总之,执行过程中达到运行时装载函数的效果,需要调用哪个函数则将该函数实时装载至内存中,同时对装载的函数地址进行调度分配,达到随机化的效果。破坏其构成代码复用攻击内存中的gadget达到一定数量以及gadget的位置信息被获取这两个必要条件,降低攻击者通过漏洞利用的代码复用攻击的概率,并同时对内存中的程序进行了去膨胀,大大提高了程序运行的性能。
防御能力测试
本发明以包含缓冲区溢出的二进制程序ROP_TEST为例。通过IDA工具将该程序反汇编得到以下源码。ROP_TEST的源代码如下表所示。其中第8行存在缓冲区溢出漏洞。通过ROP攻击改变寄存器的状态信息从而实现syscall(系统调用)来获取主机控制权,完成漏洞利用。
表1ROP_TEST源码
Figure GDA0004067538530000091
作为对比,如表2所示,未采取本发明的防御措施时,通过ROP脚本攻击获取当前主机的控制权限(如12行ls命令获取当前文件下的所有文件)。
在表3中,为二进制可执行文件部署本发明防御措施的具体情况;其中第1行为通过build.sh命令对ROP_TEST文件构建本发明的防御措施。
表4为二进制可执行文件部署本发明的防御措施后通过调整ROP脚本攻击得到的情况,其中第14行存在攻击失效。失败的具体原因在于,在装载环境下,所需的gadget因不需要而未被装载至内存中或通过顺序调度装载使得gadget的位置信息发生变化,使得攻击失效。
以上,通过实验表明,验证了基于运行时顺序调度装载的代码复用攻击防御方案可行性。
表2通过攻击无防御措施的ROP_TEST文件
Figure GDA0004067538530000101
表3通过本发明对ROP_TEST文件构建防护措施
Figure GDA0004067538530000111
表4通过攻击采用本发明防御措施的ROP_TEST文件
Figure GDA0004067538530000121
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (4)

1.一种基于运行时顺序调度装载的代码复用攻击防御方法,其特征在于,包括基于运行时装载函数的方法和基于先来先服务调度的随机化代码方法;
基于运行时装载函数的方法是在程序运行时根据调用关系动态地装载函数至内存中,实质是将可执行文件的装载过程推迟至程序运行时,减少内存中的gadget数量;
基于运行时装载函数的方法,包括以下步骤,
S11.对二进制可执行文件进行预处理,通过静态分析获取二进制文件中可装载段的地址、偏移信息以及代码段内的函数地址和大小信息;
S12.对获取到的信息进行处理,将处理信息保存至副本中;
S13.对内存区域和函数修补表进行初始化;在物理内存空间开辟一段存储可装载段函数信息的内存空间,将副本信息装载至该区域,该区域称之为备用区域;将原本装载至进程虚拟映像的代码段区域初始化置0xCC,使之整个区域变成int3中断区,该区域称为运行区域;同时创建数据结构函数修补表,该表存储着所有的函数信息,等函数被调用以及分配地址后,会更新所调用的函数信息;
步骤S13中初始化之后,正式使用装载的函数信息,此时进入程序运行状态;为了避免多次执行execve()函数的多次调用,采用fork机制,其中子进程与父进程共享内存空间,利用copy-on-write的特性,在进程空间的各段的内容要发生变化时,将父进程的内容复制一份给子进程;
S14.通过父进程创建子进程,实现函数装载和运行;父进程通过fork()函数创建子进程;子进程继承父进程的堆栈信息,之后跳转_start()函数开始程序运行;父进程负责装载函数和监控子进程的状态信息,当子进程需要调用进程虚拟映像的执行区域函数时,产生int3中断,发出SIGTRAP信号,父进程捕获到SIGTRAP信号,将备用区域中所调用的函数装载至运行区域;
父进程采用wait()函数来监控子进程的状态信息,依据子进程返回的不同状态信息,进行相应的处理:当捕获到SIGTRAP时,进行装载;捕获其他状态时,打印堆栈信息,提示错误信息,两个进程开始退出;
当子进程需要调用进程虚拟映像的执行区域函数时,产生int3中断,监控模块开始监控,首先初始化函数队列,此队列记录装载的函数信息;创建装载函数时间限值ALIVE_MAX,即ALIVE_MAX为限制装载函数时间的最大限值;父进程一直等待并捕获子进程的状态信息,若子进程异常退出,那么父进程结束;若父进程捕获子进程的状态为SIGTRAP时,说明子进程产生中断,此时父进程获取子进程rip和rsp寄存器信息,通过获取的寄存器信息将备用区域中所调用的函数装载至运行区域;若父进程捕获不到,此刻发生错误,则子父两个进程退出;
基于先来先服务调度的随机化代码方法是函数在装载的过程时按照先来先服务的调度分配函数地址,使之实现函数地址代码随机化,具体为:
每次函数调度时都将先调用的函数先分配地址,下一个需调用的函数分配至上一个调用函数的偏移处,同时更改函数修补表中该函数的地址和调用信息,之后程序执行该函数;若该函数已调用,说明该函数已装载至运行区域中,查询函数修补表中该函数地址,执行该函数。
2.根据权利要求1所述的一种基于运行时顺序调度装载的代码复用攻击防御方法,其特征在于,搭建运行时装载系统,包括解析模块、函数修补表、装载模块、分配模块和监控模块;
解析模块:通过IDA python工具获取代码段各函数信息,在此基础上进行静态分析;使用ROPgadget工具获取二进制可执行文件中所有gadget,并记录函数中的gadget数量;
装载模块:父进程通过fork()函数创建子进程,父进程负责装载函数和监控子进程的状态信息,当子进程需要调用虚拟内存中的函数时,此时产生int3中断,发出SIGTRAP信号,父进程捕获到SIGTRAP信号,将子进程调用的函数装载至虚拟内存中;
分配模块:实现函数顺序调度装载;
创建函数修补表,此表存储所有的函数信息;
监控模块:父进程采用wait()函数来监控子进程的状态信息,依据子进程返回的不同状态信息,进行相应的处理。
3.根据权利要求1所述的一种基于运行时顺序调度装载的代码复用攻击防御方法,其特征在于,
在步骤S13中,通过副本信息中代码段的起始地址和终止地址计算出代码段的大小信息,之后定义物理内存中一个偏移基址,通过对代码段起始和终止的偏移计算出装载至该区域的地址,通过mmap()函数将副本中代码段函数信息映射至备用区域,完成备用装载;通过mprotect()函数将备用区域的权限设置为只可读;同时通过mprotect()函数将运行区域的权限设置为可读和可执行,防止攻击者对该区域进行恶意修改并执行。
4.根据权利要求1所述的一种基于运行时顺序调度装载的代码复用攻击防御方法,其特征在于,基于先来先服务调度的随机化代码方法步骤如下,
S21.判断调用函数时是否产生中断;否,系统产生错误,则父进程退出;是,进行S22;
S22.查询函数修补表中该函数是否调用;是,跳转并执行该函数,否,执行S23;
S23.按照顺序调度装载实现部分随机化;
S24.修改函数修补表中该函数信息,跳转并执行该函数。
CN202211609172.XA 2022-12-15 2022-12-15 一种基于运行时顺序调度装载的代码复用攻击防御方法 Active CN115659322B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211609172.XA CN115659322B (zh) 2022-12-15 2022-12-15 一种基于运行时顺序调度装载的代码复用攻击防御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211609172.XA CN115659322B (zh) 2022-12-15 2022-12-15 一种基于运行时顺序调度装载的代码复用攻击防御方法

Publications (2)

Publication Number Publication Date
CN115659322A CN115659322A (zh) 2023-01-31
CN115659322B true CN115659322B (zh) 2023-03-10

Family

ID=85022916

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211609172.XA Active CN115659322B (zh) 2022-12-15 2022-12-15 一种基于运行时顺序调度装载的代码复用攻击防御方法

Country Status (1)

Country Link
CN (1) CN115659322B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116401668B (zh) * 2023-06-08 2023-08-15 中国海洋大学 基于函数分组动态激活的代码重用攻击防御系统及方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101944167A (zh) * 2010-09-29 2011-01-12 中国科学院计算技术研究所 识别恶意程序的方法及系统
CN108090346A (zh) * 2017-12-04 2018-05-29 华中科技大学 一种基于数据流监控的代码复用攻击防御方法及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10628589B2 (en) * 2016-01-22 2020-04-21 The University Of North Carolina At Chapel Hill Methods, systems, and computer readable media for preventing code reuse attacks
CN114385189B (zh) * 2022-03-23 2022-06-21 东南大学 一种面向深度嵌入式系统的函数地址空间布局随机化方法
CN114756856B (zh) * 2022-06-15 2022-08-23 中国海洋大学 一种基于函数动态载入的代码重用攻击防御方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101944167A (zh) * 2010-09-29 2011-01-12 中国科学院计算技术研究所 识别恶意程序的方法及系统
CN108090346A (zh) * 2017-12-04 2018-05-29 华中科技大学 一种基于数据流监控的代码复用攻击防御方法及系统

Also Published As

Publication number Publication date
CN115659322A (zh) 2023-01-31

Similar Documents

Publication Publication Date Title
US9703957B2 (en) Atomic detection and repair of kernel memory
CN102592082B (zh) 通过操作码随机化的安全
US11221838B2 (en) Hot update method, operating system, terminal device, system, and computer-readable storage medium for a system process
US7546430B1 (en) Method of address space layout randomization for windows operating systems
US20140020092A1 (en) Mitigation of function pointer overwrite attacks
US8234476B2 (en) Information processing apparatus and method of updating stack pointer
KR20060130200A (ko) 런타임 안전 보장을 위한 자율 메모리 체커 및 이의 방법
CA2517442A1 (en) Customized execution environment and operating system capable of supporting same
CN115659322B (zh) 一种基于运行时顺序调度装载的代码复用攻击防御方法
CN114385189B (zh) 一种面向深度嵌入式系统的函数地址空间布局随机化方法
CN113886835A (zh) 容器逃逸的防护方法、装置、计算机设备和存储介质
CN113051034A (zh) 一种基于kprobes的容器访问控制方法与系统
US10108798B1 (en) Methods and systems for defending against cyber-attacks
US20130117808A1 (en) Apparatus and method for enhancing security in heterogeneous computing environment
US11853412B2 (en) Systems and methods for defeating stack-based cyber attacks by randomizing stack frame size
CN115509691A (zh) 一种虚拟机内部栈溢出识别方法及系统
CN113821790A (zh) 基于Trustzone的工业可信计算双体系架构实现方法
CN112955887A (zh) 面向返回的编程防护
WO2020012474A1 (en) Return-oriented programming attack protection system and method
US11340915B2 (en) Encaching and sharing transformed libraries
US20230090251A1 (en) System for application protection and non-transitory machine-readable medium for storing program code that provides application protection when executed
CN118036092A (zh) 一种基于硬件辅助虚拟化的软件完整性保护方法与系统
CN115017510A (zh) 一种容器内部应用软件漏洞无感缓解装置及其缓解方法
CN116842524A (zh) 一种应用安全实时热补丁方法及装置
US20190197235A1 (en) Server and setting method thereof

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