CN109739755A - 一种基于程序追踪和混合执行的模糊测试系统 - Google Patents
一种基于程序追踪和混合执行的模糊测试系统 Download PDFInfo
- Publication number
- CN109739755A CN109739755A CN201811612236.5A CN201811612236A CN109739755A CN 109739755 A CN109739755 A CN 109739755A CN 201811612236 A CN201811612236 A CN 201811612236A CN 109739755 A CN109739755 A CN 109739755A
- Authority
- CN
- China
- Prior art keywords
- test case
- program
- module
- fuzz testing
- mixing
- 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
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于程序追踪和混合执行的模糊测试系统,该系统主要包括三个模块,分别是模糊测试模块、数据流追踪模块和混合执行模块;模糊测试模块的输入为目标二进制程序、种子测试用例和由数据流追踪模块提取的种子测试用例中字节序列对应变量的类型信息,输出为触发新路径的测试用例;数据流追踪模块的输入为目标二进制程序和模糊测试模块加载的种子测试用例,输出为种子测试用例中字节序列对应变量的类型信息和目标二进制程序中数据的依赖关系;混合执行模块的输入为数据流追踪模块实时提供的目标二进制程序中数据的依赖关系,输出为由该模块新生成的可能触发新路径的候选测试用例。该系统相比于现有技术,能够提升测试用例生成的有效性。
Description
技术领域
本发明属于信息安全技术领域,尤其涉及一种基于程序追踪和混合执行的模糊测试系统。
背景技术
模糊测试:模糊测试是一种通过向目标系统或软件提供非预期的输入并监视异常结果来发现软件漏洞的方法,由于模糊测试技术可以将大量的手工测试转换为高度的自动化测试,介于黑盒测试和白盒测试之间,因此在国内外漏洞挖掘领域被广泛使用。
测试用例:测试用例的生成策略决定了模糊测试的测试效率,较好的测试用例可以覆盖被检测程序的更多路径,从而检测出更多的程序漏洞。模糊测试用例生成方法可以分为两种,基于生成的和基于变异的。基于生成的方法通过对具体的待测程序进行建模,根据模型或语法规范构造测试用例。基于生成的方法可以生成容易通过完整性检查或语法检查的输入。基于变异的方法是通过修改格式良好的种子输入来生成新的测试用例。基于变异的方法可以有效地测试具有紧凑和非结构化数据格式(例如图像和视频)的程序。所有测试用例组成的集合称为测试用例集。
数据流追踪技术:跟踪程序执行过程的数据流向,进而分析程序执行路径和输入数据的变化,代表性技术如动态污点分析技术。动态污点分析将程序的输入标记为污点源,在程序执行过程中动态跟踪这些污点源的传播过程,最后通过检测程序输出是否存在被污点标记的数据来判断输入和输出数据之间是否存在依赖关系。在漏洞挖掘领域,数据流追踪技术可以和模糊测试相结合,为模糊测试提供程序执行的内部信息,进而实现二进制程序的模糊测试。
混合执行:结合程序的实际执行和符号执行,其维护程序执行的实际状态和符号状态,实际状态将变量映射到实际值,符号状态将变量映射到符号值。在模糊测试领域,混合执行首先用给定的或者随机的输入来实际执行程序,在执行过程中利用数据流追踪等技术将程序变量符号化得到符号变量,并实时收集程序执行的路径约束条件,变量符号化和收集路径约束条件的过程即符号执行过程;对符号执行收集到的路径约束条件进行求解,从而将程序的执行导向另一条执行路径,提高路径覆盖率。
基本块:程序中的一条或数条指令的组合,程序执行到某个基本块时,会从该基本块的第一条指令开始执行,然后依次执行块中的其他指令,直到最后一条指令执行完毕。程序中的路径由一个或多个基本块构成。
路径信息:一条路径信息中包括一个或多个基本块,以及这些基本块的执行顺序。
路径约束条件:混合执行收集的到达指定路径所需的约束条件的集合,对路径约束条件求解后得到可能触发新路径的测试用例。
模糊测试是一种通过向目标系统或软件提供非预期的输入并监视异常结果来发现软件漏洞的方法,在国内外漏洞挖掘领域被广泛使用。
在模糊测试中,将程序的最小控制单元表示为基本块。对于模糊测试来说,大多数是基于路径覆盖的,即路径覆盖越多,程序中被执行的部分越多,同样也意味着程序中可能被发现的错误越多,这样会提高模糊测试效率。
数据流追踪技术可以跟踪程序执行过程的数据流向,进而分析程序执行路径和输入数据的变化,代表性技术如动态污点分析技术。动态污点分析将程序的输入标记为污点源,在程序执行过程中动态跟踪这些污点源的传播过程,最后通过检测程序输出是否存在被污点标记的数据来判断输入和输出数据之间是否存在依赖关系。在漏洞挖掘领域,数据流追踪技术可以和模糊测试相结合,为模糊测试提供程序执行的内部信息,进而实现二进制程序的模糊测试。
混合执行结合程序的实际执行和符号执行,其维护程序执行的实际状态和符号状态,实际状态将变量映射到实际值,符号状态将变量映射到符号值。在模糊测试领域,混合执行首先用给定的或者随机的输入来实际执行程序,在执行过程中利用数据流追踪等技术将程序变量符号化得到符号变量,并实时收集程序执行的路径约束条件,变量符号化和收集路径约束条件的过程即符号执行过程;对符号执行收集到的路径约束条件进行求解,从而将程序的执行导向另一条执行路径,提高路径覆盖率。
模糊测试是漏洞挖掘领域的重要方法,目前较为流行的模糊测试工具大多具有良好的漏洞发现能力,因此模糊测试在实践和研究方面都受到了广泛的关注。有众多研究人员对模糊测试进行了研究或改进,针对源码程序进行模糊测试的工具包括AFLFast、AFLGo、FairFuzz、collAFL等;利用符号执行辅助进行模糊测试的工具包括Driller、QSYM等;针对二进制程序进行模糊测试的工具包括Q-AFL、VUzzer等;使用Intel PT机制辅助进行模糊测试也有研究人员进行了相关研究。但是,虽然在很多场景下模糊测试可以有效地发现漏洞,其仍存在以下三方面局限性:
(1)目前大多数模糊测试工具均针对能够获取到源代码的程序,采用源代码插桩方式进行测试,并在插桩过程中划分基本块,进行唯一性标识。尽管这种方式对于源码测试比较高效,但是该方式对于基本块的唯一性标识存在冲突碰撞的可能,同时也缺少对二进制程序的支持。
(2)尽管部分模糊测试工具可以对二进制程序进行测试,但是普遍缺少反馈机制,使得测试效率较低;即使少数模糊测试工具采用了反馈机制,例如AFL的QEMU模式(简称为Q-AFL),但由于需要对指令进行模拟追踪,一方面模拟器难以全面和正确模拟目标指令,可能会导致目标二进制程序模拟执行时产生错误;另一方面,模拟执行时的插桩或指令转换等操作极大地影响了目标二进制程序的性能,导致测试效果欠佳,在实际应用中难以取得满意的测试效果。
(3)一些主流模糊测试工具采用符号执行、污点分析等技术辅助进行测试,以提高测试针对性,进而在一定程度上提升模糊测试的效率,但这些技术自身存在局限性,例如符号执行技术存在路径爆炸、约束求解效率低,难以扩展到大型程序等问题,使得模糊测试效果提升有限。
因此,如何利用CPU程序追踪、数据流追踪和混合执行技术使得模糊测试更加高效,同时支持对二进制程序的测试是本发明的关键点。
发明内容
有鉴于此,本发明提出了一个基于程序追踪和混合执行的模糊测试系统。
实现本发明的技术方案如下:
本发明中,将人工提供的测试用例称为初始测试用例,将提供给模糊测试模块进行变异的测试用例称为种子测试用例,将在种子测试用例基础上通过后续变异直接生成的测试用例以及混合执行模块生成的测试用例称为候选测试用例,将经过筛选处理且保存到测试用例集的候选测试用例称为测试用例。
一种基于程序追踪和混合执行的模糊测试系统,该系统主要包括三个模块,分别是模糊测试模块、数据流追踪模块和混合执行模块,其中:
模糊测试模块的输入为目标二进制程序、种子测试用例和由数据流追踪模块提取的种子测试用例中字节序列对应变量的类型信息,输出为触发新路径的测试用例,该测试用例存储到测试用例集中。所述类型信息用于辅助对种子测试用例进行变异生成新的候选测试用例,并将所述候选测试用例插入到候选测试用例队列中,然后从候选测试用例队列头部选择一个候选测试用例执行;在目标二进制程序执行过程中,利用CPU程序追踪机制对目标二进制程序进行追踪,获取路径信息以更新全局路径信息和筛选出触发新路径的测试用例;
数据流追踪模块的输入为目标二进制程序和模糊测试模块加载的种子测试用例,输出为种子测试用例中字节序列对应变量的类型信息和目标二进制程序中数据的依赖关系,该依赖关系用于辅助混合执行模块进行符号映射和收集路径约束;
混合执行模块的输入为数据流追踪模块实时提供的目标二进制程序中数据的依赖关系,输出为由该模块新生成的可能触发新路径的候选测试用例。
进一步地,所述测试用例包括初始测试用例和模糊测试模块生成的测试用例。
进一步地,所述候选测试用例包括模糊测试模块生成的候选测试用例和混合执行模块生成的候选测试用例,所有候选测试用例构成一个候选测试用例队列,其中,混合执行模块生成的候选测试用例具有较高的优先级,优先插入队列头部。
进一步地,所述模糊测试模块和混合执行模块共享目标二进制程序的全局路径信息。所述目标二进制程序的全局路径信息在模糊测试过程中动态变化,如果目标二进制程序每次执行测试用例时产生新的路径信息,则会对现有全局路径信息进行更新。
进一步地,本发明所述模糊测试模块,用于加载种子测试用例和类型信息、变异测试用例、执行目标二进制程序、CPU程序追踪、筛选候选测试用例;
加载种子测试用例和类型信息:在开始启动模糊测试时,从测试用例集中加载初始测试用例作为种子测试用例,同时加载从数据流追踪模块得到的该种子测试用例中字节序列对应变量的类型信息;在之后的模糊测试中,模糊测试模块会从测试用例集中选择下一个种子测试用例;
变异测试用例:将获得的所述种子测试用例进行变异,生成新的候选测试用例,插入候选测试用例队列,供下一步执行目标二进制程序使用;
执行目标二进制程序:从候选测试用例队列头部选择一个候选测试用例执行,收集该候选测试用例执行过程中经过的时间和产生的错误信息,其中执行时间信息作为下一次选择种子测试用例的依据之一,错误信息则用于记录目标二进制程序执行该候选测试用例后触发的错误;
CPU程序追踪:在目标二进制程序执行时,CPU程序追踪机制记录程序的执行情况,将记录的追踪信息转换为程序执行时对应的基本块信息,根据所述基本块信息生成目标二进制程序在本次执行中对应的路径信息;
筛选候选测试用例:将所述新生成的路径信息与全局路径信息进行比对,根据比对结果,判断是否有新路径发现。如果当前执行的候选测试用例不能发现新路径,将其丢弃;否则将其作为测试用例,保存到测试用例集中,以供下一次选择种子测试用例时使用,并更新全局路径信息。
进一步地,本发明所述模糊测试模块在选择种子测试用例时,优先选择未被选择过的、以往执行时间短的、占用存储资源少的测试用例。
进一步地,本发明所述数据流追踪模块用于字节标记和追踪、提取变量的类型信息;
字节标记和追踪:通过拦截目标二进制程序的输入函数获取输入的所有字节,对其中每个字节进行标记;在后续执行过程中,追踪被标记字节的传播过程以提取类型信息,并通过分析程序指令获得目标二进制程序执行时的数据依赖关系;
提取变量类型信息:当被标记的字节在内存中连续出现时,根据连续出现的字节序列长度推断对应变量的类型信息;当目标二进制程序调用库函数时,通过库函数的调用信息推断输入参数中被标记字节序列对应变量的类型信息。
进一步地,本发明所述混合执行模块,主要用于符号执行和约束求解;
符号执行:利用数据流追踪模块提供的数据依赖关系,对目标二进制程序中的变量进行符号映射并收集对应的路径约束条件,最终生成可用于约束求解的路径约束集合。
进一步地,本发明在符号执行过程中,通过对基本块进行处理和使用运行环境建模,收集路径约束条件。
进一步地,本发明在收集路径约束条件时,利用全局路径信息判断基本块是否已经执行过,进而只记录未执行的基本块对应的路径约束条件。
进一步地,本发明在收集路径约束条件时,针对目标二进制程序中重复执行的基本块,利用去重方法,对这些基本块进行剪枝。
进一步地,本发明在收集路径约束条件时,使用运行环境建模的方法,针对目标二进制程序在执行过程中与运行环境的交互行为,例如调用库函数操作,使用具体值代替其中的符号变量。
约束求解:根据符号执行收集的路径约束条件,仅对符号执行过程中记录的未执行的基本块对应的路径约束条件进行求解,得到新的候选测试用例。
进一步地,本发明在约束求解过程中,能够精简路径约束,删除与目标路径无关的约束条件。
进一步地,本发明在约束求解过程中,支持多种约束选择策略。所述约束选择策略包括针对待求解的目标路径对应的路径约束条件,向后扩展增加路径约束条件的范围;或支持采用基于滑动窗口对部分路径约束条件求解的优化求解策略,即当全部约束无法求解时仅求解部分路径约束。
进一步地,本发明在约束求解过程中,支持多种求解方法,求解时可以任意选择一种进行求解。所述求解方法包括使用现有求解器进行求解,例如采用Z3求解器求解;或针对复杂路径约束,借助约束不满足程度将路径约束的满足性问题转化为优化问题,然后使用基于机器学习的优化算法(如梯度下降算法)对路径约束进行求解。
有益效果:
本发明提出了一种结合程序追踪和混合执行的模糊测试系统框架,实现了无需插桩,即可对二进制程序进行测试;本发明改进了目标二进制程序执行信息记录机制,同时能够采用反馈机制,构建较为准确的路径信息。具体包括,首先,利用CPU的新特性,即可对目标二进制程序的执行过程进行追踪,而无需再进行模拟追踪,其次,基于所述追踪信息,采用反馈机制,构建较为准确的路径信息,利用该路径信息能够提高测试用例生成的有效性,提升模糊测试的效率和漏洞发现能力。
本发明进一步优化了混合执行过程和方法,如结合数据流追踪技术,将目标二进制程序中的变量符号化并动态收集目标二进制程序的路径约束条件,从而取代传统符号执行存在的中间语言转换和快照机制;同时支持多种求解方式,增强混合执行的扩展性和求解速率,提升对模糊测试的辅助效果。
附图说明
图1基于程序追踪和混合执行的模糊测试系统框架示意图。
具体实施方式
下面结合附图和具体实例对本发明进行详细说明。
本发明中,将人工提供的测试用例称为初始测试用例,将提供给模糊测试模块进行变异的测试用例称为种子测试用例,将在种子测试用例基础上通过后续变异直接生成的测试用例以及混合执行模块生成的测试用例称为候选测试用例,将经过筛选处理且保存到测试用例集的候选测试用例称为测试用例。
本发明实施例为一种基于程序追踪和混合执行的模糊测试系统,该系统主要包括三个模块(如图1所示),分别是模糊测试模块、数据流追踪模块和混合执行模块,其中模糊测试模块的输入为目标二进制程序、种子测试用例和由数据流追踪模块提取的种子测试用例中字节序列对应变量的类型信息,该类型信息用于辅助对种子测试用例进行变异生成新的候选测试用例,输出为触发新路径的测试用例,该测试用例存储到测试用例集中。数据流追踪模块的输入为目标二进制程序和模糊测试模块加载的种子测试用例,输出为种子测试用例中字节序列对应变量的类型信息和目标二进制程序中数据的依赖关系,该依赖关系用于辅助混合执行模块进行符号映射和收集路径约束。混合执行模块的输入为数据流追踪模块实时提供的目标二进制程序中数据的依赖关系,输出为由该模块新生成的可能触发新路径的候选测试用例,该候选测试用例具有较高的优先级,优先插入到候选测试用例队列头部。模糊测试模块和混合执行模块共享目标二进制程序的全局路径信息,该全局路径信息在模糊测试过程中动态变化,如果目标二进制程序每次执行测试用例时产生新的路径信息,则会对现有全局路径信息进行更新。
(1)模糊测试模块
测试用例集包括人工提供的初始测试用例和由模糊测试模块生成的的测试用例;候选测试用例队列包括变异种子测试用例得到的候选测试用例和混合执行生成的候选测试用例。
模糊测试模块在初始化时,从测试用例集中加载人工提供的初始测试用例,在后续测试时从测试用例集中加载种子测试用例,同时在数据流追踪模块中加载种子测试用例中字节序列对应变量的类型信息,之后依据相应的类型信息对该种子测试用例进行变异,将变异得到的候选测试用例插入到候选测试用例队列中,然后从候选测试用例队列头部选择一个候选测试用例执行,在此执行过程中通过CPU程序追踪技术收集目标二进制程序的执行信息,并在执行完成后对收集到的上述追踪信息进行处理,转换为目标二进制程序执行的路径信息,同时利用所述路径信息更新全局路径信息,如果有新的路径被发现,将刚才执行的候选测试用例保存到测试用例集中,否则丢弃该候选测试用例,继续测试。
在模糊测试模块中,主要包含五个部分,分别是加载种子测试用例和类型信息、变异测试用例、执行目标二进制程序、CPU程序追踪、筛选候选测试用例。
这五个部分的功能及处理流程为:
①加载种子测试用例和类型信息:在开始启动模糊测试时,从测试用例集中加载初始测试用例作为种子测试用例,同时加载从数据流追踪模块得到的该种子测试用例中字节序列对应变量的类型信息;在之后的模糊测试中,模糊测试模块会从测试用例集中选择下一个种子测试用例,优先选择未被选择过的、以往执行时间短的、占用存储资源少的测试用例。
②变异测试用例:将所述种子测试用例依照数据流追踪模块提供的类型信息,按照某种变异算法进行变异,生成新的候选测试用例,插入到候选测试用例队列中,供下一步执行目标二进制程序使用。
③执行目标二进制程序:从候选测试用例队列头部选择下一个候选测试用例执行,收集该候选测试用例执行过程中经过的时间和产生的错误等信息,其中时间信息可以作为下一次选择种子测试用例的依据之一,错误信息则用于记录目标二进制程序执行该候选测试用例后触发的错误。
④CPU程序追踪:a)在目标二进制程序执行时,CPU程序追踪机制记录程序的执行情况(例如程序控制流信息),b)将记录的追踪信息转换为程序执行时对应的基本块信息,c)根据所述基本块信息生成目标二进制程序在本次执行中对应的路径信息。
⑤筛选候选测试用例:将所述新生成的路径信息与全局路径信息进行比对,根据比对结果,判断是否有新路径发现,如果当前执行的候选测试用例不能发现新路径,将其丢弃;否则将其作为测试用例,保存到测试用例集中,以供下一次选择种子测试用例时使用,并更新全局路径信息。
(2)数据流追踪模块
数据流追踪模块读取模糊测试模块加载的种子测试用例,然后执行该种子测试用例以进行输入类型推断,提取种子测试用例中字节序列对应变量的类型信息;同时,在执行过程中通过分析程序指令获得目标二进制程序执行的数据依赖关系,以辅助混合执行模块进行符号映射和收集路径约束。数据流追踪模块可以通过多种方式实现,如动态污点分析。通过数据流追踪模块,可以辅助混合执行模块进行指令级别的混合执行,辅助模糊测试模块进行更有针对性的变异。
当具体执行某个种子测试用例时,数据流追踪模块主要包括以下两部分内容:
①字节标记和追踪:通过拦截目标二进制程序输入函数获取输入的所有字节,对其中每个字节进行标记;在后续执行过程中,追踪被标记字节的传播过程以提取类型信息,并通过分析程序指令获得目标二进制程序执行时的数据依赖关系;
②提取变量类型信息:当被标记的字节在内存中连续出现时,根据连续出现的字节序列长度推断对应变量的类型信息;当目标二进制程序调用库函数时,通过库函数的调用信息推断输入参数中被标记字节序列对应变量的类型信息。
通过上述步骤,数据流追踪模块获得目标二进制程序执行时的数据依赖关系,从而辅助混合执行模块进行符号映射并收集目标二进制程序的路径约束条件;同时数据流追踪模块将提取到的种子测试用例中字节序列对应变量的类型信息提供给模糊测试模块,辅助模糊测试模块进行更有针对性的变异。
(3)混合执行模块
与传统符号执行不同,本发明基于数据流追踪技术进行指令级的符号执行,从而取消了传统符号执行的中间语言转换、低效的快照等机制,在一定程度上提高了符号执行对模糊测试的辅助效果,提高了测试用例的生成速度。混合执行模块主要包括符号执行和约束求解两部分:
符号执行:利用数据流追踪模块提供的数据依赖关系,对目标二进制程序中的变量进行符号映射并收集对应的路径约束条件,最终生成可用于约束求解的路径约束集合;在此过程中使用全局路径信息提高路径约束的针对性,对重复基本块使用剪枝策略减少约束求解时发生路径爆炸和求解速率低的问题,使用具体值取代运行环境中的符号变量提高符号执行的可扩展性。具体方法为:
①在符号执行过程中利用全局路径信息判断当前基本块是否已经执行过,如果未执行则记录其相应的路径约束条件,进而在后续约束求解过程中对该路径约束条件求解,否则在后续约束求解过程中跳过已执行过的基本块对应的路径约束条件。
②当目标二进制程序中的基本块重复执行时,利用去重方法,例如指数退避算法、分块算法(每累计出现一定次数则计数器加1),对重复执行的基本块进行剪枝,从而将目标二进制程序的路径约束条件中冗余的部分删除,在后续过程中减少循环可能导致约束求解发生路径爆炸和求解速率低的问题。
③在符号执行过程中使用运行环境建模的方法,针对目标二进制程序在执行过程中与运行环境的交互行为,例如调用库函数操作,使用具体值代替其中的符号变量,从而提高符号执行的可扩展性和执行效率。
约束求解:根据符号执行收集的路径约束条件,仅对符号执行过程中记录的未执行的基本块对应的路径约束条件进行求解,得到新的候选测试用例,具体可以分为以下部分:
①精简路径约束:在求解过程中删除与目标路径无关的约束条件。
②约束选择策略:a)使用探测策略。针对待求解的目标路径对应的路径约束条件,向后扩展增加路径约束条件的范围,从而提高触发新路径的可能性。b)支持采用基于滑动窗口对部分路径约束条件求解的优化求解策略,即当全部约束无法求解时仅求解部分约束,从而提高约束求解的效率和可能性。
③多种求解方法:对符号执行提供并经过上述优化后得到的路径约束条件进行求解,在求解时支持多种求解方法,如a)使用现有求解器进行求解,如Z3求解器;b)针对复杂路径约束,借助约束不满足程度将路径约束的满足性问题转化为优化问题,然后使用基于机器学习的优化算法(如梯度下降算法)对路径约束进行求解。求解的结果是得到新的候选测试用例,并将这些候选测试用例加入到候选测试用例队列头部。
综上,支持对二进制程序进行高效模糊测试,主要利用现代CPU的程序追踪技术取代主流模糊测试工具(例如:AFL)的插桩过程,高效记录程序路径信息;将得到的路径信息反馈给模糊测试模块,利用该信息生成测试用例;使用优化的混合执行处理复杂的输入和约束条件,辅助生成候选测试用例。通过将程序追踪和混合执行结合到模糊测试工具中,使得对二进制程序测试时,能够更为有效地生成测试用例,从而提高模糊测试的效率和漏洞发现能力。
本发明与现有PTfuzz相比存在如下效果:
1)本发明实现的系统结合了混合执行。
2)利用数据流追踪模块提取的输入类型信息进行更有针对性的变异。
3)利用混合执行提高测试用例的生成速度和有效性。
本发明与现有QSYM相比存在如下效果:
1)数据流追踪和混合执行分离,在混合执行进行符号映射和收集路径约束条件时,数据流追踪模块可以继续执行,提高了执行效率,而QSYM不支持继续执行,因此性能优于QSYM。
2)使用模糊测试提供的全局路径信息辅助混合执行筛选需要进行求解的路径约束条件,从而避免生成重复测试用例以提高对模糊测试的辅助效果。
3)采用改进的约束选择策略,如使用探测策略向后扩展路径约束条件,和使用滑动窗口策略对部分路径约束条件求解。
4)支持多种约束求解方法。如a)使用现有求解器进行求解,如Z3求解器;b)针对复杂路径约束,借助约束不满足程度将路径约束的满足性问题转化为优化问题,然后使用基于机器学习的优化算法(如梯度下降算法)对路径约束进行求解。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于程序追踪和混合执行的模糊测试系统,其特征在于,该系统主要包括三个模块,分别是模糊测试模块、数据流追踪模块和混合执行模块,其中:
模糊测试模块的输入为目标二进制程序、种子测试用例和由数据流追踪模块提取的种子测试用例中字节序列对应变量的类型信息,输出为触发新路径的测试用例,该测试用例存储到测试用例集中,所述类型信息用于辅助对种子测试用例进行变异生成新的候选测试用例,并将所述候选测试用例插入到候选测试用例队列中,同时从候选测试用例队列头部选择一个候选测试用例执行;在目标二进制程序执行过程中,利用CPU程序追踪机制对目标程序进行追踪,获取路径信息以更新全局路径信息和筛选出触发新路径的测试用例;
数据流追踪模块的输入为目标二进制程序和模糊测试模块加载的种子测试用例,输出为种子测试用例中字节序列对应变量的类型信息和目标二进制程序中数据的依赖关系,该依赖关系用于辅助混合执行模块进行符号映射和收集路径约束;
混合执行模块的输入为数据流追踪模块实时提供的目标二进制程序中数据的依赖关系,输出为由该模块新生成的可能触发新路径的候选测试用例;
模糊测试模块和混合执行模块共享目标二进制程序的全局路径信息。
2.根据权利要求1所述基于程序追踪和混合执行的模糊测试系统,其特征在于,所述候选测试用例包括模糊测试模块生成的候选测试用例和混合执行模块生成的候选测试用例,所有候选测试用例构成一个候选测试用例队列,其中,混合执行模块生成的候选测试用例具有较高的优先级,优先插入队列头部。
3.根据权利要求1所述基于程序追踪和混合执行的模糊测试系统,其特征在于,所述模糊测试模块,用于加载种子测试用例和类型信息、变异测试用例、执行目标二进制程序、CPU程序追踪、筛选候选测试用例;
加载种子测试用例和类型信息:在开始启动模糊测试时,从测试用例集中加载初始测试用例作为种子测试用例,同时加载从数据流追踪模块得到的该种子测试用例中字节序列对应变量的类型信息;在之后的模糊测试中,模糊测试模块会从测试用例集中选择下一个种子测试用例;
变异测试用例:将获得的所述种子测试用例进行变异,生成新的候选测试用例,插入候选测试用例队列,供下一步执行目标二进制程序使用;
执行目标二进制程序:从候选测试用例队列头部选择一个候选测试用例执行,收集该候选测试用例执行过程中经过的时间和可能产生的错误信息,其中执行时间信息作为下一次选择种子测试用例的依据之一,错误信息则用于记录目标二进制程序执行该候选测试用例后触发的错误;
CPU程序追踪:在目标二进制程序执行时,CPU程序追踪机制记录程序的执行情况,将记录的追踪信息转换为基本块的执行信息,根据所述基本块执行信息生成目标二进制程序在本次执行中对应的路径信息;
筛选候选测试用例:将所述新生成的路径信息与全局路径信息进行比对,根据比对结果,判断是否有新路径发现,如果当前执行的候选测试用例不能发现新路径,将其丢弃;否则将其作为测试用例,保存到测试用例集中,以供下一次选择种子测试用例时使用,并更新全局路径信息。
4.根据权利要求1所述基于程序追踪和混合执行的模糊测试系统,其特征在于,所述利用CPU程序追踪机制对目标二进制程序进行追踪,获得目标二进制程序的执行信息,该执行信息用于更新全局路径信息和筛选出触发新路径的测试用例,如果目标二进制程序每次执行测试用例时产生新的路径信息,则会对现有全局路径信息进行更新。
5.根据权利要求1所述基于程序追踪和混合执行的模糊测试系统,其特征在于,所述数据流追踪模块用于字节标记和追踪、提取变量的类型信息;
字节标记和追踪:通过拦截目标二进制程序的输入函数获取输入的所有字节,对其中每个字节进行标记;在后续执行过程中,追踪被标记字节的传播过程以提取类型信息,并通过分析程序指令获得目标二进制程序执行时的数据依赖关系;
提取变量类型信息:当被标记的字节在内存中连续出现时,根据连续出现的字节序列长度推断对应变量的类型信息;当目标二进制程序调用库函数时,通过库函数的调用信息推断输入参数中被标记字节序列对应变量的类型信息。
6.根据权利要求1所述基于程序追踪和混合执行的模糊测试系统,其特征在于,所述混合执行模块,主要用于符号执行和约束求解;
符号执行:利用数据流追踪模块提供的数据依赖关系,对目标二进制程序中的变量进行符号映射并收集对应的路径约束条件,最终生成可用于约束求解的路径约束集合;
约束求解:根据符号执行收集的路径约束条件,仅对符号执行过程中记录的未执行的基本块对应的路径约束条件进行求解,得到新的候选测试用例。
7.根据权利要求6所述基于程序追踪和混合执行的模糊测试系统,其特征在于,在符号执行过程中,通过对基本块进行处理和使用运行环境建模,收集路径约束条件,在收集路径约束条件时,利用全局路径信息判断基本块是否已经执行过,进而只记录未执行的基本块对应的路径约束条件。
8.根据权利要求6所述基于程序追踪和混合执行的模糊测试系统,其特征在于,在约束求解过程中,支持多种约束选择策略,所述约束选择策略包括针对待求解的目标路径对应的路径约束条件,向后扩展增加路径约束条件的范围;或支持采用基于滑动窗口对部分路径约束条件求解的优化求解策略。
9.根据权利要求6所述基于程序追踪和混合执行的模糊测试系统,其特征在于,在约束求解过程中,支持多种求解方法,求解时可以任意选择一种进行求解,所述求解方法包括采用Z3求解器求解,或针对复杂路径约束,借助约束不满足程度将路径约束的满足性问题转化为优化问题,然后使用基于机器学习的优化算法对路径约束进行求解。
10.根据权利要求1所述基于程序追踪和混合执行的模糊测试系统,其特征在于,所述数据流追踪模块和混合执行模块可分离,在混合执行模块进行符号映射和收集路径约束条件时,数据流追踪模块可继续执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811612236.5A CN109739755B (zh) | 2018-12-27 | 2018-12-27 | 一种基于程序追踪和混合执行的模糊测试系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811612236.5A CN109739755B (zh) | 2018-12-27 | 2018-12-27 | 一种基于程序追踪和混合执行的模糊测试系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109739755A true CN109739755A (zh) | 2019-05-10 |
CN109739755B CN109739755B (zh) | 2020-07-10 |
Family
ID=66360217
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811612236.5A Active CN109739755B (zh) | 2018-12-27 | 2018-12-27 | 一种基于程序追踪和混合执行的模糊测试系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109739755B (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110175120A (zh) * | 2019-05-20 | 2019-08-27 | 北京理工大学 | 一种基于强化学习的模糊测试用例自适应变异方法和装置 |
CN110443045A (zh) * | 2019-08-13 | 2019-11-12 | 北京计算机技术及应用研究所 | 一种基于机器学习方法的模糊测试用例生成方法 |
CN111338952A (zh) * | 2020-02-25 | 2020-06-26 | 杭州世平信息科技有限公司 | 一种路径覆盖率反馈的模糊测试方法及装置 |
CN111767546A (zh) * | 2020-06-17 | 2020-10-13 | 北京理工大学 | 一种基于深度学习的输入结构推断方法和装置 |
CN111797405A (zh) * | 2020-07-01 | 2020-10-20 | 北京华昱卓程软件有限公司 | 一种序列导向的混合模糊测试方法及装置 |
CN111897733A (zh) * | 2020-08-07 | 2020-11-06 | 北京理工大学 | 一种基于最小集合覆盖的模糊测试方法和装置 |
CN112181833A (zh) * | 2020-09-28 | 2021-01-05 | 全球能源互联网研究院有限公司 | 一种智能化模糊测试方法、装置及系统 |
CN112306853A (zh) * | 2019-08-01 | 2021-02-02 | 深圳市腾讯计算机系统有限公司 | 一种模糊测试方法、装置、设备及介质 |
CN112445709A (zh) * | 2020-11-30 | 2021-03-05 | 安徽工业大学 | 一种通过gan解决afl测试模型数据不平衡的方法及装置 |
CN112631901A (zh) * | 2020-12-16 | 2021-04-09 | 中国科学院信息工程研究所 | 基于妨碍特征的模糊测试工具测试方法及电子装置 |
CN113204498A (zh) * | 2021-06-07 | 2021-08-03 | 支付宝(杭州)信息技术有限公司 | 针对闭源函数库生成模糊测试驱动器的方法和装置 |
CN113419960A (zh) * | 2021-07-01 | 2021-09-21 | 中国人民解放军国防科技大学 | 用于可信操作系统内核模糊测试的种子生成方法及系统 |
CN113434386A (zh) * | 2021-05-26 | 2021-09-24 | 深圳开源互联网安全技术有限公司 | 模糊测试的方法、系统及存储介质 |
CN113760737A (zh) * | 2021-02-19 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 数据测试方法和装置 |
CN114201383A (zh) * | 2021-07-30 | 2022-03-18 | 北京理工大学 | 一种面向二进制程序的模糊测试系统 |
CN115510450A (zh) * | 2022-09-20 | 2022-12-23 | 中国人民解放军国防科技大学 | 一种面向计算机二进制程序的比对依赖识别方法与系统 |
CN116541294A (zh) * | 2023-05-18 | 2023-08-04 | 上海安般信息科技有限公司 | 一种基于符号执行的模糊测试系统及方法 |
CN116541280A (zh) * | 2023-05-06 | 2023-08-04 | 中国电子技术标准化研究院 | 一种基于神经网络的模糊测试用例生成方法 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814053A (zh) * | 2010-03-29 | 2010-08-25 | 中国人民解放军信息工程大学 | 一种基于功能模型的二进制代码漏洞发现方法 |
CN102622558A (zh) * | 2012-03-01 | 2012-08-01 | 北京邮电大学 | 一种二进制程序漏洞的挖掘装置和方法 |
WO2014082908A1 (en) * | 2012-11-28 | 2014-06-05 | Siemens Aktiengesellschaft | Method and apparatus for generating test case for fuzz test |
CN103973511A (zh) * | 2014-04-28 | 2014-08-06 | 南京邮电大学 | 一种基于消息组合变异的服务脆弱性测试方法 |
CN104375942A (zh) * | 2014-12-11 | 2015-02-25 | 无锡江南计算技术研究所 | 一种面向二进制的混合模糊测试方法 |
CN104598383A (zh) * | 2015-02-06 | 2015-05-06 | 中国科学院软件研究所 | 一种基于模式的动态漏洞挖掘集成系统和方法 |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
CN108052825A (zh) * | 2017-12-29 | 2018-05-18 | 哈尔滨工业大学 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
CN109032942A (zh) * | 2018-07-24 | 2018-12-18 | 北京理工大学 | 一种基于afl的模糊测试框架 |
CN109062795A (zh) * | 2018-07-24 | 2018-12-21 | 北京理工大学 | 一种模糊测试用例选择方法和装置 |
-
2018
- 2018-12-27 CN CN201811612236.5A patent/CN109739755B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814053A (zh) * | 2010-03-29 | 2010-08-25 | 中国人民解放军信息工程大学 | 一种基于功能模型的二进制代码漏洞发现方法 |
CN102622558A (zh) * | 2012-03-01 | 2012-08-01 | 北京邮电大学 | 一种二进制程序漏洞的挖掘装置和方法 |
WO2014082908A1 (en) * | 2012-11-28 | 2014-06-05 | Siemens Aktiengesellschaft | Method and apparatus for generating test case for fuzz test |
CN103973511A (zh) * | 2014-04-28 | 2014-08-06 | 南京邮电大学 | 一种基于消息组合变异的服务脆弱性测试方法 |
CN104375942A (zh) * | 2014-12-11 | 2015-02-25 | 无锡江南计算技术研究所 | 一种面向二进制的混合模糊测试方法 |
CN104598383A (zh) * | 2015-02-06 | 2015-05-06 | 中国科学院软件研究所 | 一种基于模式的动态漏洞挖掘集成系统和方法 |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
CN108052825A (zh) * | 2017-12-29 | 2018-05-18 | 哈尔滨工业大学 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
CN109032942A (zh) * | 2018-07-24 | 2018-12-18 | 北京理工大学 | 一种基于afl的模糊测试框架 |
CN109062795A (zh) * | 2018-07-24 | 2018-12-21 | 北京理工大学 | 一种模糊测试用例选择方法和装置 |
Non-Patent Citations (2)
Title |
---|
李景曦: "基于控制流分析的模糊测试技术研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
梁晓兵: "面向二进制程序漏洞挖掘的相关技术研究", 《中国博士论文全文数据库 信息科技辑》 * |
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110175120A (zh) * | 2019-05-20 | 2019-08-27 | 北京理工大学 | 一种基于强化学习的模糊测试用例自适应变异方法和装置 |
CN112306853A (zh) * | 2019-08-01 | 2021-02-02 | 深圳市腾讯计算机系统有限公司 | 一种模糊测试方法、装置、设备及介质 |
CN112306853B (zh) * | 2019-08-01 | 2023-12-12 | 深圳市腾讯计算机系统有限公司 | 一种模糊测试方法、装置、设备及介质 |
CN110443045A (zh) * | 2019-08-13 | 2019-11-12 | 北京计算机技术及应用研究所 | 一种基于机器学习方法的模糊测试用例生成方法 |
CN110443045B (zh) * | 2019-08-13 | 2020-12-15 | 北京计算机技术及应用研究所 | 一种基于机器学习方法的模糊测试用例生成方法 |
CN111338952A (zh) * | 2020-02-25 | 2020-06-26 | 杭州世平信息科技有限公司 | 一种路径覆盖率反馈的模糊测试方法及装置 |
CN111338952B (zh) * | 2020-02-25 | 2024-03-29 | 杭州世平信息科技有限公司 | 一种路径覆盖率反馈的模糊测试方法及装置 |
CN111767546B (zh) * | 2020-06-17 | 2022-09-16 | 北京理工大学 | 一种基于深度学习的输入结构推断方法和装置 |
CN111767546A (zh) * | 2020-06-17 | 2020-10-13 | 北京理工大学 | 一种基于深度学习的输入结构推断方法和装置 |
CN111797405A (zh) * | 2020-07-01 | 2020-10-20 | 北京华昱卓程软件有限公司 | 一种序列导向的混合模糊测试方法及装置 |
CN111897733A (zh) * | 2020-08-07 | 2020-11-06 | 北京理工大学 | 一种基于最小集合覆盖的模糊测试方法和装置 |
CN111897733B (zh) * | 2020-08-07 | 2023-04-07 | 北京理工大学 | 一种基于最小集合覆盖的模糊测试方法和装置 |
CN112181833A (zh) * | 2020-09-28 | 2021-01-05 | 全球能源互联网研究院有限公司 | 一种智能化模糊测试方法、装置及系统 |
CN112445709A (zh) * | 2020-11-30 | 2021-03-05 | 安徽工业大学 | 一种通过gan解决afl测试模型数据不平衡的方法及装置 |
CN112445709B (zh) * | 2020-11-30 | 2022-09-30 | 安徽工业大学 | 一种通过gan解决afl测试模型数据不平衡的方法及装置 |
CN112631901A (zh) * | 2020-12-16 | 2021-04-09 | 中国科学院信息工程研究所 | 基于妨碍特征的模糊测试工具测试方法及电子装置 |
CN112631901B (zh) * | 2020-12-16 | 2023-08-08 | 中国科学院信息工程研究所 | 基于妨碍特征的模糊测试工具测试方法及电子装置 |
CN113760737A (zh) * | 2021-02-19 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 数据测试方法和装置 |
CN113434386A (zh) * | 2021-05-26 | 2021-09-24 | 深圳开源互联网安全技术有限公司 | 模糊测试的方法、系统及存储介质 |
CN113434386B (zh) * | 2021-05-26 | 2022-10-04 | 深圳开源互联网安全技术有限公司 | 模糊测试的方法、系统及存储介质 |
CN113204498A (zh) * | 2021-06-07 | 2021-08-03 | 支付宝(杭州)信息技术有限公司 | 针对闭源函数库生成模糊测试驱动器的方法和装置 |
CN113419960A (zh) * | 2021-07-01 | 2021-09-21 | 中国人民解放军国防科技大学 | 用于可信操作系统内核模糊测试的种子生成方法及系统 |
CN113419960B (zh) * | 2021-07-01 | 2022-06-14 | 中国人民解放军国防科技大学 | 用于可信操作系统内核模糊测试的种子生成方法及系统 |
CN114201383A (zh) * | 2021-07-30 | 2022-03-18 | 北京理工大学 | 一种面向二进制程序的模糊测试系统 |
CN115510450A (zh) * | 2022-09-20 | 2022-12-23 | 中国人民解放军国防科技大学 | 一种面向计算机二进制程序的比对依赖识别方法与系统 |
CN115510450B (zh) * | 2022-09-20 | 2023-08-01 | 中国人民解放军国防科技大学 | 一种面向计算机二进制程序的比对依赖识别方法与系统 |
CN116541280A (zh) * | 2023-05-06 | 2023-08-04 | 中国电子技术标准化研究院 | 一种基于神经网络的模糊测试用例生成方法 |
CN116541280B (zh) * | 2023-05-06 | 2023-12-26 | 中国电子技术标准化研究院 | 一种基于神经网络的模糊测试用例生成方法 |
CN116541294A (zh) * | 2023-05-18 | 2023-08-04 | 上海安般信息科技有限公司 | 一种基于符号执行的模糊测试系统及方法 |
CN116541294B (zh) * | 2023-05-18 | 2023-11-17 | 上海安般信息科技有限公司 | 一种基于符号执行的模糊测试系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109739755B (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739755A (zh) | 一种基于程序追踪和混合执行的模糊测试系统 | |
CN105912381B (zh) | 一种基于规则库的编译期代码安全检测方法 | |
CN111930903B (zh) | 基于深度日志序列分析的系统异常检测方法及系统 | |
Condamine et al. | Macroevolutionary perspectives to environmental change | |
CN105787367B (zh) | 一种软件更新的补丁安全性检测方法及系统 | |
CN107562626A (zh) | 一种封装Selenium和Sikuli实现Web自动化测试的方法 | |
US8732676B1 (en) | System and method for generating unit test based on recorded execution paths | |
CN110162457A (zh) | 用户界面的测试方法、装置、设备及存储介质 | |
CN110222715A (zh) | 一种基于动态行为链和动态特征的样本同源分析方法 | |
CN107085533B (zh) | 一种指针修改影响的分析方法和系统 | |
CN105868626B (zh) | 基于控制流粗粒度完整性的监控软件业务行为的方法 | |
CN103714000A (zh) | 一种面向敏感区域的嵌入式软件测试用例生成方法 | |
CN112506564B (zh) | 一种用于建立控制流图的方法、系统和介质 | |
CN105677570B (zh) | 一种基于事件响应函数树的gui软件测试用例生成方法 | |
CN103049379A (zh) | 一种系统测试的方法 | |
CN105487983B (zh) | 基于智能路径引导的敏感点逼近方法 | |
CN105528296B (zh) | 一种面向对象软件的类簇测试方法 | |
CN104156308B (zh) | 一种基于用户执行踪迹重放的移动应用测试方法 | |
CN106294136B (zh) | 并行程序运行期间性能变化的在线检测方法和系统 | |
CN107703773A (zh) | 一种基于硬件在环仿真系统的软件测试方法及装置 | |
CN110287700A (zh) | 一种iOS应用安全分析方法及装置 | |
CN113886832A (zh) | 智能合约漏洞检测方法、系统、计算机设备和存储介质 | |
CN113051161A (zh) | 基于历史代码变更信息的api误用检测方法 | |
CN110554952B (zh) | 一种基于搜索的分层回归测试数据生成方法 | |
CN104615535B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |