基于DCNN-GRU模型的XSS攻击检测方法

2022-02-19 10:24许丹丹张思聪付子爔
计算机应用与软件 2022年2期
关键词:卷积准确率向量

许丹丹 徐 洋 张思聪 付子爔

(贵州师范大学贵州省信息与计算科学重点实验室 贵州 贵阳 550001)

0 引 言

近年来,Web安全形势日益严峻,政府和企业网站频繁发生的安全事件,对其声誉和利益造成了巨大的损失。在互联网+时代,实体经济与互联网融为一体,在线视频、电子商务均采用了Web应用,大量的个人隐私数据通过Web应用程序被传送和处理。Web应用程序作为人们日常生活中不能缺少的一部分,在给人们带来方便的同时,其自身存在的漏洞也让用户暴露于危险之中[1]。跨站脚本(Cross Site Scripting, XSS)是众多Web安全漏洞中具有极大影响力和危害力的一种漏洞攻击,近年来一直排列于Web应用安全漏洞的前三名。攻击者利用网站中存在的XSS漏洞,将含有恶意的代码脚本注入到网页中,当使用者浏览该页面或进行单击操作时,它将触发恶意代码、实现cookie盗取、网络钓鱼欺骗、会话劫持等攻击行为。因此,对跨站脚本的攻击检测极其重要。

李洁等[2]针对文档对象模型(Document object model,DOM)漏洞进行了研究,提出了一种基于动态污点传播模型的DOM型XSS漏洞检测算法。谷家腾等[3]提出了基于动态分析的XSS漏洞检测模型。Wang等[4]提出了一个检测新的技术攻击模式,基于HTML5和CROS属性规则在浏览器设计一个过滤器来检测XSS攻击,并提供了一个系统模型判断被拦截的请求是否为恶意。Nunan等[5]应用网页的自动分类方法对XSS攻击进行检测,其基于URL和网页文档的特征分类。Wang等[6]提出了使用一种改进的N-gram模型来检测社交网络中的XSS攻击。Vishnu等[7]提出了使用机器学习算法来预测XSS攻击。张思聪等[8]提出了利用最大熵模型进行XSS攻击检测的方法。赵澄等[9]提出了基于支持向量机(Support Vector Machine,SVM)分类器的机器学习方法,对XSS攻击进行检测。

以上学者主要是利用了静态分析、动态分析与机器学习方法对XSS攻击进行检测。但静态分析方法很容易出现误报和漏报的情况,且静态分析具有耗时长、技术能力要求高的缺点。而动态分析方法具有特征码的自动提取能力较弱且效率低的缺点。机器学习方法主要是依据统计特征实现对跨站脚本的分类,效果要比静态分析与动态分析好,但是统计特征的提取需要丰富的实践经验,且攻击脚本的数量增大时,浅层的机器学习方法已经不能很好地从大量的数据中对攻击脚本和正常脚本进行分类。近年来,可以处理大量数据的深度学习方法在网络安全领域逐渐应用于实践,张思聪等[10]提出了基于dCNN的入侵检测方法,在入侵检测中应用了深度学习方法。foxscheduler[11]采用循环神经网络中的长短期记忆网络(LSTM)模型做XSS攻击检测,证明了利用深度学习方法做XSS攻击检测的可行性。门控循环单元(Gated Recurrent Unit,GRU)比LSTM的结构更简单,训练时参数的数量也将减少,更容易收敛,不容易出现过拟合,计算代价低、运算速度快[12]。

本文提出了基于DCNN-GRU模型的深度学习方法进行跨站脚本攻击检测,使用 foxscheduler数据集[11]进行对比实验。

1 预备知识

1.1 深度卷积神经网络

深度卷积神经网络(DCNN)是最近几年被高度使用的具有高效识别能力的卷积神经网络,其自适应能力与学习能力也很高,并且DCNN还可以共享局部权值[13],可以降低网络的复杂度,被广泛应用于人脸特征识别、图像分类、语音处理、行为认知等领域。一维DCNN工作原理为:每个输出时间步都是利用输入序列在时间维度上的一小段得到的。其网络架构包含一维卷积层、最大池化层、全局池化层或Flatten层,最后输出层可用于分类。因为一维卷积能够识别序列中部分模式,也就是说对每个序列段执行相同的输入变换,在句子中任意一个地方学到的模式随后便能够在其他地方被识别出来,这种特性就让一维DCNN对时间平移来讲有平移不变性。在解决某些序列问题时,实现的效果要比循环神经网络更好,计算代价通常更小。针对时序预测、文本分类等简易问题,简单的一维DCNN可以代替循环神经网络,处理速度更快。

1.2 循环神经网络

循环神经网络(Recurrent neural network, RNN)主要用来处理时序问题,即上文与下文具有相互依赖关系的问题,但是随着距离逐步增大,RNN学习到连接较远信息的能力就会降低,这个主要是针对具有长期依赖关系的问题,且随着时间间隔的变大,梯度消失、梯度爆炸问题[14]就越容易出现。为了解决这两个问题,提出门控机制,在学习时通过信息的积累速度进行管理,可以有选择地将新学到的信息加入进去和将之前积累的无用信息遗忘,被称为基于门控的循环神经网络(Gated RNN)[15]。LSTM与GRU 是最常用的基于门控的循环神经网络。LSTM的工作原理就是允许过去的信息稍后重新进入,从而解决梯度消失问题,其网络是通过遗忘门、输入门和输出门这三个门控机制来控制信息传递的路径[16],GRU的工作原理与LSTM相同,只是比LSTM少一个门控机制,其网络中只有更新门与复位门,将LSTM中的输入门与遗忘门简化为一个门,称为更新门。

2 DCNN-GRU模型

XSS的关键词具有很强的关联性,体现了XSS攻击脚本的依赖性。XSS攻击检测通常被当作二分类问题,一维DCNN在处理时序问题时具有很快的速度,但是针对数据顺序比较重要的序列数据,效果不如RNN。RNN常用来解决时序方面的问题,可以很好地表达出下文与上文的代码调用关系,且GRU作为RNN的改进模型具有更为简单的内部结构,参数更少,这样可以使得内部的计算更为简单[17],简化攻击检测的步骤,提高检测效率。本文依据一维DCNN快速处理时序问题的能力与GRU模型可以处理上下文具有长期依赖关系问题的能力,将DCNN和GRU两种深度学习模型相结合,提出了DCNN-GRU模型进行XSS攻击检测。

DCNN-GRU神经网络模型如图1所示,首先通过卷积进行文本特征的提取,利用池化层把卷积特征整合,进行Dropout操作,避免发生过拟合,然后将特征放入GRU神经网络中进行训练,再把训练特征输入全连接层中,利用Softmax完成分类处理。

图1 DCNN-GRU模型图

一维卷积层取卷积核的数量为64,长度为3,对1×530的词向量进行步长为1的卷积操作,获得64个相对应的特征向量,即通过64个卷积核来获取64个相应的特征,所以这个卷积层的输出为530×64。

一维池化层主要是对卷积层进行降维处理,压缩数据,减少参量,避免过拟合,同时其泛化能力可以得到提高。本文选择了最大池化,最大池化可以降低卷积层参数误差造成估计均值的偏移,池化层的窗口长度为2,所以在经过池化层操作后,输出数据为265×64矩阵。

Dropout层主要是在训练过程中每次更新训练参数时,依据一定的概率随机断开输入神经元,避免出现过拟合,本层的概率定为0.5。

GRU层是用来解决上下文长期依赖的问题,避免在卷积和池化操作后丢失上下文调用与传递的关系,在模型中的职责是保存时序信息,起到门控作用。GRU层的输出维度为128,所以在经过GRU层之后,就会输出265×128矩阵。

Flatten层主要是完成从GRU层到全连接层的过度,输入为265×128的矩阵经过Flatten层就转化成33 920维的特征向量。

输出层利用Softmax实现分类任务,把Flatten层输出的33 920维的特征向量映射到两个神经元上进行分类。

当前流行的优化器主要有SGD、RMSProp、AdaDelta和ADAM。本文模型选用的优化器为ADAM,它由Kingma等[18]提出,将AdaGrad与RMSProp的优点相结合,其实现简单、计算效率高、对内存的需求小,梯度的伸缩变换不会影响参数的更新、可以自动调整学习率、适用于大规模数据场景等。

ADAM的算法表示:

(1)

实验用到的损失函数为交叉熵损失函数,它可以提供无偏估计,是使用最为广泛的一个代理损失。在解决分类的问题时,为求解最小化问题而构造出的代理损失函数表达式为:

(2)

式中:y∈(0,1)。本文用到的分类器是Softmax分类,其表达式为:

(3)

把含有任一实数的K维的x向量,压缩到K维的实向量中,让所有元素值都在(0,1)这个区间,且元素之和为1。

跨站脚本检测过程包含获取数据集、数据集分词并向量化、量化后的数据预处理、模型训练、分类器分类等部分。跨站脚本攻击检测算法如算法1所示。

算法1跨站脚本攻击检测算法

1. word is “script”“alter” and other html word

2. datas is normal html request and cross-site attack script

3. i is a single sample of the test-data

4. for word in datas do

5. train word using the word2vec model

6. obtain data-set

7. process data-set obtain train-data and test-data

8. end for

9. train the DCNN-GRU model with train-data

10.for i in test-data do

11. detect i using the trained DCNN-GRU model

12. end for

3 实 验

本次实验环境是在Windows 10操作系统中,处理器为Intel®CoreTMi5-8250U,8 GB内存,显卡为显存2 GB的NVIDIA GeForce MX150环境下实现。实验采用的语言为Python,框架为Keras,后端为TensorFlow。数据集采用文献[11]中的数据集,约24万条,包含4万条从xssed爬取的用作正样例的黑样本和另外约20万条无XSS攻击的http请求用作负样例。选取70%作为训练集,用于训练网络模型,30%作为测试集用来验证模型对XSS攻击的检测能力。

3.1 数据特征处理

数据的处理由Word2vec提供,可以通过一个词预测其周围词的Skip-gram模型,Skip-gram模型由输入层、映射层和输出层组成[19]。Skip-gram模型就是依据当前的某个词来预测其周围词的向量,通过Word2vec转换后的词向量不仅把词表示成分布式的词向量,而且还可以捕获词之间存在的相似关系,经过代数运算就可以把类似单词计算出。

图3显示了对一条跨站脚本攻击数据进行特征提取的一个实例。用“0”替换数字,把超链接用“http//u”替换,进行范化处理。然后进行分词操作,分词原则为:引号内包含的内容,链接、标签<>、开头、参数名、函数体等。文本经过分词后就可以转化为深度学习要用到的向量,在这里应用One-Hot编码,一个词表可以通过One-Hot编码表示成稀疏向量,这个向量中除了词的维度是1,其他的维度都是0。最后再量化处理,使用Word2vec模型进行训练,把稀疏向量转化为嵌入式词向量。从图2中可以发现这条攻击数据最终变成了一个词向量,这个词向量可以作为攻击检测模型的一个输入。

图2 Word2vec模型数据处理图

3.2 模型评估指标

准确率表示被正确预测出来的真正例和真负例样本占总样本的比例,其计算公式为:

(4)

精确率表示真正例在实际检测出来的正例中所占的比例,其计算公式为:

(5)

召回率表示正例样本中被正确预测的概率,其计算公式为:

(6)

F1值是召回率与精确率的一个调和均值,是对召回率与精确率的一个综合评价,其计算公式为:

(7)

式中:TP指将实际上是正例的样本预测为正样本;TN指将实际上是负例的样本预测为负样本;FP指将实际上是负例的样本预测为正样本(误报);FN指将实际上是正例的样本预测为负样本(漏报)。

3.3 DCNN-GRU模型的训练与测试

训练时将批尺寸的大小设定为512,每训练一个批次的数据,就输出当前训练的损失值(Loss)与准确率(ACC),训练完成后保存当前的训练模型,在训练模型过程中存储当前训练网络时设定的多项权重值,在测试环节可以通过加载模型直接使用。在训练阶段,Loss与ACC的变动趋势如图3所示。

图3 准确率/损失值

可以看出,随着训练批次接近80次,准确率呈快速增长趋势,损失值也以快速下降趋势变化;当训练批次大于120次时,准确率和损失值的曲线变化逐步趋于平缓,准确率保持在0.99之上,而损失值则低于0.03。

测试阶段,通过加载在训练阶段保存的包含有已设置好的多项权重值的模型文件,就可以用该模型进行测试。为了证明模型的检测能力,随机选取了五次测试结果作为样本,测试准确率、精确率、召回率和F1值如表1所示。

表1 DCNN-GRU模型测试结果(%)

为了验证DCNN-GRU组合模型在检测XSS攻击时的检测能力,将DCNN-GRU模型与单一的DCNN、LSTM、GRU模型进行比较。使用同样的数据集完成对三个单一模型的训练与测试,并完成对这四个模型的训练结果与测试结果的对比,其结果如图4所示。可以看出,DCNN-GRU模型的准确率明显在各个训练批次上都高于其他三个模型,准确率最终稳定在0.99以上,其次是GRU模型,准确率低于0.987,LSTM模型的准确率低于0.985,最低的是DCNN模型,其准确率在0.982。

图4 准确率对比图

图5是训练阶段DCNN、GRU、LSTM和DCNN-GRU四个模型的损失值对比折线图,可以看出,DCNN-GRU模型的损失值在各个训练批次上明显低于其他三个模型,损失值最终稳定于0.025,GRU模型与LSTM模型的损失值曲线图在80批次后几乎重合,损失值高于0.03,DCNN的损失值高于0.045。

图5 损失值对比

表2的测试结果是随机选出来的一组结果,同时增加了一组SVM的测试结果,可以看到DCNN-GRU模型的测试数据最高,表明DCNN-GRU模型的实验结果最好。

表2 测试结果对比(%)

表3是训练时间的对比结果,可以看出,DCNN-GRU模型的训练时间更短,如果实验环境的配置更高,将会进一步缩短训练时间,也能进一步提高检测效率。

表3 训练时间对比

综上所述, DCNN-GRU模型与DCNN、GRU、LSTM及SVM模型相比,不仅大大缩短了训练时间,其测试结果的准确率、召回率、精确率也是最高的。

4 结 语

本文针对XSS的攻击检测提出了DCNN-GRU模型,采用Kears框架完成模型的搭建。利用一维DCNN模型在处理时序问题时的快速优势和GRU模型结构简单、易收敛、不容易出现过拟合且计算代价低的特点,将两个模型相结合,提出的DCNN-GRU模型既可以提升检测XSS攻击的速度,又可以保证在检测时充分考虑上下文相互依赖的问题,提高检测的准确率。通过使用 foxscheduler数据集进行的对比实验表明,DCNN-GRU模型检测效果明显优于传统SVM模型和DCNN、GRU和LSTM三种深度学习模型。

本文只是使用DCNN-GRU模型针对XSS一种漏洞攻击进行检测,未来将研究DCNN-GRU模型对SQL注入、缓冲区溢出、跨站请求伪造等多种Web漏洞检测的适用性。

猜你喜欢
卷积准确率向量
基于全卷积神经网络的猪背膘厚快速准确测定
基于FPGA的卷积神经网络加速优化方法
向量的分解
基于图像处理与卷积神经网络的零件识别
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
多层螺旋CT技术诊断急性阑尾炎的效果及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
颈椎病患者使用X线平片和CT影像诊断的临床准确率比照观察
基于深度卷积网络与空洞卷积融合的人群计数
向量垂直在解析几何中的应用