基于函数执行时间优化的定向灰盒模糊测试方法与系统
- 国知局
- 2024-07-31 22:47:48
本发明涉及定向模糊测试,具体是一种基于函数执行时间优化的定向灰盒模糊测试方法与系统。
背景技术:
1、定向模糊测试是一种针对软件程序的测试方法,旨在提高测试效率和测试覆盖率,从而帮助开发人员更快地发现和修复潜在的软件缺陷。定向模糊测试能很好的适用于补丁测试中,对于补丁之后的程序需要针对补丁位置进行测试,检测新版本是否有新的漏洞。定向模糊测试中,与原来版本相比较,修改过的或新增的代码行属于需要针对性测试的目标代码行;同时,由于定向模糊测试已知目标代码行,但逻辑上被目标代码行所影响的代码行即可疑代码行,也容易产生漏洞。
2、aflgo采用调和平均数计算距离的种子调度方式,给距离目标节点更近的种子分配更多的执行时间和能量,引导模糊器更高效触发漏洞。但是,其种子路径选择偏向于局部最短,容易陷入局部最优,且忽略了不同路径的复杂程度差异,导致模糊器在路径探索过程中浪费不必要的时间,降低测试效率。wi ndranger提出了分支约束条件难易程度度量方法,使用分支覆盖率引导模糊器覆盖更多分支,提高定向模糊测试的效率。但是,windranger用字节长度量化路径复杂程度,该方法只适用于数值判断、字符判断,并不适用于空文件判断或逻辑判断等情况。
技术实现思路
1、针对上述不足,本发明提出了一种基于函数执行时间优化的定向灰盒模糊测试方法,在静态分析阶段将控制流图各个部分的路径信息保存在函数调用图各个节点的参数中,并在动态执行阶段实时统计各个函数的执行时间,用于量化各个函数的复杂程度,更精确地计算种子距离,提高定向模糊测试效率。
2、为了实现上述目的,本发明具体采用的技术方案如下:
3、基于函数执行时间优化的定向灰盒模糊测试方法,该测试方法包括静态分析阶段和动态执行阶段,其中:
4、静态分析阶段:需要将控制流图各个部分的路径信息保存在函数调用图各个节点的参数中;首先,用编译器和代码差分工具分析被测程序,生成函数调用图(cg图)和程序控制流程图(cfg图),并找出目标代码行;计算cg图各个节点的初始参数,生成初始的含参cg图。
5、动态执行阶段:首先,利用模糊器生成的种子队列和静态阶段生成的含参cg图,计算种子距离,得到含种子距离的种子队列;随后将含种子距离的种子队列放入模糊器中,实现种子调度,并执行;最后,生成结果反馈文档,迭代更新含参cg图的参数。
6、进一步的,本发明所述的定向模糊测试静态分析阶段,具体包含以下步骤:
7、s1、静态分析阶段
8、s1-1、对被测程序进行静态分析
9、s1-1-1、使用l l vm工具对被测程序进行插桩,生成程序控制流图cfg图和函数调用图cg图。cg图的每一个节点都与唯一的cfg子图相对应。
10、s1-1-2、获取目标代码行集合,并对应cfg图中的节点集合作为cfg级目标节点集合。
11、用代码差分工具(如wi nmerge、diffmerge等工具)扫描获取新旧两个版本的差异代码行编号集合difcode={t1,t2,...,tn},其中tn表示第n个目标代码行的位置;随后,将集合difcode对应cfg图的节点集合di fcfg=
12、{t1cfg,t2cfg,...,tncfg},作为cfg级目标节点集合。
13、s1-1-3、将cfg级目标节点集合对应cg图节点集合,作为目标节点集合。
14、输入目标代码行编号,用distance.py中的fi nd_nodes函数找出difcode与cg图对应的图节点编号,保存在目标节点集合t={t1cg,t2cg,...,tncg}中,其中tncg表示tn在cg图中的位置,t表示cg图中的差异代码行所对应的所有目标节点在cg图中的位置集合,即目标节点集合。
15、输出cg图中目标节点集合t。
16、s1-1-4、初始化cg图各个节点的参数
17、对于cg图的各个节点,原始参数是fi,表示第i个节点在cg图中的编号;在fi的基础上增加x,y,z三个参数用于cg图节点权重的构建,节点参数组合表示为(fi,x,y,z),x表示cg图fi节点与目标节点的最短路径距离,y表示cg图fi节点对应的cfg子图的路径信息,z表示用执行时间转化的满足fi节点条件的难易程度(计算方式见步骤s2-4)。
18、s1-2、计算cg图各个节点的参数
19、此阶段计算cg图每个节点的x,y参数,分为以下两个步骤进行,如下所示:
20、s1-2-1、计算cg图各个节点与目标节点的最短路径距离x值
21、输入cg图各个节点位置和步骤s1-1-3中目标节点集合t,计算cg图节点到目标节点至少需要经过节点的个数,从而设定cg图节点的x参数,x参数计算公式如下:
22、
23、其中,γ和ρ是调节参数,本发明建议取值为(γ=0.9,ρ=0.5);di是在cg图中节点fi到达目标节点集合t的最短距离,需要存入节点fi的d字段中;preds表示目标节点集合t的前驱序列。需要注意的是,若节点fi是目标节点,则di=0;
24、输出含x参数的含参cg图;
25、s1-2-2、计算cg图各个节点对应的cfg子图的路径信息y值;
26、输入cfg图、计算x参数之后的含参cg图和目标节点集合t,根据每个cg图节点对应的cfg子图的路径信息,计算cg图每个节点对应的cfg子图的路径信息y值,含参cg图的参数y能够很好保存cfg图的路径信息,并且保证粒度与cfg图一致。具体计算方式如下:
27、先找到cg图各个节点对应的各个cfg子图,再用迪杰斯特拉算法计算各个cfg子图中的最短路径距离,最后存入cg图各个节点的参数y中,计算公式如下:
28、y(fi)=min{dist[fi,t1cg],dist[fi,t2cg],...,dist[fi,tncg]} (2)
29、其中,dist[fi,tjcg]表示在cg图中节点fi到目标节点集合t中tjcg节点的最短距离,依次对集合t中每个节点求出最短距离之后取min,用于表示节点i到目标节点集合t的最短距离,并作为cfg图的关键路径信息存入参数y中。
30、输出含(fi,x,y)参数的cg图,之后需要在动态执行阶段动态填入参数z的值,构建最终的动态含参cg图。
31、表1:静态分析阶段涉及到的符号定义
32、
33、
34、进一步的,本发明所述的定向模糊测试动态执行阶段需要计算并更新含参cg图节点的z参数值,具体包含以下步骤:
35、s2、动态执行阶段
36、s2-1、计算种子与目标节点的距离
37、输入含(fi,x,y,z)参数的cg图和模糊器生成的种子队列que,需要注意的是若此阶段还未计算出cg图各个节点的z参数值,则初始化z参数的值为1。
38、执行过程中,模糊器生成种子队列que={s1,s2,...,sn},其中sn表示第n个种子的执行路径。根据队列中每个种子的种子路径经过的cg图节点和cg图各个节点的(i,x,y,z)参数值,计算种子距离。实际上,种子距离等价于种子路径上各个节点到目标节点距离的算数平均数,即种子路径上节点到目标节点的距离需要通过cg各个节点的x、y、z三个参数值计算。若种子s的执行路径为:f0→f1→...→fm,则种子s到目标节点距离ds的计算公式如下:
39、
40、其中,y(fi)表示含参cg图中节点fi对应cfg图中的最短距离,对应cg节点中参数y的值,并且当i=0时是ma i n函数的到第一个cg节点对应的cfg图最短距离;x(fi)表示cg图中fi节点与目标节点t的最短路径距离。z(s,fi)是时间强度,用于量化fi节点约束条件难易程度,对应cg节点中参数z的值,若是第一次迭代,即还未计算出z参数的值,则令z(s,fi)=1;若不是第一次迭代,则可通过上一迭代轮次的步骤s2-4算得。
41、输出种子队列中各个种子对应的种子距离集合
42、s2-2、种子距离归一化
43、输入步骤s2-1中计算出的种子距离集合qd0,为避免种子由于从2-1中计算出的种子距离带有α*t(s,fi)参数组合,这些参数可能使得种子距离不在一个数量级,因此需要将上述计算得到种子距离集合qd0中的每个种子距离dsn进行归一化,将取值范围控制在(0,1),归一化后种子队列对应的种子距离ds的计算方式如下:
44、
45、其中,maxd为当前迭代轮次种子距离集合qd0中最大的种子距离,mind为当前迭代轮次种子距离集合qd0中最小的种子距离。
46、输出归一化后种子队列对应的种子距离集合
47、s2-3、种子选择
48、输入步骤s2-2归一化后种子队列对应的种子距离集合qd1。模糊测试过程中模糊器优先选择当前种子队列中种子距离较小的种子进行变异和执行。
49、此阶段输出当前迭代轮次的反馈信息,包括时间戳对应的漏洞数、执行分支数、覆盖率等反馈信息。
50、s2-4、计算当前迭代执行轮次各个cg节点的时间强度参数值z
51、输入步骤s2-3阶段得到的反馈信息和含参cg图,统计当前轮次迭代过程中各个分支节点的执行时间,随后计算出含参cg图各个节点时间强度z值,并动态更新含参cg图的参数z。
52、当前执行阶段种子s在分支节点fi上的执行时间t(fi)可以通过模糊器的q->exec_us变量(模糊器定义的变量)直接查询得到。将统计得到的数值t(fi)乘以参数α并取整,节点fi的时间强度参数值z(fi)计算公式为:
53、
54、α建议取值为0.5,θ建议取值为10s;然后用计算得到的z(fi)更新cg图上fi节点的参数z,在每个迭代轮次中动态更新含x,y,z三个参数的含参cg图。
55、输出当前轮次含x,y,z三个参数的含参cg图;
56、s2-5、判断是否终止动态执行循环
57、若迭代次数its到达最大迭代次数its_max或模糊测试时间到达η,结束定向模糊测试;否则转向s2-1,其中η建议取值为24h。
58、表2:动态执行阶段涉及到的符号定义
59、
60、本发明的另一个目的是提出基于函数执行时间优化的定向灰盒模糊测试系统,包括:
61、测试准备模块:基于af l的l l vm_mode对目标程序进行插桩编译,产生提供覆盖率信息的二进制可执行文件;
62、定向模糊测试静态分析模块:使用l l vm工具对被测程序进行插桩,生成程序控制流图cfg图和函数调用图cg图,并找出目标代码行;随后定义并计算出cg图各个节点的初始参数,生成初始的含参cg图;
63、定向模糊测试动态执行模块:实时统计各个函数的执行时间,作为量化各个函数复杂程度的参数;随后,结合模糊器生成的种子队列和静态阶段得到的cg图各个节点的初始参数,计算各个种子的种子距离,得到含种子距离的种子队列;然后将含种子距离的种子队列放入模糊器中,实现种子调度,并执行;最后,生成结果反馈文档,迭代更新含参cg图的参数,实现动态优化含参cg图;
64、结果反馈模块:将定向模糊测试过程中的整体覆盖率信息进行实时的反馈;将定向模糊测试过程中触发程序崩溃的次数进行实时的反馈,并且将触发程序崩溃的测试用例加以保存,便于后期对崩溃的重现与分析。
65、本发明具有以下的特点和有益效果:
66、1).采用含参函数调用图(含参cg图)保留程序控制流图(cfg图)关键信息,保证粒度与cfg图一致并保证计算精度,同时降低计算复杂度。达到即保留计算精确度的同时又简化计算;
67、2).用各个函数的执行时间合理量化各个函数的路径复杂度,引入cg图各个节点的执行时间作为各个节点路径复杂度的衡量标准,动态更迭cg图各个节点的参数,解决了函数路径复杂度衡量标准不准确、种子距离计算不高效的问题,最终高效地避开不必要执行的路径。
本文地址:https://www.jishuxx.com/zhuanli/20240730/194655.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表