CN116401668A - 基于函数分组动态激活的代码重用攻击防御系统及方法 - Google Patents

基于函数分组动态激活的代码重用攻击防御系统及方法 Download PDF

Info

Publication number
CN116401668A
CN116401668A CN202310671906.5A CN202310671906A CN116401668A CN 116401668 A CN116401668 A CN 116401668A CN 202310671906 A CN202310671906 A CN 202310671906A CN 116401668 A CN116401668 A CN 116401668A
Authority
CN
China
Prior art keywords
function
library
program
module
grouping
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.)
Granted
Application number
CN202310671906.5A
Other languages
English (en)
Other versions
CN116401668B (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 CN202310671906.5A priority Critical patent/CN116401668B/zh
Publication of CN116401668A publication Critical patent/CN116401668A/zh
Application granted granted Critical
Publication of CN116401668B publication Critical patent/CN116401668B/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/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/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Storage Device Security (AREA)

Abstract

本发明涉及信息安全领域,公开了一种基于函数分组动态激活的代码重用攻击防御系统及方法,系统包括预处理模块、预测器模块、影子库构建模块、修正模块、权限控制器模块和监控器模块。本发明的方法首先基于原库重构形成影子库,然后在程序运行过程中基于局部控制流进行函数分组动态激活,同时基于小工具计分进行函数分组冻结。函数分组动态激活和冻结的过程实质上就是聚焦于控制程序运行时内存中的小工具,通过对内存页面权限的控制减少攻击者可用的小工具,实现在内存位置信息泄漏的情况下保证这些函数不能被攻击者利用,使攻击失效,达到防御代码重用攻击的效果,并且大大减小开销。

Description

基于函数分组动态激活的代码重用攻击防御系统及方法
技术领域
本发明涉及信息安全领域,特别涉及一种基于函数分组动态激活的代码重用攻击防御系统及方法。
背景技术
计算机软件作为计算机系统的智能载体,常常成为攻击者入侵计算机系统的主要途径。随着数据执行防护等机制的部署,早期严重威胁计算机安全的代码注入攻击已经被阻止,攻击者逐渐针对缓冲区溢出漏洞进行代码重用攻击。具体来说,攻击者利用程序中已存在的小工具(也称为“gadget”)来构建恶意代码进行非法操作,如执行系统命令、窃取敏感信息等。随着共享库被越来越多的不同应用程序使用,它们的复杂性和规模不断增加,积累了大量的新函数,同时保留了旧的、可能未使用的函数。当应用程序加载共享库时,所有这些函数都包含在应用程序的所有进程中,即使程序实际上只调用了一个函数。攻击者利用装载进入内存的合法代码,提取可以利用的指令片段来达成恶意攻击的目标。
针对利用缓冲溢出漏洞进行的代码重用攻击方式,目前存在的防御方案分为三种类型:控制流完整性、代码随机化、去膨胀技术。控制流完整性(CFI)通过确保控制流传输的目标地址合法来缓解代码重用攻击。CFI的有效性取决于两方面:控制流图(CFG)的精度和运行时检查的精度。如果CFG过于宽松,则可能会利用非法控制转移来规避CFI机制。另一方面,不完整的检测也降低了单个运行时检查的精度,并为攻击者提供了发起面向返回式编程(ROP)攻击的机会。
基于代码随机化的防御方法的出发点在于降低攻击者对内存信息的知悉情况,使得代码重用攻击这类严重依赖内存布局的攻击方法失效。但代码随机化频率过高会造成较大性能开销,过低则会给攻击者留下攻击成功的机会;同时代码随机化过程中转移指令的跟踪和处理也需要较大性能开销。软件去膨胀技术通过减小攻击面来提高攻击者的攻击门槛,但却没有聚焦于高质量gadget的消除和内存中gadget的控制,这样导致在内存中剩余的gadget仍然足够被攻击者利用进行ROP攻击。总之,现有的防御技术存在安全性和开销失衡的问题。
为此,需要一种方法,以实现基于函数分组动态激活的代码重用攻击防御。
发明内容
为解决上述技术问题,本发明提供了一种基于函数分组动态激活的代码重用攻击防御系统及方法,以达到大大降低攻击者利用缓冲区溢出漏洞进行代码重用攻击概率的目的。
为达到上述目的,本发明的技术方案如下:
一种基于函数分组动态激活的代码重用攻击防御系统,包括预处理模块、预测器模块、影子库构建模块、修正模块、权限控制器模块和监控器模块;
所述预处理模块以程序的二进制文件为输入,输出一个关键信息文本,该模块的功能是静态分析要运行的二进制文件,得到构建影子库所需要的信息以及函数包含的小工具信息;
所述预测器模块以关键信息文本为输入,输出一个危险系数表;该模块对函数进行危险系数评估,完成对函数包含的小工具危险程度的判定,将函数名以及函数包含的小工具危险系数一一对应保存在危险系数表中;
所述影子库构建模块用于构建影子库,申请内存空间,把函数分组放置在新的内存页面上,为动态激活函数分组奠定基础;
所述修正模块用于修正函数在全局偏移表中的地址,确保程序跳转到外部函数时可以访问到正确的地址;
所述权限控制器模块的功能是根据外部信号修改内存页面权限,使用mprotect函数,将内存页面权限设置为只读或可读可执行;
所述监控器模块用于监控危险系数总值,即内存中可执行的小工具危险系数的总和,在危险系数总值达到危险阈值时向权限控制器模块发送信号。
一种基于函数分组动态激活的代码重用攻击防御方法,采用上述的一种基于函数分组动态激活的代码重用攻击防御系统,包括如下步骤:
步骤一,程序运行前构建影子库;
程序运行前,首先预处理模块以程序的二进制文件为输入,输出一个关键信息文本;然后预测器模块以关键信息文本为输入,输出一个危险系数表;之后依据前面得到的信息进行影子库的构建;最后进入修正模块,保证程序调用库函数时能够跳转至影子库中对应函数的位置进行执行;
步骤二,程序运行时激活函数分组以及程序运行时冻结函数分组;
程序进入运行阶段,当程序运行至调用库函数时,查找全局偏移表得到函数地址,跳转至影子库所在的内存区域;由于影子库初始化为只读权限,在调用运行时会出现报错,权限控制器模块捕获到这个信号后,对指令的目标地址进行校验,判断跳转地址是否合法,若地址非法,那么程序退出并输出警告信息,若地址合法,权限控制器模块将函数所在页面的属性置为可读可执行,让该页面处于可执行状态,使程序正常运行;至此完成函数分组动态激活过程;
在激活过程中,监控器模块一直监控危险系数总值,也就是累计开启的内存页面所包含的小工具危险系数得到的一个数值,当它达到危险阈值时,发出信号让权限控制器模块关闭部分已开启的页面,即恢复内存页面的只读权限,完成函数分组的冻结过程。
上述方案中,步骤一中,通过预处理模块对程序调用的动态链接库中的函数进行明确的界定,确定能够标记函数位置的关键信息;使用列出动态库依赖关系工具列出程序的动态依赖关系,而后使用Objdump工具对列出动态库依赖关系工具列出的动态依次进行反汇编,获取包括函数入口偏移、函数名称、函数长度信息,将这些内容作为文本保存起来,然后使用Python语言将这些文本信息进行处理,对应解析符号表的结果筛选出程序运行所需要的库函数信息和函数边界,为影子库的构建奠定基础;此外使用IDA Pro工具对程序进行静态分析,根据静态分析得到的控制流图,通过计算得到指令跳转的合法地址集合。
上述方案中,步骤一中,所述危险系数表用来保存函数名以及函数包含的小工具危险系数。
上述方案中,步骤一中,影子库的构建包括如下步骤:
①根据既定的分组规则,对库函数进行分组;
②计算函数分组后所需的内存大小,并在计算机中申请一块同样大的内存,并且计算挪动函数位置以后产生的偏移量;
③将原库的.text段中的函数按照分组,复制到内存页面上;
④修正函数指令中的地址;
⑤将原库的.text段中的内容清空;
⑥修正原库中的函数入口。
进一步的技术方案中,所述分组规则具体是:根据函数所包含小工具危险系数以及函数被调用次数对函数进行分组,规定每个分组的危险系数最大值,并且将调用频繁的函数单独放置在另外的分组中,避免频繁的激活和冻结页面带来开销。
上述方案中,步骤一中,通过修正模块,在过程链接表中查找库函数在全局偏移表中所对应的条目,然后对全局偏移表中的函数地址进行修改,使程序在调用外部函数时,通过被修改后的全局偏移表正确访问到影子库中的函数,完成替换原库的目的。
上述方案中,步骤二中,激活函数分组是依靠粗粒度的控制流完整性校验完成的,校验跳转地址是否合法。
上述方案中,步骤二中,权限控制器模块关闭页面的原则包括随机关闭、按照顺序关闭、设定参数进行关闭。
通过上述技术方案,本发明提供的基于函数分组动态激活的代码重用攻击防御系统及方法具有如下有益效果:
1)本发明在去膨胀技术及控制流完整性的基础上,解决这两类方案目前存在的问题,提出一种基于函数分组动态激活的代码重用攻击防御方案,在程序运行时将内存中可执行的gadget数量减少,质量降低,以抵御代码重用攻击;
2)本发明的动态链接库函数在程序运行时初始化为不同的分组且不具有可执行权限,可以实现在内存位置信息泄漏的情况下保证这些函数不被攻击者利用,使攻击失效;
3)相较于其他技术,本发明在不丧失安全性的前提下采用粗粒度的CFI校验,用权限控制代替内存读写,大大减小开销。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例所公开的一种基于函数分组动态激活的代码重用攻击防御系统示意图。
图2为本发明实施例所公开的一种基于函数分组动态激活的代码重用攻击防御方法流程示意图。
图3为本发明实施的程序运行时函数分组动态激活和冻结页面的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
根据代码重用攻击的特点,本发明提出了一种基于函数分组动态激活的代码重用攻击防御系统及方法,该系统及方法能够大大减少内存中可执行的gadget数量,大大降低内存中可执行的gadget质量,阻碍攻击者构建gadget链进行代码重用攻击。本发明的设计思路适用于现代计算机系统,但由于各个系统平台的差异,具体实现机理可能存在不同。同时,静态链接和动态链接的可执行文件由于链接文件不同,具体实现也会有所不同。本发明针对Linux操作系统下的动态链接文件进行了防护,并对其进行了详细阐述。
本发明提供了一种基于函数分组动态激活的代码重用攻击防御系统,如图1所示,包括预处理模块、预测器模块、影子库构建模块、修正模块、权限控制器模块和监控器模块。
预处理模块以程序的二进制文件为输入,输出一个关键信息文本,该模块的功能是静态分析要运行的二进制文件,得到构建影子库所需要的信息以及函数包含的gadget信息。
预测器模块以关键信息文本为输入,输出一个危险系数表;该模块对函数进行危险系数评估,完成对函数gadget危险程度的判定,将函数名以及函数包含的gadget危险系数一一对应保存在危险系数表中;
影子库构建模块用于构建影子库,申请内存空间,把函数分组放置在新的内存页面上,为动态激活函数分组奠定基础。影子库内存中阴影部分为具有可读可执行权限的内存区域,空白部分为具有只读权限的内存区域,内存页面的权限是由权限控制器动态修改的。
修正模块用于修正函数在全局偏移表中的地址,确保程序跳转到外部函数时可以访问到正确的地址。
权限控制器模块的功能是根据外部信号修改内存页面权限,使用mprotect函数,设置内存页面的权限为只读(RO)或设置内存页面的权限为可读可执行(RX)。这里的外部信号包括两类信号,一类是程序运行过程中调用库函数所发出的信号,比如程序在运行至call指令、jump指令时跳转至库函数所在的内存页面,但内存页面并不是可执行的,此时权限控制器会捕捉到一个执行错误的信号;另一类是监控器在程序运行过程中监控内存中的危险系数总值,当危险系数总值达到危险阈值时,监控器向权限控制器发出的危险信号。
监控器模块用于监控危险系数总值,即内存中可执行的小工具危险系数的总和,在这个总值达到危险阈值时向权限控制器模块发送信号。
本发明公开了一种基于函数分组动态激活的代码重用攻击防御方法,采用如上的一种基于函数分组动态激活的代码重用攻击防御系统,首先进行二进制文件预处理,通过预处理模块对程序调用的动态链接库中的函数进行明确的界定,处理这些库信息以及函数信息计算得到函数真正的地址,保存到相应的数据结构中。然后借助预测器模块,对函数进行危险系数评估,对应刚刚得到的函数地址评估程序调用的库函数中包含的gadget的危险系数,将这些评估结果都保存到相应的数据结构中。之后影子库构建模块按照预处理的结果,对动态链接库的.text段进行复制重写,修正代码段指令的偏移,形成影子库。修正模块修正函数在全局偏移表中的地址,对程序的符号表和动态链接符号表中的函数地址进行修改,以保证程序在运行时能够正确的跳转。
然后开始运行程序,当程序运行至调用动态链接库时,如果包含跳转函数的页面权限是RX,那么程序继续运行;否则权限控制器模块首先进行控制流完整性校验,即判断跳转地址是否为合法地址,若为非法地址则报错退出程序,若为合法地址,监控器模块监控危险系数总值,及时对内存中的gadget危险总值进行更新,当危险总值达到危险阈值时,权限控制器模块先关闭部分已开启页面,即设置内存页面的权限为只读,再将申请权限的页面激活,即设置内存页面权限为可读可执行。总体来说,本方案的实质是在程序调用库函数时再进行权限开启,动态调控库函数的可执行权限,阻碍攻击者利用库函数进行ROP攻击。
如图2所示,具体包括如下步骤:
步骤一,程序运行前构建影子库;
(1)程序运行前,首先进行二进制文件预处理,使用预处理模块,以程序的二进制文件为输入,输出一个关键信息文本;
通过该模块对程序调用的动态链接库中的函数进行明确的界定,确定函数在动态链接库中的起始偏移地址、函数大小等能够标记函数位置的关键信息。使用Ldd(ListDynamic Dependencies,列出动态库依赖关系)工具列出程序的动态依赖关系,而后使用Objdump这款反汇编目标二进制文件的工具对Ldd工具列出的动态可以依次进行反汇编,获取包括函数入口偏移、函数名称、函数长度等信息,将这些内容作为文本保存起来,然后使用Python语言将这些文本信息进行处理,对应解析符号表的结果筛选出程序运行所需要的库函数信息和函数边界,为影子库的构建奠定基础。此外使用IDA Pro工具对程序进行静态分析,根据静态分析得到的控制流图(CFG),通过计算得到指令跳转的合法地址集合。
(2)然后预测器对函数进行危险系数评估,预测器模块以关键信息文本为输入,输出一个危险系数表;这个表用来保存函数名以及函数包含的gadget危险系数。具体来说该模块主要是依据对gadget进行分类,按照指令和寄存器类型对gadget的危害程度进行评估,以函数为单位,对函数的危险系数进行统计。参照论文(Analyzing the GadgetsTowards a Metric to Measure Gadget Quality)将指令分为12类,包括移动数据、算术、逻辑、控制流、移动或循环、设置标记位、字符串、浮点数、多媒体拓展指令、NOP、RET以及其它指令。寄存器分为RSP、rd以及其它寄存器三类。按照表1所示的计分规则对gadget进行危险系数评估,并累计得到函数的gadget危险系数。
表1 计分规则
Figure SMS_1
(3)之后依据前面得到的信息构建影子库;影子库构建模块输入上述的分析文本,输出一个可以替代原库的影子库。
影子库的构建包括如下步骤:
①根据既定的分组规则,对库函数进行分组;
②计算函数分组后所需的内存大小,并在计算机中申请一块同样大的内存,并且计算挪动函数位置以后产生的偏移量;
③将原库的.text段中的函数按照分组,复制到内存页面上;
④修正函数指令中的地址;
⑤将原库的.text段中的内容清空;
⑥修正原库中的函数入口。
其中提到的分组规则具体是:根据函数所包含gadget的危险系数以及函数被调用次数对函数进行分组,规定每个分组的危险系数最大值,并且将调用频繁的函数单独放置在另外的分组中,避免频繁的激活和冻结页面带来开销。
(4)完成上述的影子库构建工作以后,进入修正模块,这个模块的作用是修正函数在全局偏移表中的地址以保证程序调用库函数时能够跳转至影子库中对应函数的位置进行执行。通过修正模块,在PLT表(过程链接表)中查找库函数在GOT表中所对应的条目,然后对GOT表中的函数地址进行修改,使程序在调用外部函数时,通过被修改后的GOT表正确访问到影子库中的函数,完成替换原库的目的。
至此,程序运行前的工作全部完成。
步骤二,程序运行时激活函数分组以及程序运行时冻结函数分组;
程序进入运行阶段,本发明提供权限控制器模块和监控器模块,这两个模块共同管控内存空间完成对影子库中函数分组的激活过程和冻结过程。激活函数分组是依靠粗粒度的CFI校验完成的。如图3所示,当程序运行至调用库函数时(比如执行到call指令等跳转至库函数的指令),查找GOT表得到函数地址,跳转至影子库所在的内存区域。首先判断库函数所在内存页面是否为可读可执行权限。由于影子库权限初始化为RO,在调用运行时会出现报错,权限控制器模块捕获外部信号后,对指令的目标地址进行校验,判断跳转地址是否合法,若地址非法,那么程序退出并输出警告信息,若地址合法,权限控制器模块将函数所在内存页面的权限设置为RX,让该页面处于可执行状态,执行库函数,库函数执行后回到RET指令,程序继续运行重复此过程直到程序结束;至此完成函数分组动态激活过程。
在激活过程中,监控器模块一直监控危险系数总值,也就是累计开启的内存页面所包含的gadget危险系数得到的一个数值。监控器模块判断危险系数总值是否达到危险阈值,若达到,即监控器检测到危险,就发出信号让权限控制器模块关闭部分已开启的页面,即设置内存页面的权限为RO,完成函数分组的冻结过程。其中权限控制器模块关闭页面的原则可以有多种选择,包括随机关闭、按照顺序关闭、设定参数进行关闭等等办法。总之,监控器模块主要完成监控内存中可执行gadget的危险程度的功能,权限控制器模块是程序运行时的重要角色,完成整个方案最重要的部分,即动态激活和冻结函数分组。
对此,本发明在程序正常运行的前提下保护代码免受代码重用攻击的危害,在执行库函数之前进行干预,保护库中的函数不被攻击者利用从而保护程序以及计算机的安全。
本发明旨在平衡安全性和开销,首先通过构建影子库,提出一种新的粒度,即函数分组,通过分页的形式控制分组。其次,通过预处理模块对函数所包含的gadget进行危险性分析,借助权限控制器模块使用mprotect函数对页面进行权限控制,与已有方法相比,优势在于对权限控制的速率明显快于读写的速率。最后监控器模块不断指导权限控制器模块进行页面权限的关闭,在这个过程中,内存中可执行的gadget始终处于低数量和低质量状态,而且可以通过调整危险性参数来平衡安全性和开销问题。在整个防御模型中,本发明不仅实现了共享库的去膨胀工作,以粗粒度CFI进行校验地址是否合法,同时用权限控制的方法对内存中的高质量gadget进行监控,控制内存中可执行gadget的数量,让攻击者无gadget链可用,从而大大降低攻击者利用缓冲区溢出漏洞进行代码重用攻击的概率。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (9)

1.一种基于函数分组动态激活的代码重用攻击防御系统,其特征在于,包括预处理模块、预测器模块、影子库构建模块、修正模块、权限控制器模块和监控器模块;
所述预处理模块以程序的二进制文件为输入,输出一个关键信息文本,该模块的功能是静态分析要运行的二进制文件,得到构建影子库所需要的信息以及函数包含的小工具信息;
所述预测器模块以关键信息文本为输入,输出一个危险系数表;该模块对函数进行危险系数评估,完成对函数包含的小工具危险程度的判定,将函数名以及函数包含的小工具危险系数一一对应保存在危险系数表中;
所述影子库构建模块用于构建影子库,申请内存空间,把函数分组放置在新的内存页面上,为动态激活函数分组奠定基础;
所述修正模块用于修正函数在全局偏移表中的地址,确保程序跳转到外部函数时可以访问到正确的地址;
所述权限控制器模块的功能是根据外部信号修改内存页面权限,使用mprotect函数,将内存页面权限设置为只读或可读可执行;
所述监控器模块用于监控危险系数总值,即内存中可执行的小工具危险系数的总和,在危险系数总值达到危险阈值时向权限控制器模块发送信号。
2.一种基于函数分组动态激活的代码重用攻击防御方法,采用权利要求1所述的一种基于函数分组动态激活的代码重用攻击防御系统,其特征在于,包括如下步骤:
步骤一,程序运行前构建影子库;
程序运行前,首先预处理模块以程序的二进制文件为输入,输出一个关键信息文本;然后预测器模块以关键信息文本为输入,输出一个危险系数表;之后依据前面得到的信息进行影子库的构建;最后进入修正模块,保证程序调用库函数时能够跳转至影子库中对应函数的位置进行执行;
步骤二,程序运行时激活函数分组以及程序运行时冻结函数分组;
程序进入运行阶段,当程序运行至调用库函数时,查找全局偏移表得到函数地址,跳转至影子库所在的内存区域;由于影子库初始化为只读权限,在调用运行时会出现报错,权限控制器模块捕获到这个信号后,对指令的目标地址进行校验,判断跳转地址是否合法,若地址非法,那么程序退出并输出警告信息,若地址合法,权限控制器模块将函数所在内存页面的权限置为可读可执行,让该页面处于可执行状态,使程序正常运行;至此完成函数分组动态激活过程;
在激活过程中,监控器模块一直监控危险系数总值,也就是累计开启的内存页面所包含的小工具危险系数得到的一个数值,当它达到危险阈值时,发出信号让权限控制器模块关闭部分已开启的页面,即恢复内存页面的只读权限,完成函数分组的冻结过程。
3.根据权利要求2所述的基于函数分组动态激活的代码重用攻击防御方法,其特征在于,步骤一中,通过预处理模块对程序调用的动态链接库中的函数进行明确的界定,确定能够标记函数位置的关键信息;使用列出动态库依赖关系工具列出程序的动态依赖关系,而后使用Objdump工具对列出动态库依赖关系工具列出的动态依次进行反汇编,获取包括函数入口偏移、函数名称、函数长度信息,将这些内容作为文本保存起来,然后使用Python语言将这些文本信息进行处理,对应解析符号表的结果筛选出程序运行所需要的库函数信息和函数边界,为影子库的构建奠定基础;此外使用IDA Pro工具对程序进行静态分析,根据静态分析得到的控制流图,通过计算得到指令跳转的合法地址集合。
4.根据权利要求2所述的基于函数分组动态激活的代码重用攻击防御方法,其特征在于,步骤一中,所述危险系数表用来保存函数名以及函数包含的小工具危险系数。
5.根据权利要求2所述的基于函数分组动态激活的代码重用攻击防御方法,其特征在于,步骤一中,影子库的构建包括如下步骤:
①根据既定的分组规则,对库函数进行分组;
②计算函数分组后所需的内存大小,并在计算机中申请一块同样大的内存,并且计算挪动函数位置以后产生的偏移量;
③将原库的.text段中的函数按照分组,复制到内存页面上;
④修正函数指令中的地址;
⑤将原库的.text段中的内容清空;
⑥修正原库中的函数入口。
6.根据权利要求5所述的基于函数分组动态激活的代码重用攻击防御方法,其特征在于,所述分组规则具体是:根据函数所包含小工具危险系数以及函数被调用次数对函数进行分组,规定每个分组的危险系数最大值,并且将调用频繁的函数单独放置在另外的分组中,避免频繁的激活和冻结页面带来开销。
7.根据权利要求2所述的基于函数分组动态激活的代码重用攻击防御方法,其特征在于,步骤一中,通过修正模块,在过程链接表中查找库函数在全局偏移表中所对应的条目,然后对全局偏移表中的函数地址进行修改,使程序在调用外部函数时,通过被修改后的全局偏移表正确访问到影子库中的函数,完成替换原库的目的。
8.根据权利要求2所述的基于函数分组动态激活的代码重用攻击防御方法,其特征在于,步骤二中,激活函数分组是依靠粗粒度的控制流完整性校验完成的,校验跳转地址是否合法。
9.根据权利要求2所述的基于函数分组动态激活的代码重用攻击防御方法,其特征在于,步骤二中,权限控制器模块关闭页面的原则包括随机关闭、按照顺序关闭、设定参数进行关闭。
CN202310671906.5A 2023-06-08 2023-06-08 基于函数分组动态激活的代码重用攻击防御系统及方法 Active CN116401668B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310671906.5A CN116401668B (zh) 2023-06-08 2023-06-08 基于函数分组动态激活的代码重用攻击防御系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310671906.5A CN116401668B (zh) 2023-06-08 2023-06-08 基于函数分组动态激活的代码重用攻击防御系统及方法

Publications (2)

Publication Number Publication Date
CN116401668A true CN116401668A (zh) 2023-07-07
CN116401668B CN116401668B (zh) 2023-08-15

Family

ID=87012771

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310671906.5A Active CN116401668B (zh) 2023-06-08 2023-06-08 基于函数分组动态激活的代码重用攻击防御系统及方法

Country Status (1)

Country Link
CN (1) CN116401668B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105184169A (zh) * 2015-09-14 2015-12-23 电子科技大学 Windows操作环境下基于插桩工具的漏洞检测方法
US20180247069A1 (en) * 2015-08-18 2018-08-30 The Trustees of Columbia University in the City of New Yoirk Inhibiting memory disclosure attacks using destructive code reads
CN109558726A (zh) * 2018-09-29 2019-04-02 四川大学 一种基于动态分析的控制流劫持攻击检测技术与系统
CN113497809A (zh) * 2021-09-07 2021-10-12 中国人民解放军国防科技大学 基于控制流和数据流分析的mips架构漏洞挖掘方法
CN114385189A (zh) * 2022-03-23 2022-04-22 东南大学 一种面向深度嵌入式系统的函数地址空间布局随机化方法
CN114756856A (zh) * 2022-06-15 2022-07-15 中国海洋大学 一种基于函数动态载入的代码重用攻击防御方法
CN115659322A (zh) * 2022-12-15 2023-01-31 中国海洋大学 一种基于运行时顺序调度装载的代码复用攻击防御方案

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180247069A1 (en) * 2015-08-18 2018-08-30 The Trustees of Columbia University in the City of New Yoirk Inhibiting memory disclosure attacks using destructive code reads
CN105184169A (zh) * 2015-09-14 2015-12-23 电子科技大学 Windows操作环境下基于插桩工具的漏洞检测方法
CN109558726A (zh) * 2018-09-29 2019-04-02 四川大学 一种基于动态分析的控制流劫持攻击检测技术与系统
CN113497809A (zh) * 2021-09-07 2021-10-12 中国人民解放军国防科技大学 基于控制流和数据流分析的mips架构漏洞挖掘方法
CN114385189A (zh) * 2022-03-23 2022-04-22 东南大学 一种面向深度嵌入式系统的函数地址空间布局随机化方法
CN114756856A (zh) * 2022-06-15 2022-07-15 中国海洋大学 一种基于函数动态载入的代码重用攻击防御方法
CN115659322A (zh) * 2022-12-15 2023-01-31 中国海洋大学 一种基于运行时顺序调度装载的代码复用攻击防御方案

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
HAIPENG QU: "Loadlord:loading on the fly to defend against code-reuse attacks", 《ARXIV》 *
杨超等: "基于可执行内存不可读属性的防代码重用技术", 《万方数据》 *
袁平海;曾庆凯;张云剑;刘尧;: "攻击网页浏览器:面向脚本代码块的ROP Gadget注入", 软件学报, no. 02 *

Also Published As

Publication number Publication date
CN116401668B (zh) 2023-08-15

Similar Documents

Publication Publication Date Title
EP3207485B1 (en) Code pointer authentication for hardware flow control
US7603704B2 (en) Secure execution of a computer program using a code cache
KR100942795B1 (ko) 악성프로그램 탐지장치 및 그 방법
US7886148B2 (en) Secure execution of a computer program
US8117660B2 (en) Secure control flows by monitoring control transfers
US20080133858A1 (en) Secure Bit
CN105260659A (zh) 一种基于qemu的内核级代码重用型攻击检测方法
CN107330323B (zh) 一种基于Pin工具的ROP及其变种攻击的动态检测方法
US20200143043A1 (en) Edge verification and elimination control flow integrity
WO2020074854A1 (en) Verifying stack pointer
US8239940B2 (en) Functional patching/hooking detection and prevention
CN110647748B (zh) 一种基于硬件特性的代码复用攻击检测系统及方法
CN116401668B (zh) 基于函数分组动态激活的代码重用攻击防御系统及方法
US10579457B1 (en) Processor for achieving flow integrity and a method of providing notice of a fault in control flow
Sadeghi et al. Tiny jump-oriented programming attack (a class of code reuse attacks)
CN107203716B (zh) 一种Linux内核轻量级结构化保护方法及装置
US20240095360A1 (en) Risc-v and o-cfi mechanism-based defense method and apparatus for code reuse attacks
WO2022193629A1 (zh) 软件的保护方法、装置、电子设备及存储介质
WO2020012474A1 (en) Return-oriented programming attack protection system and method
Wang et al. IRePf: An Instruction Reorganization Virtual Platform for Kernel Stack Overflow Detection
Huang et al. Fast Out-of-Band Data Integrity Monitor to Mitigate Memory Corruption Attacks
AU2022424009A1 (en) Memory hybrid-dynamic vulnerability assessment
Xuewei et al. An Approach of Code Pointer Hiding Based on a Resilient Area
Cai et al. SigGuard: Hardening Vulnerable Signal Handling in Commodity Operating Systems
Karwayun et al. War of Control Hijacking: Attacks and Defenses

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