一:介绍
模糊测试是通过使用不同的输入反复测试软件来发现软件漏洞的广泛使用的技术之一。根据其输入生成方法,模糊处理主要分为两种:(1)基于变异的模糊处理(2)基于语法的模糊处理。基于变异的模糊测试会通过不同的策略自动对初始测试输入进行变异。相反,基于语法的模糊测试需要特定的格式来生成测试输入,并且由于语法规范通常是人工编写的,因此很难完全自动化。然而,基于语法的模糊测试比基于变异的模糊测试更有效,特别是在构造复杂结构的输入格式(例如PDF格式的文件和包含HTML和Javascript文档的 页)时。
在协议模糊测试方面,基于语法的模糊测试和基于变异的模糊测试都起着重要的作用。SPIKE [3],Boofuzz [4]使用协议的规范来构造测试输入。Pulsar [5]和autofuzz [6]使用聚类算法和基于n-gram的方法来自动恢复协议以生成输入。基于语法的模糊器会花费时间来基于语法手动构建初始模板以生成测试用例。另一方面,Pulsar和自动模糊的生成受到有限长度的内容和传统聚类算法的时间开销的限制。因此,快速自动产生满足协议的输入是协议模糊化的重要问题。
我们建立了一个堆叠的seq2seq-attention模型来自动学习协议规范,并使用它实现基于机器学习的模糊器。
我们比较了使用不同层LSTM的seq2seq注意模型生成的测试用例的正确性。
我们在两个FTP服务器程序上对基于机器学习的模糊器和传统的基于语法的模糊器进行了代码覆盖率评估,这表明我们的模糊器比基于语法的模糊器具有更好的性能。
第二节 背景
sequence(seq2seq)的基本序列是图1中的编码器–解码器体系结构,用于接收来自序列的输入并生成可变长度的输出。递归神经 络(RNN)用于编码器和解码器以处理序列。RNN单元通常由具有各种逻辑门操作的LSTM [8]或GRU [10]组成。隐藏的语义信息被编码为上下文向量C转移到解码器的隐藏状态。seq2seq在机器翻译,文本摘要和语音识别方面取得了巨大的成功,因为其编解码器体系结构不限制输入和输出的序列长度。但是,seq2seq将所有输入序列编码为统一的语义特征,然后对其进行解码。因此,C 必须包含原始序列中的所有信息,并且其长度成为限制模型性能的瓶颈。
注意力机制通过每次输入不同的
第三节 模型设计
在图3中,我们概述了堆叠的seq2seq-注意模型,它由三个模块组成:编码器模块,注意模块和解码器模块。
首先,编码器读取输入文本并将文本中的每个字符转换为一个独热编码向量
在注意模块中,每个上下文信息
最后,编码阶段LSTM只包含一层隐藏128个字符,与原始的seq2seq注意模块相同。当前的LSTM取注意力模块的上下文向量
由于输出的
与一般的深度学习过程一样,我们在训练过程中计算模型的交叉熵损失函数,并尝试通过Adam算法在将输出L最小化,其中
Adam是一种不同于随机梯度下降的优化算法。它通过计算梯度的一阶矩估计和二阶矩估计来计算不同参数的独立自适应学习速率,而不是保持单一的学习速率来更新所有的权值。
四.评估
A.数据集和实验设置
通过执行基于语法的模糊器Boofuzz[4]收集数据集。Boofuzz是Sulley[13]的基准之一,可以根据用户定义的协议规范构造 络数据包。我们给Boofuzz提供了FTP的RFC定义,最终得到了36871条消息。这36871条消息是堆叠seq2seq attention模型的语料库,由于训练开销,每个消息的最大长度被限制为150个字符。
seq2seq-attention模型培训是在Ubuntu 16.04系统上使用NVIDIA GeForce 1080 Ti进行的,并使用Keras[14]框架及其python绑定实现。在Keras中,训练过程默认拆分验证集。训练后,模型被我们实现的一个简单的模糊器调用来发送生成数据。
为了测量堆叠seq2seq-attention模型的效果,我们在两个FTP服务器程序上进行了实验:server – u 7.0.0.1和Filezilla 2.23,这两个程序运行在Windows server 2003上。第一个实验计算了模型生成的测试用例中有多少符合FTP规范。第二个实验使用工具PIN[15]比较了基于机器学习的fuzzer和Boofuzz的代码覆盖率。
B .正确性
判断测试用例正确性的原则是:测试用例的头字段为FTP协议指定的字段。不同层数的每个模型都有足够的时间来生成10,000个测试用例。我们根据上面提到的原则,通过内容匹配脚本计算出正确的测试用例的数量,并计算出正确的百分比。从图4可以看出,随着训练周期的增加,不同层次的模型所生成的测试用例正确率有所提高。实验结果还表明,3层LSTM堆叠的测试用例生成的正确性最高,而4层和5层的正确性反而下降。说明在3层以上使用堆叠LSTM并不能增强seq2seq-attention的效果。从一般机器学习的角度来看,其原因可以排除为在复杂模型中使用过多的参数会降低训练的效果。
C.代码覆盖率
选取50个周期训练过的3层最高正确性模型,为发送 络数据包的简单模糊器生成测试用例。我们基于机器学习的fuzzer和boofuzz在windows server 2003主机上的server – u 7.0.0.1和Filezilla 2.23上进行4小时评估。
我们提出的模型的基本块覆盖率比图5中的ServU和Filezilla上的boofuzz高3.1%和2.2%。结果表明,seq2seq-attention模型能够学习生成发现新路径的测试用例。
五:结论
测试用例的生成是协议模糊化的关键。我们建立了带有LSTM单元的堆叠seq2seq-attention模型,自动学习协议格式。该模型在50个时代训练了3个堆叠层,生成了符合协议规范的测试用例,正确率为93%。而更多的层模型并不能在有限的时间内更好地了解协议的格式。同时,我们实现了一个基于训练好的seq2seq-attention模型的模糊器,并与Boofuzz进行了比较。比较结果表明,基于机器学习的方法可以生成具有更高代码覆盖率的样本。未来的工作包括从实际 络流量中提取数据,并使用代码覆盖标记标记训练数据来改进模型。
原文
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!