CN112163218A - 一种基于代码注入的反漏洞挖掘方法及装置 - Google Patents

一种基于代码注入的反漏洞挖掘方法及装置 Download PDF

Info

Publication number
CN112163218A
CN112163218A CN202010813167.5A CN202010813167A CN112163218A CN 112163218 A CN112163218 A CN 112163218A CN 202010813167 A CN202010813167 A CN 202010813167A CN 112163218 A CN112163218 A CN 112163218A
Authority
CN
China
Prior art keywords
function
binary
pseudo code
llvm
path
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
CN202010813167.5A
Other languages
English (en)
Other versions
CN112163218B (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.)
Information Engineering University of PLA Strategic Support Force
Original Assignee
Information Engineering University of PLA Strategic Support Force
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 Information Engineering University of PLA Strategic Support Force filed Critical Information Engineering University of PLA Strategic Support Force
Priority to CN202010813167.5A priority Critical patent/CN112163218B/zh
Publication of CN112163218A publication Critical patent/CN112163218A/zh
Application granted granted Critical
Publication of CN112163218B publication Critical patent/CN112163218B/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/562Static detection
    • G06F21/563Static detection by source code analysis
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly

Landscapes

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

Abstract

本发明属于软件安全保护技术领域,公开一种基于代码注入的反漏洞挖掘方法及装置,该方法首先对已知二进制程序通过静态分析识别目标程序的导入导出表、低频和高频路径,明确调用关系;然后将目标程序转化为统一的中间表示,并分别在低、高频中插入伪代码块,降低模糊测试器效率;最后对修改后的二进制程序再次打包发布。本发明可以有效的保护二进制程序免受模糊测试挖掘漏洞的影响,并且支持第三方dll库的调用。

Description

一种基于代码注入的反漏洞挖掘方法及装置
技术领域
本发明属于软件安全保护技术领域,尤其涉及一种基于代码注入的反漏洞挖掘方法及装置。
背景技术
模糊测试是一种黑盒测试技术,通过随机生成大量的输入样例监视程序执行以发现诸如崩溃或挂起等暴露错误的行为。以模糊测试为核心的漏洞挖掘技术在目前众多漏洞挖掘技术中应用范围最广、实际挖掘效果最为显著,例如谷歌使用大规模模糊测试工具OSS-Fuzz,在两年内发现了9000多个漏洞。对于开发者而言,模糊测试能够帮助其在软件开发过程中进行安全测试。不幸的是,攻击者也可以使用模糊测试技术发现0-day漏洞,为攻击者进行系统攻击和破坏带来了福利。开发人员希望保持不对称的信息面,即软件开发者应该比攻击者更容易模糊测试自己的软件。因此如何保护软件系统免受模糊测试的影响是一个悬而未决的问题。由于模糊测试的对象是二进制软件,测试过程中需要动态执行二进制程序,因此当前普遍采用的软件保护方法,如反调试、代码变形、代码虚拟化等均无法对抗模糊测试。代码混淆技术虽然引入了不对称的信息,但是它将会带来不可忽略的性能开销,并且无法阻止模糊器对路径进行探索。因此,针对对抗漏洞挖掘的反模糊测试技术经过发展慢慢进入研究人员的视野。开发人员希望在其产品上应用反模糊测试技术以阻止攻击者进行模糊测试。具有代表性的反模糊测试技术包括FUZZIFICATION(JUNG J,HU H,SOLODUKHIN D,et al.FUZZIFICATION:anti-fuzzing techniques[C]//28th{USENIX}Security Symposium({USENIX}Security 19).2019:1913-1930.)和ANTIFUZZ(GULER E,ASCHERMANN C,ABBASI A,et al.ANTIFUZZ:impeding fuzzing audits of binaryexecutables[C]//28th{USENIX}Security Symposium({USENIX}Security 19).2019:1931-1947.)。FUZZIFICATION通过采用降低模糊测试执行效率、阻断覆盖率统计、干扰污点分析、提高路径爆炸频率等方法来对抗模糊测试的漏洞挖掘能力;ANTIFUZZ采用干扰覆盖率统计、阻碍崩溃信息检测、延迟模糊器执行和重载符号执行引擎等方法来对抗模糊测试。但是上述方法仅适用于对主程序的保护,对第三方dll库调用失效。并且仅限于x86架构,无法实现跨平台保护。
发明内容
本发明针对当前反模糊测试方法仅适用于对主程序的保护,对第三方dll库调用失效,并且仅限于x86架构,无法实现跨平台保护的问题,提出一种基于代码注入的反漏洞挖掘方法及装置,可以有效的保护二进制程序免受模糊测试挖掘漏洞的影响,并且支持第三方dll库的调用。
为了实现上述目的,本发明采用以下技术方案:
一种基于代码注入的反漏洞挖掘方法,包括:
步骤1:基于构建的常用函数库,针对目标二进制程序进行静态分析;
步骤2:将不同来源的二进制程序转化为统一的LLVM中间表示形式;
步骤3:在获得LLVM中间表示的基础上进行伪代码块注入。
进一步地,所述步骤1包括:
步骤1.1:采用网络现有测试集,对所有二进制程序进行反编译,识别其中的内存访问函数、错误处理函数,构建函数库;
步骤1.2:对步骤1.1中的库函数进行IDA逆向分析,提取出控制流图,通过Radare2识别其中的导入导出表,并转换为IDA格式;
步骤1.3:对步骤1.2得到的控制流图和导入导出表进行路径统计分类,得出程序中的基本块信息;
步骤1.4:对步骤1.3中的基本块采用基于启发式的基本块深度分析方法,提取路径统计信息中的低高频路径、内存访问函数和错误处理分支。
进一步地,所述步骤2包括:
步骤2.1:针对不同来源的二进制程序,采用转化为统一的中间表示形式的方法,将二进制程序转化为LLVM-IR;
步骤2.2:对步骤2.1无法转化的二进制程序,首先将其反编译为类C语言的代码,然后再编译为LLVM-IR。
进一步地,所述步骤3包括:
步骤3.1:在步骤2获得的LLVM中间表示基础上,构造同时影响控制流和数据流的伪代码块,插入到低频路径中;
步骤3.2:构造一条条件永真的虚拟分支,作为伪代码块注入到高频路径,并在if条件中添加hash校验函数,增加符号执行的复杂度;
步骤3.3:对低频路径中的内存访问函数注入异常信息捕获的伪代码块,并在错误处理函数处注入异常信息扰乱的伪代码块;
步骤3.4:对步骤3.1至步骤3.3处理后的LLVM中间表示重新编译打包为二进制文件。
进一步地,所述步骤1.2包括:
对主程序中调用的库函数的导入导出表进行提取,确定每个导入导出函数的频度。
进一步地,所述步骤1.3包括:
通过获得的控制流图和导入导出表的频度进行路径统计分类,将控制流图转换成基本块信息。
进一步地,所述步骤1.4中,所述低高频路径分别细分为低、中、高三个等级。
进一步地,所述步骤1.4中,所述内存访问函数为低频路径中的内存访问函数。
一种基于代码注入的反漏洞挖掘装置,包括:
静态分析模块,用于基于构建的常用函数库,针对目标二进制程序进行静态分析;
中间表示转化模块,用于将不同来源的二进制程序转化为统一的LLVM中间表示形式;
伪代码注入模块,用于在获得LLVM中间表示的基础上进行伪代码块注入。
与现有技术相比,本发明具有的有益效果:
1.本发明针对当前反模糊测试方法仅适用于对主程序的保护,对第三方dll库调用失效,并且仅限于x86架构,无法实现跨平台保护的问题。利用静态分析识别目标程序的导入导出表、低高频路径信息,明确调用关系,然后将目标程序转化为统一的中间表示,并分别在低、高频中插入伪代码块,降低模糊测试器效率,一方面可以实现跨平台保护,另一方面可以实现对第三方调用库的保护。
2.本发明填补了反模糊测试技术跨平台使用方面的空白,不依靠复杂的动态分析技术且不带来较大的开销问题,可以与其它代码保护技术进行有效结合,对第三方调用库进行保护,阻碍模糊测试的执行效率和阻断异常监控,并且适用于二进制程序的跨平台保护,无需依赖源代码。
附图说明
图1为本发明实施例一种基于代码注入的反漏洞挖掘方法的流程图;
图2为本发明实施例一种基于代码注入的反漏洞挖掘方法的静态分析流程图;
图3为代码的三种表示形式示例图;
图4为本发明实施例一种基于代码注入的反漏洞挖掘方法的伪代码块注入示例图;
图5为本发明实施例一种基于代码注入的反漏洞挖掘方法的覆盖率反馈干扰代码路径示例图;
图6为本发明实施例一种基于代码注入的反漏洞挖掘方法的内存访问异常错误注入示例图;
图7为本发明实施例一种基于代码注入的反漏洞挖掘方法的模糊测试器执行效率测试结果图;
图8为本发明实施例一种基于代码注入的反漏洞挖掘方法的路径覆盖率测试结果图;
图9为本发明实施例一种基于代码注入的反漏洞挖掘装置的结构示意图。
具体实施方式
下面结合附图和具体的实施例对本发明做进一步的解释说明:
如图1所示,一种基于代码注入的反漏洞挖掘方法,包括:
步骤S101:基于构建的常用函数库,针对目标二进制程序进行静态分析;
步骤S102:将不同来源的二进制程序转化为统一的LLVM(Low Level VirtualMachine)中间表示形式;
步骤S103:在获得LLVM中间表示的基础上进行伪代码块注入。
进一步地,所述步骤S101包括:
步骤S101.1:采用网络现有测试集,对所有二进制程序进行反编译,识别其中的内存访问函数、错误处理函数,构建函数库;
步骤S101.2:对步骤S101.1中的库函数进行IDA逆向分析,提取出控制流图,通过Radare2识别其中的导入导出表,并转换为IDA格式;
步骤S101.3:对步骤S101.2得到的控制流图和导入导出表进行路径统计分类,得出程序中的基本块信息;
步骤S101.4:对步骤S101.3中的基本块采用基于启发式的基本块深度分析方法(指从一个基本块开始,进行深度遍历算法搜索,利用启发式方法从一条路径开始探索启发到下一条路径;参见Russell T,Malik A M,Chase M,et al.Learning basic blockscheduling heuristics from optimal data[C]//CASCON.2005:242-253.),提取路径统计信息中的低高频路径、内存访问函数和错误处理分支。
进一步地,所述步骤S101.2包括:
对主程序中调用的库函数的导入导出表进行提取,确定每个导入导出函数的频度。
进一步地,所述步骤S101.3包括:
通过获得的控制流图和导入导出表的频度进行路径统计分类,将控制流图转换成基本块信息。
进一步地,所述步骤S101.4中,所述低高频路径分别细分为低、中、高三个等级,即低频路径和高频路径均分为低、中、高三个等级。
进一步地,所述步骤S101.4中,所述内存访问函数为低频路径中的内存访问函数。
具体地,步骤S101包括:
静态分析基于构建的常用函数库,针对目标二进制程序进行分析。首先对主程序进行反编译,识别其中的内存访问函数、错误处理函数;然后对主程序中调用的库函数的导入导出表进行提取,确定每个导入导出函数的频度;最后提取程序的控制流图,采用启发式算法根据特定基本块的深度来区分低频路径和高频路径。
图2所示为静态分析模块的流程图,输入为基本函数库和目标二进制程序,经过IDA逆向分析,提取出控制流图,通过Radare2识别其中的导入导出表,并转换为IDA格式。在此基础上,基于启发式的基本块深度分析方法,提取路径统计信息中的低高频路径、内存访问函数和错误处理分支,其中低高频路径又分别细分为L(低)、M(中)、H(高)三个等级。为降低对原程序的影响,内存访问函数(m)仅识别低频路径中的内存访问函数。静态分析模块的输出中,低高频路径信息用于指导伪代码块的注入位置;内存访问函数用于捕获内存破坏异常,干扰fuzzer的异常监控模块;错误处理函数用于扰乱fuzzer的异常现场信息。
进一步地,所述步骤S102包括:
步骤S102.1:针对不同来源的二进制程序,采用转化为统一的中间表示形式的方法,将二进制程序转化为LLVM-IR;
步骤S102.2:对步骤S102.1无法转化的二进制程序,首先将其反编译为类C语言的代码,然后再编译为LLVM-IR。
具体地,步骤S102包括:
不同编程语言、不同架构,以及不同编译器和编译选项下的二进制程序都有较大差异。很难采用统一的方法直接对二进制程序进行伪代码块注入。因此,本发明首先将不同来源的二进制程序转化为统一的中间表示形式:LLVM中间表示。在中间表示的基础上进行代码块注入可以实现平台无关的目的。
如图3所示为C语言源代码与汇编语言,以及LLVM中间表示的对应关系,对于包含4个函数调用的主函数(图3中(a)),不同的平台可能使用不同的编译器将其编译为可执行程序,x86架构下可表示为图3中(b)的汇编语言形式。使用LLVM-IR编译工具,可将汇编语言形式的二进制程序转化为对应的LLVM中间表示(图3中(c)),也可以直接将C语言源码直接编译为LLVM的中间表示,二者略有差异。对于无法直接使用LLVM-IR编译工具编译为中间表示的二进制程序,本发明首先将其反编译为类C语言的代码,然后再从类C语言代码编译为LLVM中间表示,形式化描述如下:
用c表示高级语言代码,m表示LLVM中间表示,b表示二进制程序,b'表示无法直接编译为LLVM中间表示的二进制程序,函数f负责完成两个参数的映射,则有如下三种形式的中间表示转化方法:
Figure BDA0002631765030000061
对于LLVM中间表示,尽管从形式上看代码复杂度更高,但是该表示方法更多的保留了程序上下文信息,失真率低。
进一步地,所述步骤S103包括:
步骤S103.1:在步骤S102获得的LLVM中间表示基础上,构造同时影响控制流和数据流的伪代码块,插入到低频路径中;
步骤S103.2:构造一条条件永真的虚拟分支,作为伪代码块注入到高频路径,并在if条件中添加hash校验函数,增加符号执行的复杂度;
步骤S103.3:对低频路径中的内存访问函数注入异常信息捕获的伪代码块,并在错误处理函数处注入异常信息扰乱的伪代码块;
步骤S103.4:对步骤S103.1至步骤S103.3处理后的LLVM中间表示重新编译打包为二进制文件,并进行发布。
具体地,步骤S103包括:
以模糊测试为核心的漏洞挖掘技术得以有效实施,需要依赖如下3个条件:(1)模糊测试执行效率高,可快速完成大量变异样本的执行;(2)覆盖率信息可被准确统计,并反馈引导模糊测试进程;(3)异常信息(Crash)可被捕获并保留现场信息。对此,本发明提出的代码注入方法通过阻断上述3个条件,达到反漏洞挖掘的目的。
1.降低模糊测试效率
由于低频路径通常不被正常用户执行,因此直接在低频路径中插入类sleep()函数的伪代码块,可以达到降低模糊测试器执行效率的目的。但是该类函数极易被分析人员移除,对此本发明构造能够同时影响控制流和数据流的伪代码块插入到低频路径中,伪代码块中循环执行的次数取决于静态分析中识别出的L、M、H三个等级。如图4所示,灰色代码块表示注入的伪代码块(实际注入的是LLVM中间表示代码,为方便理解,采用C语言描述),对于注入的降低执行效率的函数slow_down(),定义局部变量k增大数据流分析的复杂度,依赖路径低频等级确定for循环次数,增加控制流复杂度,并在循环内部通过乘法运算增加计算复杂度。采用该方法可以达到对抗逆向分析和降低模糊测试器执行效率的目的。
2.干扰覆盖率反馈
当前主流模糊测试器普遍采用覆盖率反馈来引导模糊测试进程,该方法可以显著提高路径覆盖率,许多未公开漏洞也都是基于此方法检测到。模糊测试器通常使用插装的方式进行覆盖率统计,使用位图存储覆盖率统计结果,如AFL。本发明在高频路径中注入伪代码块,构造虚拟分支,扰乱覆盖率统计,添加Hash类校验,对抗符号执行和约束求解,干扰覆盖率反馈引导。如图5所示,在高频路径函数中,构造一条虚拟分支,该分支条件为永真,每次执行到该路径时都会执行该分支,可以扰乱路径覆盖率统计的准确度。同时,在if判断中,添加hash校验函数,用于增加符号执行和约束求解时的复杂度,如果采用自定义hash函数,会出现约束无法求解的现象,严重干扰符号执行中新分支的生成能力,干扰覆盖率反馈过程。
3.阻断异常现场捕获
使用模糊测试挖掘到的漏洞多为内存破坏类漏洞,通常是内存读、写、访问类的异常。因此,可以在内存访问函数中注入异常信息截获的伪代码块,屏蔽模糊测试器的异常监控。需要注意的是,为降低对正常用户的影响,本发明只对低频路径中的内存访问函数进行注入。此外,在错误处理函数处注入异常信息扰乱的伪代码块,可以干扰模糊测试器异常现场捕获的信息的准确性。如图6所示,对于常见内存访问异常,直接注入异常捕获代码进行截获,对于无法捕获的,在相应的错误处理函数中注入dump函数,覆盖正确的异常现场信息,达到阻断异常现场捕获的目的。
为验证本发明效果,进行如下实验:
基于上述反漏洞挖掘方法,设计并实现了反漏洞挖掘工具Anti-Vulner,该工具使用Python语言实现代码注入框架,使用C语言实现多种伪代码块,并采用LLVM编译器将部分伪代码块编译为中间表示形式,代码量约为8500行(Python代码约7500行,C语言代码约1000行)。测试所使用的硬件设备为intel i7处理器,16G内存台式机,操作系统为Ubuntu16.04。
从4个方面测试评估该方法在反漏洞挖掘方面的能力:(1)能否降低模糊测试器挖掘漏洞的数目;(2)能否降低模糊测试器执行效率;(3)能否干扰模糊测试器覆盖率统计及反馈机制;(4)对正常用户的影响是否在可接受的范围内。
1、降低挖掘漏洞的数目
采用公开测试集binutils v2.3.0和LAVA-M进行测试,将测试集中的所有程序均用Anti-Vulner进行处理,使用AFL(采用覆盖率反馈引导)、honggFuzz(采用覆盖率反馈引导)、Vuzzer(采用符号执行优化)三款模糊测试器对处理前后的测试集进行漏洞挖掘,测试集在对应模糊测试器上的执行时长为4个小时,测试结果如表1所示,为表述方便,在后续的描述中binutils v2.3.0简称为binutils;其中binutils-Anti指通过Anti-Vulner处理后的binutils,LAVA-M-Anti指通过Anti-Vulner处理后的LAVA-M。
表1模糊测试器挖掘漏洞数目测试结果
Figure BDA0002631765030000091
从表1可以看出,使用本发明方法对目标二进制程序处理后,模糊测试器能够检测到的漏洞数目有明显的下降,平均下降80%,说明处理后的二进制程序的抗模糊测试能力有显著提升。
2、降低模糊测试器执行效率
采用一定时间内模糊测试执行的被测样本数目来衡量本发明方法对模糊测试器执行效率的影响,如图7所示。分别对binutils和LAVA-M测试集进行测试,横坐标表示测试时间,纵坐标表示模糊测试器执行的样本数目;其中,honggFuzz-Anti表示通过honggFuzz模糊测试经过Anti-Vulner处理后的测试集,Vuzzer-Anti表示通过Vuzzer模糊测试经过Anti-Vulner处理后的测试集。从图7中可以看出,测试采用本发明工具处理前后的测试集时,4个小时内执行的样本数目平均下降70%。
3、降低路径覆盖率
通过4个小时执行时间内覆盖率结果对比,来评估本发明方法对AFL、honggFuzz,以及Vuzzer在覆盖率统计能力的影响,如图8所示,其中,AFL-Anti表示通过AFL模糊测试经过Anti-Vulner处理后的测试集。使用本发明方法前后,覆盖率差距明显,平均降低在50%以上。
4、负载增加
表2所示为本发明方法对目标对象的负载增加的影响结果,从中可以看出,对于标准测试集binutils,文件大小的增加为1.8M,尽管有80%以上,但是由于测试集中的文件尺寸较小,对真实程序而言,1.8M的文件大小增加是可接受的。对CPU负载的增加约4.4%,几乎不会对用户造成影响,也在可接受的范围内。
表2负载增加测试结果
Figure BDA0002631765030000101
综上,本发明针对当前反模糊测试方法仅适用于对主程序的保护,对第三方dll库调用失效,并且仅限于x86架构,无法实现跨平台保护的问题。利用静态分析识别目标程序的导入导出表、低高频路径信息,明确调用关系,然后将目标程序转化为统一的中间表示,并分别在低、高频中插入伪代码块,降低模糊测试器效率,一方面可以实现跨平台保护,另一方面可以实现对第三方调用库的保护。本发明填补了反模糊测试技术跨平台使用方面的空白,不依靠复杂的动态分析技术且不带来较大的开销问题,可以与其它代码保护技术进行有效结合,对第三方调用库进行保护,阻碍模糊测试的执行效率和阻断异常监控,并且适用于二进制程序的跨平台保护,无需依赖源代码。
在上述实施例的基础上,如图9所示,本发明还公开一种基于代码注入的反漏洞挖掘装置,包括:
静态分析模块201,用于基于构建的常用函数库,针对目标二进制程序进行静态分析;
中间表示转化模块202,用于将不同来源的二进制程序转化为统一的LLVM中间表示形式;
伪代码注入模块203,用于在获得LLVM中间表示的基础上进行伪代码块注入。
进一步地,所述静态分析模块201包括:
反编译子模块,用于采用网络现有测试集,对所有二进制程序进行反编译,识别其中的内存访问函数、错误处理函数,构建函数库;
逆向分析子模块,用于对反编译子模块中的库函数进行IDA逆向分析,提取出控制流图,通过Radare2识别其中的导入导出表,并转换为IDA格式;
路径分类子模块,用于对逆向分析子模块得到的控制流图和导入导出表进行路径统计分类,得出程序中的基本块信息;
路径信息提取子模块,用于对路径分类子模块的基本块采用基于启发式的基本块深度分析方法,提取路径统计信息中的低高频路径、内存访问函数和错误处理分支。
进一步地,所述中间表示转化模块202包括:
第一转化子模块,用于针对不同来源的二进制程序,采用转化为统一的中间表示形式的方法,将二进制程序转化为LLVM-IR;
第二转化子模块,用于对第一转化子模块无法转化的二进制程序,首先将其反编译为类C语言的代码,然后再编译为LLVM-IR。
进一步地,所述伪代码注入模块203包括:
第一伪代码块构造子模块,用于在中间表示转化模块202获得的LLVM中间表示基础上,构造同时影响控制流和数据流的伪代码块,插入到低频路径中;
第二伪代码块构造子模块,用于构造一条条件永真的虚拟分支,作为伪代码块注入到高频路径,并在if条件中添加hash校验函数,增加符号执行的复杂度;
第三伪代码块构造子模块,用于对低频路径中的内存访问函数注入异常信息捕获的伪代码块,并在错误处理函数处注入异常信息扰乱的伪代码块;
编译打包子模块,用于对第一伪代码块构造子模块、第二伪代码块构造子模块、第三伪代码块构造子模块处理后的LLVM中间表示重新编译打包为二进制文件。
进一步地,所述逆向分析子模块还用于:
对主程序中调用的库函数的导入导出表进行提取,确定每个导入导出函数的频度。
进一步地,所述路径分类子模块还用于:
通过获得的控制流图和导入导出表的频度进行路径统计分类,将控制流图转换成基本块信息。
进一步地,所述路径信息提取子模块中,所述低高频路径分别细分为低、中、高三个等级。
进一步地,所述路径信息提取子模块中,所述内存访问函数为低频路径中的内存访问函数。
以上所示仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (9)

1.一种基于代码注入的反漏洞挖掘方法,其特征在于,包括:
步骤1:基于构建的常用函数库,针对目标二进制程序进行静态分析;
步骤2:将不同来源的二进制程序转化为统一的LLVM中间表示形式;
步骤3:在获得LLVM中间表示的基础上进行伪代码块注入。
2.根据权利要求1所述的一种基于代码注入的反漏洞挖掘方法,其特征在于,所述步骤1包括:
步骤1.1:采用网络现有测试集,对所有二进制程序进行反编译,识别其中的内存访问函数、错误处理函数,构建函数库;
步骤1.2:对步骤1.1中的库函数进行IDA逆向分析,提取出控制流图,通过Radare2识别其中的导入导出表,并转换为IDA格式;
步骤1.3:对步骤1.2得到的控制流图和导入导出表进行路径统计分类,得出程序中的基本块信息;
步骤1.4:对步骤1.3中的基本块采用基于启发式的基本块深度分析方法,提取路径统计信息中的低高频路径、内存访问函数和错误处理分支。
3.根据权利要求1所述的一种基于代码注入的反漏洞挖掘方法,其特征在于,所述步骤2包括:
步骤2.1:针对不同来源的二进制程序,采用转化为统一的中间表示形式的方法,将二进制程序转化为LLVM-IR;
步骤2.2:对步骤2.1无法转化的二进制程序,首先将其反编译为类C语言的代码,然后再编译为LLVM-IR。
4.根据权利要求1所述的一种基于代码注入的反漏洞挖掘方法,其特征在于,所述步骤3包括:
步骤3.1:在步骤2获得的LLVM中间表示基础上,构造同时影响控制流和数据流的伪代码块,插入到低频路径中;
步骤3.2:构造一条条件永真的虚拟分支,作为伪代码块注入到高频路径,并在if条件中添加hash校验函数,增加符号执行的复杂度;
步骤3.3:对低频路径中的内存访问函数注入异常信息捕获的伪代码块,并在错误处理函数处注入异常信息扰乱的伪代码块;
步骤3.4:对步骤3.1至步骤3.3处理后的LLVM中间表示重新编译打包为二进制文件。
5.根据权利要求2所述的一种基于代码注入的反漏洞挖掘方法,其特征在于,所述步骤1.2包括:
对主程序中调用的库函数的导入导出表进行提取,确定每个导入导出函数的频度。
6.根据权利要求5所述的一种基于代码注入的反漏洞挖掘方法,其特征在于,所述步骤1.3包括:
通过获得的控制流图和导入导出表的频度进行路径统计分类,将控制流图转换成基本块信息。
7.根据权利要求2所述的一种基于代码注入的反漏洞挖掘方法,其特征在于,所述步骤1.4中,所述低高频路径分别细分为低、中、高三个等级。
8.根据权利要求2所述的一种基于代码注入的反漏洞挖掘方法,其特征在于,所述步骤1.4中,所述内存访问函数为低频路径中的内存访问函数。
9.一种基于代码注入的反漏洞挖掘装置,其特征在于,包括:
静态分析模块,用于基于构建的常用函数库,针对目标二进制程序进行静态分析;
中间表示转化模块,用于将不同来源的二进制程序转化为统一的LLVM中间表示形式;
伪代码注入模块,用于在获得LLVM中间表示的基础上进行伪代码块注入。
CN202010813167.5A 2020-08-13 2020-08-13 一种基于代码注入的反漏洞挖掘方法及装置 Active CN112163218B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010813167.5A CN112163218B (zh) 2020-08-13 2020-08-13 一种基于代码注入的反漏洞挖掘方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010813167.5A CN112163218B (zh) 2020-08-13 2020-08-13 一种基于代码注入的反漏洞挖掘方法及装置

Publications (2)

Publication Number Publication Date
CN112163218A true CN112163218A (zh) 2021-01-01
CN112163218B CN112163218B (zh) 2022-11-15

Family

ID=73860038

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010813167.5A Active CN112163218B (zh) 2020-08-13 2020-08-13 一种基于代码注入的反漏洞挖掘方法及装置

Country Status (1)

Country Link
CN (1) CN112163218B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117556431A (zh) * 2024-01-12 2024-02-13 北京北大软件工程股份有限公司 一种混合软件漏洞分析方法和系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814053A (zh) * 2010-03-29 2010-08-25 中国人民解放军信息工程大学 一种基于功能模型的二进制代码漏洞发现方法
US20110302566A1 (en) * 2010-06-03 2011-12-08 International Business Machines Corporation Fixing security vulnerability in a source code
US20130227693A1 (en) * 2012-02-24 2013-08-29 David Bryan Dewey Software module object analysis
CN105678169A (zh) * 2015-12-30 2016-06-15 西安胡门网络技术有限公司 一种二进制程序漏洞挖掘方法和系统
CN110287693A (zh) * 2019-06-13 2019-09-27 成都积微物联集团股份有限公司 一种基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法
US20200057856A1 (en) * 2014-08-15 2020-02-20 Securisea, Inc. High performance software vulnerabilities detection system and methods

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101814053A (zh) * 2010-03-29 2010-08-25 中国人民解放军信息工程大学 一种基于功能模型的二进制代码漏洞发现方法
US20110302566A1 (en) * 2010-06-03 2011-12-08 International Business Machines Corporation Fixing security vulnerability in a source code
US20130227693A1 (en) * 2012-02-24 2013-08-29 David Bryan Dewey Software module object analysis
US20200057856A1 (en) * 2014-08-15 2020-02-20 Securisea, Inc. High performance software vulnerabilities detection system and methods
CN105678169A (zh) * 2015-12-30 2016-06-15 西安胡门网络技术有限公司 一种二进制程序漏洞挖掘方法和系统
CN110287693A (zh) * 2019-06-13 2019-09-27 成都积微物联集团股份有限公司 一种基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
LIU XIN等: "A program vulnerabilities detection frame by static code analysis and model checking", 《2011 IEEE 3RD INTERNATIONAL CONFERENCE ON COMMUNICATION SOFTWARE AND NETWORKS》 *
刘臻等: "基于漏洞指纹的软件脆弱性代码复用检测方法", 《浙江大学学报(工学版)》 *
王夏菁等: "二进制程序漏洞挖掘关键技术研究综述", 《信息网络安全》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117556431A (zh) * 2024-01-12 2024-02-13 北京北大软件工程股份有限公司 一种混合软件漏洞分析方法和系统
CN117556431B (zh) * 2024-01-12 2024-06-11 北京北大软件工程股份有限公司 一种混合软件漏洞分析方法和系统

Also Published As

Publication number Publication date
CN112163218B (zh) 2022-11-15

Similar Documents

Publication Publication Date Title
Weiser et al. {DATA}–differential address trace analysis: Finding address-based {Side-Channels} in binaries
Peng et al. {X-Force}:{Force-Executing} binary programs for security applications
US8117660B2 (en) Secure control flows by monitoring control transfers
US11669623B2 (en) Method for detecting vulnerabilities in software
Bernhard et al. JIT-picking: Differential fuzzing of JavaScript engines
Khandaker et al. Adaptive call-site sensitive control flow integrity
Kalysch et al. VMAttack: Deobfuscating virtualization-based packed binaries
EP3495978B1 (en) Method for detecting vulnerabilities in software
Pomonis et al. IntFlow: improving the accuracy of arithmetic error detection using information flow tracking
Huang et al. The taming of the stack: Isolating stack data from memory errors
Even-Mendoza et al. Closer to the edge: Testing compilers more thoroughly by being less conservative about undefined behaviour
Liu et al. Exploring missed optimizations in webassembly optimizers
Hu et al. Automatically patching vulnerabilities of binary programs via code transfer from correct versions
CN112163218B (zh) 一种基于代码注入的反漏洞挖掘方法及装置
D’Elia et al. Evaluating dynamic binary instrumentation systems for conspicuous features and artifacts
Aloraini et al. Evaluating state-of-the-art free and open source static analysis tools against buffer errors in android apps
Wang et al. BCI-CFI: A context-sensitive control-flow integrity method based on branch correlation integrity
Kang A review on javascript engine vulnerability mining
Botacin et al. Revenge is a dish served cold: Debug-oriented malware decompilation and reassembly
Lopes Discovering vulnerabilities in webassembly with code property graphs
Dinesh Retrowrite: Statically instrumenting cots binaries for fuzzing and sanitization
Sah et al. Variable record table: A run-time solution for mitigating buffer overflow attack
Zeng et al. Heaptherapy+: Efficient handling of (almost) all heap vulnerabilities using targeted calling-context encoding
De Sutter et al. Evaluation Methodologies in Software Protection Research
Milewicz et al. Lightweight runtime checking of C programs with RTC

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