CN114756856B - 一种基于函数动态载入的代码重用攻击防御方法 - Google Patents

一种基于函数动态载入的代码重用攻击防御方法 Download PDF

Info

Publication number
CN114756856B
CN114756856B CN202210670527.XA CN202210670527A CN114756856B CN 114756856 B CN114756856 B CN 114756856B CN 202210670527 A CN202210670527 A CN 202210670527A CN 114756856 B CN114756856 B CN 114756856B
Authority
CN
China
Prior art keywords
function
program
address
gadget
gadgets
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
CN202210670527.XA
Other languages
English (en)
Other versions
CN114756856A (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 CN202210670527.XA priority Critical patent/CN114756856B/zh
Publication of CN114756856A publication Critical patent/CN114756856A/zh
Application granted granted Critical
Publication of CN114756856B publication Critical patent/CN114756856B/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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本发明属于软件漏洞防御领域,具体为一种基于函数动态载入的代码重用攻击防御方法,包括S1.预处理二进制可执行文件,识别函数块起始地址和大小、识别段信息、定义并识别合规地址;预处理二进制可执行文件,识别函数块起始地址和大小、识别段信息、定义并识别合规地址;以gadget的功能对其进行分类,并提取对应类型gadget指令的机器码特征,以便搜索可执行文件中的gadget;S2.引入局部控制流完整性的函数动态载入方案;S3.引入gadget语义的函数动态卸载方案。其优点在于,在程序运行时动态载入所需函数,并及时卸载部分函数来减少运行时内存空间中可用gadget的数量,避免程序中的gadget被利用。

Description

一种基于函数动态载入的代码重用攻击防御方法
技术领域
本申请属于软件漏洞防御领域,具体涉及一种基于函数动态载入的代码重用攻击防御方法。
背景技术
软件漏洞以其高威胁、难防御、普遍存在等特点,被作为一种战略资源,广泛用于攻防博弈中。其中缓冲区溢出漏洞便是其中的代表之一,一直是被攻击者利用的重灾区。具体来讲,攻击者通过缓冲区溢出漏洞获得一个指令指针的控制权,通过连接程序本身的代码片段(通常称之为gadget)后劫持控制流,改变寄存器状态达到系统调用的代码重用攻击的目的。现有的方法主要有控制流完整性(CFI)、内存布局随机化和软件去膨胀技术三种。CFI通过分析程序正常控制流,构造程序的控制流图,在程序运行中限制控制流的转移只能在原有控制流图所限定的范围内,从而保证控制流的正确转移。但CFI建立在对程序的深刻理解上,往往需要源代码或调试信息;在运行动态监测时,CFI无法完美刻画进程的控制流图(CFG),因此可能导致限制程序正常运行或允许程序执行非法操作;在运行时CFI需要比对跳转指令的目标地址,导致较大性能开销。针对获取代码片段位置信息的情况,当前有内存布局随机化(ASLR)防御机制。内存布局随机化通过在运行前或运行时改变程序的内存布局,增大攻击者找到可利用gadget的难度,降低攻击者成功的概率。但内存的随机化仅达到页一级,页内数据仍然是顺序存储的,容易被暴力破解;同时ASLR会面临内存泄漏攻击的威胁。
发明内容
基于上述问题,本申请提出了一种基于函数动态载入的代码重用攻击防御方案,在程序执行过程中对载入到内存中的函数块进行数量上的限制,并对已加载函数块进行换入换出以确保内存中只驻存部分代码,以减少内存中驻留的gadget数量。技术方案为,
一种基于函数动态载入的代码重用攻击防御方法,包括以下步骤,
S1.预处理二进制可执行文件,识别函数块起始地址和大小、识别段信息、定义并识别合规地址;以gadget的功能对其进行分类,并提取对应类型gadget指令的机器码特征,以便搜索可执行文件中的gadget;
S2.引入局部控制流完整性的函数动态载入方案;
S3.引入gadget语义的函数动态卸载方案。
优选的,步骤S1中,
S11.加载二进制可执行文件并初始化预备区域和执行区域,将入口地址设置为程序起始地址;
S12.在程序运行过程中维护预备区域和执行区域两块内存以实现函数的动态载入,预备区域包含程序运行需要的所有函数信息,执行区域是可执行文件的代码段,该区域置空,即程序在刚开始运行时,代码段是没有可用函数的,在函数运行过程中,根据运行需要从预备区域依次载入函数到执行区域执行。
优选的,步骤S2中,
局部即载入地址的局部,局部控制流完整性就是确保载入函数这个过程要符合程序正常的控制流,具体步骤为:
S21.定义了合规地址集合,合规地址是一系列的地址,包括函数的起始地址、call指令的返回地址和跳转到其他函数的目标地址,在程序的正常控制流中,只有通过新函数的调用、函数返回和跳转到新函数这三种方式的任一种才能进入或退出一个函数;
S22.在程序执行到一个尚未加载的地址时,加载器收到信号,知道这个地址处需要加载一个函数,判断该地址是否属于上述的合规地址集合,如果是,则从预备区域查找这个地址,将该地址所在的函数写入到执行区域,程序继续执行;如果不是,则说明该控制流违反了完整性,程序报错并停止运行。
优选的,步骤S3中,
S31.在动态加载程序的同时,加载器记录载入函数的数量,如果载入函数数量达到设定的程序总函数数量的阈值时,触发卸载,按照载入顺序卸载最开始载入的函数;
S32.在加载函数的过程中,gadget监视器会记录载入的gadget,并尝试构建gadget链,若现有gadget能够构建gadget链,则计算该gadget链中数量最少的gadget类型,将包含该类型gadget的函数卸载;若现有gadget不能够构建gadget链,则认为现有gadget无法执行一次代码重用攻击,程序正常运行。
有益效果
在程序运行时根据运行需要对函数进行载入,并及时卸载部分函数,有效的减少了运行时内存中的gadget数量,同时避免了现有gadget被利用,以较小的性能开销实现了代码重用攻击的防御。通过测试集SPUC CPU 2006进行实验,在性能开销方面,仅产生1.4%的时间开销,减少了程序中94.6%的gadget。
附图说明
图1为本申请流程图。
图2为本申请数据流示意图。
图3为时间开销图;以程序函数总量的1/8,1/16,1/32为载入上限,通过测试集SPUC CPU 2006进行实验,设置实验次数为100次以减小运行过程中的误差,得到本方法的运行时间开销。时间开销以程序本身的运行时间为基准,计算超出的时间。比如,测试程序正常运行时间为100秒,本方法运行该测试程序用了101秒,则时间开销为1%。
图4为时间开销对比(Travight是本方法);实验设置同图3的实验,对比方法来自于近几年CCF-A、CCF-B高水平学术期刊会论文中的方法。
图5为gadget减少数量效果对比(Travight是本方法)。以程序函数总量的1/16为载入上限,首先测得程序中原有的gadget数量,然后测得本方法在程序运行不同时刻下的gadget数量,最后求得运行过程中内存中的gadget平均值,得到gadget减少数量=1-本方法中的gadget数量/gadget总数量(%)。对比方法来自于近几年CCF-A、CCF-B高水平学术期刊会论文中的方法。如程序原有gadget共1000个,本方法在运行过程中测得程序的gadget数量平均为100个,则减少数量为900/1000=90%,减少了程序中90%的gadget。
图6为gadget链构建规则。
具体实施方式
以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。
本发明提供了一种基于函数动态载入的代码重用攻击防御方案,所述方法包括:
S1.预处理二进制可执行文件,识别函数块起始地址和大小、识别段信息、定义并识别合规地址;以gadget的功能对其进行分类,并提取对应类型gadget指令的机器码特征,以便搜索可执行文件中的gadget;
以gadget的功能对gadget进行分类:包括算数和逻辑运算类型、寄存器赋值类型、读内存类型、写内存类型、系统调用类型、跳转类型。相应类型gadget指令的机器码特征(如系统调用类型gadget的机器码特征为:0F05,跳转类型gadget的机器码特征为:7[0-F],算数和逻辑运算类型机器码:8[0-3],寄存器赋值类型机器码:8[8-C],读内存类型机器码:5[8-F],写内存类型机器码:5[0-7]),识别出文件中存在的gadget。
加载二进制可执行文件并初始化预备区域和执行区域,将入口地址设置为程序起始地址。在程序运行过程中维护预备区域和执行区域两块内存以实现函数的动态载入,预备区域包含程序运行需要的所有函数信息,执行区域是可执行文件的代码段,该区域置空,即程序在刚开始运行时,代码段是没有可用函数的,在函数运行过程中,根据运行需要从预备区域依次载入函数到执行区域执行。
S2.为了确保加载函数的安全性,本申请定义了局部控制流完整性的概念,局部即载入地址这个局部,局部控制流完整性就是确保载入函数这个过程要符合程序正常的控制流,为了实现这个目的,我们定义了合规地址集合,合规地址是一系列的地址,包括函数的起始地址、call指令的返回地址和跳转到其他函数的目标地址,因为在程序的正常控制流中,只有通过新函数的调用、函数返回和跳转到新函数这三种方式任一种才能进入或退出一个函数。
在程序执行到一个尚未加载的地址时,加载器收到信号,知道这个地址处需要加载一个函数,判断该地址是否属于上述的合规地址集合,如果是,则从预备区域查找这个地址,将该地址所在的函数写入到执行区域,程序继续执行。如果不是,则说明该控制流违反了完整性,程序报错并停止运行。
S3.在动态加载程序的同时,加载器记录载入函数的数量,如果载入函数数量达到程序总函数数量的1/16时,就会触发卸载,按照载入顺序卸载最开始载入的函数。
在加载函数的过程中,gadget监视器会记录载入的gadget,并尝试构建gadget链。若现有gadget能够构建gadget链,则计算该gadget链中数量最少的gadget类型,将包含该类型gadget的函数卸载。若现有gadget不能够构建gadget链,则认为现有gadget无法执行一次代码重用攻击,程序正常运行。
表1所示gadget减少数量
Figure 697262DEST_PATH_IMAGE001
表1为运行时gadget减少程度的实验结果,实验测试集为SPUC CPU 2006,对测试集中的不同测试程序进行实验,以程序函数总量的1/16为载入上限,首先测得程序中原有的gadget数量,然后测得本方法在程序运行不同时刻下的gadget数量,最后求得运行过程中内存中的gadget平均值,得到gadget减少数量=1-本方法中的gadget数量/gadget总数量(%)
图3为时间开销图;以程序函数总量的1/8,1/16,1/32为载入上限, 通过测试集SPUC-CPU-2006进行实验,设置实验次数为100次以减小运行过程中的误差,得到本方法的运行时间开销。时间开销以程序本身的运行时间为基准,计算超出的时间。比如,测试程序正常运行时间为100秒,本方法运行该测试程序用了101秒,则时间开销为1%。
图4为时间开销对比(Travight是本方法);实验设置同图3的实验,对比方法来自于近几年CCF-A、CCF-B高水平学术期刊会论文中的方法(如现有技术上BLankit方法、现有技术BCI-CFI方法、现有技术RCFI方法、现有技术BarRA方法和现有技术Hurdle方法)。
图5为gadget减少数量效果对比(Travight是本方法)。以程序函数总量的1/16为载入上限,首先测得程序中原有的gadget数量,然后测得本方法在程序运行不同时刻下的gadget数量,最后求得运行过程中内存中的gadget平均值,得到gadget减少数量=1-本方法中的gadget数量/gadget总数量(%)。对比方法来自于近几年CCF-A、CCF-B高水平学术期刊会论文中的方法(如现有技术ROPStarvation方法、现有技术Piece-Wise方法、现有技术Nibboer方法、现有技术BLankit方法)。如程序原有gadget共1000个,本方法在运行过程中测得程序的gadget数量平均为100个,则减少数量为900/1000=90%,减少了程序中90%的gadget。
如图6,构建的gadget链可用抽象出的gadget类型表示,通过执行一个或多个读内存类型的gadget,再执行算数和逻辑运算、写内存、寄存器赋值、跳转类型中的一种或多种,最后执行系统调用类型gadget。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (1)

1.一种基于函数动态载入的代码重用攻击防御方法,其特征在于,包括以下步骤,
S1.预处理二进制可执行文件,识别函数块起始地址和大小、识别段信息、定义并识别合规地址;以gadget的功能对其进行分类,并提取对应类型gadget指令的机器码特征,以便搜索可执行文件中的gadget;
S11.加载二进制可执行文件并初始化预备区域和执行区域,将入口地址设置为程序起始地址;
S12.在程序运行过程中维护预备区域和执行区域两块内存以实现函数的动态载入,预备区域包含程序运行需要的所有函数信息,执行区域是可执行文件的代码段,该执行区域置空,即程序在刚开始运行时,代码段是没有可用函数的,在函数运行过程中,根据运行需要从预备区域依次载入函数到执行区域执行;
S2.引入局部控制流完整性的函数动态载入方案;局部即载入地址的局部,局部控制流完整性就是确保载入函数这个过程要符合程序正常的控制流,具体步骤为:
S21.定义了合规地址集合,合规地址是一系列的地址,包括函数的起始地址、call指令的返回地址和跳转到其他函数的目标地址,在程序的正常控制流中,只有通过新函数的调用、函数返回和跳转到新函数这三种方式的任一种才能进入或退出一个函数;
S22.在程序执行到一个尚未加载的地址时,加载器收到信号,知道这个地址处需要加载一个函数,判断该地址是否属于上述的合规地址集合,如果是,则从预备区域查找这个地址,将该地址所在的函数写入到执行区域,程序继续执行;如果不是,则说明该控制流违反了完整性,程序报错并停止运行;
S3.引入gadget语义的函数动态卸载方案;
S31.在动态加载程序的同时,加载器记录载入函数的数量,如果载入函数数量达到设定的程序总函数数量的阈值时,触发卸载,按照载入顺序卸载最开始载入的函数;
S32.在加载函数的过程中,gadget监视器会记录载入的gadget,并尝试构建gadget链,若现有gadget能够构建gadget链,则计算该gadget链中数量最少的gadget类型,将包含该类型gadget的函数卸载;若现有gadget不能够构建gadget链,则认为现有gadget无法执行一次代码重用攻击,程序正常运行。
CN202210670527.XA 2022-06-15 2022-06-15 一种基于函数动态载入的代码重用攻击防御方法 Active CN114756856B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210670527.XA CN114756856B (zh) 2022-06-15 2022-06-15 一种基于函数动态载入的代码重用攻击防御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210670527.XA CN114756856B (zh) 2022-06-15 2022-06-15 一种基于函数动态载入的代码重用攻击防御方法

Publications (2)

Publication Number Publication Date
CN114756856A CN114756856A (zh) 2022-07-15
CN114756856B true CN114756856B (zh) 2022-08-23

Family

ID=82336420

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210670527.XA Active CN114756856B (zh) 2022-06-15 2022-06-15 一种基于函数动态载入的代码重用攻击防御方法

Country Status (1)

Country Link
CN (1) CN114756856B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115659322B (zh) * 2022-12-15 2023-03-10 中国海洋大学 一种基于运行时顺序调度装载的代码复用攻击防御方法
CN116401668B (zh) * 2023-06-08 2023-08-15 中国海洋大学 基于函数分组动态激活的代码重用攻击防御系统及方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105022956A (zh) * 2015-08-14 2015-11-04 中国科学院计算技术研究所 一种抵御代码重用攻击的方法
CN108090346A (zh) * 2017-12-04 2018-05-29 华中科技大学 一种基于数据流监控的代码复用攻击防御方法及系统
US10108798B1 (en) * 2016-01-04 2018-10-23 Smart Information Flow Technologies LLC Methods and systems for defending against cyber-attacks

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105022956A (zh) * 2015-08-14 2015-11-04 中国科学院计算技术研究所 一种抵御代码重用攻击的方法
US10108798B1 (en) * 2016-01-04 2018-10-23 Smart Information Flow Technologies LLC Methods and systems for defending against cyber-attacks
CN108090346A (zh) * 2017-12-04 2018-05-29 华中科技大学 一种基于数据流监控的代码复用攻击防御方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于代码重用的漏洞利用及其防御技术研究;谷俊等;《网络空间安全》;20160510(第05期);第20-24页 *

Also Published As

Publication number Publication date
CN114756856A (zh) 2022-07-15

Similar Documents

Publication Publication Date Title
CN114756856B (zh) 一种基于函数动态载入的代码重用攻击防御方法
US10990667B2 (en) Systems and/or methods for automatically protecting against memory corruption vulnerabilities
US6996677B2 (en) Method and apparatus for protecting memory stacks
JP4902129B2 (ja) セキュリティ仮想マシンを介してセキュリティポリシーを実施するための方法およびシステム
US8850573B1 (en) Computing device with untrusted user execution mode
US10984096B2 (en) Systems, methods, and apparatus for detecting control flow attacks
CN107908444B (zh) 终端应用的挂钩方法及装置
CN111381879B (zh) 一种数据处理方法及装置
EP2842041B1 (en) Data processing system and method for operating a data processing system
US9111096B2 (en) System and method for preserving and subsequently restoring emulator state
CN107480476B (zh) 一种基于ELF感染的Android本地层指令编译虚拟化加壳方法
US20060136134A1 (en) Information processing apparatus and method for obtaining software processing log
US11163645B2 (en) Apparatus and method of control flow integrity enforcement utilizing boundary checking
US20160171213A1 (en) Apparatus and method for controlling instruction execution to prevent illegal accesses to a computer
CN115510430A (zh) 一种函数指针及其数据依赖的识别与保护方法、装置
US11500982B2 (en) Systems and methods for reliably injecting control flow integrity into binaries by tokenizing return addresses
CN111931191A (zh) Linux平台二进制软件堆溢漏洞动态检测方法及系统
CN112668008A (zh) 一种基于lsm来实现动态的系统调用劫持的方法
CN109426546B (zh) 应用启动方法及装置、计算机存储介质及设备
US20190102541A1 (en) Apparatus and method for defending against unauthorized modification of programs
US11113392B2 (en) Executable binary code insertion
US11934517B2 (en) Systems and methods for reliably injecting control flow integrity into binaries without source code
CN113312088B (zh) 一种程序指令的执行方法及装置
CN115033873A (zh) 一种动态注入方法及装置
US20220019656A1 (en) Using a variable write profile for detecting intrusion of a computer program

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