本申请涉及程序测试领域,特别涉及一种测试样本生成方法及装置。
背景技术:
现有技术中,learn&fuzz提出了一种利用深度学习来自动生成测试样本的技术。测试样本为用于对某个任务(如,某个程序)进行测试的样本。
但是,上述利用深度学习来自动生成测试样本的技术,会产生较多无效的测试样本,导致测试的效率下降。
技术实现要素:
为解决上述技术问题,本申请实施例提供一种测试样本生成方法及装置,以达到减少无效测试样本的生成,提高测试的效率的目的,技术方案如下:
一种测试样本生成方法,包括:
将目标样本输入基于强化学习的有效变异位置预测模型,得到所述基于强化学习的有效变异位置预测模型输出的变异位置,所述基于强化学习的有效变异位置预测模型为利用训练样本、所述训练样本的不同变异位置及表征所述训练样本的不同变异位置的有效性的指标训练得到的;
对所述目标样本中位于所述变异位置的字符进行变异,并将所述目标样本中变异后的字符及所述变异后的字符之后的字符作为片段,将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本;
所述基于深度学习的测试样本生成模型为利用不同语法格式的训练样本作为输入,满足设定语法格式的训练样本作为输出训练得到的。
优选的,所述基于强化学习的有效变异位置预测模型的训练过程,包括:
初始化ddpg模型;
将训练样本输入所述ddpg模型,得到所述ddpg模型输出的变异位置,对所述训练样本中位于所述ddpg模型输出的变异位置的字符进行变异,并将所述训练样本中变异后的字符及所述变异后的字符作为训练片段;
将所述训练片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本,作为目标测试样本;
基于处理器跟踪的程序控制流提取与分析技术,跟踪所述目标测试样本的执行过程,得到所述目标测试样本的执行路径;
分析所述执行路径距离设定脆弱点的长度;
利用所述执行路径距离设定脆弱点的长度,更新所述ddpg模型的参数,并返回执行所述将训练样本输入所述ddpg模型的步骤,直至。。停止训练,将训练完成的ddpg模型作为基于强化学习的有效变异位置预测模型。
优选的,所述基于处理器跟踪的程序控制流提取与分析技术为基于ipt的程序控制流提取与分析技术。
优选的,所述基于深度学习的测试样本生成模型为多层blstm模型与注意力机制结合得到的模型。
优选的,所述多层blstm模型与注意力机制结合得到的模型,包括:
n层blstm模型和n个注意力机制模块,且每层blstm模型匹配一个注意力机制模块,每层blstm模型匹配的注意力机制模块各不相同,所述n为大于1的整数;
其中,第i层blstm模型的输出作为与所述i层blstm模型匹配的第i个注意力机制模块的输入,与所述i层blstm模型匹配的第i个注意力机制模块的输出作为第i 1层blstm模型的输入,所述i为{1,2,…,n}中的任意一个数。
优选的,所述将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本,包括:
将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的下一个字符的分布概率;
从所述下一个字符的分布概率中随机采样出一个概率,作为第一概率,并生成一个随机数,所述随机数大于0且小于1;
若所述随机数大于预先设定的变异概率阈值且所述第一概率大于预先设定的置信度阈值,则将所述下一个字符的分布概率中最小概率对应的字符作为待输出字符,并输出所述待输出字符;
判断所述待输出字符是否为结尾字符;
若否,返回执行所述将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的下一个字符的分布概率的步骤;
若是,将各个所述待输出字符组合,得到测试样本。
一种测试样本生成装置,包括:
变异位置预测模块,用于将目标样本输入基于强化学习的有效变异位置预测模型,得到所述基于强化学习的有效变异位置预测模型输出的变异位置,所述基于强化学习的有效变异位置预测模型为利用训练样本、所述训练样本的不同变异位置及表征所述训练样本的不同变异位置的有效性的指标训练得到的;
测试样本生成模块,用于对所述目标样本中位于所述变异位置的字符进行变异,并将所述目标样本中变异后的字符及所述变异后的字符之后的字符作为片段,将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本;
所述基于深度学习的测试样本生成模型为利用不同语法格式的训练样本作为输入,满足设定语法格式的训练样本作为输出训练得到的。
优选的,所述装置还包括:
第一训练模块,用于:
初始化ddpg模型;
将训练样本输入所述ddpg模型,得到所述ddpg模型输出的变异位置,对所述训练样本中位于所述ddpg模型输出的变异位置的字符进行变异,并将所述训练样本中变异后的字符及所述变异后的字符作为训练片段;
将所述训练片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本,作为目标测试样本;
基于处理器跟踪的程序控制流提取与分析技术,跟踪所述目标测试样本的执行过程,得到所述目标测试样本的执行路径;
分析所述执行路径距离设定脆弱点的长度;
利用所述执行路径距离设定脆弱点的长度,更新所述ddpg模型的参数,并返回执行所述将训练样本输入所述ddpg模型的步骤,直至在达到设定条件时停止训练,将训练完成的ddpg模型作为基于强化学习的有效变异位置预测模型。
优选的,所述基于处理器跟踪的程序控制流提取与分析技术为基于ipt的程序控制流提取与分析技术。
优选的,所述基于深度学习的测试样本生成模型为多层blstm模型与注意力机制结合得到的模型。
优选的,所述多层blstm模型与注意力机制结合得到的模型,包括:
n层blstm模型和n个注意力机制模块,且每层blstm模型匹配一个注意力机制模块,每层blstm模型匹配的注意力机制模块各不相同,所述n为大于1的整数;
其中,第i层blstm模型的输出作为与所述i层blstm模型匹配的第i个注意力机制模块的输入,与所述i层blstm模型匹配的第i个注意力机制模块的输出作为第i 1层blstm模型的输入,所述i为{1,2,…,n}中的任意一个数。
优选的,所述测试样本生成模块具体用于:
将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的下一个字符的分布概率;
从所述下一个字符的分布概率中随机采样出一个概率,作为第一概率,并生成一个随机数,所述随机数大于0且小于1;
若所述随机数大于预先设定的变异概率阈值且所述第一概率大于预先设定的置信度阈值,则将所述下一个字符的分布概率中最小概率对应的字符作为待输出字符,并输出所述待输出字符;
判断所述待输出字符是否为结尾字符;
若否,返回执行所述将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的下一个字符的分布概率的步骤;
若是,将各个所述待输出字符组合,得到测试样本。
与现有技术相比,本申请的有益效果为:
在本申请中,利用基于强化学习的有效变异位置预测模型对目标样本的变异位置进行预测,可以降低变异位置选取的盲目性,提高变异位置的有效性,依据有效性较高的变异位置,对目标样本进行有效的变异,并基于有效变异的目标样本,生成有效性较高的测试样本,减少无效测试样本的生成,提高测试的效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请提供的一种测试样本生成方法实施例1的流程图;
图2是本申请提供的一种基于深度学习的测试样本生成模型的结构示意图;
图3是本申请提供的一种ddpg模型的结构示意图;
图4是本申请提供的一种测试样本生成装置的逻辑结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供了一种测试样本生成方法,包括:将目标样本输入基于强化学习的有效变异位置预测模型,得到所述基于强化学习的有效变异位置预测模型输出的变异位置,所述基于强化学习的有效变异位置预测模型为利用训练样本及表征所述训练样本的不同变异位置的有效性的指标训练得到的;对所述目标样本中位于所述变异位置的字符进行变异,并将所述目标样本中变异后的字符及所述变异后的字符之后的字符作为片段,将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本;所述基于深度学习的测试样本生成模型为利用不同语法格式的训练样本作为输入,满足设定语法格式的训练样本作为输出训练得到的。在本申请中,可以减少无效测试样本的生成,提高测试效率。
接下来对本申请实施例公开的测试样本生成方法进行介绍,如图1所示的,为本申请提供的一种测试样本生成方法实施例1的流程图,可以包括以下步骤:
步骤s11、将目标样本输入基于强化学习的有效变异位置预测模型,得到所述基于强化学习的有效变异位置预测模型输出的变异位置。
所述基于强化学习的有效变异位置预测模型为利用训练样本、所述训练样本的不同变异位置及表征所述训练样本的不同变异位置的有效性的指标训练得到的。
利用训练样本、所述训练样本的不同变异位置及表征所述训练样本的不同变异位置的有效性的指标对基于强化学习的有效变异位置预测模型进行训练,保证基于强化学习的有效变异位置预测模型预测的变异位置的有效性。基于强化学习的有效变异位置预测模型预测的变异位置的有效性可以理解为:基于变异位置变异后的数据能够造成测试过程中程序路径发生变化。
步骤s12、对所述目标样本中位于所述变异位置的字符进行变异,并将所述目标样本中变异后的字符及所述变异后的字符之后的字符作为片段,将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本。
对所述目标样本中位于所述变异位置的字符进行变异,可以理解为:将所述目标样本中位于所述变异位置的字符更改为其它字符。如,目标样本为“abcdef”,变异位置为第3个字符,则变异后的样本为“abddef”。
所述基于深度学习的测试样本生成模型为利用不同语法格式的训练样本作为输入,满足设定语法格式的训练样本作为输出训练得到的。
优选的,基于深度学习的测试样本生成模型为基于深度学习的lstm(长短期记忆模型,long-shorttermmemory)模型。
本实施例中,将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本的过程,可以为:
a00、将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的下一个字符的分布概率;
a01、从所述下一个字符的分布概率中选取最大概率,将所述最大概率对应的字符作为待输出字符;
a02、判断所述待输出字符是否为结尾字符;
若否,则返回执行步骤a00;若是,则执行步骤a03。
a03、将各个所述待输出字符组合,得到测试样本。
当然,为了缓解采用最大概率下的字符选择带来的变异缺乏随机性的不足,提升所生成测试样本的质量,本实施例中,提供另外一种将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本的过程,具体可以为:
a11、将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的下一个字符的分布概率。
a12、从所述下一个字符的分布概率中随机采样出一个概率,作为第一概率,并生成一个随机数,所述随机数大于0且小于1。
本实施例中,生成一个随机数的过程可以包括但不局限于:
将当前计算机的时间作为随机数种子,再根据random函数生成0~1之间的随机数。
a13、若所述随机数大于预先设定的变异概率阈值且所述第一概率大于预先设定的置信度阈值,则将所述下一个字符的分布概率中最小概率对应的字符作为待输出字符,并输出所述待输出字符。
变异概率阈值可以根据需要进行设置,在此不做限制。优选的,变异概率阈值可以设置为0.9。
置信度阈值可以根据需要进行设置,在此不做限制。优选的,置信度阈值可以设置为0.9。
a14、判断所述待输出字符是否为结尾字符。
若是,则执行步骤a15;若否,则返回执行步骤a11。
a15、将各个所述待输出字符组合,得到测试样本。
用于训练基于深度学习的测试样本生成模型的训练样本集的确定过程可以为:通过人工收集、模糊测试工具生成、网络爬虫等多种方式收集用于训练模型的原始样本集。在人工收集方面,收集较为著名的公开测试集;在模糊测试工具生成方面,将通过quickfuzz、peach等工具生成样本;在网络爬虫方面,将采用pspider、scrapy等框架爬取网络上的常用样本。完成原始样本的收集工作后,为减小样本集的冗余度,将对收集到的数据进行预处理,具体通过afl-cmin等工具对样本集进行去重和优化处理。在这一过程中,由于需要考虑样本的多样性和完备性,将优先选取覆盖率较高的测试样本集合用于后续深度学习模型训练。
对样本集进行去重和优化处理的过程,可以包括:
(1)路径收集:收集样本集中所有样本的路径覆盖信息;
路径覆盖信息可以理解为:样本在程序处理时执行的路径信息。
(2)元组分类:将路径覆盖信息相同的样本归类为同一元组;
(3)元组排序:依据获得的路径覆盖率大小对元组排序;
(4)样本排序:按照样本执行时间对每一个元组中的样本进行排序;
样本执行时间可以理解为:待测程序执行样本的时间。
(5)去除冗余:根据所需训练样本数量,从每一个元组中选择排序靠前的样本作为训练样本集。
本实施例中,可以将生成的测试样本的代码覆盖率、合格率和造成的崩溃数作为基于深度学习的测试样本生成模型的效果评估标准。其中,代码覆盖率表示所生成测试样本用于模糊测试的效果,该指标越高则证明其用于模糊测试的效果越好;合格率表示所生成测试样本是否满足规定的格式,其字段间的联系是否存在等;测试过程中对生成的测试样本造成的崩溃数进行统计,将得到的结果进行分析和比较,以评估格式化样本自动生成模型是否能够有效发现程序中的缺陷。此外,本专利将根据评估结果对模型的结构和参数进行更新,然后重复上述阶段,直至得到最适用于结构化样本生成的模型架构。
优选的,所述基于深度学习的测试样本生成模型为多层blstm(双向长短时记忆网络,bidirectionallongshort-term,blstm)模型与注意力机制结合得到的模型。多层blstm模型可在样本生成时同时考虑当前位置的上下文信息,对于结构化样本生成问题具有极大意义。将多层blstm模型与注意力机制结合则可通过计算注意力分配概率,有效防止信息丢失,突出样本的关键位置。
本实施例中,多层blstm模型与注意力机制结合得到的模型的结构可以为但不局限于:
n层blstm模型和n个注意力机制模块,且每层blstm模型匹配一个注意力机制模块,每层blstm模型匹配的注意力机制模块各不相同,所述n为大于1的整数;
其中,第i层blstm模型的输出作为与所述i层blstm模型匹配的第i个注意力机制模块的输入,与所述i层blstm模型匹配的第i个注意力机制模块的输出作为第i 1层blstm模型的输入,所述i为{1,2,…,n}中的任意一个数。具体结构可以参见图2,如图2所示,h1和e1为经过非线性变化得到的信息,可理解为学到的特征向量;利用训练好的模型生成的字符会作为测试样本的一部分,因为该模型学习了样本的内部格式,所以生成的样本在很大程度上能够满足样本字段间的约束关系,从而提高了样本质量。输入第一层blstm-att中的序列(s[j 1],s[j 2],…,s[j k])是样本片段的编码序列;attention输出的e1、e2等信息是经过一堆非线性变换得到的向量;softmax输出的a1、a2等信息是经过一堆非线性变换得到的向量,可以代表每个h1,h2,...的权重。
在本申请中,利用基于强化学习的有效变异位置预测模型对目标样本的变异位置进行预测,可以降低变异位置选取的盲目性,提高变异位置的有效性,依据有效性较高的变异位置,对目标样本进行有效的变异,并基于有效变异的目标样本,生成有效性较高的测试样本,减少无效测试样本的生成,提高测试的效率。
在本申请的另一个实施例中,对实施例1中的基于强化学习的有效变异位置预测模型的训练过程进行介绍,具体可以包括但不局限于以下步骤:
a21、初始化ddpg模型。
ddpg模型包括:actor(输出动作)和critic(评判行为)两部分,每一部分又包括估计和现实两个网络。
a22、将训练样本输入所述ddpg模型,得到所述ddpg模型输出的变异位置,对所述训练样本中位于所述ddpg模型输出的变异位置的字符进行变异,并将所述训练样本中变异后的字符及所述变异后的字符作为训练片段。
a23、将所述训练片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本,作为目标测试样本。
a24、基于处理器跟踪的程序控制流提取与分析技术,跟踪所述目标测试样本的执行过程,得到所述目标测试样本的执行路径。
优选的,基于处理器跟踪的程序控制流提取与分析技术为:基于ipt的程序控制流提取与分析技术。
a25、分析所述执行路径距离设定脆弱点的长度。
设定脆弱点可以理解为:为程序中容易引起程序执行异常或者崩溃的代码位置,例如调用内存拷贝函数,寄存器执行除法操作等。
分析所述执行路径距离设定脆弱点的长度的过程,可以包括:结合基于处理器跟踪的程序控制流提取与分析技术对待测试的程序可执行的二进制文件及相关依赖库进行静态分析得到的控制流图信息,并确定控制流图信息中设定脆弱点所在的代码块位置,使用图遍历技术分析所述执行路径距离设定脆弱点的长度。
其中,所述执行路径距离设定脆弱点的长度越大则样本估值越低。在样本估值变高的情况下,会向ddpg模型反馈一个正值,反之则会反馈一个负值。
a26、利用所述执行路径距离设定脆弱点的长度,更新所述ddpg模型的参数,并返回执行所述将训练样本输入所述ddpg模型的步骤,直至在达到设定条件时停止训练,将训练完成的ddpg模型作为基于强化学习的有效变异位置预测模型。
本实施例中,设定条件可以设置为但不局限于:actor输出的最近n个动作与actor输出的最近m个动作的平均性能值的差的绝对值小于1。其中,n小于m,优选的,n可以设置为10,m可以设置为100。
平均性能值可以理解为:ddpg多次执行动作后,由测试的软件环境返回的reward值的平均值。
本实施例中,通过不断的测试迭代优化强化学习的网络模型,使其对样本变异位置预测结果持续提高。
本实施例中,将训练样本作为状态,按字节编码后输入进ddpg网络;将训练样本的变异位置作为动作输出,输出的位置与样本按照字节相对应;将执行路径距离设定脆弱点的长度作为奖励值(其中,距离越近,奖励值越大),更新ddpg模型的参数,具体可以参见图3。
如图2所示,给定一个初始样本,由ddpg的动作估计网络根据样本状态s输出动作a,即该样本的有效变异位置;2)由测试的软件环境根据(s,a)给出下一状态s’,即变异后的样本;以及奖励值r,即根据变异后样本的执行路径计算得到奖励值;3)将转换过程数据(s,a,r,s’)存入经验池中;4)从经验池中随机采样n个转换过程数据作为一个mini-batch训练数据,其中,用n个s训练集对动作估计网络进行训练(actor训练);用n个(s,a,r,s’)训练集对状态估计网络进行训练(critic训练);5)每隔一定的时间将估计网络的参数复制给现实网络;6)将新状态s’复制给s,选出动作a,继续步骤2)。
需要注意说明的是,我们可以只训练动作估计网络和状态估计网络的参数,动作现实网络和状态现实网络的参数是可以由动作估计网络和状态估计网络由前两个网络每隔一定时间复制过去的。其中,critic的训练过程类似于监督式学习的方法,定义loss为均方误差:
yi=ri γq'(si 1,μ'(si 1|θμ')|θq')=ri γqi 1
l是基于现实的q’值和基于估计的q值的平方损失,估计的q值即为状态值q,由当前的状态s和动作估计网络输出的动作a输入进状态估计网络得到;而现实的q’值是根据奖励r和下一时刻的q’加和得到,其中q’是由下一时刻的状态s’和动作现实网络得到的动作a’输入进状态现实网络得到;n表示样本数,yi表示在状态si下采取动作ai的现实价值,q(si,ai|θq)表示状态估计网络,在状态si下采取动作ai的估计价值,si表示第i个状态,ai表示第i个动作,θq表示状态估计网络参数,qi和q(si,ai|θq)相同,θq′表示状态现实网络参数,q′表示状态现实网络,θμ′表示动作现实网络参数,μ′(si 1|θμ′)表示动作现实网络,根据输入状态si 1选择动作,ri表示第i个奖励,γ表示衰减参数。
actor基于下面的公式进行动作估计网络参数的更新:
该公式可简单理解为增加能够带来更大奖励的动作概率值,即使得状态估计网络输出的q值尽可能大,实际操作中只需对q取负号作为损失值进行训练即可。
其中,
接下来对本申请提供的测试样本生成装置进行介绍,下文介绍的测试样本生成装置与上文介绍的测试样本生成方法可相互对应参照。
请参见图4,测试样本生成装置包括:变异位置预测模块11和测试样本生成模块12。
变异位置预测模块11,用于将目标样本输入基于强化学习的有效变异位置预测模型,得到所述基于强化学习的有效变异位置预测模型输出的变异位置,所述基于强化学习的有效变异位置预测模型为利用训练样本、所述训练样本的不同变异位置及表征所述训练样本的不同变异位置的有效性的指标训练得到的;
测试样本生成模块12,用于对所述目标样本中位于所述变异位置的字符进行变异,并将所述目标样本中变异后的字符及所述变异后的字符之后的字符作为片段,将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本;
所述基于深度学习的测试样本生成模型为利用不同语法格式的训练样本作为输入,满足设定语法格式的训练样本作为输出训练得到的。
本实施例中,测试样本生成装置还可以包括:
第一训练模块,用于:
初始化ddpg模型;
将训练样本输入所述ddpg模型,得到所述ddpg模型输出的变异位置,对所述训练样本中位于所述ddpg模型输出的变异位置的字符进行变异,并将所述训练样本中变异后的字符及所述变异后的字符作为训练片段;
将所述训练片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本,作为目标测试样本;
基于处理器跟踪的程序控制流提取与分析技术,跟踪所述目标测试样本的执行过程,得到所述目标测试样本的执行路径;
分析所述执行路径距离设定脆弱点的长度;
利用所述执行路径距离设定脆弱点的长度,更新所述ddpg模型的参数,并返回执行所述将训练样本输入所述ddpg模型的步骤,直至在达到设定条件时停止训练,将训练完成的ddpg模型作为基于强化学习的有效变异位置预测模型。
本实施例中,所述基于处理器跟踪的程序控制流提取与分析技术可以为基于ipt的程序控制流提取与分析技术。
本实施例中,所述基于深度学习的测试样本生成模型可以为多层blstm模型与注意力机制结合得到的模型。
本实施例中,所述多层blstm模型与注意力机制结合得到的模型,可以包括:
n层blstm模型和n个注意力机制模块,且每层blstm模型匹配一个注意力机制模块,每层blstm模型匹配的注意力机制模块各不相同,所述n为大于1的整数;
其中,第i层blstm模型的输出作为与所述i层blstm模型匹配的第i个注意力机制模块的输入,与所述i层blstm模型匹配的第i个注意力机制模块的输出作为第i 1层blstm模型的输入,所述i为{1,2,…,n}中的任意一个数。
本实施例中,所述测试样本生成模块12具体可以用于:
将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的下一个字符的分布概率;
从所述下一个字符的分布概率中随机采样出一个概率,作为第一概率,并生成一个随机数,所述随机数大于0且小于1;
若所述随机数大于预先设定的变异概率阈值且所述第一概率大于预先设定的置信度阈值,则将所述下一个字符的分布概率中最小概率对应的字符作为待输出字符,并输出所述待输出字符;
判断所述待输出字符是否为结尾字符;
若否,返回执行所述将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的下一个字符的分布概率的步骤;
若是,将各个所述待输出字符组合,得到测试样本。
需要说明的是,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
以上对本申请所提供的一种测试样本生成方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
1.一种测试样本生成方法,其特征在于,包括:
将目标样本输入基于强化学习的有效变异位置预测模型,得到所述基于强化学习的有效变异位置预测模型输出的变异位置,所述基于强化学习的有效变异位置预测模型为利用训练样本、所述训练样本的不同变异位置及表征所述训练样本的不同变异位置的有效性的指标训练得到的;
对所述目标样本中位于所述变异位置的字符进行变异,并将所述目标样本中变异后的字符及所述变异后的字符之后的字符作为片段,将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本;
所述基于深度学习的测试样本生成模型为利用不同语法格式的训练样本作为输入,满足设定语法格式的训练样本作为输出训练得到的。
2.根据权利要求1所述的方法,其特征在于,所述基于强化学习的有效变异位置预测模型的训练过程,包括:
初始化ddpg模型;
将训练样本输入所述ddpg模型,得到所述ddpg模型输出的变异位置,对所述训练样本中位于所述ddpg模型输出的变异位置的字符进行变异,并将所述训练样本中变异后的字符及所述变异后的字符作为训练片段;
将所述训练片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本,作为目标测试样本;
基于处理器跟踪的程序控制流提取与分析技术,跟踪所述目标测试样本的执行过程,得到所述目标测试样本的执行路径;
分析所述执行路径距离设定脆弱点的长度;
利用所述执行路径距离设定脆弱点的长度,更新所述ddpg模型的参数,并返回执行所述将训练样本输入所述ddpg模型的步骤,直至在达到设定条件时停止训练,将训练完成的ddpg模型作为基于强化学习的有效变异位置预测模型。
3.根据权利要求2所述的方法,其特征在于,所述基于处理器跟踪的程序控制流提取与分析技术为基于ipt的程序控制流提取与分析技术。
4.根据权利要求1-3任意一项所述的方法,其特征在于,所述基于深度学习的测试样本生成模型为多层blstm模型与注意力机制结合得到的模型。
5.根据权利要求4所述的方法,其特征在于,所述多层blstm模型与注意力机制结合得到的模型,包括:
n层blstm模型和n个注意力机制模块,且每层blstm模型匹配一个注意力机制模块,每层blstm模型匹配的注意力机制模块各不相同,所述n为大于1的整数;
其中,第i层blstm模型的输出作为与所述i层blstm模型匹配的第i个注意力机制模块的输入,与所述i层blstm模型匹配的第i个注意力机制模块的输出作为第i 1层blstm模型的输入,所述i为{1,2,…,n}中的任意一个数。
6.根据权利要求1所述的方法,其特征在于,所述将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本,包括:
将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的下一个字符的分布概率;
从所述下一个字符的分布概率中随机采样出一个概率,作为第一概率,并生成一个随机数,所述随机数大于0且小于1;
若所述随机数大于预先设定的变异概率阈值且所述第一概率大于预先设定的置信度阈值,则将所述下一个字符的分布概率中最小概率对应的字符作为待输出字符,并输出所述待输出字符;
判断所述待输出字符是否为结尾字符;
若否,返回执行所述将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的下一个字符的分布概率的步骤;
若是,将各个所述待输出字符组合,得到测试样本。
7.一种测试样本生成装置,其特征在于,包括:
变异位置预测模块,用于将目标样本输入基于强化学习的有效变异位置预测模型,得到所述基于强化学习的有效变异位置预测模型输出的变异位置,所述基于强化学习的有效变异位置预测模型为利用训练样本、所述训练样本的不同变异位置及表征所述训练样本的不同变异位置的有效性的指标训练得到的;
测试样本生成模块,用于对所述目标样本中位于所述变异位置的字符进行变异,并将所述目标样本中变异后的字符及所述变异后的字符之后的字符作为片段,将所述片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本;
所述基于深度学习的测试样本生成模型为利用不同语法格式的训练样本作为输入,满足设定语法格式的训练样本作为输出训练得到的。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第一训练模块,用于:
初始化ddpg模型;
将训练样本输入所述ddpg模型,得到所述ddpg模型输出的变异位置,对所述训练样本中位于所述ddpg模型输出的变异位置的字符进行变异,并将所述训练样本中变异后的字符及所述变异后的字符作为训练片段;
将所述训练片段输入基于深度学习的测试样本生成模型,得到所述基于深度学习的测试样本生成模型输出的测试样本,作为目标测试样本;
基于处理器跟踪的程序控制流提取与分析技术,跟踪所述目标测试样本的执行过程,得到所述目标测试样本的执行路径;
分析所述执行路径距离设定脆弱点的长度;
利用所述执行路径距离设定脆弱点的长度,更新所述ddpg模型的参数,并返回执行所述将训练样本输入所述ddpg模型的步骤,直至在达到设定条件时停止训练,将训练完成的ddpg模型作为基于强化学习的有效变异位置预测模型。
9.根据权利要求8所述的装置,其特征在于,所述基于处理器跟踪的程序控制流提取与分析技术为基于ipt的程序控制流提取与分析技术。
10.根据权利要求7-9任意一项所述的装置,其特征在于,所述基于深度学习的测试样本生成模型为多层blstm模型与注意力机制结合得到的模型。
技术总结