基于网络的入侵检测的目标是识别那些企图通过网络跨越被保护系统安全边界的行为,任何损害系统安全性的网络入侵行为都应被识别,从而让系统快速做出响应。异常入侵检测对于网络安全有着重要的意义,通过对正常用户行为的建模它可以识别出异常的流量,从而检测新型的攻击。在检测过程中,研究者面对的是网络上捕获的网络流量数据,对于这些数据,其中一种处理方法是根据专家知识和统计学提取人工特征,形成特征集,然后基于人工特征数据执行入侵检测,识别某条记录是异常流量还是正常流量。
对于深度学习方法,如卷积神经网络(ConvolutionalNeuralNetwork,CNN)和循环神经网络(RecurrentNeuralNetwork,RNN)等,其强大的地方在于可从复杂的原始数据如图像、文本等数据中自动提取特征,并用这些人类无法确切解释,但是十分有效的特征进行一些人工智能(ArtificialIntelligence,AI)任务,如对象检测或者语音识别、机器翻译等。将人工特征送入CNN或RNN中进行分类,只是将其作为一个强大的分类器,没有利用到深度学习方法强大的表示学习能力。尽管目前研究者所提出的方法在入侵检测分类上得到了良好的效果但是面对各种新型的攻击类型,人工提取的特征是否还能胜任检测工作还存在疑问,以及对检测方法的实时性要求,也需要检测方法可以快速获取依赖的特征,而不是在整个流量都得到之后再进行计算,因此研究者开始探索直接监测网络流量的方法。
虽然深度学习方法在人工特征集上的任务中表现出优越的性能,但是不能忽略其更强大的能力,即从原始低级数据习得高级抽象(自动特征)即表示学习的能力。Wang等人将网络流量数据表示成1000长的一维序列,采用堆叠的自动编码器(StackedAutoEncoder,SAE)做网络协议识别,取得了良好的效果。Wang等人第一次尝试将网络流量转化为图像,使用卷积神经网络进行恶意软件流量分类,在他们自建的数据集USTC-TFC2016上,取得了平均准确率99.41%的好成绩。他们还对如何表示网络流量取得最佳性能做了对比实验,实验结果表明,采取会话即双向流和所有数据包层的流量表示类型会取得最好的结果。此外,他们还使用一维卷积神经网络来鉴别加密流量和未加密流量。也有研究者采用网络流量数据做入侵检测的流量识别,Peng等人将网络流量作为图像,送入卷积神经网络中检测该流量是否是安卓恶意软件流量。此外,基于循环神经网络,Radford等人将流量数据视为机器之间对话的语言,使用LSTM进行序列建模,并提出了一个简单的基于频率的模型,采用受试者工作特性曲线(ReciverOperatingCharacteristic,ROC)下面积(AreaUnderCurve,AUC)为评估指标,实验在IDS-2017上进行,取得了不错的效果。
2算法
本文提出的算法的重点在于处理网络流量数据生成可用于深度学习的流量样本,以及构建神经网络模型,从这些流量样本中提取出良好的特征用于检测流量是正常流量还是异常流量,整体流程如图1所示,最后得到一个可用于入侵检测的模型。图1还显示了本文算法的一个重要优点是无需人工设计特征,无需专家知识,由模型自动提取特征。
图1算法流程
2.1流量分割
在计算机网络中,定义5元组(源IP,目的IP,源端口,目的端口,协议)相同的一系列数据包同属于一个流,源IP和目的IP相反,源端口和目的端口相反,协议相同的另一个流是它的反向流,前向流和反向流就构成了一个双向流即会话,以下统称会话。在这样的定义下,网络数据基本上分为TCP会话和用户数据报协议(UserDatagramProtocol,UDP)会话两大类,当然,根据应用层协议的不同在这两类上会衍生出很多小类,如网络流中最多的超文本传输协议(HyperTextTransferProtocol,HTTP)会话。对于TCP会话,第1个SYN报文标志着会话开始,而FIN包之后的ACK包表示会话的结束。对于UDP会话,定义在最初始的数据包之后600s(已经能够包含绝大多数的数据包)内的会话是同一个会话,超时过后即使5元组相同也将其划分为一个新会话,同样对于TCP会话也有超时的设定。流量分割的流程如图2所示。
图2流量分割流程
2.2模型构建和特征提取
最后将这两个特征向量在第一维拼接起来,得到一个1×2f的特征向量,至此,完成了特征提取。图3上半部分所示的CNN卷积网络中,依顺序分别是3×3的卷积层、2×2的池化层、3×3的卷积层、2×2的池化层、2×2的卷积层,最后是一个全连接层,共计3个卷积层,2个池化层,1个全连接层,最后输出1×128的向量。下半部分为一个循环神经网络的展开图,采用的是LSTM的一个较为轻量的网络变种——门控循环单元GRU。一个流的所有数据包按顺序依次作为1个m长向量送入GRU,采用最后输出的output作为特征向量,是1个1×128的向量。最后,将这两个向量连接,就得到1个1×256的总特征向量,就是全连接网络所期望的输入值。
图3会话样本特征提取流程
2.3分类
不同于人工设计特征,在执行任务前,提取的特征需要专家知识,而且后续使用传统机器学习也无法对该特征工程进行指导优化,这是因为没有明确的方法改进特征的优化提示,且如果模型效果不好,不能判断是特征不好还是模型不好;而本文算法模型所得到的特征向量和所执行的任务是一体的,提取的特征会在训练过程中通过优化算法不断改进,从输入网络流量数据到模型执行入侵检测任务的过程,整个模型是端到端的。
将前面特征提取网络输出的1×256向量作为输入,经过两层的全连接层,最后输出1×Categories(类别数)张量,使用Softmax函数概率化每个类别的置信度,取最高置信度所在下标的类别即为神经网络输出的类别。两个全连接层的网络结构为,1个(256,64)的全连接层和1个(64,2)的全连接层,最后使用softmax输出置信度。
3实验证明
实验目的:对比本文提出的基于深度学习建立的端到端的入侵检测算法和基于人工规则特征的入侵检测算法的入侵检测性能,证明算法有效性。本文实验环境:Windows10-21H1,Python-3.8.10,Pytorch-1.9,scikit-learn-0.24.2,CPUi5-10400,GPU1060。
3.1处理数据
为了获得算法对当前网络流行攻击的检测效果,本文选择了CICIDS-2018数据集,该数据集是加拿大通信安全机构和网络安全研究所的合作项目成果,涵盖了如暴力攻击、Heartbleed漏洞攻击、DOS攻击、分布式拒绝服务(DistributedDenialofService,DDoS)攻击、Web攻击(跨站脚本攻击)、结构化查询语言(StructureQueryLanguage,SQL)注入、僵尸网络、渗透攻击共7种攻击场景。该数据集虽然不是真实场景的攻击流量数据集,但是该数据集通过机器学习技术统计分析正常用户的网络行为,从而模拟正常用户流量,使用上述攻击场景模拟异常流量,并使用配置文件的方式生成了一个较为全面、一定程度上真实可靠的异常检测流量数据集。CICIDS-2018数据集针对捕获的原始流量,使用CICFlowMeter-V3的工具,从统计分析的角度,按照人类专家规定的特征提取了80维特征,本文算法需要与该人工特征做对比。本文选取了Wednesday-21-02-2018_Traffic和Friday-02-03-2018_Trafficr两天的网络流量数据,其包含正常流量和Bot、DDoS-LOIC-UDP、DDoS-HOIC3种攻击流量,其中LOIC(LowOrbitIonCannon)是低轨道离子炮,对该网络流量进行流量分割,其异常流量分布如表1。
表1CICIDS-2018人工提取特征和本文分割流量攻击类别分布
图4异常会话可视化
提取的会话数据以张量的形式存储,一个会话最后的张量形式为n×256,n是数据包的个数,根据每个会话的情况动态变化,256个字节是每个数据包最大接受的字节数,在对网络流量数据进行处理的时候,发现数据包的平均字节数为213(Bot)、74(DDoS-LOIC-UDP)、179(DDoS-HOIC),最后选取了256字节的数据长度存储数据包,超出256就截取前256个字节,少于256,空余位置填0。
在实际训练中,数据包并没有出现由于冗余而造成计算资源浪费的现象,因为对于实际为空的数据包,其实并不参与实际计算,该种形式是为了样本统一格式,方便处理。
3.2训练
3.1节中得到的会话总计100000个,将其打乱,按照7∶3的比例,分出70000个会话作为训练集,30000个数据作为测试集。损失函数是交叉熵损失函数CrossEntropyLoss,用于衡量模型分布和经验分布之间的距离,距离越小,模型就越接近经验分布。优化算法是基于梯度下降的后向梯度传播算法Adam,训练集被循环使用10个epoch(时期),可以看到训练集在大概第8个epoch的时候就开始收敛。
学习率参数设置:在使用Adam优化算法时,本文算法设置初始的学习率为0.001,在训练中,开始时学习率可以设置得适当大些,以让模型更快地接近最优点,之后应该将学习率减少,以避免跳过最优点,因此本文使用余弦曲率衰减计划,它会按照余弦曲线,即初始缓慢减少学习率,之后快速减小学习率,余弦曲线的周期可以指定,本文指定其为10,与训练集的循环次数一致,最低学习率选择默认为0。
3.3结果与分析
对于模型性能的指标,本文采用混淆矩阵的方式进行计算,表2为二分类混淆矩阵,可以基于将某一类视为正类,其他类视为负类的方式将混淆矩阵扩展到多分类。
表2混淆矩阵
准确率acc:模型预测正确的数目占所有样本的比例,如式(1)所示。在各个类别平衡时,该指标能够表明模型性能,但是在极端类别情况,如正类10个、负类90个,模型只需要输出全负类,就可以达到90%的准确率,然而其对正类的预测能力为0。
精确率p:模型预测为类别C的样本中其实际类别为C的样本所占比例,如式(2)。
召回率r:实际类别为C的样本中模型预测为C的样本所占比例,如式(3)。在上面阐述的类别不平衡分类中,就可以计算出正类的召回率为0/10=0,由此可以判断模型的预测能力完全无效。
F1值F1-score:精度p和召回率r的调和平均值,如公式(4),它综合考虑了准确率和精确率的值,F1值越高,模型性能越好。
本文针对3.1节中所提取的网络会话做实验,具体是对Friday提取的100000个会话的含有僵尸网络Bot的数据集进行实验,其结果如图5所示,其准确率为99.9967%,精确率为100%,召回率为99.9950%,F1值为99.9975%。
对Wednesday提取了正常会话(Benign)和DDoS-LOIC-UDP、DDOS-HOIC两种攻击会话,总计100000个会话。对这些会话进行实验,其结果如图5所示。实验对总体样本识别的准确率为99.99%,对正常流量的识别,以及对LOIC-UDP和对DDoS-HOIC的识别在各项指标上成绩也为99.99%,错误识别的样本数极少。在对LOIC-UDP的检测攻击中,即使由于最大数据包数的限制,导致算法无法取得该攻击高达十几万个的数据包,并整体作为数据输入神经网络中,但是对该攻击的局部特征识别非常成功。
同时,本文也对CIC-IDS-2018提供的基于专家知识和统计学的人工特征数据集(只包含Friday-02-03-2018.csv和Wednesday-21-02-2018.csv这两个文件)在决策树、随机森林、AdaBoost集成学习、贝叶斯、SVM、KNN最近邻这6种传统机器学习中的表现进行了评估,其结果如表3所示。
图5异常流量实验结果
表3CIC-IDS-2018人工特征数据集在传统机器学习上的表现
从表3结果分析,本文算法对Bot僵尸网络的准确率为99.99%,F1值为99.99%,对DDOS的两种攻击LOIC-UDP和HOIC的各项指标均高达99.99%。而人工特征数据集中对Bot的检测效果最好的是决策树算法,其准确率为99.98%,F1值为99.92%。对LOIC-UDP和HOIC的检测准确率最高的是决策树算法,分别为100%和99.99%。可以看到本文算法提取的特征检测攻击效果与人工特征持平,在Bot检测中略有优势。需要指出的是,这些指标较高的原因有可能是攻击类别较少,或者是该类攻击特征判定条件较为简单。
此外,本文在研究初期,采用提取单向流的流量分割方式,对Friday-02-03-2018-Trafficr提取的包含Bot僵尸网络的单向流样本数据进行实验。该方法对Bot的准确率为99.98%,F1值为99.98%,性能表现不如会话,最后调整策略,采取了提取会话的样本分割方式。
4结语
传统的机器学习入侵检测算法多依赖于人工设计特征,本文提出基于深度学习的异常入侵检测算法,采用端到端的架构,自动学习会话中潜在的高级抽象特征,无需人工设计特征,并且由于样本可由流量数据实时构造,具有实时检测的优点。实验证明本文算法是有效的,并且效果好于人工设计的特征。此外,本文还详细研究了网络流量切割的方法,遵循一般会话的定义来提取双向流,并给出了详细的会话分割流程。
本文方法还存在一些可改进之处,比如本文将算法提取的网络流量表示为单纯的数字向量,然而从可视化图像中可以看到,每一种攻击都有较为明显的图形特征,如果攻击者将自己的攻击流量的数据包大小重新设计,添加一些无用数据,打乱其原本的图形特征,那么基于将网络流量视为图像的检测算法是否还可以达到检测的目的还需要验证。此外,未将CICIDS-2018数据集的所有攻击类型囊括,需要做更多工作。未来可以研究结合人工规则和深度学习的入侵检测算法,这样可以弥补两者的缺点,取得更高的准确率,降低误报率。此外,近几年,图神经网络开始兴起,采用图的结构来表示数据可以承载更加复杂的数据形式,如将主机和会话表示为结点,而边是流与主机之间的联系,这也是异常入侵检测研究的另一个方向。
引用格式:王金华.端到端的基于深度学习的网络入侵检测方法[J].通信技术,2022,55(6):762-770.
作者简介>>>
王金华,男,硕士研究生,主要研究方向为深度学习、入侵检测。
选自《通信技术》2022年第6期(为便于排版,已省去原文参考文献)