本发明专利技术属于软件测试技术领域,特别涉及一种程序路径敏感的灰盒测试方法及装置,该方法包含:离线训练阶段,利用深度神经网络对样本数据集进行漏洞模式学习,获得程序执行路径的分类器,其中,样本数据集包中包含漏洞程序路径样本数据和无漏洞程序路径样本数据;在线测试阶段,将分类器集成到模糊测试工具中指导种子文件进行选择测试,优先选择触发漏洞路径的种子输入进行测试并赋予若干变异能量以执行相应变异次数,循环执行,直至中断。本发明专利技术填补漏洞路径样本影响分析方面空白,不依靠复杂的动态分析技术且不带来较大开销问题,可与其它灰盒测试技术有效结合,提升漏洞发现效率,可直接适用于二进制程序,无需依赖源代码,适用性强。
【技术实现步骤摘要】
一种程序路径敏感的灰盒测试方法及装置
本专利技术属于软件测试
,特别涉及一种程序路径敏感的灰盒测试方法及装置。
技术介绍
模糊测试(Fuzzing)是一种自动化软件测试技术,通过将恶意构造的数据作为输入提供给测试程序并监测程序是否出现异常的一种测试方法。由于其简单、高效的特点,已经被各大软件厂商应用到软件开发测试中来保证他们的关键产品的质量并且发现了大量的安全漏洞。基于覆盖率的灰盒测试由于其快速而且扩展性强的优势成为一种最流行且有效的模糊测试技术,它采用遗传算法的思想,测试过程中跟踪程序的路径覆盖信息,如果发现变异后的种子输入触发了新的路径分支就会被加入到种子队列中参与下一轮的测试,否则会被丢弃掉。为了进一步提高灰盒测试的效率,研究人员尝试将污点分析、符号执行和机器学习等技术与灰盒测试相结合,突破程序中存在的复杂的条件检查,提高代码的覆盖率。利用污点分析定位分支比较指令,利用符号执行求解可以通过比较分支的输入,利用机器学习生成覆盖率高的样本输入等等。然而,这些方法普遍关注程序的覆盖率,没有关注bug代码的分布,即它们关心的是尽可能覆盖更多的路径,而非哪些路径更可能存在漏洞。事实上已有研究表明程序中80%的bug位于20%的代码中,这种将所有的输入同等看待,顺序的从种子队列中选择输入进行变异的方法,没有考虑到不同的种子输入触发的路径存在漏洞的概率是不同的,导致浪费大量的资源测试一些无意义的路径同时对有漏洞的路径或者代码测试不足,从而降低了漏洞发现的效率。
技术实现思路
为此,本专利技术提供一种程序路径敏感的灰盒测试方法及装置,实现针对性漏洞代码测试,有利于更快、更多的发现软件中隐藏的漏洞,检测效率高。按照本专利技术所提供的设计方案,一种程序路径敏感的灰盒测试方法,包含如下内容:离线训练阶段,利用深度神经网络对样本数据集进行漏洞模式学习,获得程序执行路径的分类器,其中,样本数据集包中包含漏洞程序路径样本数据和无漏洞程序路径样本数据;在线测试阶段,将分类器集成到模糊测试工具中指导种子文件进行选择测试,优先选择触发漏洞路径的种子输入进行测试并赋予更多变异能量以执行相应变异次数,循环执行,直至中断。上述的,深度神经网络选择基于长短期记忆网络LSTM的神经网络,该神经网络包含4层,第一层是embeding嵌入层,将序列中的所有元素映射到固定维度向量中;第二层和第三层是栈式LSTM层,每一层包含64个神经元;最后一层是全连接层,使用sigmoid激活函数,进行二分类;样本数据集中每个样本数据包含用于执行的二进制程序及对应触发漏洞路径的测试用例。上述的,利用深度神经网络对样本数据集进行漏洞模式学习,包含如下内容:A1)对样本数据集中程序进行动态执行,记录执行路径并根据是否存在漏洞做标签记录;A2)将提取到的执行路径转成用于深度神经网络处理的向量表示;A3)将向量表示作为深度神经网络模型输入,训练得到用于判定路径是否存在漏洞的程序执行路径的分类器。优选的,A1)程序动态执行中,将程序执行路径的每条指令用对应字节码表示,在记录路径过程中不跟入系统自带库函数,并且保留与漏洞特征相关的库函数名。优选的,A2)转成向量表示中,程序执行路径中每条指令的字节码作为一个token,将字节码序列利用word2vec训练,输出每条指令的256维向量表示,完成将程序执行路径映射到向量空间。优选的,A3)将向量表示作为模型输入中,通过定义程序执行路径最大长度,通过补0或截断操作,获取固定长度的模型输入序列。上述的,在线测试阶段中,首先,重构程序执行路径,并将重构后的程序执行路径进行向量表示;然后,利用训练生成的分类器对路径进行漏洞预测,依据预测结果,将预测有漏洞路径和种子输入进行标签和漏洞属性记录,循环执行,优先选择做标签记录的种子输入进行测试,并赋予更多变异能量以执行更多变异次数,直至被用户中断。优选的,为赋予种子输入更多变异能量以执行多变异次数,将标记有漏洞种子输入的能量值设定最大值,将标记为无漏洞种子输入的能量值设定为原始值减半。一种程序路径敏感的灰盒测试装置,包含:离线训练模块和在线测试模块,其中,离线训练模块,用于利用深度神经网络对样本数据集进行漏洞模式学习,获得程序执行路径的分类器,其中,样本数据集包中包含漏洞程序路径样本数据和无漏洞程序路径样本数据;在线测试模块,用于将分类器集成到模糊测试工具中指导种子文件进行选择测试,优先选择触发漏洞路径的种子输入进行测试并赋予更多变异能量以执行相应变异次数,循环执行,直至中断。上述的装置中,所述离线训练模块包含:动态执行单元、向量表示单元和训练学习单元,其中,动态执行单元,用于对样本数据集中程序进行动态执行,记录执行路径并根据是否存在漏洞做标签记录;向量表示单元,用于将提取到的执行路径转成用于深度神经网络处理的向量表示;训练学习单元,用于将向量表示作为深度神经网络模型输入,训练得到用于判定路径是否存在漏洞的程序执行路径的分类器。本专利技术的有益效果:1.本专利技术针对当前模糊测试过程中未能对种子文件进行有效区分,导致浪费大量资源测试一些无意义的程序路径或者代码,降低模糊测试效率的问题;利用深度神经网络从大量漏洞数据中学习潜在的漏洞模式,然后对模糊测试过程中新的路径进行预测,从而指导模糊测试优先选择触发漏洞路径的种子进行测试并分配更高的变异能量,以此增加漏洞触发的概率,并且实现用更短的时间发现更多的代码漏洞。2.本专利技术填补了漏洞路径样本影响分析方面的空白,不依靠复杂的动态分析技术且不带来较大的开销问题,可以与其它灰盒测试技术进行有效结合,在原有测试工具的基础上进一步提升漏洞发现效率,可直接适用于二进制程序,无需依赖源代码,适用性强,具有较好的应用前景。附图说明:图1为实施例中测试方法流程示意图;图2为实施例中漏洞模式学习示意图;图3为实施例中在线指导模糊测试原理图;图4为实施例中基于LSTM神经网络示意图;图5为实施例中测试装置示意图;图6为实施例中离线训练模块示意图。具体实施方式:为使本专利技术的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本专利技术作进一步详细的说明。针对当前模糊测试过程中未能对种子文件进行有效区分,导致浪费大量资源测试一些无意义的程序路径或者代码,降低模糊测试效率等的问题,本专利技术实施例中,参见图1所示,提供一种程序路径敏感的灰盒测试方法,包含如下内容:S101、离线训练阶段,利用深度神经网络对样本数据集进行漏洞模式学习,获得程序执行路径的分类器,其中,样本数据集包中包含漏洞程序路径样本数据和无漏洞程序路径样本数据;S102、在线测试阶段,将分类器集成到模糊测试工具中指导种子文件进行选择测试,优先选择触发漏洞路径的种子输入进行测试并赋予更多变异能量以执行相应变异次数,循环执行,直至中断。考虑到程序的复杂性及多样性,为了能够从这些代码中学到隐藏的漏洞模式,需要大量的训练样本训练机器学习模型。为此,可从NISTSARD项目以及Github中获取程序。一部分来源于NISTSARD项目的公开的标准测试集,包括很多人工构造的漏洞程序,其中的每个程序包含good(patch后)和bad(patch前)的程序代码,并且涵盖各种CWE(CommonWeaknessEnumeratio本文档来自技高网...
【技术保护点】
1.一种程序路径敏感的灰盒测试方法,其特征在于,包含如下内容:离线训练阶段,利用深度神经网络对样本数据集进行漏洞模式学习,获得程序执行路径的分类器,其中,样本数据集包中包含漏洞程序路径样本数据和无漏洞程序路径样本数据;在线测试阶段,将分类器集成到模糊测试工具中指导种子文件进行选择测试,优先选择触发漏洞路径的种子输入进行测试并赋予若干变异能量以执行相应变异次数,循环执行,直至中断。
【技术特征摘要】
1.一种程序路径敏感的灰盒测试方法,其特征在于,包含如下内容:离线训练阶段,利用深度神经网络对样本数据集进行漏洞模式学习,获得程序执行路径的分类器,其中,样本数据集包中包含漏洞程序路径样本数据和无漏洞程序路径样本数据;在线测试阶段,将分类器集成到模糊测试工具中指导种子文件进行选择测试,优先选择触发漏洞路径的种子输入进行测试并赋予若干变异能量以执行相应变异次数,循环执行,直至中断。2.根据权利要求1所述的程序路径敏感的灰盒测试方法,其特征在于,深度神经网络选择基于长短期记忆网络LSTM的神经网络,该神经网络包含4层,第一层是embeding嵌入层,将序列中的所有元素映射到固定维度向量中;第二层和第三层是栈式LSTM层,每一层包含64个神经元;最后一层是全连接层,使用sigmoid激活函数,进行二分类;样本数据集中每个样本数据包含用于执行的二进制程序及对应触发漏洞路径的测试用例。3.根据权利要求1所述的程序路径敏感的灰盒测试方法,其特征在于,利用深度神经网络对样本数据集进行漏洞模式学习,包含如下内容:A1)对样本数据集中程序进行动态执行,记录执行路径并根据是否存在漏洞做标签记录;A2)将提取到的执行路径转成用于深度神经网络处理的向量表示;A3)将向量表示作为深度神经网络模型输入,训练得到用于判定路径是否存在漏洞的程序执行路径的分类器。4.根据权利要求3所述的程序路径敏感的灰盒测试方法,其特征在于,A1)程序动态执行中,将程序执行路径的每条指令用对应字节码表示,在记录路径过程中不跟入系统自带库函数,并且保留与漏洞特征相关的库函数名。5.根据权利要求3所述的程序路径敏感的灰盒测试方法,其特征在于,A2)转成向量表示中,程序执行路径中每条指令的字节码作为一个token,将字节码序列利用word2vec训练,输出每条指令的256维向量表示,完成将程序执...
【专利技术属性】
技术研发人员:王允超,宋晓斌,李锡星,张文镔,魏强,武泽慧,
申请(专利权)人:中国人民解放军战略支援部队信息工程大学,
类型:发明
国别省市:河南,41
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。