CN110597715B - 一种基于模糊测试的测试样本优化方法 - Google Patents
一种基于模糊测试的测试样本优化方法 Download PDFInfo
- Publication number
- CN110597715B CN110597715B CN201910801955.XA CN201910801955A CN110597715B CN 110597715 B CN110597715 B CN 110597715B CN 201910801955 A CN201910801955 A CN 201910801955A CN 110597715 B CN110597715 B CN 110597715B
- Authority
- CN
- China
- Prior art keywords
- sample
- samples
- stain
- reduced set
- propagation path
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3696—Methods or tools to render software testable
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Complex Calculations (AREA)
Abstract
本发明涉及一种基于模糊测试的测试样本优化方法,属于软件漏洞挖掘领域。本发明首先筛除随机样本中应用程序不接受的样本,并利用基于动态规划的算法计算样本精简集,减小初始样本的规模;然后在测试过程中用动态污点分析技术跟踪污点传播路径并记录样本经过的指令,利用Simhash和海明距离的改进算法求解样本传播路径相似度,进一步降低样本冗余;最后对触发异常的样本进行遗传变异构建新的测试样本以增加样本的有效性。本发明有效减小了测试样本冗余,并且提升了测试样本的有效性。
Description
技术领域
本发明涉及一种基于模糊测试的测试样本优化方法,属于软件漏洞挖掘领域。
背景技术
软件漏洞是指软件在设计、实施、运行过程中潜藏的不足,黑客等不法分子可通过漏洞访问甚至破坏软件系统,从而造成巨大的经济损失。目前最常用的软件漏洞检测方法是模糊测试,模糊测试是一种将错误数据(即测试样本)故意发送到软件以发现软件中暗藏的漏洞的技术。但是传统的模糊测试技术随机产生测试样本,所以测试样本的重复性较高,同时大量测试样本在输入程序时直接被程序拒绝。因此需要减少模糊测试的测试样本数量,提升样本挖掘漏洞的有效性。
鉴于此,本发明基于云南省技术创新人才项目(2019HB113)进行研究工作。
发明内容
本发明提供了一种基于模糊测试的测试样本优化方法,以用于通过对初始的随机测试进行进行精简获得优化集,同时根据精简的样本获取其中导致程序异常的样本进行遗传变异,共同产生重复性较低的测试样本。
本发明的技术方案是:一种基于模糊测试的测试样本优化方法,所述方法步骤如下:
Step1、将模糊测试工具对应用程序进行测试时产生的随机测试样本记为初始样本,如果测试样本中存在样本类型不满足应用程序的输入规则,则将此类的测试样本记为无效样本,删除初始样本中的无效样本,并将剩下的所有样本记为样本集Σ={S1,S2,…,Si,…};其中,Si表示第i个测试样本;
Step2、利用静态程序分析软件对应用程序进行分析,得到基本块之间的调用关系,即得到测试样本覆盖的基本块的情况;基本块记为b,则第j个基本块记为bj,基本块集记为B={b1,b2,…,bj,…};样本Si对基本块的覆盖情况记为λ(Si)={br,bs,…},其中r≠s;样本集Σ的某些样本可能覆盖了相同的基本块,利用基于动态规划的算法将样本集Σ未覆盖相同基本块的样本记为精简集ω;
Step3、将精简集ω中的所有样本标记为污点,利用污点分析技术跟踪污点的传播,并记录污点的传播路径和导致程序异常的样本;
Step4、利用基于Simhash和海明距离的改进算法求解样本对应的污点之间的传播路径相似度,删除传播路径相似度较高的样本;将删除了样本传播路径相似度高的样本之后的测试样本集记为优化集Σop;
Step5、对步骤Step3中得出的导致程序异常的样本进行遗传变异产生新的测试样本,将由遗传变异算法生成的所有样本构成的集合记为变异集Σva;
Step6、将步骤Step4得到的优化集Σop和Step5得到的变异集Σva中的样本作为模糊测试产生的随机样本优化后的测试样本。
利用基于动态规划的算法计算精简集ω,该算法包括:
(1)将样本集Σ中样本的个数记为N,根据样本个数N将精简集ω分为N个阶段,第k个阶段的精简集ωk对基本块的覆盖情况记为λ(ωk)={bp,bq,…},其中p≠q;第k+1个阶段的精简集ωk+1的基本块覆盖情况为λ(ωk+1);并创建备忘录TA;其中,第1阶段的精简集ω1和第1个样本能覆盖的基本块相同,即λ(ω1)=λ(S1),则第1阶段的精简集ω1={S1},将第1阶段的精简集ω1的基本块覆盖情况λ(ω1)记录在备忘录TA中;
(2)求解状态转移方程:从备忘录TA中调出第k阶段的精简集ωk的基本块覆盖情况λ(ωk),精简集ωk+1的基本块覆盖情况为式(1):
λ(ωk+1)=max{λ(ωk),λ(ωk)+λ(Sk+1)}(1)
其中,max为求两个集合中不同元素最多的集合;将第k+1阶段的精简集ωk+1的基本块覆盖情况λ(ωk+1)记录在备忘录TA中;
精简集ωk到精简集ωk+1的状态转移方程为式(2):
(3)定义最优子结构:若选择样本Sk+1加入精简集ωk+1中,存在两种情况:(a)λ(ωk+1)=λ(ωk),即精简集wk能覆盖的基本块包含了样本Sk+1能覆盖的基本块;(b)λ(ωk+1)>λ(ωk),即精简集wk能覆盖的基本块不包含样本Sk+1能覆盖的基本块:
若满足情况(a)则说明精简集ωk是精简集ωk+1的最优子结构,样本Sk+1不在精简集ωk+1中,即精简集ωk+1的最优子结构R(ωk+1)=ωk;
若满足情况(b)则说明精简集ωk+1的最优子结构为其本身,样本Sk+1在精简集ωk+1中,即精简集ωk+1的最优子结构R(ωk+1)=ωk+1;
(4)求解精简集ω:根据状态转移方程对所有样本进行计算,全部样本计算完得到最后阶段的最优子结构即为最终状态的精简集ω。
所述Step3具体为:将精简集ω中的所有样本标记为污点,则第l个样本标记为污点STl,将污点STl记为二元组STl<vln,tagln>,将污点STl在传播路径上经过的指令按顺序记录,即污点STl的传播路径为Seql=[Il_1,Il_2,…,Il_n,…],将污点分析操作记为三元组T<ST,D,C>:
如果污点STl在传播路径上没有经过无害处理D就能直接传播到污点汇聚点C,则污点STl对应的样本导致程序出现异常,并将该样本加入异常样本集Ω中;
如果污点STl在传播路径上经过无害处理D后最终的污点变量的污点标志为0,即不能传播到污点汇聚点,则说明程序不存在异常,因此不将该污点加入异常样本集Ω中;
如果污点STl在传播路径上经过无害处理D后最终的污点变量的污点标志为1,则说明无法判断程序是否存在异常,因此不将该污点加入异常样本集Ω中;
其中,vln表示污点STl在传播路径上第n个污点变量,并将经过的指令记为Il_n;tagln表示污点变量vln的污点标志,tagln=1表示是污点标志,tagln=0表示非污点标志;D表示无害处理,如对污点变量vln进行加密或是移除等操作;C表示污点汇聚点,即污点STl在传播路径上最终的污点变量的污点标志为1。
所述步骤Step4具体为:将精简集ω中的第a个样本所对应的污点STa、第b个样本所对应记的污点STb的传播路径相似度记为sim(STa,STb),利用基于Simhash和海明距离的改进算法求解样本对应的污点之间的传播路径相似度,算法过程如下:
Step4.1、计算指令重复率:污点STa和污点STb中的指令集的重复率为式(3):
其中,tok(Seqa)和tok(Seqb)表示污点传播路径Seqa和Seqb去除重复指令的集合;cnt表示求集合的数量;
Step4.2、提取分词:将污点传播路径中每G条指令划分为一个分词,G取30;
Step4.3、计算样本传播路径的签名值:首先将第c个分词记为Pc,通过hash算法计算每个分词的hash值,然后按每个分词的重要程度的高低设定不同的权重,将分词Pc的权重记为Wc;再根据权重Wc,将分词的hash值进行加权处理,得到加权数字串,将加权数字串累计形成一个序列串;最后进行降维处理,即将序列串中大于0的数字记为1,小于0的数字记为0,由此得到污点传播路径的签名值;
Step4.4、计算海明距离:对比污点STa和污点STb传播路径的签名值,若相应位上的数字相同则海明距离加1,记污点STa和污点STb的海明距离为Hamming(STa,STb);
Step4.5、计算污点传播路径相似度:污点STa和污点STb的传播路径相似度为式(4):
Step4.6、若两个样本对应的污点传播路径相似度sim(STa,STb)的值高于预设值A,则随机删除其中一个样本,若低于预设值则保留两个样本;将删除了传播路径相似度高的样本之后的测试样本集记为优化集Σop。
所述步骤Step5具体为:
Step5.1、初始化种群:将异常样本集Ω中所有样本作为初始样本,并将其转为二进制编码;
Step5.2、交叉变异方法:对父代样本进行交叉变异,由此生成子代样本,设定生成子代样本的个数为n,记样本Sd的第x代样本中的第y个样本为Sd_x_y;交叉操作采用两点交叉的方式,样本长度记为L,然后随机选取2个0到L之间的数作为交叉点,然后交换这两个点的值;变异操作采用基本位变异的方式,随机产生1个0到L之间的数作为变异点位置,对该位置上的值取反;对二进制编码进行还原得到子代样本;
Step5.3、确定样本适应性函数:子代样本的适应性函数为式(5):
其中Nλ(Sd)表示样本Sd覆盖的基本块数量;
Step5.4、选择操作方法:用子代样本中适应性函数值最高的子代样本与其父代样本的适应性函数值进行比较:若子代样本适应性函数值大于父代样本,则保留该子代样本,删除父代样本;否则,不替换;
Step5.5、停止条件:由迭代次数作为停止条件,将迭代终止时生成的所有样本构成的集合记为变异集Σva,若未到停止条件,则循环执行步骤Step5.2到步骤Step5.4。
本发明的有益效果是:由于模糊测试产生的初始随机测试样本是盲目且低效的,因此需要减少测试样本的数量;本发明首先筛除随机样本中应用程序不接受的样本,并利用基于动态规划的算法计算样本精简集,减小初始样本的规模;然后在测试过程中用动态污点分析技术跟踪污点传播路径并记录样本经过的指令,利用Simhash和海明距离的改进算法求解样本传播路径相似度,进一步降低样本冗余;最后对触发异常的样本进行遗传变异构建新的测试样本以增加样本的有效性。本发明有效减小了测试样本冗余,并且提升了测试样本的有效性。
附图说明
图1为本发明的流程图;
图2为本发明污点分析过程图;
图3为签名值计算过程。
具体实施方式
实施例1:如图1-3所示,一种基于模糊测试的测试样本优化方法,所述方法步骤如下:
Step1、将模糊测试工具Sully对应用程序进行测试时产生的随机测试样本记为初始样本,如果测试样本中存在样本类型不满足应用程序的输入规则,则将此类的测试样本记为无效样本,删除初始样本中的无效样本,并将剩下的所有样本记为样本集Σ={S1,S2,…,Si};其中,Si表示第i个测试样本;
将模糊测试工具对应用程序进行测试时产生的随机测试样本记为初始样本。利用静态程序分析工具对软件进行词法分析、语法分析、语义分析判断测试样本的样本类型是否符合软件的输入规则。常见样本类型及其输入规则如表1所示。
表1常见样本类型及软件的输入规则
若测试样本的样本类型不满足上述的输入规则的测试样本记为无效样本,筛除无效样本,将剩下的样本样本记为样本集Σ。将样本集Σ中的测试样本记为S,则第i个测试样本记为Si,样本集Σ={S1,S2,…,Si}。
Step2、利用静态程序分析软件对应用程序进行分析,得到基本块之间的调用关系,即得到测试样本覆盖的基本块的情况;基本块记为b,则第j个基本块记为bj,基本块集记为B={b1,b2,…,bj};样本Si对基本块的覆盖情况记为λ(Si)={br,bs,…},其中基本块的编号r≠s;样本集Σ的某些样本可能覆盖了相同的基本块,利用基于动态规划的算法将样本集Σ未覆盖相同基本块的样本记为精简集ω;
进一步地,可以设置利用基于动态规划的算法计算精简集ω,该算法包括:
(1)将样本集Σ中样本的个数记为N,根据样本个数N将精简集ω分为N个阶段,第k个阶段的精简集ωk对基本块的覆盖情况记为λ(ωk)={bp,bq,…},其中p≠q;第k+1个阶段的精简集ωk+1的基本块覆盖情况为λ(ωk+1);并创建备忘录TA;其中,第1阶段的精简集ω1和第1个样本能覆盖的基本块相同,即λ(ω1)=λ(S1),则第1阶段的精简集ω1={S1},将第1阶段的精简集ω1的基本块覆盖情况λ(ω1)记录在备忘录TA中。
(2)求解状态转移方程:从备忘录TA中调出第k阶段的精简集ωk的基本块覆盖情况λ(ωk),精简集ωk+1的基本块覆盖情况为式(1):
λ(ωk+1)=max{λ(ωk),λ(ωk)+λ(Sk+1)}(1)
其中max为求两个集合中不同元素最多的集合;将第k+1阶段的精简集ωk+1的基本块覆盖情况λ(ωk+1)记录在备忘录TA中;
精简集ωk到精简集ωk+1的状态转移方程为式(2):
(3)定义最优子结构:若选择样本Sk+1加入精简集ωk+1中,存在两种情况:(a)λ(ωk+1)=λ(ωk),即精简集wk能覆盖的基本块包含了样本Sk+1能覆盖的基本块;(b)λ(ωk+1)>λ(ωk),即精简集wk能覆盖的基本块不包含样本Sk+1能覆盖的基本块:
若满足情况(a)则说明精简集ωk是精简集ωk+1的最优子结构,样本Sk+1不在精简集ωk+1中,即精简集ωk+1的最优子结构R(ωk+1)=ωk;
若满足情况(b)则说明精简集ωk+1的最优子结构为其本身,样本Sk+1在精简集ωk+1中,即精简集ωk+1的最优子结构R(ωk+1)=ωk+1;
(4)求解精简集ω:根据状态转移方程对所有样本进行计算,全部样本计算完得到最后阶段的最优子结构即为最终状态的精简集ω。
例如程序基本块集B={b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15},样本集为Σ={S1,S2,S3,S4,S5,S6,S7,S8}。而样本对基本块的覆盖情况如下所示:λ(S1)={b1,b13,b14},λ(S2)={b5,b6,b9,b11},λ(S3)={b1,b2,b4,b5,b13,b14,b15},λ(S4)={b3,b9},λ(S5)={b2,b3},λ(S6)={b4,b5,b6},λ(S7)={b3,b7,b8,b9,b10,b12},λ(S8)={b2,b4,b6,b10,b14}。第1阶段:根据上述算法的步骤(1),将精简集ω分成8个阶段,并创建备忘录TA。第1阶段的精简集ω1和第1个样本能覆盖的基本块相同,λ(ω1)=λ(S1)={b1,b13,b14},则第1阶段的精简集ω1={S1}。将第1阶段的精简集ω1的基本块覆盖情况λ(ω1))={b1,b13,b14}记录在备忘录TA中。第2阶段:根据步骤(2)从备忘录TA中调出第1阶段的精简集ω1的基本块覆盖情况λ(ω1)={b1,b13,b14},第2阶段的精简集ω2的基本块覆盖情况为:
λ(ω2)=max{λ(ω1),λ(ω1)+λ(S2)}
=max{{b1,b13,b14},{b1,b5,b6,b9,b11,b13,b14}}
={b1,b5,b6,b9,b11,b13,b14}
将第2阶段的精简集ω2的基本块覆盖情况λ(ω2)=={b1,b5,b6,b9,b11,b13,b14}存入备忘录TA中。精简集ω1到精简集ω2的状态转移方程为ω2=ω1+S2,即精简集ω2={S1,S2}。根据步骤(3),若选择样本S2加入第2阶段的精简集ω2中,则λ(ω2)>λ(ω1),即精简集ω2的最优子结构为其本身R(ω2)=ω2。同上述方式得出第3阶段的精简集ω3={S1,S2,S3},第4阶段的精简集ω4={S1,S2,S3,S4}。第5阶段:根据步骤(2)从备忘录TA中调出第4阶段的精简集ω1的基本块覆盖情况λ(ω4)={b1,,b2,b3,b4,b5,b6,b9,b11,b13,b14,b15},第5阶段的精简集ω5的基本块覆盖情况为
λ(ω5)=max{λ(ω4),λ(ω4)+λ(S5)}
=max{{b1,,b2,b3,b4,b5,b6,b9,b11,b13,b14,b15},
{b1,,b2,b3,b4,b5,b6,b9,b11,b13,b14,b15}}
={b1,,b2,b3,b4,b5,b6,b9,b11,b13,b14,b15}
将第5阶段的精简集ω5的基本块覆盖情况λ(ω5)={b1,,b2,b3,b4,b5,b6,b9,b11,b13,b14,b15}存入备忘录TA中。精简集ω4到精简集ω5的状态转移方程为ω5=ω4,即精简集ω5={S1,S2,S3,S4}。根据步骤(3),若选择样本S5加入第5阶段的精简集ω5中,则λ(ω5)=λ(ω4),即精简集ω5的最优子结构为精简集ω4。同上述方式得出第6阶段的精简集ω6=ω5={S1,S2,S3,S4},第7阶段的精简集ω7={S1,S2,S3,S4,S7},第8阶段的精简集ω8=ω7={S1,S2,S3,S4,S7}。因此根据步骤(4)得出精简集ω={S1,S2,S3,S4,S7}。
Step3、将精简集ω中的所有样本标记为污点,利用污点分析技术跟踪污点的传播,并记录污点的传播路径和导致程序异常的样本;
进一步地,可以设置所述Step3具体为:将精简集ω中的所有样本标记为污点,则第l个样本标记为污点STl,将污点STl记为二元组STl<vln,tagln>,将污点STl在传播路径上经过的指令按顺序记录,即污点STl的传播路径为Seql=[Il_1,Il_2,…,Il_n,…],将污点分析操作记为三元组T<ST,D,C>:
如果污点STl在传播路径上没有经过无害处理D就能直接传播到污点汇聚点C,则污点STl对应的样本导致程序出现异常,并将该样本加入异常样本集Ω中;
如果污点STl在传播路径上经过无害处理D后最终的污点变量的污点标志为0,即不能传播到污点汇聚点,则说明程序不存在异常,因此不将该污点加入异常样本集Ω中;
如果污点STl在传播路径上经过无害处理D后最终的污点变量的污点标志为1,则说明无法判断程序是否存在异常,因此不将该污点加入异常样本集Ω中;
其中,vln表示污点STl在传播路径上第n个污点变量,并将经过的指令记为Il_n;tagln表示污点变量vln的污点标志,tagln=1表示是污点标志,tagln=0表示非污点标志;D表示无害处理,如对污点变量vln进行加密或是移除等操作;C表示污点汇聚点,即污点STl在传播路径上最终的污点变量的污点标志为1。
污点根据传播逻辑进行传递,传播逻辑见表2所示。
表2污点传播逻辑
例如精简集ω={S1,S2},根据上述步骤,将精简集ω中的S1和S2标记为污点,则第1个样本S1标记为污点ST1,第2个样本S2标记为污点ST2。污点ST1和污点ST2根据表2的传播逻辑进行传播,传播情况为:污点ST1在传播路径上第1个污点变量v11,污点标志tag11=1,经过的指令记为I1_1;在传播路径上第2个污点变量v12,污点标志tag12=1,经过的指令记为I1_2;在传播路径上第3个污点变量v13,污点标志tag13=1,经过的指令记为I1_3;在传播路径上第4个污点变量v14,污点标志tag14=1,经过的指令记为I1_4,污点ST1在传播路径上最终的污点变量的污点标志为1,即ST1<v14,tag14>为污点汇聚点C。污点ST2在传播路径上第1个污点变量v21,污点标志tag21=1,经过的指令记为I2_1;在传播路径上第2个污点变量v22,污点标志tag22=1,经过的指令记为I2_2;在传播路径上第3个污点变量v23,污点标志tag23=1,经过的指令记为I2_3,污点变量v23经过无害处理D(加密/移除);在传播路径上第4个污点变量v24,污点标志tag24=0,经过的指令记为I2_4。因此污点ST1的传播路径为Seq1=[I1_1,I1_2,I_3,I1_4],污点ST2的传播路径为Seq2=[I2_1,I2_2,I2_3,I2_4]。污点ST1在传播路径上没有经过无害处理D,直接传播到污点汇聚点C,则污点ST1对应的样本S1导致程序出现异常,并将该样本加入异常样本集Ω中,即Ω={S1};污点ST2在传播路径上经过无害处理D(加密/移除)后,最终的污点变量的污点标志为0,即不能传播到污点汇聚点,则说明程序不存在异常。污点分析过程如图2所示。
Step4、利用基于Simhash和海明距离的改进算法求解样本对应的污点之间的传播路径相似度,删除传播路径相似度较高的样本;将删除了样本传播路径相似度高的样本之后的测试样本集记为优化集Σop;
进一步地,可以设置所述步骤Step4具体为:将精简集ω中的第a个样本所对应的污点STa、第b个样本所对应记的污点STb的传播路径相似度记为sim(STa,STb),利用基于Simhash和海明距离的改进算法求解样本对应的污点之间的传播路径相似度,算法过程如下:
Step4.1、计算指令重复率:样本传播过程中经过的指令重复次数对样本传播路径相似度有较大影响,若污点STa传播路径中某个指令重复次数多,而污点STb中另一个不同的指令重复次数多,此时会造成污点STa和污点STb的传播路径相似度过低。
污点STa和污点STb中的指令集的重复率为式(3):
其中,tok(Seqa)和tok(Seqb)表示污点传播路径Seqa和Seqb去除重复指令的集合;cnt表示求集合的数量;
Step4.2、提取分词:若将每条指令作为一个分词将占用大量内存同时运算时间增加,另外考虑到污点传播路径中前后几条指令之间存在关联关系,因此将几条指令组合为一个特征单词,以提高对比效率。将污点传播路径中每G条指令划分为一个分词,G取30;
Step4.3、计算样本传播路径的签名值:首先将第c个分词记为Pc,通过hash算法计算每个分词的hash值,然后按每个分词的重要程度的高低设定不同的权重,将分词Pc的权重记为Wc;再根据权重Wc,将分词的hash值进行加权处理,得到加权数字串,将加权数字串累计形成一个序列串;最后进行降维处理,即将序列串中大于0的数字记为1,小于0的数字记为0,由此得到污点传播路径的签名值;
Step4.4、计算海明距离:对比污点STa和污点STb传播路径的签名值,若相应位上的数字相同则海明距离加1,记污点STa和污点STb的海明距离为Hamming(STa,STb);
Step4.5、计算污点传播路径相似度:污点STa和污点STb的传播路径相似度为式(4):
Step4.6、若两个样本对应的污点传播路径相似度sim(STa,STb)的值高于预设值A,则随机删除其中一个样本,若低于预设值则保留两个样本;将删除了传播路径相似度高的样本之后的测试样本集记为优化集Σop。
例如样本S3对应污点ST3,样本S4对应污点ST4。污点ST3的传播路径Seq3=[I3_1,I3_2,…,I3_120],ST4的传播路径为Seq4=[I4_1,I4_2,,…,I4_150]。其中污点ST3的的传播路径Seq3指令集合除去重复指令后剩下的集合tok(Seq3)的数量cnt(tok(Seq3))=80;污点ST4的传播路径Seq4指令集合除去某些重复指令后剩下的集合tok(Seq4)的数量cnt(tok(Seq4))=120;而污点ST3和污点ST4的传播路径指令集合tok(Seq3)∧tok(Seq4)除去某些重复指令后剩下的集合数量cnt(tok(Seq3)∧tok(Seq4))=150。设定两个样本对应的污点传播路径相似度的预设值A=5。根据上述步骤Step4.1,污点ST3和污点ST4中的指令集的重复率为
根据上述步骤Step4.2,污点ST3传播路径中的指令划分后的分词为P1,P2,P3,P4;污点ST4传播路径中的指令划分后的分词为P2,P5,P6,P7,P8。根据上述步骤Step4.3,污点ST3的分词P1,P2,P3,P4对应的权重为W1=2,W2=4,W3=1,W4=5;污点ST4的分词P2,P5,P6,P7,P8对应的权重为W2=4,W5=1,W6=3,W7=5,W8=4。污点ST3和污点ST4传播路径的签名值的计算过程如图3所示。则污点ST3传播路径的签名值为100111,污点ST4传播路径的签名值为000111。根据上述步骤Step4.4,污点ST3和污点ST4传播路径的签名值对应位上的数字相同个数为5,所以污点ST3和污点ST4的海明距离Hamming(ST3,ST4)=5。根据上述步骤Step4.5,污点ST3和污点ST4的传播路径相似度为:
污点ST3和污点ST4的传播路径相似度sim(ST3,ST4)=5.8,高于预设值A=5。因此删除污点ST3和污点ST4对应的样本S3和样本S4中的任一个。假设删除样本S4,则优化集Σop={S3}。
Step5、对Step3中得出的异常样本集Ω中导致程序异常的样本进行遗传变异产生新的测试样本,将由遗传变异算法生成的所有样本构成的集合记为变异集Σva;
进一步地,可以设置所述步骤Step5具体为:
Step5.1、初始化种群:将异常样本集Ω中所有样本作为初始样本,并将其转为二进制编码;
Step5.2、交叉变异方法:对父代样本进行交叉变异,由此生成子代样本,设定生成子代样本的个数为n,记样本Sd的第x代样本中的第y个样本为Sd_x_y;交叉操作采用两点交叉的方式,样本长度记为L,然后随机选取2个0到L之间的数作为交叉点,然后交换这两个点的值;变异操作采用基本位变异的方式,随机产生1个0到L之间的数作为变异点位置,对该位置上的值取反;对二进制编码进行还原得到子代样本;
Step5.3、确定样本适应性函数:子代样本的适应度存在两种情况:一是若子代样本能覆盖的基本块数量越多则其适应性越高;二是若子代样本在传播的过程中经过的路径和父代样本越相似则适应性越低。子代样本的适应性函数为式(5):
其中Nλ(Sd)表示样本Sd覆盖的基本块数量。
Step5.4、选择操作方法:
因为排挤选择方法可以提高样本群体的多样性,所以本发明采用此方法,用子代样本中适应性函数值最高的子代样本与其父代样本的适应性函数值进行比较:若子代样本适应性函数值大于父代样本,则保留该子代样本,删除父代样本;否则,不替换;
Step5.5、停止条件:由迭代次数作为停止条件,将迭代终止时生成的所有样本构成的集合记为变异集Σva,若未到停止条件,则循环执行步骤Step5.2到步骤Step5.4。
例如异常样本集Ω={S1},样本S1覆盖的基本块数量Nλ(S1)=10,适应性函数Adap(S1)=2。停止条件为迭代次数50次。根据上述步骤Step5.1,将样本S1作为初始样本,并将其转为二进制编码00010001111001001011。根据步骤Step5.2,初始样本S1为父代样本,设定生成子代样本的个数n=5。样本S1的第1代样本中的第1个样本为S1_1_1,对其进行交叉变异操作。交叉操作:随机选取第1个数和第11个数为交叉点,即00010001111001001011,交叉后为10010001110001001011。变异操作:随机选取第7个数为变异点,即00010001111001001011,变异后为00010011111001001011。对二进制编码进行还原得到样本S1_1_1。同上述方式得到样本S1_1_2、S1_1_3、S1_1_4、S1_1_5。根据步骤Step5.3,样本S1_1_1覆盖的基本块数量Nλ(S1_1_1)=12,样本S1_1_1在传播的过程中经过的路径和样本S1相似度sim(S1,S1_1_1)=4,则样本S1_1_1的适应性函数为
小于样本S1适应性函数Adap(S1)=2,因此不保留样本S1_1_1。样本S1_1_2的适应性函数Adap(S1_1_2)=2.3,样本S1_1_3的适应性函数Adap(S1_1_3)=3.1,样本S1_1_4的适应性函数Adap(S1_1_4)=1,样本S1_1_5的适应性函数Adap(S1_1_5)=1.3,因此保留样本S1_1_2和S1_1_3,删除父代样本S1。将样本样本S1_1_2和S1_1_3作为父代样本。根据步骤Step5.5,未到停止条件,则循环执行步骤Step5.2到步骤Step5.4。假设最终得到样本S1_1_2、S1_1_3、S1_2_3、S1_14_5、S1_15_1。
将生成的所有样本构成的集合记为变异集Σva,即Σva={S1_1_2,S1_1_3,S1_2_3,S1_14_5,S1_15_1}。
Step6、将步骤Step4得到的优化集Σop和Step5得到的变异集Σva中的样本作为模糊测试产生的随机样本优化后的测试样本。
例如模糊测试产生的随机样本Σ={S1,S2,S3,S4,S5,S6,S7,S8},Step4得到的优化集Σop={S3,S5,S6},Step5得到的变异集Σva={S3_1_2,S3_1_3,S3_2_3,S3_14_5,S3_15_1,S6_1_3,S6_22_1,S6_24_5,S6_25_1}。
上面结合附图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
Claims (2)
1.一种基于模糊测试的测试样本优化方法,其特征在于:所述方法步骤如下:
Step1、将模糊测试工具对应用程序进行测试时产生的随机测试样本记为初始样本,如果测试样本中存在样本类型不满足应用程序的输入规则,则将此类的测试样本记为无效样本,删除初始样本中的无效样本,并将剩下的所有样本记为样本集Σ={S1,S2,…,Si,…};其中,Si表示第i个测试样本;
Step2、利用静态程序分析软件对应用程序进行分析,得到基本块之间的调用关系,即得到测试样本覆盖的基本块的情况;基本块记为b,则第j个基本块记为bj,基本块集记为B={b1,b2,…,bj,…};样本Si对基本块的覆盖情况记为λ(Si)={br,bs,…},其中r≠s;样本集Σ的某些样本可能覆盖了相同的基本块,利用基于动态规划的算法将样本集Σ未覆盖相同基本块的样本记为精简集ω;
Step3、将精简集ω中的所有样本标记为污点,利用污点分析技术跟踪污点的传播,并记录污点的传播路径和导致程序异常的样本;
Step4、利用基于Simhash和海明距离的改进算法求解样本对应的污点之间的传播路径相似度,删除传播路径相似度较高的样本;将删除了样本传播路径相似度高的样本之后的测试样本集记为优化集Σop;
Step5、对步骤Step3中得出的导致程序异常的样本进行遗传变异产生新的测试样本,将由遗传变异算法生成的所有样本构成的集合记为变异集Σva;
Step6、将步骤Step4得到的优化集Σop和Step5得到的变异集Σva中的样本作为模糊测试产生的随机样本优化后的测试样本;
利用基于动态规划的算法计算精简集ω,该算法包括:
(1)将样本集Σ中样本的个数记为N,根据样本个数N将精简集ω分为N个阶段,第k个阶段的精简集ωk的基本块的覆盖情况记为λ(ωk)={bp,bq,…},其中p≠q;第k+1个阶段的精简集ωk+1的基本块覆盖情况为λ(ωk+1);并创建备忘录TA;其中,第1阶段的精简集ω1和第1个样本能覆盖的基本块相同,即λ(ω1)=λ(S1),则第1阶段的精简集ω1={S1},将第1阶段的精简集ω1的基本块覆盖情况λ(ω1)记录在备忘录TA中;其中,k=1,2,...N;
(2)求解状态转移方程:从备忘录TA中调出第k阶段的精简集ωk的基本块覆盖情况λ(ωk),精简集ωk+1的基本块覆盖情况为式(1):
λ(ωk+1)=max{λ(ωk),λ(ωk)+λ(Sk+1)}(1)
其中,max为求两个集合中不同元素最多的集合;将第k+1阶段的精简集ωk+1的基本块覆盖情况λ(ωk+1)记录在备忘录TA中;
精简集ωk到精简集ωk+1的状态转移方程为式(2):
(3)定义最优子结构:若选择样本Sk+1加入精简集ωk+1中,存在两种情况:(a)λ(ωk+1)=λ(ωk),即精简集wk能覆盖的基本块包含了样本Sk+1能覆盖的基本块;(b)λ(ωk+1)>λ(ωk),即精简集wk能覆盖的基本块不包含样本Sk+1能覆盖的基本块:
若满足情况(a)则说明精简集ωk是精简集ωk+1的最优子结构,样本Sk+1不在精简集ωk+1中,即精简集ωk+1的最优子结构R(ωk+1)=ωk;
若满足情况(b)则说明精简集ωk+1的最优子结构为其本身,样本Sk+1在精简集ωk+1中,即精简集ωk+1的最优子结构R(ωk+1)=ωk+1;
(4)求解精简集ω:根据状态转移方程对所有样本进行计算,全部样本计算完得到最后阶段的最优子结构即为最终状态的精简集ω;
所述步骤Step4具体为:将精简集ω中的第a个样本所对应的污点STa、第b个样本所对应记的污点STb的传播路径相似度记为sim(STa,STb),利用基于Simhash和海明距离的改进算法求解样本对应的污点之间的传播路径相似度,算法过程如下:
Step4.1、计算指令重复率:污点STa和污点STb中的指令集的重复率为式(3):
其中,tok(Seqa)和tok(Seqb)表示污点传播路径Seqa和Seqb去除重复指令的集合;cnt表示求集合的数量;
Step4.2、提取分词:将污点传播路径中每G条指令划分为一个分词,G取30;
Step4.3、计算样本传播路径的签名值:首先将第c个分词记为Pc,通过hash算法计算每个分词的hash值,然后按每个分词的重要程度的高低设定不同的权重,将分词Pc的权重记为Wc;再根据权重Wc,将分词的hash值进行加权处理,得到加权数字串,将加权数字串累计形成一个序列串;最后进行降维处理,即将序列串中大于0的数字记为1,小于0的数字记为0,由此得到污点传播路径的签名值;
Step4.4、计算海明距离:对比污点STa和污点STb传播路径的签名值,若相应位上的数字相同则海明距离加1,记污点STa和污点STb的海明距离为Hamming(STa,STb);
Step4.5、计算污点传播路径相似度:污点STa和污点STb的传播路径相似度为式(4):
Step4.6、若两个样本对应的污点传播路径相似度sim(STa,STb)的值高于预设值A,则随机删除其中一个样本,若低于预设值则保留两个样本;将删除了传播路径相似度高的样本之后的测试样本集记为优化集Σop;
所述步骤Step5具体为:
Step5.1、初始化种群:将异常样本集Ω中所有样本作为初始样本,并将其转为二进制编码;
Step5.2、交叉变异方法:对父代样本进行交叉变异,由此生成子代样本,设定生成子代样本的个数为n,记第d个父代样本Sd的第x代样本中的第y个子代样本为Sd_x_y;交叉操作采用两点交叉的方式,样本长度记为L,然后随机选取2个0到L之间的数作为交叉点,然后交换这两个点的值;变异操作采用基本位变异的方式,随机产生1个0到L之间的数作为变异点位置,对该位置上的值取反;对二进制编码进行还原得到子代样本;其中,d表示父代样本的编号,x表示迭代次数,y表示子代样本的编号;
Step5.3、确定样本适应性函数:子代样本的适应性函数为式(5):
其中Nλ(Sd)表示样本Sd覆盖的基本块数量;
Step5.4、选择操作方法:用子代样本中适应性函数值最高的子代样本与其父代样本的适应性函数值进行比较:若子代样本适应性函数值大于父代样本,则保留该子代样本,删除父代样本;否则,不替换;
Step5.5、停止条件:由迭代次数作为停止条件,将迭代终止时生成的所有样本构成的集合记为变异集Σva,若未到停止条件,则循环执行步骤Step5.2到步骤Step5.4。
2.根据权利要求1所述的基于模糊测试的测试样本优化方法,其特征在于:所述Step3具体为:将精简集ω中的所有样本标记为污点,则第l个样本标记为污点STl,将污点STl记为二元组STl<vln,tagln>,将污点STl在传播路径上经过的指令按顺序记录,即污点STl的传播路径为Seql=[Il_1,Il_2,…,Il_n,…],将污点分析操作记为三元组T<STl,D,C>:
如果污点STl在传播路径上没有经过无害处理D就能直接传播到污点汇聚点C,则污点STl对应的样本导致程序出现异常,并将该样本加入异常样本集Ω中;
如果污点STl在传播路径上经过无害处理D后最终的污点变量的污点标志为0,即不能传播到污点汇聚点,则说明程序不存在异常,因此不将该污点加入异常样本集Ω中;
如果污点STl在传播路径上经过无害处理D后最终的污点变量的污点标志为1,则说明无法判断程序是否存在异常,因此不将该污点加入异常样本集Ω中;
其中,vln表示污点STl在传播路径上第n个污点变量,并将经过的指令记为Il_n;tagln表示污点变量vln的污点标志,tagln=1表示是污点标志,tagln=0表示非污点标志;D表示无害处理,如对污点变量vln进行加密或是移除等操作;C表示污点汇聚点,即污点STl在传播路径上最终的污点变量的污点标志为1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910801955.XA CN110597715B (zh) | 2019-08-28 | 2019-08-28 | 一种基于模糊测试的测试样本优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910801955.XA CN110597715B (zh) | 2019-08-28 | 2019-08-28 | 一种基于模糊测试的测试样本优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110597715A CN110597715A (zh) | 2019-12-20 |
CN110597715B true CN110597715B (zh) | 2021-04-06 |
Family
ID=68856006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910801955.XA Active CN110597715B (zh) | 2019-08-28 | 2019-08-28 | 一种基于模糊测试的测试样本优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110597715B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111831562A (zh) * | 2020-07-08 | 2020-10-27 | 信联科技(南京)有限公司 | 一种基于机器学习的模糊测试用例生成方法及运行该方法的计算机设备与可读存储介质 |
CN112269597B (zh) * | 2020-10-23 | 2023-03-24 | 中国人民解放军战略支援部队信息工程大学 | 处理器指令异常行为检测方法及系统 |
CN112398839B (zh) * | 2020-11-06 | 2021-11-30 | 中国科学院信息工程研究所 | 工控漏洞挖掘方法及装置 |
CN112926058B (zh) * | 2021-03-25 | 2024-07-16 | 支付宝(杭州)信息技术有限公司 | 代码处理方法、污点分析方法和装置 |
CN114546561B (zh) * | 2022-02-22 | 2024-05-24 | 湖南泛联新安信息科技有限公司 | 一种程序静态分析结果中最佳修复点的展示方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107153605A (zh) * | 2016-03-02 | 2017-09-12 | 阿里巴巴集团控股有限公司 | 测试样本的生成方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10521441B2 (en) * | 2014-01-02 | 2019-12-31 | The George Washington University | System and method for approximate searching very large data |
CN106681901B (zh) * | 2015-11-10 | 2019-12-06 | 中国电信股份有限公司 | 一种测试样本生成的方法和装置 |
-
2019
- 2019-08-28 CN CN201910801955.XA patent/CN110597715B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107153605A (zh) * | 2016-03-02 | 2017-09-12 | 阿里巴巴集团控股有限公司 | 测试样本的生成方法及装置 |
Non-Patent Citations (2)
Title |
---|
基于Peach框架的测试样本优化方法的研究;曾淑娟;《网络安全技术与应用》;20160130;第96-97页 * |
基于遗传算法的二进制程序模糊测试方法;焦龙龙等;《浙江大学学报(工学版)》;20180531;第52卷(第5期);第1014-1017页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110597715A (zh) | 2019-12-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110597715B (zh) | 一种基于模糊测试的测试样本优化方法 | |
Chen et al. | A systematic review of fuzzing techniques | |
Godefroid et al. | Learn&fuzz: Machine learning for input fuzzing | |
CN108647520B (zh) | 一种基于脆弱性学习的智能模糊测试方法与系统 | |
US10944789B2 (en) | Phishing detection enhanced through machine learning techniques | |
Rajpal et al. | Not all bytes are equal: Neural byte sieve for fuzzing | |
Girgis | Automatic test data generation for data flow testing using a genetic algorithm. | |
CN112069061B (zh) | 深度学习梯度指导变异的软件安全漏洞检测方法及系统 | |
CN109902024B (zh) | 一种程序路径敏感的灰盒测试方法及装置 | |
US20070027867A1 (en) | Pattern matching apparatus and method | |
US9691021B2 (en) | Adaptive cataclysms in genetic algorithms | |
CN109886018B (zh) | 一种基于遗传算法的存储型xss攻击向量优化方法 | |
CN103065067B (zh) | 短序列组装中序列片段的过滤方法及系统 | |
Patil et al. | Greybox fuzzing as a contextual bandits problem | |
CN117332420A (zh) | 一种智能合约漏洞检测方法 | |
Alanko et al. | Syotti: scalable bait design for DNA enrichment | |
Liu et al. | MalFuzz: Coverage-guided fuzzing on deep learning-based malware classification model | |
CN116629324A (zh) | 一种面向模型生成文本重复退化现象的优化生成方法 | |
CN116827836A (zh) | 基于细粒度覆盖信息引导的协议漏洞挖掘测试方法与系统 | |
CN116663018A (zh) | 一种基于代码可执行路径的漏洞检测方法及装置 | |
CN115296898B (zh) | 用于构建网络入侵检测系统的多目标演化特征选择方法 | |
Soliman et al. | A self-adaptive strategy for controlling parameters in differential evolution | |
de Abreu et al. | Automatic test data generation for path testing using a new stochastic algorithm | |
CN115437960A (zh) | 回归测试用例排序的方法、装置、设备和存储介质 | |
Saheed et al. | Genetic algorithm technique in program path coverage for improving software testing |
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 |