一种基于卷积神经网络的Web攻击检测方法
2019-03-13田俊峰
田俊峰,石 伟
1(河北大学 网络空间安全与计算机学院,河北 保定 071000) 2(河北省高可信信息系统重点实验室,河北 保定 071000)
1 引 言
随着Web服务应用范围的扩大,其不仅用于网站后端,也越来越多的作为移动应用程序的后端接口.通常网站和移动应用程序同时供用户访问,使用Web服务以API的方式作为后端服务器可以大大节约开发成本,提高效率.为保证向用户提供安全、可靠的服务.要求这些Web服务不仅能实时地处理海量的请求,且需要高效准确地识别出其中的Web攻击.而网络中Web服务面临的攻击越来越复杂[1],在黑客对Web服务发动攻击时,无论成功与否,都会产生Web攻击流量.目前检测Web攻击流量的方法主要有基于规则匹配[2]和基于机器学习两类.基于规则的方法存在严重依赖编写规则的人员,规则的限制宽泛时容易漏掉攻击以及正则引擎处理时的性能有瓶颈等不足.机器学习方法大多是使用采用手工方式提取流量特征,然后将提取到的特征输入至分类器进行分类识别,检测结果主要依赖于特征提取的效果.
结合Web攻击流量庞大且具有多变性的特点,研究卷积神经网络的理论与技术,提出一种基于卷积神经网络的Web攻击检测方法,将每次请求的Web流量转化为流量图像,充分利用卷积神经网络优异的图像识别能力,结合流量大小不确定的特点,构建基于空间金字塔池化(Spatial Pyramid Pooling,SPP)[3]的卷积神经网络(Convolutional Neural Network,CNN)[4,5],并用其学习Web攻击流量的特征,为检测到Web攻击流量提供一种可靠方法.
2 相关工作
检测Web请求流量中的攻击流量的方式主要有两类[6].
一类是基于规则匹配的检测方式,开发人员预置好检测规则,逐条匹配.文献[7]提出了一个完整的入侵检测系统,其检测Web攻击的方法是通过匹配规则库.文献[8]提出一个基于特征匹配的Web应用防火墙,根据黑客攻击的特点找出正则匹配算法,并最大可能做到匹配.文献[9]提出了一个基于GPU的高性能正则引擎,可在用于入侵检测系统时提高检测效率.
另一类是基于机器学习的检测方式,主要依靠特征提取,并在分类器中分类识别出Web攻击流量或恶意数据.文献[10]提出一种实时网络安全态势预测方法,通过隐马尔科夫模型预测下一个时刻的网络安全状态,具有较高准确率与实时性.文献[11]提出一种对恶意软件进行分类的方法,将恶意软件二进制文件可视化为灰度图像,观察到对于许多恶意软件系列,属于同一家族的图像在布局和纹理上显得非常相似.借助这种视觉相似性,对恶意代码进行聚类.文献[12]提出了一种基于纹理指纹的恶意代码特征提取及检测方法,在检测中恶意代码取得了良好的效果.文献[13]提出采用随机森林改进算法的 Webshell 检测方法通过克服特征选择完全随机的弊端解决 Webshell 检测特征覆盖不全、检测算法有待完善的问题.文献[14]提出了一种基于动态词窗口的卷积神经网络文本特征提取算法,结合领域词性模板和特征模式改进CNN特征提取算法,实现自动提取文本特征向量.然而机器学习方法的检测的准确率受限于人工进行特征提取的效果.CNN具有一些正则匹配等传统技术所没有的优势[15]:避免了显式的特征抽取、较强的容错能力、可借助GPU并行处理.CNN在手写体识别[16]、人脸识别[17]等领域取得出色效果.基于CNN的方法避免了大量特征提取工作,但通常CNN的输入要求固定大小,而Web流量的大小不确定,难以对其充分处理.
本文提出一种基于卷积神经网络检测Web攻击的方法.主要贡献有:
1)提出流量图像的概念,即将Web请求流量转化为灰度图;
2)构建一个基于SPP的卷积神经网络,利用SPP可以解决一般卷积神经网络只能处理固定大小图像的问题,适于处理大小不同的流量图像.并借助公开数据集CSIC2010进行实验.
3 基于CNN的Web攻击检测方法
首先给出基于卷积神经网络的Web攻击检测方法,方法的处理流程如图1所示,包括了四个步骤:
1)流量捕获,捕获请求本机Web服务的网络数据包;
2)组合Web流量,组合网络数据包,生成完整的Web请求数据,不包含返回数据;
3)生成流量图像,将每一个Web请求数据转换为灰度图;
4)二分类,使用训练好的卷积神经网络模型检测流量图像是否为Web攻击产生的Web流量.
现有的卷积神经网络中,对于已经确定结构的网络,其输入为固定大小的图像.通常需要对输入图像进行处理,如缩放、裁剪等.Web流量的大小不一,采用截取固定大小等传统处理数据的方法难以使卷积神经网络充分处理流量图像.
卷积神经网络只能处理固定大小图像的原因分析如下.
通常的卷积神经网络[18]主要包括如下三个过程:
1)卷积,例如3×3的卷积核,可以对不同大小图像进行卷积操作,卷积操作对输入图像的大小没有要求;
2)池化,池化过程仍然对输入图像大小没有要求;
3)全连接,权值矩阵大小是固定的,需要全连接层输入的大小固定.
显然第3)部分才是限制卷积神经网络需要输入固定大小的原因.
使用空间金字塔池化作为卷积层到全连接层的过渡,同时也是本文提出的网络中卷积层与全连接层之间的一层.
图1 检测框架Fig.1 Detection framework
空间金字塔池化的过程如图2所示.图2中input image为前一层输出的特征图,图2中的空间金子塔结构为三层.即使用三种不同刻度(4,2,1)对其进行划分,划分的过程如下:
图2 空间金字塔池化的过程Fig.2 Process of SPP
1)对input image的边长划分为4份,分为16块;
2)对input image的边长划分为2份,分为4块;
3)对input image的边长不进行划分,仍为1块.
经过上述操作,可得到21(42+22+12=21)块,从每块中提取一个特征,组成21维的特征向量.每一次划分称为空间金字塔的一层,每层都可以进行不同程度的划分,而且空间金字塔可以按照需要设置层数.
本文设计的处理流量图像的卷积神经网络结构如图3所示,网络结构参数如表1所示.网络中各层的说明如下:
1)输入层对图像的大小没有严格限制,形状为正方形;
2)C1层为卷积层,本层产生32个大小不同的特征图;
3)C2层为卷积层,本层产生64个大小不同的特征图;
4)S1为池化层,本层产生64个大小不同的特征图;
5)C3层为卷积层,本层得到128个大小不同的特征图;
6)SPP层中设置三层结构,三层分割后的块大小分别为16、4、1,每一层的步长为输入边长除以本层边上块的数目(如4、2、1),卷积核的边长与步长相同;
7)FC1层为全连接层,将SPP层的特征图连接成一个特征向量;
8)FC2层仍为全连接层,有2个神经元构成特征向量,对应正常Web流量和Web攻击流量两种情况,FC2和输出层构成一个softmax分类器.
该神经网络中的激活函数使用用ReLU,其损失函数采用交叉熵函数,训练神经网络的步骤如下:
1)分离数据集中的Web请求数据,转化为灰度图;
2)将样本数据随机划分,训练占数据集90%,测试占数据集10%;
图3 网络结构Fig.3 Structure of network
3)使用结构为图3的卷积神经网络进行训练.数据集CSIC2010中正常Web流量图像与Web攻击流量图像的比例为7:3.
表1 网络结构参数设置Table 1 Setting of network structure parameter
神经网络的输入为大小不同的流量图像,输出有两种,即图像所代表的流量属于Web攻击流量或正常Web流量.
4 实验结果与分析
4.1 数据收集与预处理
实验数据采用CSIC2010数据集[19],CSIC2010数据集由西班牙研究委员会(CSIC)信息安全研究所制作,包含数万条用于测试网络攻击防护系统而自动生成的Web请求,不包含响应数据.CSIC2010包含电子商务类Web应用程序的Web数据流量,这些流量数据的组成部分有,用户通过购物车购买物品,及通过提供一些个人信息进行注册等.此数据集基于西班牙语的Web应用程序,其中包含一些拉丁字符等非ASCII编码的字符,从特征而言,与汉字字符接近.因为二者都不能用ASCII编码表示,基于ASCII编码的正则匹配或特征提取无法进行.
数据集是自动生成的,包含36000个正常请求和超过25000个异常请求.这些Web请求被标记为正常或异常,异常请求中覆盖到的攻击类型有:SQL注入、缓冲区溢出、信息收集、文件泄露,CRLF注入,跨站脚本,服务器端包含、参数篡改等.将数据集的每一个Web请求分离成独立的文件,并标记normal和anomalous.
划分每张流量图像的方法如下,由于每一次Web请求的开头为GET或POST,在数据集中以GET或POST开头到下一个GET或POST之间的数据即一个Web请求数据.请求数据中的正常请求流量如图4所示,攻击请求流量如图5所示.可以看到图5中包含DROP TABLE这样的危险操作.用来生成流量图像的数据不包含返回数据.
图4 正常流量Fig.4 Normal traffic
图5 攻击流量Fig.5 Attack traffic
通过Python的PIL模块,将Web请求数据以二进制的方式转换为灰度图.转换为灰度图前,对数据的长度进行开方运算,将开方结果进位取整,设置为灰度图的边长,图中不足的部分填0.算法1为分割数据后生成流量图像的算法.生成的灰度图如图6所示.
图6 流量图像Fig.6 Traffic image
在实际应用中数据通过交换机镜像流量或使用Python的Scapy库抓包获取流量,将得到的每一个Web请求存储为独立的文件.或者将其存储到消息队列,如Kafka、RabbitMQ等,再从队列中取出数据生成流量图像.
4.2 实验结果与分析
实验在Docker[20]中搭建TensorFlow的CPU版本,采用大唐高鸿可信服务器(操作系统CentOS 1511,CPU E5 2600,32G内存,3T硬盘)部署.为了保证实验的客观性,实验数据采用CSIC2010数据集,共60669张图像,其中训练集与测试集的比例为9:1.s
算法1.生成流量图像
/*返回生成的灰度图*/
/*traffic 为输入Web流量*/
begin
length = sqrt(len(traffic))
iflength % 1 != 0then
length = int(length)
length += 1
end
pic =[]
fori = 1 to length do
pic.append(traffic[(i -1) * length:i*length])
end
pic = pic.toImage
returnpic
end
实验使用三种检测方法进行对比,分别为:采用规则匹配方法、使用不包含SPP的传统卷积神经网络与本章提出的基于SPP的卷积神经网络进行对比实验.对于规则匹配方法,首先总结出Web攻击流量的规律,参考开源的匹配规则策略,写出符合特点的过滤表达式.卷积神经网络中采用如图3所示的结构.
其中使用不包含SPP的传统卷积神经网络的具体实验方法如下,此神经网络的结构与表1所列的一致,但其中不包含SPP层,使用与P1层一致参数替换SPP层,进行池化操作.同时,CSIC2010数据集生成流量图像的方法也进行相应调整,在4.1节中得到Web请求数据后,生成流量图像时将其大小限制为39*39,超过的截断,不足的填0.
对比实验结果如表2所列.由表2可明显看出,使用基于SPP的卷积神经网络识别攻击的准确率达到93.9%,使用传统卷积神经网络的准确率为89.95%,而使用规则匹配方法的准确率仅为66.9%.可看出卷积神经网络在识别Web攻击流量方面具有优势.
图7为两种神经网络对流量图像训练时间变化的对比曲线,记录了网络被训练不同次数所需的时间.其中使用本章所提出的基于SPP的卷积神经网络训练时间少于传统神经网络,且收敛速度更快.在训练神经网络模型花费的时间较长,但对比人工研发匹配的规则效率依然大大提升.
表2 实验结果Table 2 Results of experimental
在远程进行扫描等模拟攻击行为,在服务器端生成70397条流量图像数据,并使用模型进行检测,完成进度与时间对比情况如图7所示.
图8中,在处理相同数量的流量图像时,规则匹配方法在检测完成20%时的速度较快,最后的结果是本文提出的基于SPP的网络模型最先完成检测任务.检测进行到20%的阶段,规则匹配的程序启动后便开始检测,而基于卷积神经网络的方法需要加载,此过程占用一定时间,导致检测的开始阶段基于规则匹配的方法进度较快.在随后的阶段中,传统卷积神经网络需要处理的图像有固定大小的限制,所需的计算多于基于SPP的卷积神经网络,因而本文提出的网络结构完成检测所需的时间最短.基于规则匹配的方法受限于正则引擎的性能,完成检测所需时间最长.在实际应用场景中,需要检测大量数据,检测初始阶段加载TensorFlow的时间影响很小.
图7 训练时间Fig.7 Time of training
图8 时间对比Fig.8 Comparison of time
图9 准确率变化Fig.9 Change in accuracy
将检测按检测进度划分,不同进度下段检测的准确率变化如图9所示.基于正则匹配的方法检测准确率波动相对较大,其主要原因为检测依赖预置规则,当规则不能匹配到攻击流量时,准确度偏低;而规则严格匹配攻击流量时,检测精度偏高.而基于卷积神经网络的方法检测精度比较稳定,其中基于传统卷积神经网络的方法由于截取固定大小的流量图像,导致不能充分提取流量图像的特征,从而使准确度偏低;本文提出的神经网络结构可以处理大小不同的流量图像,其提取到的特征更加充分,具有更高的识别准确率,但受到不同大小流量图像的影响,其准确率的变化幅度高于基于传统卷积神经网络的方法.
5 总 结
本文主要针对检测Web攻击流量提出了一种基于卷积神经网络的方法,构建了一个基于SPP的卷积神经网络结构.首先总结与分析了经典卷积神经网络特点,搭建基于SPP的卷积神经网络.然后提出生成流量图像,充分利用卷积神经网络处理图像的优势,识别Web攻击流量,从而发现Web攻击.并通过实验验证其有效性,同时将其与传统的卷积神经网络和规则匹配方法对比,进一步验证了本文所提出方法高效准确的优势.