SeqFuzzer : An Industrial Protocol Fuzzing Framework from a Deep Learning Perspective

摘要

工业网络是现代工业控制系统的基石。对工业通信过程执行安全检查有助于检测未知的风险和漏洞。模糊测试是一种广泛使用的利用自动化进行安全检查的方法。然而,由于工业通信协议的多样性和复杂性,对工业网络进行安全检查面临着巨大的挑战。在这种情况下,现有的方法通常需要很长的时间来为工控协议建模,耗时又耗力。当目标协议是有状态的时,情况会变得更糟。

为了解决这个问题,我们采用了一个深度学习模型来学习协议帧的结构和处理有状态协议的时间特性。我们提出了一个名为SeqFuzzer的模糊测试框架,它能自动从通信量中学习协议框架结构,并生成fake但可信的消息作为测试用例。

我们将SeqFuzzer应用于使用的以太网控制自动化技术(EtherCAT)设备,并成功地检测到几个安全漏洞。

1.简介

问题:

  • 工业网络协议在工业环境中起着非常重要的作用。为了提高工业安全,我们必须对工业网络协议进行适当的测试。
  • 许多工业网络协议都是私有的,协议格式需要耗费大量的人力时间进行协议逆向
  • 有状态的网络协议是为了跟踪服务器的内部状态,并且可以将其建模为有限状态机,其中整个通信过程由一系列状态转换组成。网络通信的当前状态取决于其先前的状态,并且每个状态下的协议消息必须符合预定的格式。在这种情况下,具有有序数据传输特性的协议更难理解,这使得模糊处理更难执行。

本文贡献:

1.提出了一种基于seq2seq的模糊化方法,用于学习协议的格式和状态转换关系,并进行安全测试。我们使用LSTM作为seq2seq的编码器和解码器。编码器学习真实协议序列的语法,而解码器生成真实但虚假的协议消息,用作fuzz数据。

2。提出了一种与协议无关的通用工业网络协议模糊测试框架SeqFuzzer。我们使用SeqFuzzer在以太网控制自动化技术(EtherCAT)协议上进行了测试实验。

3.SeqFuzzer检测到EtherCAT协议的几个安全漏洞。

2.SeqFuzzer模糊测试框架

  1. 捕获真实工业场景中的网络流量,并对捕获的数据执行一些预处理步骤。
  2. 构建和训练seq2seq模型。
  3. 使用经过训练的seq2seq模型生成测试用例。
  4. 执行测试用例,监视工控系统的异常行为,挖掘漏洞。

A.训练数据采集和预处理

捕获足够多的真实的协议消息作为训练数据,

执行两个数据预处理步骤:把数据包数据转换为十进制序列文件,并归一化为包含协议时间特性的十进制数据:

  • 特征数据转换:使用捕获工具,我们可以获得一个ascii码数据包文件,其中每个序列代表一个数据包。我们把ascii码信息转换成十进制序列,再存入文件。
  • 添加特殊符号:因为数据包长度不同,所以我们需要添加一些特殊的字符,使训练数据变得等长。本文用PAD(PAD)填充短十进制序列,STA(start)作为序列的开始标志,END(END)作为序列的结束标志。

此时,训练数据预处理结束,数据已经被转化成了十进制序列,如[1, 15, 232, 0, …]。

本小节体现了SeqFuzzer的封装,它只需要简单的处理,利用深度学习方法,不需要理解十进制特征数据的真正含义。

B.Seq2seq模型构建与训练

高质量的种子有利于fuzz,本文的高质量种子来源包括第一步抓取的数据包和训练模型生成数据。

本文利用LSTM构成的seq2seq深度学习模型来学习生成测试用例。

1) 构建seq2seq模型:我们假设si是表示十进制特征的输入序列,我们的目标是得到符合有状态协议状态转换关系的si+1。用X和Y分别描述输入特征序列和对应的下一个特征序列。

我们在seq2seq模型中应用了3层LSTM,其中编码器学习协议数据的语法,解码器预测相应的接收协议序列,并生成fake但是可被接收的协议数据用于模糊测试。3层LSTM模型可以更抽象地表达更高层次的特征,提高识别精度,减少训练时间。seq2seq网络结构如图3所示。它包括输入层、嵌入层、多层LSTM和输出层。输入和输出都是序列,不要求长度相等。

在这里插入图片描述
X ( x i ∣ ⟨ x 0 , x 1 , . . . , x n ⟩ ) X(x_i| ⟨x_0, x_1, ..., x_n⟩) X(xix0,x1,...,xn)作为编码器输入数据输入eembedding层,每一个LSTM神经元 h i h_i hi有两个输入 o i o_i oi h i − 1 h_{i−1} hi1, h i h_i hi 包含前一协议状态的信息, o i o_i oi是前一层LSTM神经元的输出,前一层的输出被用来传递有状态协议的状态转换信息,当layer=1时, o i o_i oi= x i x_i xi C = κ ( x 0 , x 1 , . . . , x n ) C = κ(x_0, x_1, ..., x_n) C=κ(x0,x1,...,xn)代表输入协议序列X的所有的状态和结构信息。ξ是非线性激活函数,如relu。
在这里插入图片描述
解码器通过解码C来预测下一个符合协议状态信息的数据包 s i + 1 s_{i+1} si+1。与编码器不同的是解码器保存最后一层的输出 Y ( y i ∣ ⟨ y 0 , y 1 , . . . , y m ⟩ ) Y (y_i| ⟨y_0, y_1, ..., y_m⟩) Y(yiy0,y1,...,ym)并输入到下一个神经元,如 y 0 y_0 y0作为第二个神经元的输入,由此解码器的输入可表示为 y i : γ ( S T A , y 0 , y 1 . . . , y i − 1 ) y_i : γ(STA,y_0,y_1...,y_{i−1}) yi:γ(STA,y0,y1...,yi1)

2) Seq2seq模型训练

数据被分为三部分:训练集、验证集和测试集。

我们利用了Adam梯度优化算法,这是一种高效的随机优化算法。它对内存的要求很小,对大型数据集非常有效。在训练和验证阶段,我们使用N-gram作为判断生成的数据Y与真实数据之间相似性的标准。生成的数据与实际数据si+1共同的N-grams越多,生成的数据越好。

共享训练、验证和测试阶段的参数。为了更好地训练模型,尝试了不同的解码器LSTM模型进行训练和验证。

在训练阶段,使用序列si作为编码器的输入,可以更好地学习序列语法。使用下一个数据si+1代替生成的数据Y作为解码器的输入。解码器不是生成,而是学习如何在训练过程中进行预测。

验证阶段可以防止过度拟合,使模型更加健壮。训练阶段训练的参数用于预测。在该阶段,我们将解码器每个阶段的预测结果yi用作下一阶段的输出。

我们通过预先训练来设置参数,这样可以很好地稳定训练。在SeqFuzzer中,预训练包括输入层、嵌入层、多层LSTMs和输出层,其结构与正式训练相同。批量数据用于低维训练的预训练。将预训练得到的权值作为编码器和解码器的初始化参数。

C.测试用例生成

在预测步骤中,解码器的输入需要C和Y参与。经过训练和验证,获得了良好的参数。将数据序列 X ( x i ∣ ⟨ x 0 , x 1 , . . . , x n ⟩ ) X(x_i| ⟨x_0, x_1, ..., x_n⟩) X(xix0,x1,...,xn)输入编码器。每个解码器的输出yi是预测的结果。解码器的输出层有一个归一化恢复步骤。 Y ( y i ∣ ⟨ y 0 , y 1 , … , y m ⟩ ) Y(y_i |⟨y_0,y_1,…,y_m⟩) Yyiy0y1ym被归一化,成为我们想要的模糊测试用例。

我们的目标是自动学习有状态协议的时间特性,并生成fake消息以进行模糊测试。将fake数据存储在通信测试数据集中,用于接下来进行的模糊测试。

D.测试

本小节是SeqFuzzer高效性的最终体现。通信测试数据被发送到现场设备进行攻击和监控。在执行模糊测试之前,我们需要设置一个controller来向现场设备发包。抓包工具用于监视设备对测试用例的响应。最后,利用漏洞检测程序对出站假包和入站真包进行分析。

3.实验

实验对象:SOEM(Simple Open EtherCAT Master)是一个免费的开源EtherCAT软件库

评价标准:

  • Recognition rate:Wireshark是否将发送的消息识别为EtherCAT协议。
  • Acceptance rate:从机处理的消息的比例。
  • Detection ability: EtherCAT协议检测漏洞的能力。

Detection ability

存在许多已知的漏洞,如MITM、MAC地址欺骗、从机地址攻击、包注入等。MAC地址对于协议检测非常重要。关于EtherCAT,我们发现Wireshark和led在发送不同的MAC地址时会有不同的行为。为了更好地分析,我们讨论了两种情况下的检测能力:

  • 真正的MAC地址加上构建的内容。真正的MAC地址而不是MAC地址欺骗与SeqFuzzer构建的协议数据内容结合起来,成为测试漏洞的模糊数据。
  • 构造的MAC地址加上构造的内容。利用SeqFuzzer构造的Pro-tocol数据测试MAC地址欺骗漏洞。

实际MAC地址加上构造的内容生成的协议数据的MAC地址被实际MAC地址替换以获得消息对。经过分析,我们检测到以下漏洞:

  1. 包注入攻击。SeqFuzzer修改数据域,但EtherCAT帧头中的长度字段不等于子消息中的字节数。但是,该消息被接收,这是一个包注入攻击。
  2. 中间人攻击。在消息对中,我们检查了一个状态,其中SeqFuzzer生成的消息数据只更改了数据字段,而从服务器处理了它。如果主机被操纵使用与PLC相同的MAC地址并修改消息中的数据,一旦被从机接受,将导致中间人攻击。
  3. 不明攻击。还有其他潜在的危机可能是危险的,比如数据域发生了变化,但是WKC没有。

构造的MAC地址加上构造的内容。我们将SeqFuzzer生成的协议数据从SOEM主机发送到从机。观察LED闪烁并查看WKC中的更改,以确定从机是否已收到来自未知MAC地址的消息。如果收到消息,则存在MAC地址欺骗漏洞。
在这里插入图片描述

detectcat是为检测漏洞统计而开发的程序。程序算法如Alg所示。一。发送132200条生成的假消息后,攻击统计如表三所示,其中包注入攻击和MITM攻击的数量相对较多。当历元范围为5~13时,检测结果显示出良好的检测能力。然而,为了获得更好的实验结果,历元应该设置在8-13之间。

4.相关工作

随着深度学习技术的迅速发展,模糊技术也与之相结合。Learn&fuzz[33]使用seq2seq模型学习PDF(一种复杂的输入格式)对象的语法,并使用所学习的语法生成测试PDF解析器的测试数据。Rajpal等人。使用一个神经网络模型来预测输入文件中的好的和坏的位置来执行模糊突变[34]。深入学习在网络协议模糊化中也得到了应用。Fan等人。[35]使用深层神经网络学习专有网络协议的生成输入模型,并使用所学习的模型生成新消息以供测试。Chockalingam等人。提出了一种基于深度学习的控制器局域网总线异常检测方法[36]。这些努力使对网络安全的贡献数。

5.结论

工业网络协议在工业环境中起着非常重要的作用。为了提高工业安全,我们必须对工业网络协议进行适当的测试。

然而,由于许多工业网络协议都是私有的,测试工作并不容易,这意味着协议格式必须手动解释,这需要大量的人力。

此外,还有许多有状态的协议。理解时间特征就更加困难了。目前的工作几乎是特定于协议的,不能很好地处理这个特性。为了改善这种情况,我们利用一个深度学习模型来学习协议格式并处理有状态协议的状态转换关系。

我们提出了一个模糊框架SeqFuzzer,它可以自动从网络流量中学习协议格式,并生成虚假但可信的消息作为测试用例。我们使用SeqFuzzer来测试EtherCAT协议。SeqFuzzer在EtherCAT消息格式未知的情况下,自动生成具有高接收率和检测能力的fuzzing数据,并成功检测到EtherCAT的多个安全漏洞。

在未来的工作中,我们首先计划将SeqFuzzer与卷积神经网络、生成性对抗网络等深层学习模型相结合,以实现对协议特征的更好学习。其次,我们计划测试更多的工业协议,如Powerlink和Profinet,以便将来评估SeqFuzzer。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值