一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

构建调用链转换图及引导生成X.509证书变种方法与流程

2021-11-26 22:06:00 来源:中国专利 TAG:

构建调用链转换图及引导生成x.509证书变种方法
技术领域
1.本发明涉及的是一种软件测试领域的技术,具体是一种通过收集程序动态执行时的函数调用链以构建调用链转换图引导x.509证书自动生成变种技术,用来测试openssl等实现ssl/tls安全协议软件。


背景技术:

2.模糊测试作为黑盒测试中的一种常用软件测试方法,通过向测试程序中发送非预期的测试用例来观查程序是否发生异常,从而找到潜在漏洞。一般有两种生成方法:一种将已有的测试用例通过变种算子产生新的测试用例,所产生的新的测试用例称之为变种,保留了原测试用例大部分的数据,仅部分数据经过变换和原先不同。变种算子可以是随机置换,即随机交换原测试用例中的部分数据或根据具体应用场景自定义,有目的性和引导性的增删改替换原测试用例中的部分数据。测试工具有proxyfuzz等;另一种根据目标程序的测试覆盖情况来调整生成新的测试用例,测试工具有afl等。大部分模糊测试会采取两种相结合的方法,以便应用于复杂数据类型输入的测试中,诸如x.509证书等。x.509证书作为ssl/tls通信协议中用于加密验证的重要实体,其测试的重要性不言而喻。
3.mucert作为针对x.509证书测试场景的工具,测试目标待测软件关于证书验证的功能,采用了覆盖率引导的模糊测试方法,将现实中的x.509证书作为初始种子集,自定义37种变种算子以生成变种测试用例。在生成变种的过程中,使用测试用例在目标待测程序中的累计覆盖率信息概率性的接收或拒绝变种以提高目标待测程序的累计覆盖率。累计覆盖率一般表示测试的充分性,即待测程序在执行中语句函数等的覆盖情况,但无法用来衡量测试集在目标程序中执行路径的多样性。若仅考虑测试用例集的充分性而不考虑其在目标测试程序中的执行路径,则对于那些在测试程序中执行路径一致的测试用例,其测试效果是一致的,这将会导致测试用例冗余,多样性不高。


技术实现要素:

4.本发明针对现有技术存在的上述不足,提出一种构建调用链转换图及引导生成x.509证书变种方法,提取测试用例在目标程序运行时收集到的函数名称,将函数名称根据执行时的先后顺序形成一条链,即函数调用链,将测试用例集和对应的函数调用链映射构建成调用链转换图,并使用调用链转换图指导生成新的变种测试用例过程来实现测试用例的自动生成。本发明相比较mucert,充分利用了测试用例集生成过程中的函数调用链信息,通过调用链转换图有效快速的生成多样化的测试用例,从而提升测试的效率。
5.本发明是通过以下技术方案实现的:
6.本发明通过构建测试种子集并输入目标测试程序,得到动态执行中的函数调用链信息并映射为调用链转换图中的初始节点;循环对调用链转换图中的取样节点通过变种算子生成新的变种测试用例并根据变种测试用例对应更新调用链转换图,直至生成目标数量的测试用例。
7.所述的映射是指:调用链转换图中的节点和测试用例对应,图的一个节点是一个测试用例集合,该测试用例集合中的任意一个测试用例在目标测试程序上得到的函数调用链是一致的。
8.所述的取样是指:通过计算潜力值并挑选节点和节点中的测试用例以用于生成变种。
9.所述的变种是指:对一个现有的测试用例进行修改生成一个新的测试用例,其实现方式视具体的测试场景而言,可自定义具体的变种方式也可对接已有的模糊测试工具如afl对测试用例进行修改而生成新的测试用例。在针对x.509证书测试的应用场景中,变种算子可采用mucert工具中提供的变种方法。
10.所述的更新调用链转换图是指:以更新后的变种测试用例作为输入得到目标测试程序运行时的函数调用链,更新中间文件并映射为转换图中的新节点,构造一条调用链转换图中取样节点和新节点之间的边并更新取样节点所有边的权值。技术效果
11.本发明整体解决已有模糊测试工具无法定量衡量测试用例集的多样性以及由于不考虑测试用例的多样性而导致生成大量冗余测试用例从而使得测试效率低下的问题。本发明通过调用链转换图可以定量衡量测试用例集的多样性,同时由于图中每个节点中的测试用例在测试目标上的函数调用链等同,即意味着在测试目标上的测试效果也相同,可以减少其他模糊测试工具随机对测试用例进行修改生成变种导致大量冗余的测试用例生成。此外,通过调用链转换图引导生成变种过程比起随机生成变种更具有导向性,能生成更多触发不同有效的执行路径的测试用例。
12.本发明旨在通过调用链转换图来定量度量测试集的多样性,并将其用于指导生成变种测试用例过程,提高测试用例集的多样性,从而提升测试的效率,可应用于诸如x.509证书测试等场景。
附图说明
13.图1为函数调用链信息映射为转换图的节点示意图;
14.图中:a)函数调用链信息,b)调用链信息转为hash值,c)调用链信息以及对应测试用例映射为节点;
15.图2为基于调用链转换图引导x.509证书生成变种的框架;
16.图3为实施例调用链转换图。
具体实施方式
17.如图2所示,为本实施例涉及一种构建调用链转换图并用以引导x.509证书自动变种用以测试的方法,通过收集初始测试种子集合在目标待测程序上的函数调用链,中间文件动态记录调用链hash值和对应的测试用例集合,并映射为转换图中的一个节点,随后迭代在图中采样,选取图中一个节点的一个测试用例,通过变种算子生成新的变种测试用例,收集其在目标测试程序上的调用链更新图和测试用例集。
18.如图3所示,为调用链转换图的实例,其中调用链转换图是带权重的有向图g=(v,e,w),其中:v为节点集合,每个节点映射为对应的函数调用链hash值,当两个测试用例同属
于一个节点,则对应的函数调用链hash值相同,说明其在目标测试程序上的执行路径相同;e为调用链转换边的集合,当一个节点为u,另一个节点为v,u中的一个测试用例在进行变种后得到一个属于节点v的测试用例,则得到一条从节点u指向节点v的边,用u->v来标记,则整个边集合为w为边上的权重集合,使用w=weight(u->v)表示在给定节点u的情况下得到指向v节点的概率,从节点u出发的所有边的权重和为1,即
19.本实施例自动变种方法迭代进行,包括:构建并初始化调用链转换图、利用调用链转换图指导生成变种过程并更新转换图,持续迭代直至生成目标数量的测试用例,具体包括:
20.步骤1)构建并初始化调用链转换图:获取测试用例种子集,使用工具etrace将初始种子集作为输入获取目标程序运行过程中的函数调用链,并使用md5编码为定长字符串并映射为调用链转换图中的节点;初始化用于动态维护每个散列值和对应的测试用例编号的中间文件后,记录每个节点的hash值和对应的测试用例集合。
21.步骤2)利用调用链转换图指导变种过程生成新的测试用例:使用潜能函数计算每个节点的潜力值其中:out(n)表示节点n的出度,mutate(n)表示节点n被选中进行变种的次数,在每个节点按照潜力值降序存进队列后,再从队列中选取序号为k的节点,其中:|array|表示数组的大小,rand为0-1的随机数,ε的值的含义是图中每个节点都没有被选中的概率,设为一个很小的值,其一般选为0.05。随机选取选中节点中的一个测试用例通过变种算子进行修改以生成变种。
22.所述的变种算子根据目标测试程序自定义,将根据变种算子修改后生成的变种测试用例添加回测试集中。
23.所述的变种是指:通过变种算子修改一个测试用例以生成一个新的测试用例,其变种算子视具体的测试场景自定义或者使用现有的工具如afl。在x.509证书测试场景中可以使用mucert工具中提供的变种操作。
24.通过上述步骤可以触发更多的执行路径,基于某些节点更容易触发生成新的节点,因而选中的概率需要更高一些。
25.步骤3)更新调用链转换图:收集新生成的变种测试用例在目标程序运行时的函数调用链,将函数调用链映射为调用链转换图中的一个节点;迭代取样调用链转换图中的节点并选取节点中的测试用例生成变种,根据变种测试用例在目标测试程序中的函数调用链映射为图中的新节点,动态添加原测试用例映射节点和变种映射节点中的边和更新边的权值,直至生成目标数量的证书测试用例,并输入待测程序进行测试,具体为:当该节点不存在于原先的调用链转换图中,则在图中添加新的节点。记变种测试用例对应的原测试用例所映射的节点为a,新生成的变种测试用例映射的节点为b,在转换图中添加一条从a指向b的有向边,最后将变种测试用例添加回测试集中。
26.所述的添加一条从a指向b的有向边,即由节点a指向节点b的边,同时从节点a出发的边上的权重需要更新,则节点a被选中进行变种次数为t1,其他从节点a出发的节点bi包含了t2
i
个由节点a中证书生成的变种证书,则从a到bi的权重被更新为
27.本实施例基于上述方法得到的整个测试集的多样性其中:g表示转换图,|g.v|表示转换图中的节点数,|t|表示测试集的个数。
28.转换图中的节点个数越多,则能探索到的执行路径越多,测试集越丰富。一般来说,测试集的多样性的值会随着测试集的增大而减小。因此,测试用例的生成目标是随着测试集的增加同时加速增加多样性指标。
29.经过具体实际实验,以现实中爬取的1005个x.509证书作为初始测试种子集,采取和mucert中一致的变种算子。测试准则使用差别测试方法,即将测试用例输入一组功能相近的测试程序,若结果一致,则视这组测试程序皆通过测试。其中目标测试软件对于测试用例输入得到不同的测试结果/提示组合,视为一个不一致性模式。在同样进行10000次变种算子操作后得到的测试用例集根据本方法中的多样性公式来计算,mucert的数据是5.59%,本方法生成的测试用例集的数据是26.35%。将测试用例集对目标测试软件openssl,gnutls.mbed tls,nss进行测试,mucert得到9种不一致性模式,采用本方法生成的测试用例得到34种不一致性模式。基于本方法生成的测试用例引起目标测试软件的不一致性模式是mucert的3.8倍。分析归纳引起不一致性模式或潜在漏洞的原因,mucert仅揭示4种,本方法揭示11种。
30.与现有技术相比,本方法生成的测试用例集的多样性和在测试x.509证书相关场景中的测试效率远高于mucert。
31.上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献