工业网络是现代工业控制系统的基石。对工业通信过程执行安全检查有助于检测未知的风险和漏洞。模糊测试是一种广泛使用的利用自动化进行安全检查的方法。然而,由于工业通信协议的多样性和复杂性,对工业网络进行安全检查面临着巨大的挑战。在这种情况下,现有的方法通常需要很长的时间来为工控协议建模,耗时又耗力。当目标协议是有状态的时,情况会变得更糟。
为了解决这个问题,我们采用了一个深度学习模型来学习协议帧的结构和处理有状态协议的时间特性。我们提出了一个名为SeqFuzzer的模糊测试框架,它能自动从通信量中学习协议框架结构,并生成fake但可信的消息作为测试用例。
我们将SeqFuzzer应用于使用的以太网控制自动化技术(EtherCAT)设备,并成功地检测到几个安全漏洞。
一方面,这些模糊化工具是为特定的协议开发的。另一方面,这些工具通常需要对目标协议的格式或框架有一定的了解,这对于私有协议来说是困难的。当协议是有状态的时,情况更糟。
有状态的网络协议是为了跟踪服务器的内部状态,并且可以将其建模为有限状态机,其中整个通信过程由一系列状态转换组成。网络通信的当前状态取决于其先前的状态,并且每个状态下的协议消息必须符合预定的格式。在这种情况下,具有有序数据传输特性的协议更难理解,这使得模糊处理更难执行。
工业网络协议在工业环境中起着非常重要的作用。为了提高工业安全,我们必须对工业网络协议进行适当的测试。
然而,由于许多工业网络协议都是私有的,测试工作并不容易,这意味着协议格式必须手动解释,这需要大量的人力。
本文贡献:
1.提出了一种基于seq2seq的模糊化方法,用于学习协议的格式和状态转换关系,并进行安全测试。我们使用LSTM作为seq2seq的编码器和解码器。编码器学习真实协议序列的语法,而解码器生成真实但虚假的协议消息,用作fuzz数据。
2。提出了一种与协议无关的通用工业网络协议模糊测试框架SeqFuzzer。我们使用SeqFuzzer在以太网控制自动化技术(EtherCAT)协议上进行了测试实验。
3.SeqFuzzer检测到EtherCAT协议的几个安全漏洞。
LSTM
Sequence-to-Sequence Network Model
捕获了真实的协议消息作为训练数据,
在捕捉到足够多的真实协议消息后,执行两个简单的数据预处理步骤,这些步骤被转换为十进制序列文件,并规范化为包含协议时间特性的标准十进制数据:
此时,处理过的十进制特征数据作为深度学习seq2seq模型的输入数据存储在通信数据集中。
本小节体现了SeqFuzzer的封装。它只需要简单的处理,不需要理解十进制特征数据的真正含义。
本小节体现了SeqFuzzer的通用性和自动化。它利用seq2seq和LSTM的深度学习模型来学习生成测试用例。
1) Seq2seq建模:我们假设si是表示十进制特征的输入序列,我们的目标是得到符合有状态协议状态转换关系的si+1。同时,用X和Y分别描述输入特征序列和对应的下一个特征序列。
我们在seq2seq模型中应用了三层深层LSTM,其中一个编码器学习协议数据的语法,一个解码器预测相应的接收协议序列,并获得半有效的协议数据(这是fake但是可被接收的)以及用于模糊化的序列语法结构。三层LSTM模型可以更抽象地表达更高层次的特征,提高识别精度,减少训练时间。seq2seq网络结构如图3所示。它包括输入层、嵌入层、多层LSTM和输出层。输入和输出都是序列,不要求长度相等。
2) Seq2seq模型训练
输入的特征数据分为三部分:训练集、验证集和测试集。
我们利用了Adam梯度优化算法,这是一种有效的随机优化算法。它对内存的要求很小,对大型数据集非常有效。在训练和验证阶段,我们使用N-gram作为判断生成的数据Y与真实数据之间相似性的标准。生成的数据与实际数据si+1共享的N个图越多,生成的数据越好。
共享训练、验证和测试阶段的参数,设计训练和验证阶段以学习理想参数。为了更好地训练模型,我们采用了不同的解码器进行训练和验证。
在训练阶段,使用实数序列si作为编码器的输入,可以更好地学习序列语法。使用下一个实数据si+1代替生成的数据Y作为解码器的输入。解码器不是生成,而是学习如何在训练过程中进行预测。
验证阶段可以防止过度拟合,使模型更加健壮。训练阶段训练的参数用于预测。在该阶段,我们对解码器预测的结果进行值化,并将每个阶段的预测结果yi用作下一阶段的输出。
在正式开始之前,我们需要随机设置seq2seq模型训练的参数。Dai等人发现对于深度学习网络模型,通过预先训练来设置参数比随机初始化要好,这样可以很好地稳定训练。在SeqFuzzer中,预训练包括输入层、嵌入层、多层LSTMs和输出层,其结构与正式训练相同。批量数据用于低维训练的预训练。将预训练得到的权值作为编码器和解码器的初始化参数。
在预测步骤中,解码器的输入需要C和Y参与。经过操作培训和验证,获得了良好的参数。将数据序列X(X0,X1,…,XN)输入编码器。每个解码器的输出yi是预测的结果。解码器的输出层有一个归一化恢复步骤。Y(yi |⟨y0,y1,…,ym⟩)被规范化,成为我们需要的半有效模糊测试。
我们的目标是自动学习有状态协议的时间特性,并生成真实的假消息以进行模糊测试。在本小节中,半有效的模糊数据被采集并存储在通信数据集中,用于模糊测试。
本小节是SeqFuzzer高效性的最终体现。半有效的测试数据被发送到现场设备进行攻击和监控。在执行模糊测试之前,我们需要设置一个监控器来攻击现场设备。捕获工具用于监视现场设备对测试用例的响应。最后,利用漏洞检测程序对出站假包和入站真包进行分析。
实验对象:SOEM(Simple Open EtherCAT Master)是一个免费的开源EtherCAT软件库
评价标准:
存在许多已知的漏洞,如MITM、MAC地址欺骗、从机地址攻击、包注入等。MAC地址对于协议检测非常重要。关于EtherCAT,我们发现Wireshark和led在发送不同的MAC地址时会有不同的行为。为了更好地分析,我们讨论了两种情况下的检测能力:
实际MAC地址加上构造的内容生成的协议数据的MAC地址被实际MAC地址替换以获得消息对。经过分析,我们检测到以下漏洞:
1。 Packetinjectionattack.SeqFuzzermodifiedthedatafield,但EtherCAT帧头中的长度字段不等于子消息中的字节数。但是,该消息被接收,这是一个包注入攻击。
2。MITM攻击。在消息对中,我们检查了一个状态,其中SeqFuzzer生成的消息数据只更改了数据字段,而从服务器处理了它。如果主机被操纵使用与PLC相同的MAC地址并修改消息中的数据,一旦被从机接受,将导致MITM攻击。
3。不明袭击。还有其他潜在的危机可能是危险的,比如数据领域发生了变化,但是WKC没有。
构造的MAC地址加上构造的内容
我们将SeqFuzzer生成的协议数据从SOEM主机发送到从机。观察LED闪烁并查看WKC中的更改,以确定从机是否已收到来自未知MAC地址的消息。如果收到消息,则存在MAC地址欺骗漏洞。
detectcat是为检测漏洞统计而开发的程序。程序算法如Alg所示。一。发送132200条生成的假消息后,攻击统计如表三所示,其中包注入攻击和MITM攻击的数量相对较多。当历元范围为5~13时,检测结果显示出良好的检测能力。然而,为了获得更好的实验结果,历元应该设置在8-13之间。
随着深度学习技术的迅速发展,模糊技术也与之相结合。Learn&fuzz[33]使用seq2seq模型学习PDF(一种复杂的输入格式)对象的语法,并使用所学习的语法生成测试PDF解析器的测试数据。Rajpal等人。使用一个神经网络模型来预测输入文件中的好的和坏的位置来执行模糊突变[34]。深入学习在网络协议模糊化中也得到了应用。Fan等人。[35]使用深层神经网络学习专有网络协议的生成输入模型,并使用所学习的模型生成新消息以供测试。Chockalingam等人。提出了一种基于深度学习的控制器局域网总线异常检测方法[36]。这些努力使对网络安全的贡献数。
工业网络协议在工业环境中起着非常重要的作用。为了提高工业安全,我们必须对工业网络协议进行适当的测试。
然而,由于许多工业网络协议都是私有的,测试工作并不容易,这意味着协议格式必须手动解释,这需要大量的人力。
此外,还有许多有状态的协议。理解时间特征就更加困难了。目前的工作几乎是特定于协议的,不能很好地处理这个特性。为了改善这种情况,我们利用一个深度学习模型来学习协议格式并处理有状态协议的状态转换关系。
我们提出了一个模糊框架SeqFuzzer,它可以自动从网络流量中学习协议格式,并生成虚假但可信的消息作为测试用例。我们使用SeqFuzzer来测试EtherCAT协议。SeqFuzzer在EtherCAT消息格式未知的情况下,自动生成具有高接收率和检测能力的fuzzing数据,并成功检测到EtherCAT的多个安全漏洞。
在未来的工作中,我们首先计划将SeqFuzzer与卷积神经网络、生成性对抗网络等深层学习模型相结合,以实现对协议特征的更好学习。其次,我们计划测试更多的工业协议,如Powerlink和Profinet,以便将来评估SeqFuzzer。