CN114637988A - 一种面向二进制的函数级软件随机化方法 - Google Patents
一种面向二进制的函数级软件随机化方法 Download PDFInfo
- Publication number
- CN114637988A CN114637988A CN202210238650.4A CN202210238650A CN114637988A CN 114637988 A CN114637988 A CN 114637988A CN 202210238650 A CN202210238650 A CN 202210238650A CN 114637988 A CN114637988 A CN 114637988A
- Authority
- CN
- China
- Prior art keywords
- function
- binary
- byte
- software
- data
- 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.)
- Pending
Links
Images
Classifications
-
- 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/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
-
- 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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种面向二进制的函数级软件随机化方法,包括以下步骤:识别原始二进制软件的函数边界;对二进制软件进行函数级冗余反汇编;对反汇编的代码进行随机化重写,从而重新构造可执行文件。本发明的技术效果在于,通过二进制代码函数级重写,将原始功能函数随机搬移到了新的位置,并重置了原二进制软件中该函数区域的指令,从而能够打乱用于构造ROP攻击的代码指令片段,从而有效阻断ROP攻击。本发明提供的面向二进制的函数级软件随机化方法,通过函数边界识别、函数级冗余反汇编和随机化代码生成,只需要改变二进制软件的静态形态,无需在运行时执行复杂度高的操作,不会引入额外的运行时开销,从而提供一种高效的ROP防御手段。
Description
技术领域
本发明涉及软件安全领域,特别涉及一种面向二进制的函数级软件随机化方法。
背景技术
随着信息技术的发展,软件已渗透进人们生活工作的方方面面,而软件研发受技术和经济两方面因素的制约,还有人为预留后门的可能性,导致了软件漏洞无法根本消除,必将长期存在。针对软件漏洞,涌现出了很多漏洞利用方法,从而可能攻陷并控制人们依赖的信息***,造成巨大的经济损失。众多软件漏洞利用方法中,面向返回编程(Return-oriented Programming,ROP)攻击是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码实现漏洞利用和网络攻击。ROP攻击同缓冲区溢出攻击,格式化字符串漏洞攻击不同,是一种利用代码复用技术的攻击方法,使用程序中已有的指令序列进行攻击,避免了代码注入,攻击效果好且难以防御。
参见图1,虽然目前已有一些针对ROP攻击的防御方案,这些方案或基于运行时重构程序控制流进行防御,或基于动态插装监控的方式进行防御,通过动态插装框架加载目标二进制程序,并动态分析指令执行过程和控制流,实现对ROP攻击的防御插装,确保软件原始功能正常且不受ROP攻击。但这些方案均需在运行时保存额外的控制流变化信息,并在检测到攻击时利用这些信息恢复到正确的执行控制流,导致这些方案存在较大的资源消耗,故这类方案在实际应用中存在较大障碍。
由于很难直接实现对二进制软件的等价重写,现有的方案主要是基于动态插装的方式,由于这些方案有较大的资源消耗,导致这类方案在实际应用中存在较大障碍。也有一些基于直接重写的技术方案,但其技术成熟度和有效性还有待进一步验证尚未得到广泛应用。
发明内容
为了解决目前针对ROP攻击的防御方案存在资源消耗过大、不够成熟有效的技术问题,本发明提供一种能够打乱ROP攻击所必须的可复用代码片段,使其无法利用已有的指令片段构造攻击程序,从而从源头上阻断基于ROP的软件漏洞攻击的面向二进制的函数级软件随机化方法。
为了实现上述技术目的,本发明的技术方案是,
一种面向二进制的函数级软件随机化方法,包括以下步骤:
首先识别原始二进制软件的函数边界;然后在识别出函数边界的基础上,对二进制软件进行函数级冗余反汇编;最后对反汇编的代码进行随机化重写,从而重新构造可执行文件。
所述的方法,识别原始二进制软件的函数边界包括:
第一步:收集包括有各种不同函数的现有公开源代码,然后在编译过程中提取不同函数在二进制代码中的边界信息,从而构造出用于二进制软件函数边界识别的训练集,然后基于训练集来对深度神经网络进行训练,得到函数边界的识别模型;
第二步:针对需要进行函数边界识别的原始二进制软件,通过逐字节偏移提取数据片段,并对数据片段进行向量化处理后,使用识别模型进行函数边界识别,从而标记出不同函数的边界位置。
所述的方法,所述的第二步中,通过逐字节偏移提取数据片段,并对数据片段进行向量化处理包括:
首先将二进制软件看做一个有限长的二进制序列,然后逐字节提取固定长度的数据,从而作为识别模型的输入向量。
所述的方法,对二进制软件进行函数级冗余反汇编包括:
第一阶段:在函数边界识别的基础上,截取函数的二进制片段数据,并对片段数据进行逐字节扫描和反汇编,然后执行随机化重构以生成新代码,并计算生成的新代码长度以确定新代码的全局偏移量,再以原片段数据和新生成代码的全局偏移量构造一个地址映射表;
第二阶段:再对整个函数进行逐字节反汇编,使用地址映射表更新生成代码的地址引用关系,将新生成的代码顺序拼接作为新的功能函数内容,然后重置原二进制片段区域的数据来作为中断指令以阻断ROP攻击链,再将原函数第一个字节位置开始的指令更新为长跳转指令,以使该函数被调用时直接跳转到新的功能函数的位置继续执行,最后选择一个随机的代码起始地址将新的功能函数代码***可执行文件,生成安全增强后的二进制软件,并根据二进制软件的格式规范对可执行文件格式进行包括重定位表修复、异常处理表修复在内的必要修复,以使安全增强后的二进制软件能够正常运行。
所述的方法,所述的第一阶段中,随机化重构包括:
随机***花指令,或者***攻击检测逻辑,从而实现随机化重构。
所述的方法,所述的第二阶段中,重置原二进制片段区域的数据,是指将原数据改为随机数据或全置为0。
所述的方法,所述的第二阶段中,将原函数第一个字节位置开始的指令更新为长跳转指令,是将原指令硬编码为jmp 0xaddr指令,从而在调用原函数时,直接跳转到新的功能函数代码去执行。
一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现前述的方法。
一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现前述的方法。
本发明的技术效果在于,通过二进制代码函数级重写,将原始功能函数随机搬移到了新的位置,并重置了原二进制软件中该函数区域的指令,从而能够打乱用于构造ROP攻击的代码指令片段,从而有效阻断ROP攻击。本发明提供的面向二进制的函数级软件随机化方法,通过函数边界识别、函数级冗余反汇编和随机化代码生成,只需要改变二进制软件的静态形态,无需在运行时执行复杂度高的操作,不会引入额外的运行时开销,从而提供一种高效的ROP防御手段。
附图说明
图1为现有ROP攻击的防御方案的结构示意图;
图2为本发明的流程示意图;
图3为本发明函数边界识别的流程示意图;
图4为本发明函数级冗余反汇编的流程示意图;
图5为本发明逐字节反汇编示意示意图。
具体实施方式
本实施例所提供的方法包括输入原始二进制软件,识别函数边界;对二进制软件进行函数级冗余反汇编;对反汇编的代码进行随机化重写,重新构造可执行文件,生成安全增强的二进制软件。
1.函数边界识别
可执行文件一般以段和节的方式来存放代码和数据,源代码在编译成二进制软件后,所有的功能代码一般集中存放在.text中,要从.text恢复出不同功能函数的边界可以基于编译器生成的附加信息,但是当这些信息不可用时,就难以准确恢复函数的边界信息。为解决该问题,本实施例采用深度神经网络的方法来识别函数边界,方法流程如图3所示。
第一步:收集公开源代码,然后在编译过程中提取不同函数在二进制代码中的边界信息,进一步构造出二进制软件函数边界识别训练集,并对深度神经网络进行训练输出函数边界识别模型,这里的神经网络可以采用包括LSTM、Bi-LSTM、TextCNN在内的各种神经网络。
第二步:针对目标二进制软件,首先进行预处理:将二进制软件看做一个有限长的二进制序列Bin=(B1,B2,…Bn),然后通过逐字节偏移提取数据片段,即提取的第一个数据片段为Vec1=(B1,B2,…B1+k),则第二个数据片段为Vec2=(B2,B3,…B2+k),并对数据片段进行向量化处理后,使用训练好的识别模型进行函数边界识别,最终准确标记出不同函数的边界位置,为在函数级开展随机化重写提供支撑。
2.函数级冗余反汇编
由于二进制软件代码和数据混合存储的特点,要实现100%的准确反汇编理论上是不可能的,因此本实施例提出通过两阶段的冗余反汇编来解决该问题,具体方法流程如图4所示。
第一阶段:在函数边界识别的基础上,直接截取函数的二进制片段数据,并对该部分数据进行逐字节扫描和反汇编,使用随机化重构方法生成新代码。这里的随机化重构可根据逐字节反汇编的指令的不同来进行不同的处理,比如简单地***一些冗余的花指令,而对于需要进行特殊处理的指令,则***额外的攻击检测逻辑,从而实现目标代码的随机化重写。其中,攻击检测逻辑可自行定义,比如本实施例中一个典型的攻击检测逻辑是:在内存分配一个数据校验堆栈,在处理函数调用指令call时,将call指令的下一条指令地址入栈,然后在处理ret指令时,验证返回地址是否在数据校验堆栈中,如果存在则认为安全并执行数据出栈操作,如果不存在该返回地址则可认为检测到ROP攻击,进一步进行告警事件输出或者直接结束程序执行。
接下来并计算生成的代码长度,从而确定生成代码的全局相对偏移位置,以在后续生成跳转指令时找到正确的跳转目标。再将当前的反汇编的地址和新生成代码的全局偏移量构造一个地址映射表。
第二阶段:再次对整个函数进行逐字节反汇编,使用构造的地址映射表更新生成代码的地址引用关系。这是由于第一阶段确定了代码长度,但是部分跳转指令没有完全确定跳转地址,故通过第二阶段的处理来确定这些跳转地址,也就是更新代码的地址引用关系,具体做法就是使用映射表准确计算相对地址,并生成最终的汇编代码。然后将新生成的代码顺序拼接作为新的功能函数内容,并重置原二进制片段区域的数据为中断指令用于阻断ROP攻击链,这里的重置是将原本的数据改为随机数据或全置为0。
再将原函数第一个字节位置开始的指令更新为长跳转指令,以便该函数被调用时直接跳转到新功能函数的位置继续执行,这里由于已经知道生成代码的位置,所以这里直接硬编码一个jmp 0xaddr指令,实现当调用原函数时,直接跳转到新生成的代码去执行。最后申请一个随机的代码起始地址,具体就是通过可执行文件操作的API函数,确定从哪里开始存放生成新的函数代码,将新的函数代码以新节的方式***可执行文件,生成安全增强后的二进制软件,并对可执行文件格式进行必要的修复,包括重定位表修复、异常处理表修复等,以便安全增强后的二进制软件能够正常运行。这里的修复是因为对二进制软件进行了修改,而二进制软件是有格式规范的,因此修改之后需要按二进制软件的格式规范对最后生成的软件进行修复,修复的具体做法是通过可执行文件操作库去解析、更新相关的数据结构,最后保存为输出文件即可。
同时本实施例还提供了一种电子设备和一种计算机可读介质。
其中电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现前述的方法。
具体使用中,用户能够通过作为终端设备的电子设备并基于网络来与同样作为电子设备的服务器进行交互,实现接收或发送消息等功能。终端设备一般是设有显示装置、基于人机界面来使用的各种电子设备,包括但不限于智能手机、平板电脑、笔记本电脑和台式电脑等。其中终端设备上根据需要可安装各种具体的应用软件,包括但不限于网页浏览器软件、即时通信软件、社交平台软件、购物软件等。
服务器是用于提供各种服务的网络服务端,本实施例所提供的方法一般由服务器执行,在实际运用中,在满足必要条件下,终端设备亦可直接执行本方法。
类似的,本实施例提供的计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例的方法。
Claims (9)
1.一种面向二进制的函数级软件随机化方法,其特征在于,包括以下步骤:
首先识别原始二进制软件的函数边界;然后在识别出函数边界的基础上,对二进制软件进行函数级冗余反汇编;最后对反汇编的代码进行随机化重写,从而重新构造可执行文件。
2.根据权利要求1所述的方法,其特征在于,识别原始二进制软件的函数边界包括:
第一步:收集包括有各种不同函数的现有公开源代码,然后在编译过程中提取不同函数在二进制代码中的边界信息,从而构造出用于二进制软件函数边界识别的训练集,然后基于训练集来对深度神经网络进行训练,得到函数边界的识别模型;
第二步:针对需要进行函数边界识别的原始二进制软件,通过逐字节偏移提取数据片段,并对数据片段进行向量化处理后,使用识别模型进行函数边界识别,从而标记出不同函数的边界位置。
3.根据权利要求2所述的方法,其特征在于,所述的第二步中,通过逐字节偏移提取数据片段,并对数据片段进行向量化处理包括:
首先将二进制软件看做一个有限长的二进制的序列,然后逐字节提取固定长度的数据,即提取的每个固定长度的数据,是依次在序列上首尾均向后移动一个字节,从而作为识别模型的输入向量。
4.根据权利要求1所述的方法,其特征在于,对二进制软件进行函数级冗余反汇编包括:
第一阶段:在函数边界识别的基础上,截取函数的二进制片段数据,并对片段数据进行逐字节扫描和反汇编,然后执行随机化重构以生成新代码,并计算生成的新代码长度以确定新代码的全局偏移量,再以原片段数据和新生成代码的全局偏移量构造一个地址映射表;
第二阶段:再对整个函数进行逐字节反汇编,使用地址映射表更新生成代码的地址引用关系,将新生成的代码顺序拼接作为新的功能函数内容,然后重置原二进制片段区域的数据来作为中断指令以阻断ROP攻击链,再将原函数第一个字节位置开始的指令更新为长跳转指令,以使该函数被调用时直接跳转到新的功能函数的位置继续执行,最后选择一个随机的代码起始地址将新的功能函数代码***可执行文件,生成安全增强后的二进制软件,并根据二进制软件的格式规范对可执行文件格式进行包括重定位表修复、异常处理表修复在内的必要修复,以使安全增强后的二进制软件能够正常运行。
5.根据权利要求4所述的方法,其特征在于,所述的第一阶段中,随机化重构包括:
随机***花指令,或者***攻击检测逻辑,从而实现随机化重构。
6.根据权利要求4所述的方法,其特征在于,所述的第二阶段中,重置原二进制片段区域的数据,是指将原数据改为随机数据或全置为0。
7.根据权利要求4所述的方法,其特征在于,所述的第二阶段中,将原函数第一个字节位置开始的指令更新为长跳转指令,是将原指令硬编码为jmp 0xaddr指令,从而在调用原函数时,直接跳转到新的功能函数代码去执行。
8.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
9.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210238650.4A CN114637988A (zh) | 2022-03-10 | 2022-03-10 | 一种面向二进制的函数级软件随机化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210238650.4A CN114637988A (zh) | 2022-03-10 | 2022-03-10 | 一种面向二进制的函数级软件随机化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114637988A true CN114637988A (zh) | 2022-06-17 |
Family
ID=81947686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210238650.4A Pending CN114637988A (zh) | 2022-03-10 | 2022-03-10 | 一种面向二进制的函数级软件随机化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114637988A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115795486A (zh) * | 2023-02-07 | 2023-03-14 | 山东大学 | 基于二进制重写的故障注入防护方法 |
-
2022
- 2022-03-10 CN CN202210238650.4A patent/CN114637988A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115795486A (zh) * | 2023-02-07 | 2023-03-14 | 山东大学 | 基于二进制重写的故障注入防护方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5458184B2 (ja) | 動的ファンクションコールシステムにおけるアグレッシブな自動修正のためのシステムおよび方法 | |
US7854002B2 (en) | Pattern matching for spyware detection | |
US20160371494A1 (en) | Software Vulnerabilities Detection System and Methods | |
CN110225029B (zh) | 注入攻击检测方法、装置、服务器及存储介质 | |
Li et al. | CNN-based malware variants detection method for internet of things | |
US8281290B2 (en) | Software diversity using context-free grammar transformations | |
JP2022009556A (ja) | ソフトウェアコードをセキュアにするための方法 | |
CN111753302A (zh) | 检测代码漏洞的方法、装置、计算机可读介质及电子设备 | |
JP2016099857A (ja) | 不正プログラム対策システムおよび不正プログラム対策方法 | |
EP3087527B1 (en) | System and method of detecting malicious multimedia files | |
US11868465B2 (en) | Binary image stack cookie protection | |
KR20080096518A (ko) | 해석가능한 코드를 실행시키는 것과 연관된 위험의 사정을용이하게 하는 컴퓨터 구현 방법, 컴퓨터 프로그램 제품,및 컴퓨팅 시스템 | |
CN114637988A (zh) | 一种面向二进制的函数级软件随机化方法 | |
CN114201756A (zh) | 一种智能合约代码片段的漏洞检测方法和相关装置 | |
US8578158B2 (en) | Information processing apparatus, computer-readable recording medium configured to store command execution determination program, and command execution determination method | |
CN110520860B (zh) | 用于防护软件代码的方法 | |
CN111796832B (zh) | 热补丁文件生成方法、装置、设备及存储介质 | |
KR101052735B1 (ko) | 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치 | |
JP2009104589A (ja) | 情報処理装置及びその方法、プログラム、記録媒体 | |
CN113919841A (zh) | 一种基于静态特征和动态插桩的区块链交易监测方法及*** | |
CN115718922B (zh) | 一种高可用的智能合约字节码重写方法、介质及装置 | |
Wang et al. | IRePf: An Instruction Reorganization Virtual Platform for Kernel Stack Overflow Detection | |
US20240211596A1 (en) | Malicious vba detection using graph representation | |
JP6828823B2 (ja) | 知識生成装置、知識生成方法、及びプログラム | |
CN114707143A (zh) | 内存数据损坏攻击的监测方法和装置 |
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 |