一种基于符号执行的模糊测试系统及方法与流程

未命名 08-05 阅读:93 评论:0


1.本发明实施例涉及模糊测试技术领域,特别是涉及一种基于符号执行的模糊测试系统及方法。


背景技术:

2.现有的模糊测试技术在进行软件漏洞挖掘时,可以快速发现处理一般输入的不同路径,也就是说,模糊测试器可以具有许多不同值的输入,能够触发有意义的程序行为。然而,生成特定的输入来通过应用程序中的复杂检查,对模糊测试器来说非常具有挑战性。
3.因此,针对目前软件漏洞挖掘出现的不足,有必要设计一种基于符号执行的模糊测试系统及方法以解决上述问题。


技术实现要素:

4.本发明提供一种基于符号执行的模糊测试系统及方法,在模糊测试停滞时切换到符号执行,从而提高测试效率。
5.本发明实施例提供一种基于符号执行的模糊测试系统,包括:初始化模块,其用于加载目标二进制文件;模糊测试模块,其用于与所述初始化模块交互,所述模糊测试模块用于自动化变异测试用例并将变异所得的测试用例输入给所述目标二进制文件以进行模糊测试并输出模糊测试结果,所述模糊测试结果包括分支覆盖情况,当所述分支覆盖情况为超过预设时间未发现新分支时,输出无法发现新分支的信号;迭代模块,其用于与所述模糊测试模块交互以获取所述分支覆盖情况,当所述迭代模块接收到所述无法发现新分支的信号时,输出调用符号执行引擎的信号;混合执行模块,其用于与所述迭代模块交互以获取所述调用符号执行引擎的信号,所述混合执行模块在获取到所述调用符号执行引擎的信号时,对所述目标二进制文件进行符号执行,识别产生路径分支的路径约束条件,根据所述路径约束条件生成满足不同约束条件的新的测试用例,所述新的测试用例通过所述迭代模块发送给所述模糊测试模块以重新激活模糊测试。
6.优选地,所述对所述目标二进制文件进行符号执行时,同时维护所述新的测试用例的具体值状态和符号值状态。
7.优选地,所述识别产生路径分支的路径约束条件包括沿着所述新的测试用例的执行路径,搜集产生路径分支的条件判断语句整理为符号约束,使用约束求解推断所述测试用例的变化。
8.优选地,所述迭代模块还用于记录路径探索进展,以同步所述模糊测试模块和所述混合执行模块之间的代码地址。
9.优选地,所述初始化模块还用于加载初始种子测试用例。
10.优选地,所述模糊测试模块对所述目标二进制文件进行模糊测试包括将有效测试
用例添加至种子集,基于所述种子集的测试用例,使用遗传变异算法生成新的测试用例进行模糊测试,所述有效测试用例包括触发待测目标崩溃和发现新代码分支的测试用例。
11.优选地,所述模糊测试模块对所述目标二进制文件进行模糊测试包括将所述目标二进制文件转化为ir中间语言,将所述ir中间语言翻译为本架构可执行的机器语言。
12.优选地,所述根据所述路径约束条件生成满足不同约束条件的新的测试用例包括当在测试用例执行路径上遇到决定控制流变化的判断条件时,如果反转该条件会发现新的状态转换则生成新的测试用例。
13.优选地,所述根据所述路径约束条件生成满足不同约束条件的新的测试用例还包括执行模糊测试卡住的测试用例,沿着所述模糊测试卡住的测试用例的执行路径收集路径约束条件,将所述路径约束条件中依照执行路径由深到浅的依次对条件判断取反,获得新的路径约束条件,根据所述新的路径约束条件求解,得到所述新的测试用例,所述路径约束条件为所述混合执行模块的符号值,所述新的测试用例为所述混合执行模块的具体值。
14.本发明实施例还提供一种基于符号执行的模糊测试方法,包括:加载目标二进制文件;获取所述目标二进制文件,所述模糊测试模块对所述目标二进制文件进行模糊测试并输出模糊测试结果,所述模糊测试结果包括分支覆盖情况,当所述分支覆盖情况为超过预设时间未发现新分支时,输出无法发现新分支的信号;获取所述分支覆盖情况,当所述迭代模块接收到所述无法发现新分支的信号时,输出调用符号执行引擎的信号;获取所述调用符号执行引擎的信号,在获取到所述调用符号执行引擎的信号时,对所述目标二进制文件进行符号执行,识别产生路径分支的路径约束条件,根据所述路径约束条件生成满足不同约束条件的新的测试用例,所述新的测试用例用于重新激活模糊测试。
15.与现有技术相比,本发明实施例的技术方案具有以下有益效果:本发明实施例的基于符号执行的模糊测试系统及方法,包括:初始化模块,其用于加载目标二进制文件;模糊测试模块,其用于与所述初始化模块交互以获取所述目标二进制文件,所述模糊测试模块对所述目标二进制文件进行模糊测试并输出模糊测试结果,所述模糊测试结果包括分支覆盖情况,当所述分支覆盖情况为超过预设时间未发现新分支时,输出无法发现新分支的信号;迭代模块,其用于与所述模糊测试模块交互以获取所述分支覆盖情况,当所述迭代模块接收到所述无法发现新分支的信号时,输出调用符号执行引擎的信号;混合执行模块,其用于与所述迭代模块交互以获取所述调用符号执行引擎的信号,所述混合执行模块在获取到所述调用符号执行引擎的信号时,对所述目标二进制文件进行符号执行,识别产生路径分支的路径约束条件,根据所述路径约束条件生成满足不同约束条件的新的测试用例,所述新的测试用例通过所述迭代模块发送给所述模糊测试模块以重新激活模糊测试,当模糊测试的分支覆盖情况为超过预设时间未发现新分支时,对目标二进制文件进行符号执行,识别产生路径分支的路径约束条件,根据路径约束条件生成满足不同约束条件的新的测试用例,新的测试用例通过所述迭代模块发送给所述模糊测试模块以重新激活模糊测试,根据发现的控制流转换对模糊测试的优先级进行排序,以不同路径执行的输入在未来输入的生成中获得优先级,从而使得测试用例的变异更加准确高
效;进一步地,通过符号执行指导变异方向,帮助模糊测试跨越难以满足的控制流转换节点,触达新的代码块,通过根据模糊测试的实时测试结果灵活切换模糊测试和符号执行,以较小的算力代价完成目标二进制文件在普通输入条件下的代码块测试分析;进一步地,迭代模块还用于记录路径探索进展,以同步所述模糊测试模块和所述混合执行模块之间的代码地址,从而保证在不同的测试模式下的追踪平滑过度,避免了由于符号执行和模糊测试执行地址不一致而导致的分析失败;进一步地,初始化模块还用于加载初始种子测试用例,从而有效缩短模糊测试的初始化过程。
附图说明
16.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
17.图1为本发明的一个实施例提供的基于符号执行的模糊测试系统的结构示意图;图2为本发明的一个实施例提供的基于符号执行的模糊测试系统的测试流程图;图3为本发明的一个实施例提供的基于符号执行的模糊测试方法的流程示意图。
具体实施方式
18.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
19.下面以具体的实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
20.基于现有技术存在的问题,本发明实施例提供一种基于符号执行的模糊测试系统及方法,在模糊测试停滞时切换到符号执行,从而提高测试效率。
21.图1为本发明的一个实施例提供的基于符号执行的模糊测试系统的结构示意图,图2为本发明的一个实施例提供的基于符号执行的模糊测试系统的测试流程图。
22.请参见图1和图2,本发明实施例提供一种基于符号执行的模糊测试系统,包括:初始化模块11,其用于加载目标二进制文件;模糊测试模块12,其用于与所述初始化模块11交互,所述模糊测试模块12用于自动化变异测试用例并将变异所得的测试用例输入给所述目标二进制文件以进行模糊测试并输出模糊测试结果,所述模糊测试结果包括分支覆盖情况,当所述分支覆盖情况为超过预设时间未发现新分支时,输出无法发现新分支的信号;迭代模块13,其用于与所述模糊测试模块12交互以获取所述分支覆盖情况,当所述迭代模块13接收到所述无法发现新分支的信号时,输出调用符号执行引擎的信号;混合执行模块14,其用于与所述迭代模块13交互以获取所述调用符号执行引擎的
信号,所述混合执行模块14在获取到所述调用符号执行引擎的信号时,对所述目标二进制文件进行符号执行,识别产生路径分支的路径约束条件,根据所述路径约束条件生成满足不同约束条件的新的测试用例,所述新的测试用例通过所述迭代模块13发送给所述模糊测试模块12以重新激活模糊测试。
23.具体地,初始化模块11调用i/o控制器加载目标二进制文件,将目标二进制文件传递给模糊测试模块12的虚拟机,生成初始种子测试用例,以初始种子测试用例为模糊测试的起点,依据测试结果指导后续种子变异。
24.在具体实施中,所述对所述目标二进制文件进行符号执行时,同时维护所述新的测试用例的具体值状态和符号值状态。
25.符号值状态表示测试用例的变量表达方式,具体值状态是其对应的符号约束求解集中的一个具体值。举例说明:有一段代码是判断输入的数字,并输出这个数字“是不是两位数”(当这个数小于100且大于9)和“这个数是不是接近100”(当这个数大于50)。代码中以变量“n”来表示用户输入,n会首先经过判断条件“(if (9 《 n && n 《 100))”再经过判断条件“(if (n 》 50))”。当程序的输出是“该数字是个两位数,且接近100”时,测试用例的符号值状态就是“n 《 100 && n 》 50”,具体值状态就是“51,52,53,....,98,99”,随着路径约束条件的增多,测试用例经过符号执行产生的符号值状态也会越多,对应的具体值状态范围会越来越小。
26.在具体实施中,所述识别产生路径分支的路径约束条件包括执行模糊测试卡住的测试用例,沿着所述模糊测试卡住的测试用例的执行路径收集路径约束条件,将所述路径约束条件中依照执行路径由深到浅的依次对条件判断取反,获得新的路径约束条件,根据所述新的路径约束条件求解,得到所述新的测试用例,所述路径约束条件为所述混合执行模块的符号值,所述新的测试用例为所述混合执行模块的具体值。也就是说,符号执行沿着先前输入的测试用例的执行路径收集路径约束条件,并对收集到的不同路径约束条件取反以获取新的路径约束,使用约束求解来获取与先前输入的测试用例不同的用例,即新的测试用例,以便识别执行未探索过的路径的输入。
27.在具体实施中,所述迭代模块还用于记录路径探索进展,以同步所述模糊测试模块和所述混合执行模块之间的代码地址。
28.具体地,使用gdb(the gnu project debugger)追踪模糊测试的用例执行路径,监督模糊测试的覆盖率变化。
29.在具体实施中,所述初始化模块还用于加载初始种子测试用例,通过加载初始种子测试用例,可以有效缩短模糊测试的初始化过程。
30.在具体实施中,所述模糊测试模块对所述目标二进制文件进行模糊测试包括将有效测试用例添加至种子集,基于所述种子集的测试用例,使用遗传变异算法生成新的测试用例进行模糊测试,所述有效测试用例包括触发待测目标崩溃和发现新代码分支的测试用例。
31.在具体实施中,所述模糊测试模块对所述目标二进制文件进行模糊测试包括将所述目标二进制文件转化为ir(intermediate representation,中间表示)中间语言,将所述ir中间语言翻译为本架构可执行的机器语言。采用模糊测试工具afl(american fuzzy lop),将目标二进制文件作为输入,通过qemu模拟技术将目标二进制文件动态运行起来。应
用qemu的动态代码生成器tgc(tiny code generator)进行插桩和覆盖率监控。
32.在具体实施中,所述根据所述路径约束条件生成满足不同约束条件的新的测试用例包括当在测试用例执行路径上遇到决定控制流变化的判断条件时,如果反转该条件会发现新的状态转换则生成新的测试用例。状态转换具体是指控制流的变化,在模糊测试中,测试用例已经覆盖了一定的代码语句,这些代码语句是符合了一定量的路径约束条件的,就是满足了一定数量的条件判断。在模糊测试的过程中,有机会通过变异测试用例来提高代码的覆盖率,即产生状态转换。依照测试用例通过符号执行收集的路径约束条件,反转路径约束条件,比如上述举的判断数值的例子中,将原本的“n 《 100”改为“n 》= 100”,再进行约束求解,得到新的n的值,也就是新的测试用例,再判断这个新的测试用例是否能够走到之前从未执行过的代码分支,如果执行到了新的代码分支则产生了控制流状态的转换。
33.在具体实施中,所述根据所述路径约束条件生成满足不同约束条件的新的测试用例还包括执行模糊测试卡住的测试用例,沿着所述模糊测试卡住的测试用例的执行路径收集路径约束条件,将所述路径约束条件中依照执行路径由深到浅的依次对条件判断取反,获得新的路径约束条件,根据所述新的路径约束条件求解,得到所述新的测试用例,所述路径约束条件为所述混合执行模块的符号值,所述新的测试用例为所述混合执行模块的具体值。路径约束条件是在测试用例执行的过程中收集的,在用例执行过程中不断添加新的路径约束条件,故路径约束条件中的不同条件要求是存在代码执行上的先后顺序的。
34.具体地,使用符号执行引擎angr追踪模糊测试器卡住的用例路径。
35.图3为本发明的一个实施例提供的基于符号执行的模糊测试系统的结构示意图。现在请参见图3,本发明实施例提供一种基于符号执行的模糊测试方法,包括:步骤s301:加载目标二进制文件;步骤s302:获取所述目标二进制文件,所述模糊测试模块对所述目标二进制文件进行模糊测试并输出模糊测试结果,所述模糊测试结果包括分支覆盖情况,当所述分支覆盖情况为超过预设时间未发现新分支时,输出无法发现新分支的信号;步骤s303:获取所述分支覆盖情况,当所述迭代模块接收到所述无法发现新分支的信号时,输出调用符号执行引擎的信号;步骤s304:获取所述调用符号执行引擎的信号,在获取到所述调用符号执行引擎的信号时,对所述目标二进制文件进行符号执行,识别产生路径分支的路径约束条件,根据所述路径约束条件生成满足不同约束条件的新的测试用例,所述新的测试用例用于重新激活模糊测试。
36.综上所述,本发明实施例的本发明实施例的基于符号执行的模糊测试系统及方法,包括:初始化模块,其用于加载目标二进制文件;模糊测试模块,其用于与所述初始化模块交互以获取所述目标二进制文件,所述模糊测试模块对所述目标二进制文件进行模糊测试并输出模糊测试结果,所述模糊测试结果包括分支覆盖情况,当所述分支覆盖情况为超过预设时间未发现新分支时,输出无法发现新分支的信号;迭代模块,其用于与所述模糊测试模块交互以获取所述分支覆盖情况,当所述迭代模块接收到所述无法发现新分支的信号时,输出调用符号执行引擎的信号;混合执行模块,其用于与所述迭代模块交互以获取所述调用符号执行引擎的信号,所述混合执行模块在获取到所述调用符号执行引擎的信号时,对所述目标二进制文件进行符号执行,识别产生路径分支的路径约束条件,根据所述路径
约束条件生成满足不同约束条件的新的测试用例,所述新的测试用例通过所述迭代模块发送给所述模糊测试模块以重新激活模糊测试,当模糊测试的分支覆盖情况为超过预设时间未发现新分支时,对目标二进制文件进行符号执行,识别产生路径分支的路径约束条件,根据路径约束条件生成满足不同约束条件的新的测试用例,新的测试用例通过所述迭代模块发送给所述模糊测试模块以重新激活模糊测试,根据发现的控制流转换对模糊测试的优先级进行排序,以不同路径执行的输入在未来输入的生成中获得优先级,从而使得测试用例的变异更加准确高效;进一步地,通过符号执行指导变异方向,帮助模糊测试跨越难以满足的控制流转换节点,触达新的代码块,通过根据模糊测试的实时测试结果灵活切换模糊测试和符号执行,以较小的算力代价完成目标二进制文件在普通输入条件下的代码块测试分析;进一步地,迭代模块还用于记录路径探索进展,以同步所述模糊测试模块和所述混合执行模块之间的代码地址,从而保证在不同的测试模式下的追踪平滑过度,避免了由于符号执行和模糊测试执行地址不一致而导致的分析失败;进一步地,初始化模块还用于加载初始种子测试用例,从而有效缩短模糊测试的初始化过程。
37.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

技术特征:
1.一种基于符号执行的模糊测试系统,其特征在于,包括:初始化模块,其用于加载目标二进制文件;模糊测试模块,其用于与所述初始化模块交互,所述模糊测试模块用于自动化变异测试用例并将变异所得的测试用例输入给所述目标二进制文件以进行模糊测试并输出模糊测试结果,所述模糊测试结果包括分支覆盖情况,当所述分支覆盖情况为超过预设时间未发现新分支时,输出无法发现新分支的信号;迭代模块,其用于与所述模糊测试模块交互以获取所述分支覆盖情况,当所述迭代模块接收到所述无法发现新分支的信号时,输出调用符号执行引擎的信号;混合执行模块,其用于与所述迭代模块交互以获取所述调用符号执行引擎的信号,所述混合执行模块在获取到所述调用符号执行引擎的信号时,对所述目标二进制文件进行符号执行,识别产生路径分支的路径约束条件,根据所述路径约束条件生成满足不同约束条件的新的测试用例,所述新的测试用例通过所述迭代模块发送给所述模糊测试模块以重新激活模糊测试。2.根据权利要求1所述的基于符号执行的模糊测试系统,其特征在于,所述对所述目标二进制文件进行符号执行时,同时维护所述新的测试用例的具体值状态和符号值状态。3.根据权利要求1所述的基于符号执行的模糊测试系统,其特征在于,所述识别产生路径分支的路径约束条件包括沿着所述新的测试用例的执行路径,搜集产生路径分支的条件判断语句整理为符号约束,使用约束求解推断所述测试用例的变化。4.根据权利要求1所述的基于符号执行的模糊测试系统,其特征在于,所述迭代模块还用于记录路径探索进展,以同步所述模糊测试模块和所述混合执行模块之间的代码地址。5.根据权利要求1所述的基于符号执行的模糊测试系统,其特征在于,所述初始化模块还用于加载初始种子测试用例。6.根据权利要求1所述的基于符号执行的模糊测试系统,其特征在于,所述模糊测试模块对所述目标二进制文件进行模糊测试包括将有效测试用例添加至种子集,基于所述种子集的测试用例,使用遗传变异算法生成新的测试用例进行模糊测试,所述有效测试用例包括触发待测目标崩溃和发现新代码分支的测试用例。7.根据权利要求1所述的基于符号执行的模糊测试系统,其特征在于,所述模糊测试模块对所述目标二进制文件进行模糊测试包括将所述目标二进制文件转化为ir中间语言,将所述ir中间语言翻译为本架构可执行的机器语言。8.根据权利要求1所述的基于符号执行的模糊测试系统,其特征在于,所述根据所述路径约束条件生成满足不同约束条件的新的测试用例包括当在测试用例执行路径上遇到决定控制流变化的判断条件时,如果反转该条件会发现新的状态转换则生成新的测试用例。9.根据权利要求8所述的基于符号执行的模糊测试系统,其特征在于,所述根据所述路径约束条件生成满足不同约束条件的新的测试用例还包括执行模糊测试卡住的测试用例,沿着所述模糊测试卡住的测试用例的执行路径收集路径约束条件,将所述路径约束条件中依照执行路径由深到浅的依次对条件判断取反,获得新的路径约束条件,根据所述新的路径约束条件求解,得到所述新的测试用例,所述路径约束条件为所述混合执行模块的符号值,所述新的测试用例为所述混合执行模块的具体值。10.一种基于符号执行的模糊测试方法,其特征在于,包括:
加载目标二进制文件;获取所述目标二进制文件,所述模糊测试模块对所述目标二进制文件进行模糊测试并输出模糊测试结果,所述模糊测试结果包括分支覆盖情况,当所述分支覆盖情况为超过预设时间未发现新分支时,输出无法发现新分支的信号;获取所述分支覆盖情况,当所述迭代模块接收到所述无法发现新分支的信号时,输出调用符号执行引擎的信号;获取所述调用符号执行引擎的信号,在获取到所述调用符号执行引擎的信号时,对所述目标二进制文件进行符号执行,识别产生路径分支的路径约束条件,根据所述路径约束条件生成满足不同约束条件的新的测试用例,所述新的测试用例用于重新激活模糊测试。

技术总结
本发明提供一种基于符号执行的模糊测试系统及方法,包括:初始化模块,其用于加载目标二进制文件;模糊测试模块,其用于自动化变异测试用例并将变异所得的测试用例输入给目标二进制文件执行以进行模糊测试,当分支覆盖情况为超过预设时间未发现新分支时,输出无法发现新分支的信号;迭代模块,其用于获取分支覆盖情况,当迭代模块接收到无法发现新分支的信号时,输出调用符号执行引擎的信号;混合执行模块,其用于获取调用符号执行引擎的信号,对目标二进制文件进行符号执行,生成新的测试用例,新的测试用例通过所述迭代模块发送给模糊测试模块以重新激活模糊测试。本发明在模糊测试停滞时切换到符号执行,从而提高测试效率。从而提高测试效率。从而提高测试效率。


技术研发人员:汪毅 王骁 陈江楠
受保护的技术使用者:上海安般信息科技有限公司
技术研发日:2023.05.18
技术公布日:2023/8/4
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐