CN107193732B - 一种基于路径比对的校验函数定位方法 - Google Patents
一种基于路径比对的校验函数定位方法 Download PDFInfo
- Publication number
- CN107193732B CN107193732B CN201710331861.1A CN201710331861A CN107193732B CN 107193732 B CN107193732 B CN 107193732B CN 201710331861 A CN201710331861 A CN 201710331861A CN 107193732 B CN107193732 B CN 107193732B
- Authority
- CN
- China
- Prior art keywords
- path
- check function
- positioning
- test
- program
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种基于路径比对的校验函数定位方法,属于信息安全中的二进制漏洞挖掘领域,目的是为解决对含有校验函数的程序进行模糊测试时,对校验函数定位的时空消耗大的问题。本发明采用路径比对的方法,首先对二进制程序进行动态插桩,以获取单个测试用例的路径文件;然后变异测试用例,获得一组不同测试用例的路径文件;再对每个路径文件进行哈希计算,并比对这些哈希值,取与初始用例路径不同且短于初始路径、并且该路径的哈希值占比相对较高的路径地址为可疑地址;最后对可疑地址处的基本块规模和汇编特征进行分析,判定是否为校验函数。本发明具有准确率高、时空开销低等特点,适用对测试速度可计算资源有较高要求的模糊测试领域,具有很好的应用价值和推广价值。
Description
技术领域
本发明涉及一种基于路径比对的程序中校验函数的定位方法,属于信息安全中的二进制漏洞挖掘领域。
背景技术
软件漏洞会严重影响信息系统的机密性、完整性、可用性、可控性、真实性等基本属性,威胁信息系统的安全,因此对软件安全漏洞问题的研究是信息安全领域十分重要的组成部分。目前,解决安全漏洞问题的主要方法是通过软件漏洞挖掘提前发现软件存在的漏洞,因此漏洞挖掘工作对于保护信息系统安全有着极其重要的意义。
漏洞挖掘领域中,最常用的挖掘方法是模糊测试技术,该技术主要通过构造随机的测试用例(测试用例是指在模糊测试时,经过变异后用于测试程序是否存在漏洞而使用的输入数据,该数据具有很大的不可预测性),以模仿用户的随机输入,对黑盒程序进行安全性测试。但随机地构造测试用例的效果较差,测试效率较低——当被测程序中存在校验函数时,随机构造的测试数据很难通过程序循环冗余校验、哈希校验等函数的检测,因此对程序的代码测试覆盖率较低,不能发现校验函数后续执行流程的隐藏漏洞。目前有效的解决方法都需要对校验函数在程序中的位置进行定位,因此,本发明将提供一种基于路径比对的方法来定位校验函数在程序中的位置。
目前对校验函数定位的常用方法可归为两类:
1.汇编指令统计
这种方法主要通过对程序汇编指令进行统计,通过匹配符合校验函数特征的汇编代码,来确定校验函数的位置。校验函数的汇编指令与加解密计算、算数运算等函数特征具有相似性,都存在大量的移位、计算类汇编指令,因此难以对函数进行准确定位。
2.污点跟踪定位
这种方法主要通过污点跟踪技术,对函数执行的特定语句进行插桩——即在被测程序运行时插入获取汇编语句和寄存器、内存值的程序语句,并输出这些语句获取的寄存器和内存值。一次污点跟踪结束后,再使用离线分析方法,对所记录的寄存器和内存值进行分析,与输入数据(标记为污点数据)符合一定规则(污点传播规则)的寄存器、内存值被标记为污点值,当程序某处污点值和初始污点数据能与校验函数模式进行匹配时,则判定该处污点所在的程序语句为校验函数。这种方法由于记录了大量寄存器、内存和指令数据,对外存的占用量十分高;同时,记录过程和分析过程都占用了大量的cpu时钟周期,因此时间效率较低。
综上所述,校验函数定位方法存在着空间(外存)消耗大,时间效率低的问题,所以本发明提出了一种基于路径比对的校验函数定位方法,在保证定位准确率的前提下,降低空间消耗,有助于提高模糊测试的测试效率。
发明内容
本发明的目的是为解决模糊测试中校验函数定位时空间消耗大、时间效率低的问题,提出一种基于路径比对的校验函数定位方法。
本发明的设计原理为:使用指令插桩工具对目标程序以基本块(存在唯一入口和唯一出口地址的一段语句序列)为单位进行动态插桩,跟踪EIP寄存器值以获取程序对某一测试用例的执行路径(程序执行时的指令执行的地址)。对执行路径进行哈希运算,并比对这些哈希值,如果某个哈希值大量出现,则说明程序在这个位置出现了“阻塞”,即大量测试用例不能通过这个路径,可能是因为该路径出存在着校验函数。最后,在程序发生“阻塞”的位置对上下的基本块进行汇编特征匹配,以最终确定该处是否为校验函数。
本发明的技术方案是通过以下步骤实现的:
步骤1,进行二进制程序的动态插桩,获取程序执行的路径信息,具体方法如下:
步骤1.1,使用二进制指令插桩工具,在程序执行时,对程序语句的基本块进行检测,当检测到jmp、call等跳转语句时,划分之前的语句为一个基本块。
步骤1.2,记录每个基本块的入口地址,即EIP指针寄存器的值,存入离线路径文件中。
步骤1.3,重复上述两步骤,直至程序运行结束,获得对单一测试用例的路径文件。
步骤1.4,对输入数据进行变异,重复步骤1.3,以获取变异测试用例的执行路径文件,直至模糊测试结束。该步骤获得了对一次模糊测试中所有测试用例的路径文件。整个步骤1获取了多次程序测试流程中,以基本块首地址为内容的程序执行路径,由于基本块具有单入单出的特性,因此,这个简化的路径文件可以完整地保存程序实际的执行流程。
步骤2,在步骤1的基础上,对路径文件集进行路径比较,具体步骤如下:
步骤2.1,对每个路径文件进行哈希计算,相同的哈希结果说明两次模糊测试使用的测试用例使程序运行了相同的代码。之后对计算结果进行次数统计,当某一哈希值出现次数远大于其他值的出现次数时,说明此处存在校验语句,使得多数随机变异的测试用例不能满足校验条件,从而未能通过校验函数,而出现“阻塞”情况的位置就是校验函数所在的位置。
步骤2.2,在步骤2.1的基础上,比较出现阻塞的文件和其他文件,文件内容出现不同的路径值,就是程序发生阻塞时的地址,记录该地址值。
步骤3,确定校验函数位置,进行校验函数定位,具体方法为:根据步骤2.2中记录的地址值,考察上下基本块的基本块规模、汇编指令特征,符合特征的基本块所在的函数即可定位为校验函数。
有益效果
相比于汇编指令统计和污点跟踪方法,本发明采用的基于路径比对的方法在保证定位准确率的前提下,减少了定位校验函数时所需的外存空间,从而减少了分析离线文件时所需的工作量;同时,由于获取路径信息只需要对每一个基本块的首地址进行插桩记录,因此减少了程序插桩时带来的时间损耗。
以上特点使本发明更加适用于模糊测试情景中,因为模糊测试需要运行大量的测试用例,而本发明可以插入到模糊测试的流程中,充分利用了这些测试用例,并只带来很小的时空开销。
附图说明
图1为本发明基于校验比对的校验函数定位原理图。
具体实施方式
为了更好的说明本发明的目的和优点,下面结合实例对本发明方法的实施方式做进一步详细说明。
步骤1,使用AFL模糊测试工具生成测试用例。因为本发明需要通过测试用例寻找新路径,故需一种用于生成测试用例的方法,而AFL的用例生成原理较为简单,便于进行方法展示。具体方法为:判断被测文件的某个翻译块的起始地址是否为整个elf文件的起始地址(这个地址在elf补丁中进行赋值)。如果是,则启动AFL程序,做基本的测试准备,比如开辟共享内存空间;若非,则调用afl_forkserver函数,通过CPUArchState结构体进行初始化,再调用afl_maybe_log函数进行语句插桩。以后AFL每完成一次测试,都从重新创建一个新的路径文件,方便步骤2中记录不同测试的路径文件。
步骤2,在步骤1的基础上,QEMU仿真器进行二进制程序的动态插桩,获取程序执行的路径信息。所谓动态插桩是指在程序的运行过程中,根据运行时语句的不同进行选择性插桩。具体到QEMU中,使用翻译块tb结构体中的pc和cs两个指针,分别表示EIP寄存器和CS段,二者共同表示了某条语句的地址;而tb本身就是基于基本块的翻译方式,因此使用QEMU进行插桩时,省却了基本块判别的步骤。
步骤3,使用MD5哈希计算,将每个路径文件进行计算。在做模糊测试时,一般倾向于给出一个合法的测试用例(初始测试用例)并在此用例的基础上进行变异,由于这个用例是合法的,因此一定可以通过校验函数的检测。所以在做路径文件比对时,如果发现大量文件的MD5值相同,则将这些文件的路径信息和初始用例产生的路径信息进行对比,如果该路径与初始路径在某个地址处出现了不同且总路径数小于初始路径数,则记录该地址。
步骤4,使用步骤3中记录的地址,用IDA等反汇编软件查看该地址前后基本块的汇编代码,在代码处查找cmp等比较类指令,如果存在,则进一步对基本块规模和基本块代码特征进行比对,因为校验函数往往含有较少的跳转,因此基本块规模较大;又因为存在计算,因此运算指令比例较高。
其中,基本块规模取40条指令以上;而运算指令包括表1中所述所有指令。
表1运算指令特征
其中,通过多次实验进行平均可得门限参数:运算指令总占比在26%以上;或者在去除mov和循环移位类指令后,运算指令占比在55%以上,则可判定该地址即是校验函数所在位置。
测试结果
实验对目标程序中的校验函数进行定位,结果显示,本发明可以有效定位函数中存在的校验函数,准确率达到94.4%,并且显著减少了定位所需的空间消耗,对百兆级程序进行校验定位所需的空间只有几十兆,远小于污点跟踪方法所需的G级空间消耗,并减少了离线分析的工作量。
以上所述的具体描述,对发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.基于路径比对的校验函数定位方法,所述方法建立在模糊测试技术基础之上,其特征在于定位过程包括3个步骤:
步骤1,首先进行二进制程序的动态插桩,然后通过变异产生不同测试用例作为程序的输入,并获取相应的程序执行的路径信息,该路径信息指CS寄存器和EIP指令指针寄存器的值;
步骤2,在步骤1的基础上,获取不同测试用例下所产生的执行路径,并基于此对路径文件集进行路径比较,完成对校验函数的初步定位;
步骤3,基于步骤2的初步定位信息确定校验函数位置,进一步完成校验函数具体定位,具体方法为:根据步骤2中记录的地址值,考察上下基本块的基本块规模、汇编指令特征,符合特征的基本块所在的函数即可定位为校验函数。
2.根据权利要求1所述的基于路径比对的校验函数定位方法,其特征在于:步骤2对文件的比较是通过哈希运算结果进行的。
3.根据权利要求1所述的基于路径比对的校验函数定位方法,其特征在于:步骤2是通过因校验函数的存在,使得不同测试用例产生的执行路径占总体路径数的比值不同来进行校验函数初步定位的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710331861.1A CN107193732B (zh) | 2017-05-12 | 2017-05-12 | 一种基于路径比对的校验函数定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710331861.1A CN107193732B (zh) | 2017-05-12 | 2017-05-12 | 一种基于路径比对的校验函数定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107193732A CN107193732A (zh) | 2017-09-22 |
CN107193732B true CN107193732B (zh) | 2020-12-08 |
Family
ID=59873484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710331861.1A Expired - Fee Related CN107193732B (zh) | 2017-05-12 | 2017-05-12 | 一种基于路径比对的校验函数定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107193732B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109117367B (zh) * | 2018-07-24 | 2022-02-22 | 北京理工大学 | 一种模糊测试变异数量确定方法和装置 |
CN110135165B (zh) * | 2019-04-12 | 2023-06-09 | 江苏大学 | 一种动态化的分级多粒度模糊测试漏洞挖掘方法 |
CN110008710B (zh) * | 2019-04-15 | 2022-11-18 | 上海交通大学 | 基于深度强化学习和程序路径插桩的漏洞检测方法 |
CN110162472B (zh) * | 2019-05-08 | 2022-08-12 | 安徽工业大学 | 一种基于fuzzing测试的测试用例生成方法 |
CN110879709A (zh) * | 2019-11-29 | 2020-03-13 | 五八有限公司 | 无用代码的检测方法、装置、终端设备及存储介质 |
CN112463607B (zh) * | 2020-11-26 | 2024-03-15 | 苏州洞察云信息技术有限公司 | 一种判定语句取值的确认方法、装置及存储介质 |
CN114741700B (zh) * | 2022-03-28 | 2024-05-03 | 中国人民解放军战略支援部队信息工程大学 | 基于符号化污点分析的公共组件库漏洞可利用性分析方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714118A (zh) * | 2009-11-20 | 2010-05-26 | 北京邮电大学 | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 |
CN102789419A (zh) * | 2012-07-20 | 2012-11-21 | 中国人民解放军信息工程大学 | 一种使用多样本差异比对的软件故障分析方法 |
CN103440201A (zh) * | 2013-09-05 | 2013-12-11 | 北京邮电大学 | 动态污点分析装置及其在文件格式逆向解析中的应用 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7143396B2 (en) * | 2002-11-06 | 2006-11-28 | Sun Microsystems, Inc. | System and method for measuring code segment performance |
-
2017
- 2017-05-12 CN CN201710331861.1A patent/CN107193732B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714118A (zh) * | 2009-11-20 | 2010-05-26 | 北京邮电大学 | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 |
CN102789419A (zh) * | 2012-07-20 | 2012-11-21 | 中国人民解放军信息工程大学 | 一种使用多样本差异比对的软件故障分析方法 |
CN103440201A (zh) * | 2013-09-05 | 2013-12-11 | 北京邮电大学 | 动态污点分析装置及其在文件格式逆向解析中的应用 |
Non-Patent Citations (1)
Title |
---|
Windows应用程序关键函数的逆向定位技术研究;谢裕敏;《中国优秀硕士学位论文全文数据库 信息科技辑》;20120315;第2.2.3节、第4.3.2节、第5.3.1节 * |
Also Published As
Publication number | Publication date |
---|---|
CN107193732A (zh) | 2017-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107193732B (zh) | 一种基于路径比对的校验函数定位方法 | |
CN108304720B (zh) | 一种基于机器学习的安卓恶意程序检测方法 | |
Cesare et al. | Classification of malware using structured control flow | |
CN102054149B (zh) | 一种恶意代码行为特征提取方法 | |
CN109583200B (zh) | 一种基于动态污点传播的程序异常分析方法 | |
TW201533604A (zh) | 產生候選鈎點以偵測惡意程式之方法及其系統 | |
CN104834859A (zh) | 一种Android应用中恶意行为的动态检测方法 | |
CN113497809B (zh) | 基于控制流和数据流分析的mips架构漏洞挖掘方法 | |
CN108123956B (zh) | 基于Petri网的密码误用漏洞检测方法及系统 | |
CN110096433B (zh) | 一种iOS平台上获取加密数据的方法 | |
CN108694320B (zh) | 一种多安全环境下敏感应用动态度量的方法及系统 | |
Li et al. | Software vulnerability detection using backward trace analysis and symbolic execution | |
CN101853200A (zh) | 一种高效动态软件漏洞挖掘方法 | |
CN111428247B (zh) | 一种对计算机漏洞库进行改进的方法 | |
CN107085687B (zh) | 基于二进制熵的模糊测试加解密函数定位方法 | |
Gao et al. | Em-fuzz: Augmented firmware fuzzing via memory checking | |
Qin et al. | Nsfuzz: Towards efficient and state-aware network service fuzzing | |
Chen et al. | Cati: Context-assisted type inference from stripped binaries | |
CN109726115B (zh) | 一种基于Intel处理器跟踪的反调试自动绕过方法 | |
Mouzarani et al. | A smart fuzzing method for detecting heap-based buffer overflow in executable codes | |
Ren et al. | A dynamic taint analysis framework based on entity equipment | |
Yang et al. | Theoretical Analysis and Empirical Evaluation of Coverage Indictors for Closed Source APP Testing | |
Yan et al. | SPIDER: Speeding up Side-Channel Vulnerability Detection via Test Suite Reduction | |
WO2021104027A1 (zh) | 代码性能检测方法、装置、设备及存储介质 | |
McKee et al. | Software ethology: An accurate, resilient, and cross-architecture binary analysis framework |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20201208 |
|
CF01 | Termination of patent right due to non-payment of annual fee |