基于数据流的加密流量分类方法

2021-07-02 00:36帅,苏旸*
计算机应用 2021年5期
关键词:数据包字节准确率

郭 帅,苏 旸*

(1.武警工程大学密码工程学院,西安 710086;2.网络与信息安全武警部队重点实验室(武警工程大学),西安 710086)

(*通信作者电子邮箱suyang75@126.com)

0 引言

当前加密流量在网络中占据了越来越重要的地位。根据Netmarketshare 发布数据显示,截止到2019 年10 月全球使用HTTPS(Hyper Text Transfer Protocol over Secure sockets layer)加密的万维网(World Wide Web)流量比例已经超过90%;同时在2019 年12 月,谷歌宣称80%的Android 应用程序默认使用TLS(Transport Layer Security)加密所有流量,且这一比例还会随着时间的推移而继续增大。数据流量的加密已成必然的趋势,但在加密数据防护隐私的同时,也使得很多安全服务难以对各类加密流量进行检测,如深度包检测方法无法对加密的数据包进行辨别,入侵检测系统的安全服务也不再有效,这些情况给网络安全管理带来了很大的问题。为了解决这些问题,对网络上的加密流量进行分类识别已是首先要解决的问题。

在过去主要使用基于端口和基于签名的方法对网络中的加密流量进行分类:基于端口的分类是通过网络中数据包头部的端口号来确定服务,这种方式在过去简单、有效,但近年来随着临时端口和端口伪装等技术的出现,该方法已不再有效;基于签名的方法是把字节属性与已知签名进行匹配,这种方式只限于识别已知应用协议的签名,对未知的协议却无法识别,对于新出现的协议其适用性大幅降低。

当前主要使用机器学习和深度学习进行检测分类。本文也将使用卷积神经网络(Convolutional Neural Network,CNN)对数据流量进行分类,并且采用端到端的方式。因为端到端的网络对于样本的拟合性更好,它求取的是从输入端到输出端之间样本的全局最优值,而非局部最优值,端到端模型构建的方法可以根据输出的损失值反向传播自动调整每一层的参数,直到求得最优结果,非端到端的模型往往因步骤独立,反馈只能从本层传输到上一层,难以实现全局最优化。本文所做工作如下:

1)设计了一个端到端的一维卷积神经网络(One-Dimensional CNN,1D-CNN),该网络可以实现对VPN(Virtual Private Network)与非VPN(NO-VPN)中共12 类网络的加密流量进行服务类型的分类,其中每类加密流量中都包含多种应用,最多可达到5种。

2)利用五元组可以标记数据流和SSL(Secure Sockets Layer)握手时协商密钥、算法的规律,把原始输入时单个数据流使用的784 个字节减少到529 个字节,和现有的成果相比,其准确率保持不变,处理速度明显提高。

3)通过对数据包中所有协议层All 和单独使用有效载荷L7 进行对比实验,证明了数据包中包头部分对分类有着很大的提升作用,本文中使用所有协议层All的分类准确率比只使用有效载荷L7的分类准确率提高了20个百分点;单向流Flow与双向流Session 准确率基本相同;除此之外,还对本文方法和其他研究方法进行对比。

1 相关工作

Anderson 等[1]指出了对于加密流量,机器学习算法要比传统的模式匹配等方法具有更好的性能,这种性能的优越是因为机器学习算法对不平衡的数据和不确定的实际情况具有更好的适应性,这种适应性表现在对结果的良好分类上。文章还使用实验对6 种机器学习算法进行比较验证,但该文章只限于使用传统的机器学习算法,未能把深度学习也加入到里面进行对比。

陈雪娇等[2]使用神经网络模型对流量进行分类,把流量样本预处理成为分组净荷字节矩阵,指出了CNN 模型应用到数据流量分类时具有较好的表现,但该文章在选择数据集时只选择了ISCX 数据集中的3 种应用,其范围明显不足,缺乏足够的说服力。

Wang 等[3]使用端到端方法进行实验,把字节视为像素,使用处理图片的方式来处理网络数据包,在应用类型分类上取得了较好的效果。文章中重点对1D-CNN 和二维卷积神经网络(Two-Dimensional CNN,2D-CNN)的分类准确性进行了比较,得出了一维卷积网络的分类准确率高于二维卷积神经网络2.51 个百分点的结果。但他们并未讲明为什么要使用784 个字节,所使用的数据集也很不平衡,最大训练样本有60 000个,最小只有298个,不同类别之间数量相差极大。

Wang[4]指出了流量识别的关键在于寻找到流量数据中的关键特征,并结合神经网络和深度学习提出了一种SAE(Stacked Auto-Encoder)架构,该架构属于无监督学习,可以自动对数据流量进行分类。在实验中还分别检测了有效载荷中对分类最有用的前25 个特征、前100 个特征、最无用的300 个特征所处的位置,通过位置来看,前200 个字节最为重要,后面的关键字节比较分散,该结果表明可以减少在识别分类时对有效载荷的使用。

Rezaei 等[5-6]使用深度学习的方法对流进行分类,提出了模糊流的概念,模糊流就是指一些应用软件会附带通用的API(Application Programming Interface)模块,这些API 模块往往会发送一些广告之类的无关信息,与正常的网络数据流量有很大区别,但又属于该应用软件。作者使用CNN+LSTM(Long Short-Term Memory)的方式对流进行定位,取得了较好的效果。此外他们还使用遮挡分析对握手字段进行了研究,遮挡分析就是把一部分信息进行遮挡或删除,以测试该部分对分类准确率的影响。经过多次分析,发现SNI(Service Node Interface)是SSL/TLS 中最重要的字段,因为它包含客户端想要连接的目标主机名。Ciper info所含有的信息也非常关键,因为它包含了目标应用程序的各种密码套件组合。

Anderson等[7]在2016年发表的另一篇文章中也使用密码套件等信息来进行分类,他们分类的目标是识别出恶意加密数据,通过使用上下文中的DNS(Domain Name System)和HTTP(Hyper Text Transfer Protocol)头部判断服务器方所使用的密码套件信息是否过期,恶意的服务方所使用的密码套件信息与正常的服务器方所使用的有较大的区别,通过该方式可以达到超过99%的精度,同时作者又指出恶意数据占正常数据的极小一部分,为防止出现差错,又添加了错误发现率FDR(False Discover Rate)参数,使FDR=0%时其准确率也超过了99%。

Lotfollahi 等[8]提出了深度包的方法进行加密流量应用分类,使用统计方法发现96%的数据包载荷长度小于1 480 字节,并因此使用1 500 个字节作为CNN 的输入,对于不足的字节默认补0,然后使用深度学习方法从流量中自动提取特征,其应用分类结果表明深度包的方法优于之前所有在ISCX2016 公共数据集上的工作,但是他们选择在输入时把整个的载荷部分全部作为有效内容输入进去,这增加了不必要的开销。

卓勤政[9]使用两种CNN 模型对10 类流量进行识别,一种是使用定长的数据流前1 024个字节,另一种可以自动处理可变长度字节输出为定长字节,通过实验对比后一种识别效果要明显优于第一种,可达到97%左右;马若龙[10]也使用1 024个字节对加密流量进行识别,对8种应用协议实现了95.65%的准确性。但本文认为以上两种方法仍存在很大的改进空间。

Kumano等[11]提出在保证分类准确率的基础上,可以一定程度减少所需要的数据包个数,并通过实验加以验证,在处理某些特征时,在保证准确率的情况下最少使用的数据包个数为10。

当前情况下研究加密流量分类的方法大体分传统机器学习和深度学习两种,但大多集中在深度学习上,这是由深度学习的特点所决定的,传统的机器学习处理时有几个问题:1)要先从数据集中提取特征,然后embedding 操作获取词向量,最后使用多种分类方式进行测试比较,取得最优值,其过程比较复杂,也不符合端到端的思想。2)准确率的提升依赖于对特征的精准提取,但对于一般人来说,该项要求较高,构造特征极为不易。3)处理少量的数据时传统方式准确性更好,但面对当今的海量数据,其准确性相比于深度学习显得较低,且随着数据量的增大准确率差距会越来越大。当然传统的机器学习便于理解,在处理小型数据集时有其特定的优势;深度学习在处理数据时可以直接输入进行处理,在简化操作上占有很大的优势。

陈良臣等[12]、潘吴斌等[13]把加密流量分类的目标分为5种,分别是加密与未加密流量分类、加密流量协议识别、加密流量服务分类、加密流量应用分类和异常流量识别分类。加密与未加密流量分类是需要从流量中识别出哪些是未加密的,哪些是加密的,Dorfinger等[14]使用熵估计的方法识别加密与未加密流量,准确率达94%。加密流量协议识别是识别加密所使用的具体协议,比如SSL/TLS、IPSec(Internet Protocol Security)、SSH(Secure Shell)等。加密流量服务分类就是识别加密流量所属的服务类型,如即时通信、网页浏览或流媒体等等。加密流量应用分类就是识别流量所属的应用程序,如Skype、BitTorrent和YouTube等。异常流量识别分类就是识别出加密通道保护下的木马回传、僵尸网络控制等恶意流量,这些恶意流量在加密通道下极为隐蔽,但可以通过异常行为特征进行识别,此外还可以通过其活动规律进行检测,当前傅建明等[15]指出可以使用GAN(Generative Adversarial Network)进行检测,也是一个新的方向。

2 1D-CNN模型

本文使用端到端的1D-CNN 来对多个应用类型的数据流量包进行识别分类。1D-CNN是一种前馈神经网络,在传统神经网络的基础上进行了改变,它依然是层级结构,但是其形式和功能发生了变化,把原本的隐藏层替换为卷积层和池化层。卷积层通过卷积核处理特征图,提取了样本中存在的特征;池化层通过最大池化(Maxpooling)操作提取最主要的特征。使用1D-CNN在加密数据流量上的优势有:

1)相比于传统的机器学习方式,深度学习在处理大量数据上表现更好,无论是对不平衡样本的适应还是对特征的高效处理,又或者是结果的准确性,都远远超过了传统的机器学习。

2)相比于密集层(DENSE)组成的网络,卷积网络更容易利用学习到的局部特征进行分类。DENSE 层从输入样本中学习到的是全局模式,全局模式就是涉及所有特征的模式,而卷积层学到的是局部模式,学习到某个局部特征之后就可以在任何地方识别该特征,这叫作卷积神经网络的平移不变性,利用该性质可以高效地利用数据,它只需要很少的训练样本就可以学到具有泛化能力的数据表示。比如在识别加密流量时就可以利用该特性对数据中的TCP(Transmission Control Protocol)字段或者其他关键字段进行识别。

3)卷积网络可以学习样本的空间层次结构,即特征与特征之间的结构关系,如果第一个卷积层可以学到较小的局部特征,则下一个卷积层可以学到由第一个卷积层特征组成的更大的特征,在进行训练时,卷积层可以学习样本的结构,比如对比数据包的结构可以区分TCP 与UDP(User Datagram Protocol)包。

4)加密流量是序列型数据,它们本质是请求方与回应方的一种先后应答,这种应答方式必须要遵循一定的先后顺序,和文本类数据非常相似,一旦打乱关系则无法正确读取。相比于2D-CNN 在图像方面有更好的应用,1D-CNN 对于顺序数据具有更好的效果。

在使用1D-CNN 时,本文把原始输入的字节串联成一个向量输入到网络通道中,网络结构具体如图1所示。

图1 1D-CNN模型Fig.1 1D-CNN model

3 方法实现

3.1 数据流策略的选择

为了检验不同的数据流表示方式对识别分类的影响,本文在构建过程中,设置了4 种数据分析维度,分别是Session+All、Flow+All、Session+L7 和Flow+L7。其中Session 是由五元组标记的双向会话流,Flow是由五元组标记的单向会话流,正常情况下一个Session 是由两个Flow 组成,五元组是指源IP(Internet Protocol)地址、目的IP 地址、源端口、目的端口和协议类型。五元组可以较好地对会话流进行标记,即便是动态端口技术使端口发生跳转,它对于当前的流量分类也起着重要的作用。All 是指数据包中所有协议层的数据,L7 指的是OSI(Open System Interconnection)结构第7层或者TCP/IP 结构第4 层的数据,即有效载荷信息。通过对比,可以明确地观察到不同的数据流选择对分类所产生的影响,以便更好地理解它们在分类过程中所起的作用。

本文使用ISCX2016数据集,在处理数据集时根据不同的流量表示可划分成4个对比实验,具体情况如表1所示。

表1 数据集预处理结果Tab.1 Preprocessing results of dataset

3.2 数据包策略的选择

本文所使用的加密流量是传输层的加密,当前传输层加密协议主要有SSL、TLS和SSH 三类,TLS是在SSL的基础上发展起来的协议,二者具有相同的加密流程。

杨婧[16]介绍了SSH 的基本原理和流程,通过对比可以发现SSH 与SSL 也并无本质上的区别,二者都是以TCP 为基础保障通信的。在通信前都首先要进行协议版本及算法的协商,然后双方互相验证,最后使用得到的密钥进行加密通信。区别在于通信过程中SSH 先使用非对称加密再使用对称加密,而SSL 直接使用对称加密。本文在识别加密流量时着重利用协商过程中传递的数据包,该部分数据包属于通信之前传递的明文信息,与通信过程中的加密方法并无太大关系,因此二者可以使用相同的方法进行识别。本文以SSL 为代表,对其加密过程进行分析(如图2)。

图2 SSL结构Fig.2 Structure of SSL

SSL 位于传输层和应用层之间,其结构分为握手协议、更改密文协议、警报协议和记录协议。

SSL 握手协议是通信双方互相验证身份的协议,服务端和客户端在这个过程中确认对方身份,并协商密钥和算法,在协商完成后,双方开始使用协商好的加密协议和密钥进行通信。其流程如图3所示。

图3 SSL握手Fig.3 SSL handshake

在图3 的握手过程中,通信双方协商了加密传输信息时所使用的各类参数,由于SSL 握手协议的通信过程是通过明文传输的,所以可以通过抓取Pcap 文件获取数据包的头部信息,再利用五元组的标记功能,就可以对数据流进行标记并分类。

本文尝试在保持准确率的情况下来减少数据包的个数以提高效率,根据对SSL 握手包的分析发现,在Finish 之前客户端和服务器端已经完成了协商,因此为提高处理的效率只使用前6个数据包,这与其他研究相比要少得多。

3.3 特征字节策略的选择

为了更准确地选择关键特征、去除无用特征,本文对特征所在的字节进行选择。文献[4]中把数据流中每个TCP 会话的有效载荷字节连接起来,每个有效载荷序列的长度是1 000个字节,然后使用SAE 对特征进行提取,并把最重要的25 个特征、最重要的100个特征和最不重要的300个特征所在位置进行绘图。受其启发,有必要选取一定的有效载荷字段,不能太短也不能太长。本文选取了前529 个字节,其长度的选择来源于以下判断:数据包加密传输时前6 个数据包中含有更多的信息,且其有效载荷中前200 个字节含有的信息更多,更有助于分类,于是使用54×6+200=524,54 是指数据包头部的54 个字节,6 指前6 个数据包,200 则是指有效载荷长度,为便于计算将N设置为529 个字节。同时为了方便与原有的784个字节进行直观对比,本文将4 组实验中的新选取特征字节数都设置为529。

为精简字节,本文在实际处理时还对无用字节进行了舍弃,如Pcap 的Pcap Header 和Packet Header,它们只是对整个Pcap信息的一些统计,并不能在分类中起到比较明显的作用,图4是它们的具体结构。

图4 Pcap结构Fig.4 Pcap structure

从图4 可以看出,Pcap Header 中包含着Pcap 文件的一些简单信息,占据24 B,在整体的Pcap 前有且仅有一个,其中包含五项信息,它们表示数据流从第几个字节开始,有多长字节,到哪结束,Packet Header 是单个数据包的信息概要,占据16 B,在每个Packet前侧都会有一个,如果一个Pcap文件拆分为两个,那么相应的Pcap Header 也会变成两个,但Packet Header 个数是不会变的。但无论是Pacp Header 还是Packet Header它们都是一些统计信息,并未涉及分类的重要内容,对于该部分完全可以忽略,只选取Packet Data部分,不仅可以提高处理效率,也可以容纳更多的有效信息。

4 实验与结果

本文硬件平台采用NVIDIA GPU(GeForce GTX1660 Ti),16 GB 内存用于神经网络的训练和测试。Tensorflow 采用2.2.0 版本,CUDA 10.2,实验过程中,训练集占90%,测试集占10%,使用交叉熵作为损失函数,AdamOptimizer进行优化。

4.1 实验过程

在实验过程中,对数据集的处理非常重要,不同数据集的选择其结果是很难进行公正的比较,即便是同一个数据集,其处理方式的不同也会导致一些差距,为了尽可能地处于同一个水平来比较不同方法的有效性,本文尝试保持整体环境不变单个变量改变比较最终结果的方式来进行实验。其具体处理过程如下:

第一阶段(预处理阶段)使用ISCX2016数据集,并根据所给出的数据集文件把数据分成12类,使用USTC-TK2016工具包切分成数据流,根据协议层和单双向会话流的不同,生成4个数据集,再提取不同的报文长度,生成4 组对比实验:第一组实验是Session+All,第二组实验是Session+L7,第三组实验是Flow+All,第四组实验是Flow+L7。每组中分别包含784 个字节和529个字节的IDX3文件。

第二阶段(训练测试阶段)把第一阶段所生成的IDX3 训练标签和训练文件输入到神经网络模型中,损失函数是交叉熵,使用梯度下降法降低交叉熵以拟合样本模型,然后用测试数据集进行验证。

第三阶段(实验对比阶段)使用第二阶段方法得到四组实验的结果,最终进行对比,注意在更换数据集时需要根据输入像素的大小调整模型中weight和bias的值。

4.2 结果与分析

为了更好地评估模型的优劣性,本文选取了准确率(Accuracy)、精确率(Precision)、召回率(Recall)三个参数。在训练和测试样本中,样本分为正样本与负样本,正样本即是目标样本,负样本是非目标样本。随着检测目标的不同正样本会不停地变化,特别是在多分类样本中更为明显。

Accuracy 指的是预测正确的样本个数与样本总数的比值;Precision 指的是预测正确的所有正样本个数与预测的所有正样本个数的比值;Recall 指的是预测正确的正样本个数与样本总数中所有正样本个数的比值。这3 个参数的值越高表明识别的效果越好。

图5 是4 组对比实验中12 分类的Accuracy 结果,从结果上看,784 个字节与529 个字节所得到的准确率基本相等,中间虽有差距,但其值较小,可视为识别时的上下波动。此外,Session 和Flow 的准确率并未拉开多少,本文认为其中有以下原因:

图5 Accuracy结果对比Fig.5 Comparison of Accuracy results

1)Session 本身与Flow 的识别效果相差并不是很大,因为它们的五元组从根本上说是可以相等的,只是位置发生了变化,在使用神经网络处理Flow 时,模型只需要多进行训练就可以达到Session 的效果,因此二者的差距并不像想象中那么大。

2)在处理数据过程中,很大一部分Session 也同时等于Flow,该部分的Session 流由于动态端口技术的存在所以其数据包个数较少,有一部分只含有一到两个数据包,且都是单向流。对于这一部分在进行Session 切分时,与进行Flow 切分时所得到的结果是完全一致的,这样一来该部分会降低Session的处理效果,进而缩小Session与Flow的差距。

图6 是第一组实验中Session+All 的Precision 和Recall 扩展实验结果,它是12 分类。按照先后顺序其服务类型依次为Chat、Email、File、P2P、Streaming、VoIP、VPNchat、VPNemail、VPNfile、VPNP2P、VPNstreaming、VPNVoIP。

图6 Precision和Recall结果对比Fig.6 Comparison of Precision and Recall results

从图6 中对比来看,存在单个类别差距较大的情况,如图中Vpnstreaming 的Precision,其值相差13 个百分点,这种差距是由选取字节所造成的,对于单个类别有较大影响,但这种差距在整体上并未显现出来,因为在其余类别中相应地会加以补偿。总体上看两个取值结果相似,并无明显差距。

4.3 模型评估

为了更好地评估模型,本文对比其他论文中使用的机器学习方法,如表2所示。

表2 实验方法对比Tab.2 Comparison of experimental methods

以上是一些加密流量识别分类的相关研究,其数据来源于各自论文的结果,且以上文献原数据集都是使用ISCX2016。这些研究采用了相似的处理方法,都是在数据包上从前向后截取一定长度字节使用深度学习方法进行分类,但是又各有侧重。

文献[2]证实了相比于传统机器学习方法深度学习具有更高的准确率,也更方便处理数据。文献[3]验证了1D-CNN和2D-CNN 的适用范围,指出在序列型数据上1D-CNN 更有优势。文献[9]、文献[10]较相似,二者更侧重于与其他方法的结合应用。上述文章都是直接截取一定字节,但并未讲清楚为何要使用该长度,也未对其进一步的探讨。本文与上述文章相比多了字节筛选部分,尝试只保留最关键的特征,使用关键字节进行最大程度分类,准确率与效率并重。

从上述表2可以看到,文献[2]使用1 500个字节进行3分类准确率达98%、文献[10]使用1 024 个字节进行8 分类准确率达95.65%,表现差于文献[9]使用1 024 字节进行10 分类准确率达97%,因为根据以往经验,随着分类的种类增加准确率下降是越来越快的。文献[3]使用784 个字节进行12 分类准确率达86.6%,与本文进行12 分类529 字节准确率达95.5%相比仍有一定的差距,虽然文献[9]使用1 024 个字节进行10 分类准确率达97%,但其类型属于应用分类,比服务类别分类难度要低,且在字节长度和目的分类数上本文都要优于文献[9]很多,而二者准确率大致相当,故本文相比于上述论文有明显的优势。

5 结语

本文主要研究了不同的加密数据流提取方法对分类准确率的影响,还与已有的工作进行对比,通过研究发现可以在保证已有准确率的同时更进一步减少对字节的要求,这种提取方式可以降低资源消耗、提高效率,但还有很多的不足,例如:在数据预处理时并未把重复发送或损坏的数据包进行严格的清理,在一定程度上降低了分类的准确性;此外训练数据也不平衡,个别应用中数据过大或者过小都不利于准确分类。下一步工作将重点关注以下方向:一是研究LSTM 相关领域的最新文献,并尝试把时间因素作为特征加入到模型中去,以便对数据流更好地进行标记;二是尝试分析数据包头和有效载荷在分类过程中各字节所起的作用,以便对关键特征进行针对性提取,进一步提升性能。

猜你喜欢
数据包字节准确率
No.11 字节跳动计划自研芯片:仅供内部使用
二维隐蔽时间信道构建的研究*
No.8 字节跳动将推出独立出口电商APP
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
多层螺旋CT技术诊断急性阑尾炎的效果及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
颈椎病患者使用X线平片和CT影像诊断的临床准确率比照观察
C#串口高效可靠的接收方案设计
网络数据包的抓取与识别
人类进入“泽它时代”