本发明实施例涉及灰盒模糊测试,特别是涉及一种集成污点分析和符号执行的灰盒模糊测试方法。
背景技术:
1、灰盒模糊测试利用被测程序的反馈信息,使测试用例不断地进化。该反馈信息主要通过插桩技术获得。现有的灰盒模糊测试方法所生成的测试用例难以满足苛刻的分支条件,无法有效地覆盖被测程序深层次的路径。
2、因此,有必要提供一种集成污点分析和符号执行的灰盒模糊测试方法,以解决上述问题。
技术实现思路
1、本发明提供一种集成污点分析和符号执行的灰盒模糊测试方法,通过集成污点分析和符号执行,提高模糊测试的效率及其覆盖深层次路径的能力。
2、本发明实施例提供一种集成污点分析和符号执行的灰盒模糊测试方法,包括:
3、对被测程序的源代码分别进行覆盖率插桩和污点分析插桩得到可执行程序;
4、从种子池中选择被变异的种子;
5、为所述被变异的种子分配第一变异策略和第二变异策略以生成测试用例,所述第一变异策略为基于覆盖率反馈机制的变异策略,所述第二变异策略为基于污点分析的变异策略;
6、将所述测试用例输入所述被测程序,如果所述测试用例覆盖了所述被测程序的新状态,则将其作为新种子;
7、基于符号执行的种子生成工具监测模糊测试的当前状态,辅助生成可以覆盖新状态的新种子,新种子被加入到所述种子池;
8、如果所述被测程序崩溃,则保存所述测试用例用于后续的进一步分析。
9、优选地,所述第二变异策略包括:
10、从所述源代码中识别分支条件的约束;
11、提取所述约束所对应的变量的类型;
12、对变量会影响分支条件是否满足的字节进行变异;
13、根据所述分支条件变量的类型,变异以满足特定路径的要求。
14、优选地,将所述分支条件定义为一个元组,其中。
15、优选地,所述对变量会影响分支条件是否满足的字节进行变异包括:
16、污点源经过传播,作用于所述分支条件所在的汇聚点,逐一改变测试用例的字节,如果所述分支条件的满足状态发生了变化,则该字节为关键字节,在后续的变异中,分配额外的算力变异所述关键字节。
17、优选地,所述根据所述分支条件变量的类型,变异以满足特定路径的要求包括:
18、当所述约束所对应的变量的类型为整型时,对其进行粗粒度的变异;当所述约束所对应的变量的类型为浮点型时,对其进行细粒度的变异。
19、优选地,所述粗粒度的变异包括按位翻转的步长为4的次数增加2倍,所述细粒度的变异包括按位翻转的步长为1的次数增加2倍。
20、优选地,所述基于符号执行的种子生成工具监测模糊测试的当前状态包括:
21、将所述源代码编译为llvm的中间代码;
22、对所述中间代码插桩,嵌入z3求解器;
23、使用llvm的clang编译器,将已插桩的中间代码编译成最终的二进制程序;
24、在模糊测试运行的过程中,使用符号执行辅助程序执行该二进制程序,为模糊测试生成满足约束的种子。
25、优选地,所述将所述源代码编译为llvm的中间代码包括:使用llvm的clang编译器,将所述被测程序的源代码编译为llvm的中间代码。
26、优选地,所述llvm的中间代码连接了前端和后端,所述前端产生所述中间代码,所述后端接收所述中间代码,在所述llvm的中间代码的层面对所述被测程序进行插桩。
27、优选地,所述z3求解器用于检查逻辑表达式的可满足性,如果所述逻辑表达式可满足,通过所述z3求解器得到约束的一个可行解。
28、与现有技术相比,本发明实施例的技术方案具有以下有益效果:
29、本发明实施例提供的一种集成污点分析和符号执行的灰盒模糊测试方法,包括:对被测程序的源代码分别进行覆盖率插桩和污点分析插桩得到可执行程序;从种子池中选择被变异的种子;为所述被变异的种子分配第一变异策略和第二变异策略以生成测试用例,所述第一变异策略为基于覆盖率反馈机制的变异策略,所述第二变异策略为基于污点分析的变异策略;将所述测试用例输入所述被测程序,如果所述测试用例覆盖了所述被测程序的新状态,则将其作为新种子;基于符号执行的种子生成工具监测模糊测试的当前状态,辅助生成可以覆盖新状态的新种子,新种子被加入到所述种子池;如果所述被测程序崩溃,则保存所述测试用例用于后续的进一步分析,结合第一变异策略和第二变异策略,在基于覆盖率反馈机制的变异策略的基础上增加基于污点分析的变异策略,通过识别测试用例的关键字节,作用于种子的变异过程,提高了模糊测试的效率,进一步地,基于符号执行的种子生成工具,在模糊测试运行的过程中,为其生成新种子作为补充,提供模糊测试覆盖深层次路径的能力;
30、进一步地,基于污点分析的变异策略,模糊测试器可以忽略测试用例不重要的字节,将算力集中于测试用例的关键字节;
31、进一步地,基于符号执行的种子生成工具将被测程序的变量抽象为符号,通过求解来满足特定路径的约束,符号执行的路径分析能力可以为模糊测试生成高质量的测试用例,基于符号执行,模糊测试器可以兼具符号执行特定路径的解析性和模糊测试自身的高效性,综合地提高对被测程序的覆盖率。
1.一种集成污点分析和符号执行的灰盒模糊测试方法,其特征在于,包括:
2.根据权利要求1所述的集成污点分析和符号执行的灰盒模糊测试方法,其特征在于,所述第二变异策略包括:
3.根据权利要求2所述的集成污点分析和符号执行的灰盒模糊测试方法,其特征在于,将所述分支条件定义为一个元组 ,其中。
4.根据权利要求2所述的集成污点分析和符号执行的灰盒模糊测试方法,其特征在于,所述对变量会影响分支条件是否满足的字节进行变异包括:
5.根据权利要求2所述的集成污点分析和符号执行的灰盒模糊测试方法,其特征在于,所述根据所述分支条件变量的类型,变异以满足特定路径的要求包括:
6.根据权利要求1所述的集成污点分析和符号执行的灰盒模糊测试方法,其特征在于,所述粗粒度的变异包括按位翻转的步长为4的次数增加2倍,所述细粒度的变异包括按位翻转的步长为1的次数增加2倍。
7.根据权利要求1所述的集成污点分析和符号执行的灰盒模糊测试方法,其特征在于,所述基于符号执行的种子生成工具监测模糊测试的当前状态包括:
8.根据权利要求7所述的集成污点分析和符号执行的灰盒模糊测试方法,其特征在于,所述将所述源代码编译为llvm的中间代码包括:使用llvm的clang编译器,将所述被测程序的源代码编译为llvm的中间代码。
9.根据权利要求8所述的集成污点分析和符号执行的灰盒模糊测试方法,其特征在于,所述llvm的中间代码连接了前端和后端,所述前端产生所述中间代码,所述后端接收所述中间代码,在所述llvm的中间代码的层面对所述被测程序进行插桩。
10.根据权利要求7所述的集成污点分析和符号执行的灰盒模糊测试方法,其特征在于,所述z3求解器用于检查逻辑表达式的可满足性,如果所述逻辑表达式可满足,通过所述z3求解器得到约束的一个可行解。