CN112328505B - 一种用于提升模糊测试的覆盖率的方法和系统 - Google Patents
一种用于提升模糊测试的覆盖率的方法和系统 Download PDFInfo
- Publication number
- CN112328505B CN112328505B CN202110000642.1A CN202110000642A CN112328505B CN 112328505 B CN112328505 B CN 112328505B CN 202110000642 A CN202110000642 A CN 202110000642A CN 112328505 B CN112328505 B CN 112328505B
- Authority
- CN
- China
- Prior art keywords
- function
- nodes
- node
- anchor node
- anchor
- 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/3676—Test management for coverage analysis
-
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Biomedical Technology (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种用于提升模糊测试的覆盖率的方法和系统。其中所述方法包括:步骤S1、对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图;步骤S2、基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点;步骤S3、根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;以及步骤S4、基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据。
Description
技术领域
本发明涉及软件测试领域,尤其是涉及一种用于提升模糊测试的覆盖率的方法和系统。
背景技术
Fuzzing测试(模糊测试)是一种软件测试方法,它向程序提供无效的,非预期或者是随机的输入数据,一旦程序出现了比如崩溃或者断言失败的错误,就会发现存在的缺陷。Fuzzing测试不仅适用于有源软件,也适用于二进制软件,应用范围广,它通过大量的测试用例动态执行目标软件,对动态执行过程进行分析,误报率要低于静态分析技术。另外,Fuzzing实现原理简单,没有大量理论推导和公式计算,避免了符号执行过程中的路径爆炸问题,自动化程度高,人工参数的工作量小,被广泛应用于漏洞挖掘领域。
但是Fuzzing测试是半自动化的测试方法,程序是否执行崩溃与输入的测试用例关系很大,常规的基于变异的Fuzzing工具会设置测试用例的变异策略,也就是给定种子文件,对种子文件中的字段进行变异,这种方法虽然自动化程度较高,但是存在覆盖率的问题。这是因为变异策略一般是预先设定,并不会根据程序实际执行过程而进行适应性改变,因此特别是在遇到魔术字符串的判断时,一般的变异策略是无法通过判定,导致程序无法继续执行后续的路径。因此,当前对Fuzzing进行改进的一个重要方面就是如何提高其导向性,尽可能覆盖更多路径,以提高漏洞挖掘的效率和有效性。
目前,最接近的现有技术是AFL,它是一种典型的模糊测试工具。图1为根据本发明比较例的AFL工作流程的示意图。如图1所示,AFL是典型的Fuzzing测试流程首先判断目标,根据软件的特征采用相应的技术;之后识别输入,认为所有的可利用漏洞都是因为应用程序接受了用户的输入并且在处理输入数据时没有清除非法数据或者执行确认过程。任何发往目标应用程序的输入都是可能的Fuzzing测试变量;生成Fuzzing测试用例,根据一定的变异规则对种子文件进行变异生成大量的测试用例;测试用例输入目标程序,观察程序是否出现崩溃,如果出现崩溃,保留崩溃时的执行信息,用于后续调试,如果没有出现崩溃,继续输入其他测试用例直至测试用例集为空。如果测试用例可以使程序覆盖新的路径,则将其放入种子文件中,基于其生成新的测试用例,以提高覆盖率。
AFL虽然记录了测试用例的执行路径,提高覆盖新执行路径的测试用例的生成数量以调高其对代码的覆盖率,这种方法在一定程度上能够提高Fuzzing的效果,但是依然存在一定的盲目性,在种子文件的生成上,对程序的分析粒度依然较粗,针对性较差。对AFL的改进工作也是为了提高模糊测试的代码覆盖率,这些方法主要的改进在于增加从程序入口到当前执行点的正向执行路径覆盖分支以提高覆盖率,这种方法分析粒度细,受程序执行上下文影响大,且由于是从当前执行点开始,对提高覆盖率的贡献有限。而本申请主要是筛选能够提高执行覆盖率的重点函数和可能导致程序崩溃的可疑漏洞函数,提高从程序的当前执行点到重点目标函数的执行的可能性来提高覆盖率,对模糊测试起到导向性的作用。
发明内容
本发明的目的在于提供一种用于提升模糊测试的覆盖率的方案,以解决现有技术中存在的技术问题。
本发明第一方面提供了一种用于提升模糊测试的覆盖率的方法,所述方法包括:步骤S1、对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图;步骤S2、基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点;步骤S3、根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;步骤S4、基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据。
具体地,在所述步骤S2中,利用如下方法确定所述第一锚节点:步骤S2-a1、获取所述调用图的节点和边作为函数调用关系;步骤S2-a2、基于所述调用关系,使用walktrap方法对所述函数进行功能分类,以生成互不相交的多个函数子集;步骤S2-a3、通过迭代确定所述调用图中的节点的权重,从每一个所述函数子集中选出关键节点数量,并构建所述第一锚节点。
具体地,在所述步骤S2中,利用如下方法确定所述第二锚节点:步骤S2-b1、提取所述目标程序中的函数特征作为第一特征,提取漏洞库中的函数特征作为第二特征;步骤S2-b2、利用神经网络对所述第一特征和所述第二特征进行嵌入,以分别获得第一特征向量和第二特征向量;步骤S2-b3、计算所述第一特征向量和第二特征向量的相似度,并基于所述相似度构建所述第二锚节点。
具体地,在步骤S3中,根据所述种子节点在进行所述模糊测试时的执行轨迹来确定所述距离。
本发明第二方面提供了一种用于提升模糊测试的覆盖率的系统,所述系统包括:预处理单元,被配置为,对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图;锚节点确定单元,被配置为,基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点;距离计算单元,被配置为,根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;以及能量计算单元,被配置为,基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据。
具体地,所述锚节点确定单元具体被配置为:获取所述调用图的节点和边作为函数调用关系;基于所述调用关系,使用walktrap方法对所述函数进行功能分类,以生成互不相交的多个函数子集;通过迭代确定所述调用图中的节点的权重,从每一个所述函数子集中选出关键节点数量,并构建所述第一锚节点。
具体地,所述锚节点确定单元具体被配置为:提取所述目标程序中的函数特征作为第一特征,提取漏洞库中的函数特征作为第二特征;利用神经网络对所述第一特征和所述第二特征进行嵌入,以分别获得第一特征向量和第二特征向量;计算所述第一特征向量和第二特征向量的相似度,并基于所述相似度构建所述第二锚节点。
具体地,所述距离计算单元具体被配置为:根据所述种子节点在进行所述模糊测试时的执行轨迹来确定所述距离。
本发明第三方面提供了一种存储有指令的非暂时性计算机可读介质,当所述指令由处理器执行时,执行根据本发明第一方面的用于提升模糊测试的覆盖率的方法中的步骤。
综上,本发明的技术方案从对代码的理解角度出发,对程序中的函数进行按照重要性进行筛选,得到对提高程序覆盖率的关键函数和更容易导致程序崩溃的可疑漏洞函数,构建重要函数集(锚函数集);并使用适应性算法计算种子到重要函数的距离,对种子文件进行能量计算,基于种子能量生成更容易执行到重要函数的测试用例,提高Fuzzing测试对代码的覆盖率,增强Fuzzing测试的针对性和效率。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本发明比较例的AFL工作流程的示意图;
图2为本发明所采用的技术方案的整体框架示意图;
图3为根据本发明实施例的用于提升模糊测试的覆盖率的方法的流程图;
图4a-4d分别为根据本发明实施例的四个软件(mips 1271、x86_64-1271、x86_64-1281和TD 89402v1)节点度的分布示意图;
图5a-5d为根据本发明实施例的四个软件(mips 1271、x86_64-1271、x86_64-1281和TD 89402v1)节点度的累计分布示意图;
图6为根据本发明实施例的社区分类示意图;
图7为根据本发明实施例的检测流程图;
图8为根据本发明实施例的用于提升模糊测试的覆盖率的系统的结构图。
具体实施方式
下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图2为本发明所采用的技术方案的整体框架示意图。如图2所示,右半部分为Fuzzing的工作流程,选取测试用例时,首先从种子队列中取出种子文件进行变异并观察是否崩溃或者触发新路径。左半部分则是的重要函数的筛选和距离记录:首先对目标程序进行预处理,分析目标程序的函数调用关系,基于关系图的无标度特征,获取函数调用图中的重要节点作为第一类重要节点;使用特征提取的方法,使用相似性比较的方法得到可能存在漏洞的函数节点作为第二类重要节点。将两类节点定义为锚节点,计算程序中节点到锚节点的距离,并使用插桩工具计算种子到锚节点的距离,最后根据距离计算种子能量,使用启发式方法选择与锚节点相近的种子,提高Fuzzing测试的代码覆盖率和导向性。
本发明第一方面提供了一种对雷达辐射源信号进行可视化分析的方法。图3为根据本发明实施例的用于提升模糊测试的覆盖率的方法的流程图;如图3所示,所述方法包括:步骤S1、对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图;步骤S2、基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点;步骤S3、根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;步骤S4、基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据。
在步骤S1中,对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图。具体地,对目标程序进行预处理,得到程序的反汇编代码,并抽取函数的调用关系,构建程序中函数的调用图G(V,E),其中V表示图G的节点,E表示节点的边。也就是节点代表程序中的函数,边表示函数之间的调用关系。记录节点的出度和入度,分别表示函数调用其他函数的次数和被其他函数调用的次数。此外,在反汇编的分析过程中,记录每一个函数的参数个数,以及程序中的可视字符串。记录的内容是后续筛选重要节点的基础。
在步骤S2中,基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点。具体地,为了提高模糊测试的效率,需要对程序中重要节点进行筛选,并导向程序尽可能执行到这些节点,从而增加代码执行的路径,并更容易执行到可能存在漏洞的函数。对函数节点的度进行分析后发现,在较大规模的程序中,函数节点的度分布遵循幂律分布,也就是说,函数调用图具有异质性,各个函数之间的度数具有严重的不均匀分布性,少数节点具有很多的连接,而大多数节点只有很少的连接。基于这一特性在模糊测试中选择重要节点并对程序向这些节点进行导向,程序执行经过重要节点越多,则其后续会覆盖的代码也会越多;此外,模糊测试的目的是使用测试用例使目标程序执行出现异常,以发现可能存在的漏洞,因此,选择可能是漏洞的函数作为重要节点并导向到这些函数,也可以增加目标程序出现异常的可能性。
定义函数的重要节点为锚节点,为了选择适应模糊测试的锚节点,使用两种方法:基于复杂网络的锚节点选择(第一锚节点)和基于神经网络的锚节点选择(第二锚节点)。
在步骤S2中,利用如下方法确定所述第一锚节点:步骤S2-a1、获取所述调用图的节点和边作为函数调用关系;步骤S2-a2、基于所述调用关系,使用walktrap方法对所述函数进行功能分类,以生成互不相交的多个函数子集;步骤S2-a3、通过迭代确定所述调用图中的节点的权重,从每一个所述函数子集中选出关键节点数量,并构建所述第一锚节点。
通过对程序的调用图分析可知,函数之间的调用关系网具有无标度的特性,因此,在程序调用图中的节点重要性具有很大不同。但是,在函数调用图中按照节点度的大小来确定函数的重要性存在一定的问题。在函数调用图中,度数大的节点并不一定存在于函数调用路径的关键位置,而在提升模糊测试用例的覆盖率上考虑,希望能够尽量使程序运行覆盖到函数调用路径的关键位置。同时,需要对函数集进行细化,按照函数之间的关系密切程度划分子集后再选择运行关键路径上的节点作为重要节点。使用社区划分的方法,对函数调用图中的节点按照关系的密切程度进行划分,这样可以将函数节点集划分为多个函数子集。社区分类方法可以尽可能保证功能相似的函数在同一个函数子集里。划分好函数子集后,需要每一个子集的节点进行重要性筛选,基于子集内部的函数节点之间的调用关系以及子集之间的节点关系,迭代计算每一个节点的权重,选择权重大的节点作为重要节点。
步骤S2-a1、获取所述调用图的节点和边作为函数调用关系。
步骤S2-a2、基于所述调用关系,使用walktrap方法对所述函数进行功能分类,以生成互不相交的多个函数子集。基于函数的调用关系,使用walktrap方法对函数进行功能分类,生成不相交的函数子集g1,g2…gn,满足∀v∈T, ∃gi满足v∈gi且对于gj!=gi,v∉gj。
步骤S2-a3、通过迭代确定所述调用图中的节点的权重,从每一个所述函数子集中选出关键节点数量,并构建所述第一锚节点。迭代计算每一个节点的权重,对于v∈T,计算权重w(v)=(1-α)(w(s1)/d(s1)+w(s2)/d(s2)+…+w(si)/d(si))+α(w(t1) *d(t1)/C(d1)+…+w(tk)*d(tk)/C(dk)),其中d表示节点的入度,也就是函数被其他函数调用的次数,节点s与节点v在同一个子集,而节点t则与节点v不在同一个子集,但是与节点v具有调用关系(存在边),C(d)表示节点所在的子集的规模。α为权重系数,用于区分与节点在同一个子集和与节点在不同子集的其他节点的影响程度。迭代完成,从每一个函数子集中选出与子集数目相关的关键节点数量,对于规模为m的函数子集,选择权值打分靠前的节点数l的公式如下:
记录每一个子集中选择的关键函数,构建第一类重要节点集u(G)。
在步骤S2中,利用如下方法确定所述第二锚节点:步骤S2-b1、提取所述目标程序中的函数特征作为第一特征,提取漏洞库中的函数特征作为第二特征;步骤S2-b2、利用神经网络对所述第一特征和所述第二特征进行嵌入,以分别获得第一特征向量和第二特征向量;步骤S2-b3、计算所述第一特征向量和第二特征向量的相似度,并基于所述相似度构建所述第二锚节点。
具体地,使用人工神经网络对函数进行表征,构建漏洞函数库,并提取函数特征,利用相似性比较的方法确定目标程序中最可能存在漏洞的函数集合。首先对目标程序中的函数和漏洞库的函数进行特征提取,使用神经网络模型对特征进行嵌入,得到能够表征每一个函数的特征向量,并对特征向量进行相似性打分,筛选出与漏洞函数的相似性分值最高的前10位候选函数,构建第二类重要节点集v(G)。在进行函数特征提取时,提取的特征包括:1)函数参数的个数;2)函数中可视字符串的哈希值;3)函数中出度大于等于2的基本块数目; 4)函数出口基本块的入度;5)函数中入度大于4的基本块数目;6)函数中基本块的结构特征。
其中,特征1和特征2在程序预处理阶段,通过对目标程序进行逆向得到,特征3,4和特征5的获取需要首先根据函数内部基本块的控制依赖关系得到其控制流图,基于控制流图得到其中两类基本块的特征值,记录出度大于等于2的基本块数目实际上是记录存在跳转语句的基本块数目,入度大于4的基本块数目多存在于较为复杂的控制流图中,在多个分支跳转后执行到同一个基本块的情况下。函数中基本块的特征则是包含了指令个数、字符常量个数、介数三个特征,在进行基本块到函数的嵌入过程时,使用structure2vec结构进行特征嵌入,得到表征结构特征的向量U后,与得到的特征1-5进行合并,每一个函数向量μ计算公式如下:
得到表征函数特征的向量后,使用siamese网络,网络的两个分支负责将函数的特征进行合并,并进行图嵌入,使用余弦距离计算两个向量之间的距离得到相似性分值。其中,S代表1-5项特征,μ表示使用structure2vec后得到的结构向量。构造训练集,训练集中的数据以函数对的方式记录,其中,同一个源码函数在不同优化条件、不同架构下得到的函数对设置标签1,不同函数编译得到的函数对设置标签为0。基于函数对数据训练好神经网络后,可以计算目标程序中所有的函数与目标漏洞函数的相似性分值,对其打分排序后选择排名前10的候选函数,认为这些函数最可能存在漏洞,从而构建第二类重要函数节点集v(G)。
在步骤S3中,根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;其中,根据所述种子节点在进行所述模糊测试时的执行轨迹来确定所述距离。
种子距离定义为:给定图G,节点trace(T)进行距离计算,trace(T)代表种子在进行模糊测试时的执行轨迹,锚节点R(G),其中RG,考虑所有的锚节点R的情况下计算种子距离I(t|R),这里需要计算rR所有的I(t|r)值,定义I(t|R)为:
其中{I(t|r):rR,ttrace(T)},在计算I(t|r)时,需要对t和r的关系进行分别处理,如果节点t和锚节点r在同一个社区,则将r和t之间的最小距离作为I(t|r)值,如果节点t和锚节点r不在同一个社区,且两个社区有连接关系,则将两个社区中的节点距离平均值之和作为I(t|r)值;如果节点t和锚节点不在一个社区,且两个社区之间没有连接关系,则设置两个节点距离为较大的固定值。公式表示如下:
其中com(i)表示节点i所在的社区节点集合,e(w,z)表示节点w和z存在调用关系。这种方法得到的是函数到函数的距离,在实际的执行过程中,trace(T)会包含在同一个函数中的多个基本块,由于最后的计算是求和取平均,因此这里计算种子距离时,如果多个基本块在同一个函数中,则只计算一次该函数到锚函数的距离。
在步骤S4中,基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据。具体地,种子能量计算基于种子距离,主要用于调控种子变异的次数,因此,种子变异时基于种子能量,如果种子能量越高,其变异生成的测试用例越多,种子能量计算与迭代次数和种子距离有关。计算种子能量时,种子能量不仅与当前迭代时能量有关,而且与之前的能量有关,因此使用计算公式如下:ET=α*p(t,R)+(1-α)*ET-1 (E1=Afl (p)),其中,T为迭代次数,p(t,R)表示基于距离计算的种子能量,α为步进权重值。种子能量的计算基于AFL的能量计算方法,因此设置初始能量E1为Afl(p)。p(t,R)计算方法为:
其中,δ=0.01,β=0.2。
在一些实施例中,为了研究节点的度分布,选取四个不同的二进制软件mips1271、x86_64-1271、x86_64-1281和TD 89402v1。
图4a-4d分别为根据本发明实施例的四个软件(mips 1271、x86_64-1271、x86_64-1281和TD 89402v1)节点度的分布示意图,可见,二进制软件的节点度分布与源码已知的软件相似。BusyBox软件网络是一个高度异构网络,其中只有很少的节点与其他节点的连接数高。如在mips 1.27.1 版本中,有726个节点的出度为0,占总结点数目的24.8%;而970个节点的出度为1,占总结点数目的33.1%。而度数超过50的节点只有24个,仅占0.82%。该结论与软件实际设计过程的函数特点一致:只有数目有限的函数被调用的频率要高于其他的函数,且相当一部分函数处于调用过程的终点,不会再调用其它的函数。为了进一步说明节点的分布,图5a-5d为根据本发明实施例的四个软件(mips 1271、x86_64-1271、x86_64-1281和TD 89402v1)节点度的累计分布示意图,可见,累计分布函数接近直线。因此,从两组图(图4a-4d和图5a-5d)可以看出,BusyBox的调用网络服从指数分布,且具有无标度的特性。
在得到函数调用关系具有无标度特点的基础上,对调用图中的节点进行社区分类并进行筛选,得到的社区分类示意图,如图6所示。给定漏洞CVE-2015-1791,对目标程序进行检测,找到与漏洞函数最相似的候选函数列表,如图7所示,将存在漏洞的openssl版本中的关键函数ssl3_get_new_session_ticket进行特征提取,并提取目标程序的特征,使用已训练得到的神经网络模型进行相似性打分。目标程序选择的是AirCam下的libssl库,对其中所有的函数进行打分,并选择排名前10的候选函数列表。
本发明第二方面提供了一种用于提升模糊测试的覆盖率的系统,图8为根据本发明实施例的用于提升模糊测试的覆盖率的系统的结构图,如图8所示,所述系统包括:预处理单元801,被配置为,对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图;锚节点确定单元802,被配置为,基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点;距离计算单元803,被配置为,根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;以及能量计算单元804,被配置为,基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据。
具体地,所述锚节点确定单元具体802被配置为:获取所述调用图的节点和边作为函数调用关系;基于所述调用关系,使用walktrap方法对所述函数进行功能分类,以生成互不相交的多个函数子集;以及通过迭代确定所述调用图中的节点的权重,从每一个所述函数子集中选出关键节点数量,并构建所述第一锚节点。
具体地,所述锚节点确定单元具体802被配置为:提取所述目标程序中的函数特征作为第一特征,提取漏洞库中的函数特征作为第二特征;利用神经网络对所述第一特征和所述第二特征进行嵌入,以分别获得第一特征向量和第二特征向量;以及计算所述第一特征向量和第二特征向量的相似度,并基于所述相似度构建所述第二锚节点。
具体地,所述距离计算单元具体803被配置为:根据所述种子节点在进行所述模糊测试时的执行轨迹来确定所述距离。
本发明第三方面提供了一种存储有指令的非暂时性计算机可读介质,当所述指令由处理器执行时,执行根据本发明第一方面的用于提升模糊测试的覆盖率的方法中的步骤。
综上,本发明公开了一种提升模糊测试覆盖率的方法,旨在提高模糊测试的代码覆盖率,提高模糊测试的导向性,通过对程序的分析,筛选出能够覆盖更多路径的重点函数,并使用相似性比较的方法找到疑似漏洞的候选函数集;通过定义种子距离和种子能量,直到模糊测试生成能够到达两类重点函数的测试用例,对于提高模糊测试的覆盖率,增强模糊测试的导向型提供有力技术支持。本方法也可以与其他模糊测试方法进行互补,可以连接从程序入口到当前执行点再到重点函数点的整个执行过程,提高模糊测试效率。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (5)
1.一种用于提升模糊测试的覆盖率的方法,其特征在于,所述方法包括:
步骤S1、对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图;
步骤S2、基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点;
步骤S3、根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;
步骤S4、基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据;
其中,在所述步骤S2中:
利用如下方法确定所述第一锚节点:
步骤S2-a1、获取所述调用图的节点和边作为函数调用关系;
步骤S2-a2、基于所述调用关系,使用walktrap方法对所述函数进行功能分类,以生成互不相交的多个函数子集;
步骤S2-a3、通过迭代确定所述调用图中的节点的权重,从每一个所述函数子集中选出关键节点数量,并构建所述第一锚节点;
利用如下方法确定所述第二锚节点:
步骤S2-b1、提取所述目标程序中的函数特征作为第一特征,提取漏洞库中的函数特征作为第二特征;
步骤S2-b2、利用神经网络对所述第一特征和所述第二特征进行嵌入,以分别获得第一特征向量和第二特征向量;
步骤S2-b3、计算所述第一特征向量和第二特征向量的相似度,并基于所述相似度构建所述第二锚节点。
2.根据权利要求1所述的用于提升模糊测试的覆盖率的方法,其特征在于,在步骤S3中,根据所述种子节点在进行所述模糊测试时的执行轨迹来确定所述距离。
3.一种用于提升模糊测试的覆盖率的系统,其特征在于,所述系统包括:
预处理单元,被配置为,对作为测试用例的目标程序进行预处理,以获得所述目标程序中函数的调用图;
锚节点确定单元,被配置为,基于所述调用图确定所述目标程序中用于模糊测试的锚节点,所述锚节点包括基于复杂网络的第一锚节点和基于神经网络的第二锚节点;
距离计算单元,被配置为,根据锚节点,利用插桩工具来确定种子节点到所述锚节点的距离;
能量计算单元,被配置为,基于所述距离来计算所述种子节点的能量,选取所述能量高于阈值的种子节点作为评估变异测试用例的依据;
其中,所述锚节点确定单元具体被配置为:
利用如下方式确定所述第一锚节点:
获取所述调用图的节点和边作为函数调用关系;
基于所述调用关系,使用walktrap方法对所述函数进行功能分类,以生成互不相交的多个函数子集;
通过迭代确定所述调用图中的节点的权重,从每一个所述函数子集中选出关键节点数量,并构建所述第一锚节点;
利用如下方式确定所述第二锚节点:
提取所述目标程序中的函数特征作为第一特征,提取漏洞库中的函数特征作为第二特征;
利用神经网络对所述第一特征和所述第二特征进行嵌入,以分别获得第一特征向量和第二特征向量;
计算所述第一特征向量和第二特征向量的相似度,并基于所述相似度构建所述第二锚节点。
4.根据权利要求3所述的用于提升模糊测试的覆盖率的系统,其特征在于,所述距离计算单元具体被配置为:根据所述种子节点在进行所述模糊测试时的执行轨迹来确定所述距离。
5.一种存储有指令的非暂时性计算机可读介质,当所述指令由处理器执行时,执行根据权利要求1-2中任一项所述的用于提升模糊测试的覆盖率的方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110000642.1A CN112328505B (zh) | 2021-01-04 | 2021-01-04 | 一种用于提升模糊测试的覆盖率的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110000642.1A CN112328505B (zh) | 2021-01-04 | 2021-01-04 | 一种用于提升模糊测试的覆盖率的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112328505A CN112328505A (zh) | 2021-02-05 |
CN112328505B true CN112328505B (zh) | 2021-04-02 |
Family
ID=74301695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110000642.1A Active CN112328505B (zh) | 2021-01-04 | 2021-01-04 | 一种用于提升模糊测试的覆盖率的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112328505B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113312254A (zh) * | 2021-03-29 | 2021-08-27 | 阿里巴巴新加坡控股有限公司 | 内核代码的测试方法、装置、存储介质和处理器 |
CN113204498B (zh) * | 2021-06-07 | 2023-04-07 | 支付宝(杭州)信息技术有限公司 | 针对闭源函数库生成模糊测试驱动器的方法和装置 |
CN114064506B (zh) * | 2021-11-29 | 2023-04-04 | 电子科技大学 | 一种基于深度神经网络的二进制程序模糊测试方法及系统 |
CN114626071B (zh) * | 2022-03-21 | 2023-04-07 | 中国人民解放军国防科技大学 | 一种漏洞导向的模糊测试方法、系统和介质 |
CN115576840B (zh) * | 2022-11-01 | 2023-04-18 | 中国科学院软件研究所 | 基于机器学习的静态程序插桩检测方法及装置 |
CN116094972B (zh) * | 2023-01-18 | 2024-05-07 | 重庆邮电大学 | 基于QRNN神经网络的Modbus TCP协议模糊测试方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107103053A (zh) * | 2017-04-10 | 2017-08-29 | 南京信息工程大学 | 基于重叠节点的复杂网络社区发现方法 |
US10659326B2 (en) * | 2017-10-27 | 2020-05-19 | Microsoft Technology Licensing, Llc | Cloud computing network inspection techniques |
CN111182605A (zh) * | 2020-01-03 | 2020-05-19 | 重庆邮电大学 | 一种基于网络拓扑信息分簇的锚节点动态路径规划方法 |
US10713151B1 (en) * | 2019-04-18 | 2020-07-14 | Microsoft Technology Licensing, Llc | Program execution coverage expansion by selective data capture |
CN111767547A (zh) * | 2020-06-24 | 2020-10-13 | 北京理工大学 | 一种基于复杂网络社团的软件漏洞检测方法 |
CN111858358A (zh) * | 2020-07-23 | 2020-10-30 | 中国人民解放军国防科技大学 | 一种面向二进制代码的导向型模糊测试方法 |
CN112069061A (zh) * | 2020-08-19 | 2020-12-11 | 北京科技大学 | 深度学习梯度指导变异的软件安全漏洞检测方法及系统 |
CN112085124A (zh) * | 2020-09-27 | 2020-12-15 | 西安交通大学 | 一种基于图注意力网络的复杂网络节点分类方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897729B (zh) * | 2020-08-03 | 2022-08-19 | 北京理工大学 | 基于TensorFuzz的深度神经网络模糊测试框架和测试方法 |
CN111935134A (zh) * | 2020-08-06 | 2020-11-13 | 中国交通通信信息中心 | 一种复杂网络安全风险监测方法和系统 |
-
2021
- 2021-01-04 CN CN202110000642.1A patent/CN112328505B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107103053A (zh) * | 2017-04-10 | 2017-08-29 | 南京信息工程大学 | 基于重叠节点的复杂网络社区发现方法 |
US10659326B2 (en) * | 2017-10-27 | 2020-05-19 | Microsoft Technology Licensing, Llc | Cloud computing network inspection techniques |
US10713151B1 (en) * | 2019-04-18 | 2020-07-14 | Microsoft Technology Licensing, Llc | Program execution coverage expansion by selective data capture |
CN111182605A (zh) * | 2020-01-03 | 2020-05-19 | 重庆邮电大学 | 一种基于网络拓扑信息分簇的锚节点动态路径规划方法 |
CN111767547A (zh) * | 2020-06-24 | 2020-10-13 | 北京理工大学 | 一种基于复杂网络社团的软件漏洞检测方法 |
CN111858358A (zh) * | 2020-07-23 | 2020-10-30 | 中国人民解放军国防科技大学 | 一种面向二进制代码的导向型模糊测试方法 |
CN112069061A (zh) * | 2020-08-19 | 2020-12-11 | 北京科技大学 | 深度学习梯度指导变异的软件安全漏洞检测方法及系统 |
CN112085124A (zh) * | 2020-09-27 | 2020-12-15 | 西安交通大学 | 一种基于图注意力网络的复杂网络节点分类方法 |
Non-Patent Citations (2)
Title |
---|
Efficient Personalized Community Detection via Genetic Evolution;Zheng Gao等;《https://arxiv.org/pdf/2009.02657.pdf》;20190717;第1-9页 * |
基于动态能量调控的导向式灰盒模糊测试技术;戴渭等;《浙江大学学报》;20200831;第1525-1542页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112328505A (zh) | 2021-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112328505B (zh) | 一种用于提升模糊测试的覆盖率的方法和系统 | |
CN107590073B (zh) | 基于路径覆盖软件测试的测试用例自动生成方法 | |
Chen et al. | A systematic review of fuzzing techniques | |
Tian et al. | BVDetector: A program slice-based binary code vulnerability intelligent detection system | |
Li et al. | A population state evaluation-based improvement framework for differential evolution | |
CN114626071B (zh) | 一种漏洞导向的模糊测试方法、系统和介质 | |
CN109902024A (zh) | 一种程序路径敏感的灰盒测试方法及装置 | |
US11250368B1 (en) | Business prediction method and apparatus | |
Masabo et al. | Big data: deep learning for detecting malware | |
Baniecki et al. | Adversarial attacks and defenses in explainable artificial intelligence: A survey | |
Sadeghi et al. | Mining the categorized software repositories to improve the analysis of security vulnerabilities | |
Malik et al. | Detecting android security vulnerabilities using machine learning and system calls analysis | |
Al Sarah et al. | An efficient android malware prediction using Ensemble machine learning algorithms | |
Akimova et al. | Pytracebugs: A large python code dataset for supervised machine learning in software defect prediction | |
CN111400713A (zh) | 基于操作码邻接图特征的恶意软件族群分类方法 | |
Marian et al. | A novel approach for software defect prediction using fuzzy decision trees | |
Downey et al. | New crossover operators in linear genetic programming for multiclass object classification | |
CN114780967B (zh) | 基于大数据漏洞挖掘的挖掘评估方法及ai漏洞挖掘系统 | |
CN116522341A (zh) | 一种基于像素注意力机制的恶意软件对抗样本生成方法 | |
US11822463B2 (en) | Computer-implemented method and device for selecting a fuzzing method for testing a program code | |
CN113127342B (zh) | 基于电网信息系统特征选择的缺陷预测方法及装置 | |
CN110659492B (zh) | 一种基于多智能体强化学习的恶意软件检测方法及装置 | |
Kumar et al. | Computation of cyclomatic complexity and detection of malware executable files | |
Gaudesi et al. | An efficient distance metric for linear genetic programming | |
Li et al. | Speedneuzz: Speed up neural program approximation with neighbor edge knowledge |
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 |