基于卷积神经网络的加密代理流量识别方法
2023-08-10李敬
李 敬
(山东高等技术研究院计算科学研究中心 济南 250100)
网络代理是一种特殊的网络服务,它允许一个网络终端(通常称为客户端)通过该服务与另一个网络终端(通常称为服务器端)进行非直接的交互.代理服务器(proxy server)代表客户端向服务器端获取数据,更形象地说,它是网络通信的中介,负责转发合法的网络请求,能够对接收到的请求进行访问控制.代理技术能够在一定程度上隐藏网络终端的真实信息,并提供基本的网络边界隔离[1].
网络代理技术在提供便捷的网络服务的同时,也存在窃取和篡改用户数据、侵犯用户隐私等问题.不法分子也会利用网络代理技术能够间接访问的特性,突破IP封锁的限制,绕过防火墙和入侵检测系统的防护,规避国家网络安全部门的监管,非法访问被国家禁止的境外网站,触犯国家的相关法律[2].多数的代理服务器支持将加密、伪装、混淆等技术和代理技术相结合,极大地增加了网络监管的难度,对国家、社会和个人的网络与信息安全造成严重威胁.这就要求我们能够对这部分加密代理流量进行精准的识别.
鉴于此,本文提出了一种基于卷积神经网络的加密代理流量识别方法.与以往加密流量识别方法不同的是,本文方法加入了对原始流量的流还原操作,然后为每个训练样本生成1张流特征图,并将其作为卷积神经网络的输入进行训练.最后利用测试集对训练的模型进行评价.实验结果表明,本文方法能够高效、快速地对加密代理流量进行识别,并取得了较高的准确率.
1 相关工作
目前针对加密代理流量的识别研究工作偏少,更多的研究是对普通的加密流量进行识别.普通的加密流量大多依附于某一特定的应用或协议.这些应用或协议在传输建立阶段存在明文交互的过程,后续的数据传输阶段虽然数据经过加密处理,但是由于基于公开特定的协议存在较为明显的流量特征[3],而加密代理流量则多数基于自实现的私有协议,通过第三方渠道预共享加密算法和密钥的机制,实现了全域数据加密,避免了明文传输的阶段,且部分应用支持流量混淆和协议伪装技术,以规避相应的流量检测,加大了识别的难度[4].两者的主要异同如表1所示:
表1 常见加密应用/协议与加密代理应用对比
早期的流量分类方法主要有基于端口和基于有效载荷的分类方法[5].基于端口的分类方法通过假设大多数应用程序使用默认的端口号来推断流量的类型.然而端口伪装、端口转发、端口随机化等技术的应用使得该方法的可靠性显著降低.基于有效载荷的方法亦称作深度包检测(deep packet inspection, DPI)技术,通过匹配数据包的载荷内容来确定流量类别.以上2种方法均不适用于加密代理流量的识别,加密代理软件多数使用高位随机端口,且DPI技术无法识别加密后的数据包[6].
当下对于加密流量识别的研究工作主要集中在机器学习相关的方法上.根据使用的机器学习算法不同,可以分为基于统计特征的机器学习算法和基于神经网络的深度学习算法[7].基于统计特征的机器学习算法对加密流量的识别主要存在2个问题:其一是需要对待分类的加密流量提取多维的特征集,特征的选取高度依赖人工经验,不同的特征集对识别结果影响巨大;其二就是基于统计特征的机器学习算法存在很大的局限性,难以表征复杂的内在规律[8].
王勇等人[9]提出了基于LeNet-5深度卷积神经网络的分类方法,通过不断调整参数产生最优分类模型,测试结果表明该方法优于主成分分析、稀疏随机映射等方法;王伟[10]提出一种基于CNN的异常流量检测方法,该方法利用CNN特征学习能力,准确地对流量的特征进行提取,将提取到的特征用于流量分类并取得了良好的结果,最终将该模型用于异常流量检测;陈雪娇等人[11]利用卷积神经网络的识别准确率高和自主进行特征选择的优势,将其应用于加密流量的识别,测试结果表明该方法优于DPI方法.
Lim等人[12]利用深度学习提出了基于数据包的网络流量分类方法,该方法提取网络会话中的前几个数据包将其处理成等长的向量,然后利用CNN和ResNet进行训练和流量分类;Ran等人[13]提出了一种将3维卷积神经网络应用于无线网络流量分类的方法,实验结果表明该方法优于1维和2维卷积神经网络;Wei等人[14]提出了基于表征学习的恶意流量分类方法,将原始流量数据视为图片,用图片识别的CNN模型进行分类,取得了理想的结果.
总结现有文献,本文将卷积神经网络模型应用于加密代理流量的识别.主要创新和工作点如下:
1) 参照图像识别领域经典的LeNet-5网络模型,设计了包含2个卷积-池化层和2个全连接层的卷积神经网络分类模型;
2) 自主部署并捕获主流加密代理软件的原始流量;
3) 利用Libnids入侵检测库实现TCP/UDP流的还原工作,弥补了现有研究直接使用原始流量包的缺陷;
4) 提出了流特征图概念,截取每条数据流的前N个数据包的L×L个字节,拼接成1张(N×L,L,1)像素的灰度图片,作为CNN分类模型的输入;
5) 通过选取不同的训练参数和超参数,对设计的分类模型进行训练、验证和测试,并对实验结果进行分析比对.
2 设计与实现
2.1 方法概述
图1所示为本文方法的处理流程框架,具体步骤如下:
图1 本文方法处理流程框架
步骤1.本文实验选用Shadowsocks,ShadowsocksR,Trojan,V2Ray这4款当下使用较多的加密代理软件.
步骤2.部署以上加密代理软件的服务器端,并由客户端发起真实的代理请求.在此过程中,在服务器端执行tcpdump-i eth0 tcp and port {PORT} and not arp and not icmp and not ip multicast-w {APP}.pcapng进行精准流量捕获.其中PORT为具体加密代理的部署端口,APP为具体的加密代理软件名.
步骤3.使用Libnids库对捕获的原始流量进行流还原,同时将还原后的每条数据流的前N个包载荷存储在MySQL数据库中.
步骤4.使用PyTorch框架构建卷积神经网络模型.
步骤5.读取MySQL数据库,构建流特征图集合,并将全部的数据集按照7∶1∶2的比例分成训练集、验证集和测试集.
步骤6.将训练集和验证集分别输入模型进行训练,训练集负责训练模型参数,验证集确定终止训练条件.
步骤7.由测试集对训练的模型进行评价.
2.2 预备知识
定义1.流特征图(stream feature image).1条数据流本质上是一系列数据包字节的有序组合,截取每个数据流前N个数据包载荷的前L×L字节,按照列方向拼接成1张(Height,Width,Channel)为(N×L,L,1)像素的灰度图片,称为该数据流的流特征图,如图2所示.
图2 流特征图的生成
经过还原的数据流本质上是一个序列不等长的字节流.每个字节由8b组成,这与图像中的1个像素取值范围相符合.本文认为数据流开始后的前N个包对识别工作起了至关重要的作用,前N个包更能表现数据流的根本特征,后续数据包更多地取决于加密代理服务的上层应用,而非加密代理本身.由于每个数据包的载荷长度不同,而CNN模型的输入要求一致,因此还需对每个数据包载荷进行填充或者截取,以实现归一化处理.
定义2.UDP流.为生成流特征图,需要提取数据流的前N个数据包,这就要求我们能够明确数据流的开始与结束.TCP协议天然支持流式传输,分别使用3次握手和4次挥手数据包,标识流的开始与结束.而UDP协议是一种无连接的传输协议,仅提供Best-Effort最大努力交付服务,无需建立连接便可发送数据,亦无传输结束数据包.为此,本文参考Linux 3.0内核TCP/IP协议栈的实现,选取2倍的tcp_fin_timeout作为UDP流的超时结束时间,即120s,对1个UDP流作出如下定义:
相同UDP五元组第1个UDP包记为UDP流的开始,当该五元组在120s内未收到新的数据包时,认为该UDP流结束.
当作出以上定义后就可以将TCP流与UDP流统一对待,以下文中将不再对TCP流与UDP流作明确的区分,统一称为数据流.
2.3 卷积神经网络
相较基于统计特征的机器学习方法,使用卷积神经网络模型进行分类省去了特征提取的过程,特征的选择更加依赖人工经验,费时费力.通常卷积神经网络适用于图像识别,所以如何实现数据流到图像的转换,也是流量分类过程中一个很重要的环节,本文方法利用流特征图来表征数据流.
参照经典图像识别模型LeNet-5,本文设计了如下卷积神经网络:2个(卷积层+池化层)和1个线性层(包含2个全连接层),如图3所示,各层参数如表2所示.
图3 卷积神经网络模型
表2 CNN模型参数
2.4 处理框架
2.4.1 数据流还原
在前文所述的文献中,多数采用基于原始流量包的处理策略,将pcapng文件中记录的原始流量剔除数据链路层帧头、IP头、TCP/UDP头后,按照包抵达的先后形成数据包序列,直接作为神经网络的输入进行训练.对于数据流的还原工作很少提及,但本文认为对原始数据流的还原是必不可少的.
互联网链路是不可信、不可靠、不确定的,特别是加密代理流量多数情况下需跨境数据传输,数据包在国际骨干网络传输的过程中可能会出现丢包、坏包、重复、乱序、分片、分段等情况.单纯地读取pcapng文件中的某个包并不能反映发送端原始发送的数据.对于捕获的原始流量首先需进行数据流的还原,重现网络内容,还原真实网络数据.
本文选用Libnids(library network intusion detection system)[15]网络入侵检测开发包进行数据流还原.Libnids基于libpcap和libnet开发,仿照Linux内核中的TCP/IP协议栈实现,将原本在内核空间中完成的IP包校验、去重、IP碎片重组、TCP分段还原在用户空间实现,对上层的处理逻辑提供还原后的真实流量.
2.4.2 模型构建
本文选用PyTorch[16]机器学习库进行卷积神经网络模型的构建.PyTorch是一个开源的Python机器学习库,基于Torch实现提供了强大的深度学习能力,并能够利用GPU算力加速张量计算.
模型训练流程如下:
输入:超参数、训练参数、训练集、验证集、测试集;
输出:加密代理识别模型.
① 超参数、训练参数初始化;
② WHILEepoch ③ 选取批次训练数据Ti∈Train_Dataset,正向传播,计算预测值; ④ 计算训练样本交叉熵损失函数值 CrossEntropyLoss; ⑤ 随机梯度下降法,反向传播更新损失函数对模型参数的梯度; ⑥ 选取批次验证数据 Vi∈Validation_Dataset; ⑦ 计算验证样本在当前epoch轮次训练模型的损失函数值和准确率; ⑧ 验证样本的损失函数值和准确率是否达到阈值,如果达到结束训练,否则转②; ⑨ END WHILE ⑩ 测试集输入训练好的模型,对训练模型进行评价. 目前暂无公开的加密代理流量相关的数据集,因此本文采用自主部署、自主采集的方法获取原始的流量.经过广泛的调研,选择了Shadowsocks(以下简称SS),ShadowsocksR(以下简称SSR),V2Ray,Trojan这4款主流的加密代理软件.同时作为对比,加入了普通加密流量Https流量,以便更好地对比分析.本文的实验数据采集环境如图4所示,样本数如表3所示. 图4 原始流量采集 表3 数据集样本数 本文使用分类准确率和模型构建时间开销作为分类效果的评价标准,并通过混淆矩阵(confusion matrix)计算准确率.混淆矩阵是一个N×N的矩阵,其中每列代表预测类别,每行代表数据的真实归属类别,如表4所示: 表4 混淆矩阵 准确率表示所有的预测正确(正类和负类)占总体样本的比重: 为了验证本文方法的可行性,本文进行了一系列的实验.重点关注2个纬度对识别效果的影响,分别是:不同的前N个数据包和不同的包长选取策略L. 1条数据流本质上是一系列数据包的有序组合,理论上选取的数据包个数越多,能够表征的信息也越多.当选取该流全部的数据包时,则能够完整地表征该数据流.但是出于性能和实时性的考虑,本文仅选取前N个数据包进行训练.同时,后续的数据包可能会导致训练的模型过拟合,降低模型的普适性.在本实验中分别选取N为1,2,4,8这4种情况进行模型训练. 通过分析数据流的包长分布(如图5所示),本文将载荷长度分成4个区间,分别为[0, 100),[100, 400),[400, 900),[900, 1600).因此,选择4种包长截取策略:10×10,20×20,30×30和40×40.当选取10×10流特征图生成策略时,会导致大部分数据包发生截断;选取40×40时,则全部数据包均需进行x00填充;选取20×20和30×30时,部分载荷截断、部分填充,介于以上两者之间. 图5 数据包载荷长度分布 3.3.1 分类准确率 本文的实验结果如表5所示.可以看出,当N=1时,识别准确率显著低于其他情况.这是由于数据包过少导致模型欠拟合.当N=4,L=40×40时,识别准确率最高,达99.38%.此后,当N增长到8时,准确率有所下降,可见当N增长到一定值后,N的增长会导致模型的过拟合. 表5 不同N,L组合的准确率 % 图6所示为N=4,L=40×40时生成的典型流特征.模型训练过程中训练集、验证集的损失函数值、准确率变化趋势,以及最终的分类混淆矩阵分别如图7和图8所示.从图7可知,经过8轮的迭代训练之后,该模型的损失函数值及准确率趋于稳定.由此表明,该方法具有极快的收敛速度. 图6 典型流特征图(N=4,L=40×40) 图7 损失函数和准确率 图8 测试集混淆矩阵 3.3.2 时间开销 在追求高准确率的同时,也应关注模型构建的时间开销.不同前N个包和载荷长度L组合在训练模型时的时间开销如表6所示.可以看出,随着N和L的增加,模型构建的时间开销显著增长. 表6 不同N,L组合的模型构建时间开销 s 如果将识别准确率阈值设为98%,那么在N=4,L=30×30时,能够达到建模性能与识别效果之间较好的平衡. 3.3.3 同类方法对比 为了更好地评估本文提出的分类方法,选取参考文献中典型分类方法与其对比,如表7所示.可以看出,在分类准确率方面,本文方法具有一定的优势. 表7 同类方法对比 本文提出了一种基于卷积神经网络的加密代理流量识别方法,并在真实捕获的流量数据集上验证了该方法的有效性.实验结果表明,在N=4,L=40×40的情况下,本文方法的准确率能够达到99.38%.该方法能够实现加密代理流量的精准识别工作,并为后续针对非法代理流量的监测、阻断、回溯等提供依据. 下一步的工作将围绕以下2点展开:1)探索该方法在大流量、高速率核心节点的实时应用;2)由于目前缺乏公开的加密代理流量数据集,实验结果高度依赖自采流量,方法的适用性有待更加广泛和标准的数据集进行验证;3)考虑到1条数据流是一系列有序数据包的集合,存在一定的时序特征,未来尝试使用LSTM循环神经网络充分利用该特性,以提高识别的准确率[19].3 实验与分析
3.1 实验数据集
3.2 实验评价标准
3.3 实验结果分析
4 结 语