摘要
神经网络能够普遍近似任何函数,这使得它们能够学习任意类型数据之间的关系。这为信息安全主题提供了巨大的潜力,例如协议逆向工程 (PRE),到目前为止,神经网络 (NN) 的使用很少。在本文中,我们提供了一种仅使用 NN 实现 PRE 的新方法,展示了一种简单而有效的基于文本的协议逆向工程。这种方法在设计上是模块化的,允许在任何步骤将神经网络模型与性能更好的模型交换。所使用的架构包括卷积神经网络 (CNN)、自动编码器 (AE)、生成对抗网络 (GAN)、长短期记忆 (LSTM) 和自组织映射 (SOM)。所有这些模型结合在一起形成了一种新的协议逆向工程方法。结果表明,广泛的应用层协议 HTTP 和 FTP 可以被人工智能成功模仿,从而为模糊测试等用例铺平了道路。由于神经网络的黑箱性质,无法直接与其他 PRE 方法进行比较,这是我们工作的主要限制。我们的实验表明,这种多模型方法可使消息聚类提高 19%,改善上下文分布,并证明 LSTM 是生成新消息的最佳候选者,其中有效 HTTP 包高达 67.6%,有效 FTP 包高达 100%。
背景
协议逆向工程
1. 协议规范提取
协议规范提取(Prospex)。Prospex 是一种由两部分组成的 PRE 方法,基于网络信息和二进制运行时的执行轨迹进行分析,利用网络报文推断出信息格式,利用二进制运行时的控制流推断出状态自动机。为聚类步骤选择的高度独特的特征是成功的核心原因之一。这些特征包括文件系统反应和通过污染字节进行的内存分析。因此,计算信息之间的相似性不仅要看它们的格式,还要看它们产生的反应和响应。其设计了一个接受自动机来识别有效的报文序列。这个自动机后来使用 exbar 算法(Lang,1999 年)进行了缩减。最后,对工具进行了扩展,使其与模糊工具 Peach Fuzzer2 兼容。其直接结果是,模糊测试可以在有状态协议上得到改进。从 Prospex 中了解到,如何将提取特征、使用现成方法进行聚类以及最后的逆向工程等任务分离开来,是 PRE 的关键所在。
2. Discoverer
Discoverer 识别消息中的小块标记,然后将其合并并递归细化。为此,它依赖于以下假设:协议使用常见的分隔符来分隔其消息格式的各个部分,例如逗号、空格或换行符。然后通过启发式方法学习消息格式中各个字段(例如地址/变量)的相互依赖性及其数据类型(文本或二进制)。可以看到在 Discoverer 方法中识别关键特征及其对聚类的影响的重要性。
神经网络架构
神经网络架构是适用于不同数据操作(例如分类、回归、聚类等)的工具。在以下段落中,我们将描述第 4 节实验中使用的不同架构,它们擅长解决哪些问题以及我们为何考虑将它们用于 PRE。
1. CNN
卷积神经网络 (CNN)。CNN 因其在图像识别任务中的表现而广受欢迎(此架构中的各层具有一个特殊属性:它们以滑动窗口方法处理输入数据。它们在每个滑动窗口步骤中的权重保持不变,因此可用于检测小的固定模式。许多这样的“内核”在一层的单独“通道”中彼此并行存在。 此结构允许各个内核近似高度描述性的特征过滤器,从而从分类任务中消除传统的手动特征提取步骤。此架构在任何涉及图像/像素图的任务中都很有用,其中各个特征占据许多相邻像素。 但是,从理论上讲,此概念可以应用于任何形式的具有模式的输入数据。
2. Autoencoder (AE)
自动编码器 (AE)。自动编码器是一种神经网络,旨在对给定的输入进行降维,同时保留尽可能多的信息。在训练中,损失函数要求输出尽可能接近输入。 架构本身在中间层有一个瓶颈,迫使网络压缩数据但保留可重构信息。中间层的大小必须平衡压缩大小,并以某种未知的编码保留相关信息。神经网络分为两个部分,即编码器和解码器部分。在训练完 AE 后,解码器元素将被删除,这样任何输入数据都将仅以其编码形式返回。
3. GAN
生成对抗网络 (GAN)。GAN 的开发是为了创建用于学习数据分布的生成模型。这种架构的独特之处在于使用了两个竞争网络 。第一个网络称为生成器,使用随机噪声作为输入,并尝试创建与训练数据集中的图像相似的图像。第二个网络称为鉴别器,随机输入真假图像,并必须通过区分真假来学习它们之间的区别。生成器的误差校正基于鉴别器的分类结果。这两个网络的组合导致了一种竞争学习的设置,其中每个 NN 都试图胜过对方。
4. LTSM
长短期记忆 (LSTM)。循环神经网络 (RNN) 描述了一种架构,其中内部隐藏或输入状态的某些部分在下一个时间步骤中再次递归地放入网络中,从而允许网络找到数据中的时间依赖关系。LSTM 是一种 RNN,具有强大的随时间查找顺序依赖关系的能力,同时避免了一些常见的循环纠错问题。对于处理文本数据(顺序字母),通常使用字典或字母表以及合适的嵌入将信息压缩到每个单词或字母的中等大小向量中。文本被转换成文本长度 × 嵌入长度的矩阵。
5. SOM
自组织映射 (SOM)。SOM 是一种具有一维或二维神经元输出映射的架构,其中包含数据的拓扑结构。这意味着具有相似属性和特征分布的数据将位于输出映射的同一大致区域中,聚类是隐含的。SOMs给每个输出神经元一个与数据相关的分数。获胜的节点可以被返回用于索引。
主要方法
PREUNN提出了一种新的方式来看待逆向工程协议的底层任务结构。PRE被分为多个步骤,这些步骤通常是按顺序处理的。该方法旨在适应各种神经网络架构的能力,并提供模块化。这使得系统中的任何模型都可以被性能更好的模型所取代,从而使新的人工智能设计能够直接插入到过程中。
1. 数据收集
为了训练神经网络,需要有代表性的数据集。文章选择了一组基于文本的应用层协议构件作为基础,以允许更容易的结果评估,我们没有与其他PRE方法的直接比较。选择的协议是HTTP v1.1和FTP,因为它们是常用的、大量可用的并且缺乏加密。使用几个数据集来源来涵盖更广泛的实现和消息类型分布。
2.特征提取
在第一部分中,我们希望提取高度可区分的特征。在 Prospex 和 Discoverer 中,特征选择都是工作的重要组成部分,但特征都是由研究人员选择的。我们打算利用神经网络将这一过程自动化。关键词、标点符号、句法字符和其他可区分不同信息的模式尤其值得关注。标签和 cookie 等伪随机字符串被排除,因为它们通常与协议规范无关。
3.特征逆向工程
在传统的协议逆向工程中一般从通信工件中推断规则、变量或常量列表以及语法。对于神经网络,学习的知识本质上是非代表性的,这意味着人类解释它是具有挑战性的。我们使用生成评估方法来判断各个架构学习(和重新创建)的特征的质量。这种方法将从训练分布中创建新样本,并深入了解神经网络学到了什么。
4.聚类
无论协议是否明确规定了这些分组,协议报文通常都可以按类型分组。可以利用顺序、功能和一般格式等信息对这些报文进行聚类。聚类意味着各种类型的信息,这项任务非常适合神经网络。
5.状态识别
典型的通信会话通常涉及发送或接收多条消息。在有状态协议中,特定的消息序列在通信方之间实现更复杂的状态。这些顺序模式暗示了协议内部状态的代表性状态自动机。具有理解顺序依赖关系能力的神经网络能够学习不同消息类型的顺序及其可能性。这样神经网络可以使用时间序列预测来猜测协议的下一个状态。
6.序列生成
将所有训练有素的模型合并为一个生成式 PREUNN AI。在特征逆向工程中可以加入集群索引和序列依赖性等上下文信息,以获得更准确的结果。理想情况下,这种人工智能能够生成有效信息,这些信息不属于训练集,但具有相似的统计属性。
实验
本节列出了用于测试各种神经网络架构的主要方法和实验的所有实现方法。所有神经网络的超参数都是经过半大量人工测试后设定的性能良好的数字。项目范围不包括重大优化,因为硬件无法处理自动超参数调整的大型搜索空间。代码可在 GitHub 上。所有实验均使用 Python 3 编写,采用面向对象的编程风格,以确保实验易于修改和扩展到新协议。我们选择 PyTorch 作为深度学习框架,所有实验都在英伟达™(NVIDIA®)GTX 970 上进行。
1.数据预处理
我们在测试中使用了两个数据集。第一个数据集由多个 HTTP 源组合而成,这些源被选中以涵盖不同的实现和场景。第二个数据集由 FTP 消息组成。在进行任何实验之前,我们检查了数据中是否存在异常值和异常情况。数据工程通常会在任何机器学习项目中占用大量时间;但是,借助 pcap 文件中的网络跟踪,我们能够缩短此过程。网络分析工具 Wireshark 提供了一种广泛使用的协议包分析解析器。我们分别筛选出有效的 HTTP 和 FTP 包并丢弃其余包。
应用层数据报的长度受底层 TCP 协议的限制。对新 pcap 文件的分析表明,长消息仅出现在图像传输(HTTP)或自定义消息(FTP)中,随后可以进行剪切而不会造成重大信息丢失。我们为所有包选择了 1024 字节的长度限制,以统一神经网络输入。使用的 HTTP 数据中只有 0.33% 和 FTP 数据中只有 0.18% 超出此长度限制。
作为 HTTP 实验的进一步步骤,删除了消息头之后的所有内容,以避免 XML 和其他非 HTTP 数据。通过在每次出现“\r\n\r\n”时拆分每个语句并仅使用该拆分的第一个元素来实现这一点。这个双换行符是仅表示有效载荷跟随的 HTTP 符号,因此代表了一种清理数据的便捷方法。没有对 FTP 数据应用任何过滤器。
数据集偏差是开发机器学习解决方案时常见的陷阱。它描述了数据中类别的不均匀分布,这会导致神经网络中的特征学习不理想。 协议本身并不直接指定消息类别;但是,两种协议的手动创建分类是我们确定类别平衡的基准。神经网络仍然希望了解哪些类型比其他类型更常见,但数据集中的不平衡主要集中在两三种常见的消息类型上。为了平衡每个类别的消息数量,我们提出了这个即兴公式:
各类数据的分布可视化如下:
原始(蓝色)和平衡过(绿色)的 HTTP 数据集分布。对 GET 消息的偏差已被缓解,同时保留了这种类型是最常见的概念。
FTP 数据集的原始分布(蓝色)和平衡分布(绿色)。由于存在三种主要类型和几种代表性不足的类型,重新平衡显著平滑了分布,同时保留了趋势
每个类别的包都是随机选择的,直到达到限制为止。这包括将罕见消息相乘以获得每个类别的显著样本量。没有这个数据集平衡的测试在大多数实验中都显示出强烈的过度拟合迹象。我们没有简单地将所有类别设置为相同的限制,因为不应该丢失常见和不常见的概念。
2.特征提取
神经网络是一种高度灵活的自学习特征提取器,适用于各种任务。当尝试将每个消息字符解释为像素整数值,从而将整个消息解释为一维图像时,我们可以将解决方案应用于基于图像的任务。PREUNN选择了两种类型的架构进行特征提取:自动编码器和卷积神经网络。这些实验中模型学习到的特征映射随后用作聚类的输入。由于神经网络的黑箱性质,无法直接测量特征映射的质量,而是使用聚类的后续结果来评估这两种架构。我们只为每个实验定义了辅助指标。
Autoencoder
自动编码器仅适用于固定长度的数据,并学习数据的紧凑表示。我们用作数据的网络消息长度各不相同,但通常不超过 1024 字节。为了统一它们,我们用零填充较短的消息以填满 1024 的长度。小规模测试表明,填充/限制到这个长度不会显著影响任何模型的性能。由于 AE 架构的预期输出等于输入,我们使用汉明距离作为实验期间成功的指导措施。 我们训练自动编码器的层大小如下:1024 -> 256 -> 128 -> 256 -> 1024。我们使用 softplus 激活,Adam 优化器设置为学习率 = 0.0005,损失函数为均方误差 (MSE),batch size = 128,持续 10 个epoch。 使用编码器部分产生的 128 个神经元宽输出作为消息的特征编码。 此实验的数据被解释为像素,因此在区间 [0,255] 中具有连续性。训练中长度为 1024 字节的数据样本实现的距离平均为 HTTP 254.44,FTP 41.28。非常高的汉明距离是由字节解释的连续性引起的,即使填充符号 (0) 也无法完全重建。如果将 ASCII 表解释为从 0 到 255 的尺度,填充符号通常会错过相同的 ASCII 符号 1 或 2 个值。在图像中,这种小的着色错误几乎不会被注意到。对于作为连续尺度的字母表,结果通常看起来是错误的。然而,自动编码器的主要目的是降低特征维数以尽量减少信息损失和模式学习。在这种情况下,我们设法将维度从 1024 减少到 128,同时在实验过程中保留令人满意的重构特性。FTP 的平均汉明距离较低可以用其更短的平均消息长度来解释。
CNN
CNN 通常用于监督图像分类。训练数据不包含任何可用于监督学习的标签。文章提出了自己的无监督学习技术,使用数据增强。消息被复制并修改为几种已知的增强类型,以提取有关句法上下文的信息。我们的想法是,CNN 区分这些增强类别的能力将教会它对语法中的常见模式进行微调。HTTP 或 FTP 语句再次被填充/限制为固定长度 1024,然后分成不同长度的段(1024、32、16、8、4),然后在同一语句中按随机顺序排列。这种方法产生 5 个类(不变并分别被打乱为长度为 32、16、8 和 4 的块)。图中展示了一个简化的示例。
一个HTTP语句被打乱成3个类(不变的和长度为8和4的块)。颜色表示块的大小和块的顺序是随机的。
我们选择的架构使用 1D 卷积块、1D 批量归一化、softplus 激活和 20%-dropout,总共 5 层,通道大小如下:1 -> 128 -> 64 -> 32 -> 16 -> 8。分类任务由两个完全连接的层执行,训练后将其移除,以获得 8 ∗ 30 = 240 个神经元的特征图,该特征图比自动编码器的特征图更大。使用学习到的特征的可视化作为评估性能的额外分析方法。对于图像分类任务,已经提出了多种模型解释方法。使用称为 Grad-CAM的像素重要性可视化作为模型发现的句法特征的质量测量。我们的实验显示出不同的结果。关于 HTTP,我们看到协议消息的各个部分以不同的方式突出显示,见图。突出显示的部分通常与语法相关的部分匹配,而伪随机字符串则被忽略。这正是本实验所需的语法特征提取类型。 对于 FTP,结果在 Grad-CAM 中不太明显,因为平均消息长度要小得多。实验的整体收敛也比 HTTP 版本平坦得多。
Grad-CAM 可视化的 HTTP 语句分类分数示例。填充已被截断。 突出显示语义上重要且一致的部分,同时忽略 ETag 中的伪随机性。 本图中突出显示的文本是近似值。
3.特征逆向工程
协议逆向工程的常见结果是将目标协议表示为规则或聚类。然而,神经网络不允许我们直接可视化它们提取的特征的内部表示。为了在聚类和序列识别之外获得有形的结果,我们希望能够生成新消息作为特征学习能力正确性的证明。通过使用生成神经网络模型并检查其输出来实现这一点。文本消息的解释方式有两种可能:图像式字节解释(如之前的特征提取)或顺序解释为 ASCII 字母符号序列。我们研究了这两种替代方案,使用默认 GAN 架构进行图像式字节解释,大致遵循原作者(Goodfellow 等人,2014;Radford 等人,2015)给出的建议,并使用 LSTM 模型将其解释为 ASCII 符号序列,并使用修改后的嵌入来考虑协议消息某些部分(cookie、地址等)的随机性。
对抗生成网络
GAN 由两个网络组成,即生成器和鉴别器并行训练。生成器使用四个 1D 转置卷积层,其 (kernel size, stride) 参数三元组按升序排列为 (2, 2)、(4, 4)、(8, 8) 和 (16, 16)。前三层后面分别跟着一个 1D 批量归一化和 ReLU 激活,最后一层以 sigmoid 函数结尾。通道数如下:1024 -> 1024 -> 128 -> 32 -> 1。鉴别器使用四个 1D 卷积层,带有 1D 批量归一化(第一层除外)和斜率为 0.2 且 dropout 为 20% 的 LeakyReLU。网络顶部是一个 360 个神经元的全连接层。通道如下:1 -> 10 -> 20 -> 60 -> 90 -> 1. 使用一个公式来防止任何一个网络在训练中超越另一个网络:如果一个网络错误超过阈值或另一个网络在特定边界以下,则表现过好的网络将被从训练中移除,直到另一个网络赶上来。两者都使用 Adam 优化器,学习率 = 0.0005,beta = (0.5, 0.99)。作为损失函数,我们使用了二元交叉熵 (BCE)。
GAN 模型的训练并未显示出向稳定状态的显著收敛。由于像素解释的不准确性从一开始就限制了 GAN,再加上这种架构通常不稳定的特性,我们对这个令人失望的结果并不感到惊讶(确实失望,我自己的也是)。只有当我们考虑协议使用的静态结构时,从连续数据解释中创建文本对我们来说才听起来很有希望。然而,GAN 模型甚至连填充符号都未能以任何显著的精度(约 ±3 ASCII 值)成功复制。 此外,省略了使用此架构的实验。
长短时记忆网络
LSTM 是高级递归网络,在固定长度的序列上进行训练。要创建这样的条件,填充是不可能的,因为它会插入不良的顺序依赖关系。用一个脚本,该脚本将语句连接起来以实现所需长度的四倍以上,然后从随机位置开始选择一个正确长度的子字符串。此脚本仅用于训练,帮助网络学习字母之间的顺序依赖关系。在每个语句之前和之后,都会插入一个独特的符号来表示包装开始(SOP)和包装结束(EOP),以便网络可以学习区分不同的消息。数据表示为 ASCII 字母表的独热编码。该架构使用嵌入层,然后使用卷积层(内核大小 = 4,步幅 = 4)进行嵌入调整。这里介绍的这个技巧是卷积嵌入,旨在平衡字符级随机噪声很多的数据格式中基于字符和基于单词的嵌入。嵌入的隐藏大小与张量的特征长度维度翻转;卷积层将隐藏宽度解释为通道,将特征长度维度解释为图像维度。只有批量大小保持不变。这种维度转置在卷积后被反转,从而产生长度为四分之一的嵌入张量。这作为单层 LSTM 的输入。输出经过卷积嵌入的反转过程,在 1D 转置卷积和完全连接层中具有相同的超参数和维度转置。图 显示了此嵌入的工作原理的概述。解释这种嵌入的方式是可学习的加权 4-gram 字符,其中整个架构只需学习下一个字符(按索引从 0-1023 到 1-1024)。 4-gram 中的这种局部上下文和长期依赖关系已缩短了 4 倍,对于模型来说更容易学习,并且采样更稳定。对于训练,使用学习率 = 0.005 和标准 beta 的 Adam 优化器。使用负对数似然 (NLL) 作为损失函数,因为错误是在字符级别测量的。 当然,这要求上面提到的输入数据由长度为 4 的倍数的消息字符串组成。
卷积嵌入的简化图示。它允许对文本长度进行加权缩减,并增加了字母表的大小。
这种基于序列的 HTTP 和 FTP 语句重现尝试取得了良好的效果。LSTM 架构在不到一个历时后就收敛到了最小损失,这表明它具有出色的结构学习能力和重复模式。我们可以用 HTTP 和 FTP 等基于文本的协议的性质来解释这一点,它们使用关键字、固定语法和一致的字母表。在对 LSTM 进行取样(逐个字母取样)时,会产生一个包含有效信息的字符串,并可使用 SOP 和 EOP 符号进行解析。我们用有效但随机的 TCP 和 IP 标头对生成的语句进行封装,使其成为 pcap 文件中的完整网络包。 Wireshark显示,67.6% 的 HTTP 报文是有效的,其余报文被归类为带有随机有效载荷的 TCP 报文。对于 FTP,配额达到了 100%,但 FTP 报文的有效性可能相当简单。在训练数据中,有几条报文经常重复出现,这也出现在本实验的输出中。从图 中可以看到一些生成的示例。我们认为这些结果为进一步实验奠定了坚实的基础。
该图显示了 LSTM 生成的两个 HTTP 语句示例。为了进行比较,上面显示了来自数据集的实际 HTTP 消息,下面是生 成的。可以看出,总体结构相似,但变量内容已更改,并且添加或更改了一些可选信息。对于模糊测试目的,这是所需的行为。
4.聚类
对于聚类,特征提取结果与将数据样本编码为较小的格式相关。 初始化三个 SOM 并比较它们的结果:一个基线模型,其消息上限和填充长度固定为 1024,第二个 SOM 模型使用 AE 编码,第三个模型使用 CNN 特征图。这三个模型的输入大小不同,但输出图尺寸相同,HTTP 为 16×1,FTP 为 64×1。两种协议的输出维度的不同数字是基于实验的,大致与每种协议的不同消息类型的多样性相匹配。 这可以通过参数调整以适应任何新协议或优化目的。训练以学习率 = 0.005 和 sigma = 1.5(HTTP)和 sigma = 3(FTP)进行。有关参数的详细信息,请参阅“MiniSom”库文档。
为了使此评估有效,我们必须提前知道两种协议的真实类别。这并不简单,因为除了请求和响应之外,两种协议都没有指定明确的消息类型/组。对于 HTTP,响应尤其具有广泛的含义,我们根据其各自代码的第一位数字对其进行分组以进行分析,因为它们代表了代码的基本含义,而无需过多细节。这意味着 200-299 中的所有消息、所有 300-399 和所有 400-499 消息分别被视为同一类型。加上 HTTP 语句可以开头的所有有效关键字(GET、POST、HEAD、DELETE、OPTIONS、PUT、TRACE、CONNECT),这为我们提供了总共 11 个集群和一个额外的杂项集群(MISC)。对于 FTP,我们手动定义了具有相似含义或目的的关键字和键码分组,如表 2 所示。这是一个手动过程,我们并不声称这种分组已经达到了完美。
FTP 类型已被手动分组为具有相似含义或目的的关键字/代码集群。
对于聚类实验,我们使用第一种多模型方法。我们比较了三种不同的自组织映射配置,比较它们在聚类指标上的表现。首先,128 个神经元宽的 SOM 将使用来自自动编码器模型的编码。其次 ,240 个神经元宽的 SOM 将使用 CNN 架构的特征图。最后,作为基准,我们使用具有 1024 个神经元输入的原始 SOM 来处理整个语句。
我们使用两个指标来判断每个设置的聚类效果。第一个指标是准确度:有多少检测到的聚类与协议的消息类型有超过 50% 的置信度匹配,这些聚类将被称为“主导”聚类。这里,置信度定义为分配给一个聚类的所有消息中某种类型的相对份额。如果有 120 条 A 类消息和 80 条 B 类消息,全部放入一个聚类中,则该聚类代表 A 类的置信度将为 120/(120+80) = 60%。第二个指标是所有聚类的平均置信度。这两个指标也仅针对主导类型(一种类型 > 50%)进行报告,以从平均值中去除空聚类和小聚类。
表 3 显示了实验结果。 使用专用特征提取器的一些设置可以显著超越基线。自动编码器似乎更适合这项任务,也许是因为 CNN 架构需要数据增强的解决方法才能进行训练。对于需要集群索引的进一步实验,我们将 AE 和 SOM 架构组合成一个管道,用它们的集群索引替换消息。
聚类实验结果比较。使用自动编码器时,可以看到比基线模型有所改进。
5.状态识别
为了识别协议中的深层状态,使用消息序列在数据集中按时间顺序出现的相关性。为此用聚类模型分配的聚类替换所有消息。使用一个简单的 LSTM,其尺寸与 SOM 输出相适应,就足以通过显示网络对后续消息类型的置信度来指示高度相关的序列。 SOM 学习的核心思想是将相似类型的消息排列在一起,从而允许使用 MSE 损失函数在 LSTM 输出中近似正确的消息类型。使用交叉熵(CRE)损失函数则没有收敛效果。在训练中,我们使用学习率 = 0.005 和 betas = (0.3, 0.9) 的 Adam 优化器。
设置如图 所示。在协议中隐含实际状态的 FTP 中,使用递归架构进行简单的时间序列预测显示出良好的效果。在 64 个可能的集群中,LSTM 预测的信息类型有 42% 与随后的实际信息相匹配。乍一看,这个数字可能很低;但是,对于使用多次尝试的深度状态模糊方法来说,我们认为这比随机选择有了显著提高。
该图显示了处理HTTP语句以进行状态识别的示例。
这个实验也针对HTTP协议进行,结果不那么令人印象深刻。在16个隐含聚类中,72%的预测是正确的。这个数字似乎很高,但它依赖于与数据集偏差一致的平均集群数的预测。换句话说,预测只是为GET消息声明两种或三种交替的类型,这使得预测的准确性高于任何不同的预测模式。在这个实验中,数据集不能对类进行平衡,因为我们希望通过随机选择消息来避免改变任何顺序依赖关系。因此,HTTP的输入数据与原始数据一样,对GET消息类型有明显的偏向,这最终解释了LSTM的这种行为。
本节的结果展示了使用机器学习技术的潜在危险,混合了它们的嵌入和方法,以及对预定义度量的解释。尽管在有状态协议方面的结果是成功的,这是我们本实验的最初目标,但在解释度量时,将相同的努力应用于无状态协议会显示出弱点和危险的陷阱。对于这两种协议,度量从表面上看都具有误导性。只有对实际预测结果进行分析才能纠正错误。
6.序列生成
要完全模拟协议行为的方方面面,必须能够创建语法上正确的、具有真实世界分布的信息。使用的 LSTM 模型与用于特征逆向工程的模型类似,但增加了上下文。对于任何信息,我们不再使用通用的 SOP 和 EOP 符号作为开始和结束的标记,而是引入了新的特殊符号,这些符号按群集类型进行了个性化处理。这样,HTTP 和 FTP 就分别需要在各自设置的 ASCII 字母表中添加 2×16 个和 2×64 个额外符号,然后再进行单次编码。为了考虑到额外的复杂性,LSTM 在两层中使用了 100 个神经元的隐藏大小,每个信息的开头和结尾都由一个特殊的 SOP 或 EOP 符号集群表示。模型架构的其他部分与特征逆向工程中使用的架构相同,包括卷积嵌入。同样,在训练时,我们使用学习率 = 0.005 的 Adam 优化器和带有 NLL 损失函数的默认 betas。
使用与特征逆向工程 LSTM 相同的指标。将生成的序列解析为HTTP/FTP语句,并用一些有效的底层协议头封装起来,然后将它们收集到一个 pcap 文件中。通过 Wireshark,63% 的序列被识别为 HTTP 有效,100% 的序列被识别为 FTP 有效。FTP 的出色结果与特征逆向工程的原因相同,都是由于信息和训练数据的简单性造成的。图 9 显示了 FTP 的特征逆向工程和序列生成的类型分布,以直观显示通过集群索引添加其他步骤的影响。只有一个类别比较突出,这可能是由于其简单性,也可能是我们对 FTP 类型的分类不当。曲线表明,推断出的类型分布更广泛、更均衡。对于相对较低的 HTTP 结果,如图 8 所示,在序列生成过程中,请求和响应之间的消息显示出更大的相关性。这意味着增加的类型上下文允许神经网络更有效地学习这些联系。我们预计,能力更强、规模更大的架构将提高观察到的行为的有效性。由于 PRE 方法旨在普遍适用,因此这一结果为我们实现基于深度学习的任何协议模糊处理奠定了最终基础。
HTTP 特征逆向工程(蓝色)与序列生成(橙色)在类型分布方面的对比结果。序列生成显示了更好的请求/响应相关性;
FTP 特征逆向工程(蓝色)与序列生成(橙色)在类型分布方面的对比结果。除一类外,序列生成的类型分布更好。
相关工作
-
Learn&Fuzz: 输入模糊的机器学习。基于模糊处理只需要近似正确的输入这一理念,作者使用递归神经网络帮助模糊处理浏览器中的 PDF 解析器。在这项工作中,人工智能推断出了 PDF 的核心构件--对象的语法。作者从他们的网络中使用了三种不同的采样策略来应对模糊测试中的各种挑战: 无采样(NoSample)、采样(Sample)和采样空间(SampleSpace)。第一种策略是让 RNN 在输出中选择得分最高的字母,以确保对象在语法上正确。第二种策略将网络的 softmax 输出作为选择下一个字母的概率分布。这增加了模糊测试覆盖范围,但可能会导致许多格式错误的对象。最后,SampleSpace 策略结合了前两种策略。 使用 No-Sample,直到生成空格。 下一个字符按概率采样,然后再次切换回 No-Sample 策略。这会创建更多语法正确的对象,同时也会创建更全面的不同对象组合。这些策略用于 LSTM 采样。但是,我们的采样也必须涵盖消息上下文。
-
Machine Learning for Black-box Fuzzing of Network Protocols(Fan and Chang, 2017). 用于网络协议黑盒模糊测试的机器学习。作者认为他们的工作是首次尝试将深度学习方法与黑盒模糊测试相结合。他们部署了一个序列到序列模型,这是一个为机器翻译发明的两层 LSTM 模型,用于学习网络协议的语义并为模糊测试创建新的输出。他们的工作与本文的不同之处在于所采取的步骤数和用于学习协议细节的模型。这里介绍了一个完整的模型,该模型源自之前对 PRE 的研究。还缺少其他信息,例如聚类或基于上下文的生成。
-
GANFuzz:基于 GAN 的工业网络协议模糊测试框架(Hu et al, 2018) 。GANFuzz 框架代表了使用深度学习进行协议模糊测试的替代方法,但与上一篇论文属于同一类别。 GANFuzz 不使用序列到序列模型,而是使用称为 SequenceGAN (SeqGAN) (Yu et al, 2017) 的模型。这是常见 GAN 模型的一个版本,但使用强化学习针对基于文本的数据进行了调整。本文的作者为每种消息类型训练一个 SeqGAN,这是他们从各种聚类启发式方法中推导出的。这使得他们的方法更类似于 PREUNN,但仍然缺少几个工作步骤、简洁的工作步骤模式以及通过上下文符号而不是完全独立的模型生成数据。
-
Deep Neural Network-based Automatic Unknown Protocol Classification System Using Histogram Feature.基于深度神经网络的自动未知协议分类系统,使用直方图特征。Jung 和 Jeong 展示了一种基于机器学习的 PRE 方法来对未知协议进行分类 (Jung and Jeong, 2020)。他们使用统计方法从十种不同的协议中提取特征,并将它们输入深度信念网络,根据这些特征对消息进行分类。基于该方法,他们报告了未知数据集上约 99% 的分类准确率。他们的方法在几个方面与 PREUNN 不同。他们使用统计方法半自动提取特征,而我们使用自动编码器完全自动化了这一过程。此外,他们的工作目标是对未知协议消息进行分类,而我们的目标是根据新协议生成新的有效消息。PREUNN 中的分类是隐式发生的。
-
Network Traffic Classification(NTC)。NTC 的主题与 PRE 的特征提取有关。 有几篇论文将 NTC 与 ML 和 NN 相结合(Lopez-Martin 等人,2017 年;Michael 等人,2017 年;Li 等人,2018 年)。然而,这些论文并未涉及 PRE 的更复杂步骤,例如为未知协议生成新包。
结论
PREUNN 代表了一种新方法,用于分离传统的协议逆向工程任务,这些任务仅使用神经网络即可实现。 在本文中,我们成功地使用我们的方法对广泛使用的应用层协议 HTTP v1.1 和 FTP 进行了逆向工程。这凸显了几种深度学习架构的潜力,例如用于特征提取的 AE、用于特征逆向工程的 LSTM、用于聚类的 SOM、用于状态识别的 LSTM,以及用于序列生成的上述组合。所取得的结果包括一个体面的、直观的聚类和一个具有上下文能力的消息生成模型。由于时间限制,我们完全省略了优化和测试 PREUNN 的模糊测试,并将其留待将来的工作。我们的模块化方法允许使用深度学习领域的较新架构,例如自然语言处理(例如 BERT)进行改进。未来的进一步工作还可能包括利用这些预训练模型使用强化学习来创建一个能够对任何类似结构的消息语言进行逆向工程的自动模糊器。