胡乙丹
(南京理工大学自动化学院 南京 210018)
跨站脚本攻击已成为各种网站的主要攻击媒介之一。根据开放式Web 应用程序安全项目(Open Web Application Security Project,OWASP)在2017年与2021年进行的统计调查中显示,跨站脚本攻击一直位列前十名内。跨站脚本攻击仍然是目前危害比较大的网络攻击之一,现在的注入漏洞省略了单纯的SQL 注入,范围变得更广,在2021年的调查中,注入漏洞不仅仅指单纯的SQL 注入,还包括文件注入、XML 注入、命令注入以及类似于XSS这样的前端代码注入[1]。
如何提高对XSS攻击检测的效率与准确率,已成为目前信息安全领域的研究热点。为避免XSS对Web应用的攻击产生的危害,需要对XSS攻击进行定期、有效的检测,一旦发现了XSS 攻击就立即修复相应的漏洞。因此,许多专家与学者提出了面向XSS攻击的检测方法,这些方法大部分都是检测网站代码,其所用方式主要有静态测试[2]、动态测试[3]与机器学习的方法[4~6]。传统的这三种XSS 攻击检测方法在应对多样化的攻击载荷时,效果可能不尽人意,像机器学习进行漏洞检测分析时也会遇到模型跨项目、数据集难以获取的问题[7~8],因此,本文的研究对象是Web 安全中常见的一种攻击—XSS 攻击。文中借鉴人工智能领域的深度学习技术与自然语言处理技术,构建面向XSS攻击的一维卷积神经网络检测模型,克服已有检测方法效率与准确率不高的问题,从而快速、准确地发现Web 应用中潜在的XSS攻击,具有较好的应用价值。
一维卷积神经网络(one-dimensional convolutional neural networks,1D-CNN)是深度神经网络里的一种常用算法[9~10],它是带标签的监督学习算法,通常用于类似列表、元祖、字符串这样的序列类数据处理,经过对输入数据进行一系列堆叠的卷积、池化操作,实现输入特征的精确提取,从而确保数据分类的质量,常见的一种1D-CNN 基本结构如图1所示。
图1 一维卷积神经网络基本结构
1)输入层:输入一维向量input={inputi|i=1,2,…,k}。其中,input为一维特征序列,这里的k代表特征数。
2)卷积层1:主要作用在于提取特征,并获得相应的特征序列。假设Sl是第l个卷积层的特征序列,如果l=1,则Sl=input,是第l个卷积层的第j个特征序列,这里的f(·)代表激励函数,将其设置成ReLU函数,那么的产生如下所示:
3)池化层:作用在于信息的降维,这里是对卷积层1 的输出特征序列进行降维操作,消除其冗余特征。设是第l个池化层的第j个特征序列,那么每个输出特征序列对应相应的加性偏置和乘性偏置,最后的的计算方法如下所示:
其中,MaxPool1d(·)是最大池化函数,池化核大小为2,步长为2;如果第l-1 层特征序列中的特征数为Fs,则经池化层降维处理后的对应的特征数。
4)卷积层2:进一步的特征提取处理,提取从上一层传递过来的池化层输出特征序列,获得相应的特征序列,其计算方法如式(1)所示,其对应的特征数计算为。
5)全连接层:将之前的特征信息综合起来,这里体现在对输入的卷积层2所对应的特征序列映射为多个独立的特征。设全连接层第D1层的输出函数为,那么第D2层的输出为
6)输出层:通过分类函数Softmax()得到类别的预测概率P(x),其中0 <P(x)<1,且,即:
其中,x为类别数,outputx是全连接层的分类类别的对应值,即output=[output1,output2,…,outputk]T
本文的损失函数Loss 采用的是多类别交叉熵损失函数对模型的预测性能进行衡量。这里设目标的实际概率分布函数为Q(x),类别的预测概率P(x),那么两者间的损失值Loss(P,Q)即:
Word2Vec[11~12]是Google 公司设计的一款将自然语言转换为计算机能够理解特征向量的工具。其主要作用在于将单词转换成向量形式,并区分出感情色彩、非同义词与同义词。Word2Vec 通常关注文本上下文信息,在语料数据与大量文本中通过无监督学习方法来生成语义信息[13]。Word2Vec 的实现方式主要包括Skip-gram与CBOW两种[14]。本文使用Skip-gram 模型将词转换为相应的词向量。
设模型的输出与隐藏层权值为一个V×N的矩阵W,W中每行为一个N维向量,那么词典V里的第i个特征词wi在W中记为νwi,输入层输入x∈Rν,若x≠x',xk'=0,xk=1,那么隐藏层表示为
记输出层有C个V维向量,则wc,j代表第c个向量的第j个特征词,而uc,j对应隐藏层到输出层的第j个单元的线性和,yc,j对应经过softmax操作后的概率值。目标函数定义为如下:
隐藏层与输出层间共享同样的权值W,可以得到:
其中,ν'wj表示特征词wj对应的输出向量。
目标函数此时可以更新为
如果语料库vocab 与文档di={w1,w2,…,wi}经Word2Vec 训练语料后,得到的单词词向量可以表示为
式中,Word2Vec(t)为词汇t所对应的Word2Vec词向量。
图2 是本文基于卷积神经网络检测XSS 攻击脚本的整体模型框架结构。通过卷积神经网络模型最终将网页中的数据分成两类:non-XSS(正常脚本)与XSS(攻击脚本)。主要分为以下几个步骤实现:数据采集,特征提取,构建模型,训练卷积神经网络进行脚本的分类。
图2 系统模型框架
特征提取是本文模型的前置步骤,对最终结果起着决定性的作用。其主要目的在于将采集到的带有恶意和正常的URL 页面数据转为向量形式建立具有正反样本的数据集。考虑到跨站脚本攻击的一些特殊性,采集到的数据通常也是类似于字符串这样的文本形式,需要采用自然语言的手段对其进行特征提取处理,提取过程分为以下三个步骤:解码与范化、分词与向量化,如图3所示。
图3 特征提取过程
本文所使用的一维卷积神经网络模型所设计的结构如图4所示,左侧为层的名字,右侧是此层的输入与输出的数据形状。我们可以看出输入层是一个batch为20,长度为532,维度为10的三维张量,紧接着是第一个卷积层对其进行了卷积操作,得到了类似图像处理中的64 个feature map。这里的64 是指卷积层有64 个卷积核,即有64 套参数,每个卷积核都能够将原始输入通过卷积得到一个feature map,64 个卷积核对应64 个feature map。这里的卷积核是可以自由设定的,因为它是一个超参数。在经过了第一个卷积层操作后,再进行了第二次卷积操作,其卷积核个数同样为64,然后进行了最大池化的下采样操作,将长度降为原来的一半。再接着就是比例为0.5的Dropout操作,其目的在于断开训练时的一些神经元,防止过拟合操作。后面的操作类似之前的卷积层到Dropout层一系列的结构又循环了一次,不同在于使用的卷积核由64 变为了128 个。通过两次卷积-池化-Dropout 操作后,再连接一个平化层以及两个全连接层,实现这个批次的分类。
为了让数据集更加的合理、全面,通过Scrapy框架对数据进行爬取,构建原始正常脚本数据集与XSS 攻击数据集。正常数据来源于各网络平台的5000 条正常网络请求,如Dmoz 网站。攻击数据来源于Xssed网站的16974条恶意攻击样本,Xssed是最大的在线Xss攻击网站。最终共有21974条数据作为XSS数据集。实验中,将正常数据与恶意样本数据放在一起,从样本里以6:4 的比例随机选择训练集与测试集。负样本为正常数据集,标签用0 表示,而正样本表示恶意样本,标签用1表示。
本文的实验环境是在联想R9000P 笔记本的Windows 11 系统中,处理器为AMD Ryzen 7 5800H with Radeon Graphics 3.2GHz,内存为32G,显卡为NVIDIA GeForce RTX 3070 Laptop GPU,使用Python语言在Keras框架上实现。
本文模型的正类为XSS注入样本,负类为正常样本,其分类性能评估标准分别为:召回率、准确率、精确率与F1值。详细的计算公式如下:
其中,TP 为正类样本预测为正类的数量,即把XSS攻击脚本预测为XSS 攻击的数量;TN 为负类样本预测为负类的数量,即把正常脚本判定为正常类别的数量;FP 为负类样本预测为正类的数量,即把正常脚本判定为XSS 攻击的数量;FN 为正类样本预测为负类的数量,即把XSS 攻击脚本预测为正常类别的数量。
图4 卷积神经网络结构图
4.4.1 模型训练
卷积神经网络的输入向量维度通常是固定的,若样本中的维度不同,就需要选取一个合理的维度作为输入,这样才可以更好地利用样本信息。不考虑向量维度产生的不好情况在于:如果向量维度太长,那么会大幅度提高训练时间,这样就会降低检测的实时性;反之,向量维度太短,会导致有效信息的遗失,影响检测准确率。为得到一个合适的向量维度,本文设置了若干种不同维度的超参数(令维度分别为2,5,10,20,50,100,150),在这些不同设置影响下的训练时间与准确率的关系见图5。
图5 不同向量维度下准确率与训练时间消耗
实验结果表明,维度超过10 时,准确率变化不明显,但是训练时间几乎成线性增长趋势,维度为20 时精度最高,达到了99.35%,其训练时间消耗为508.24s,而维度为10 时,精度为99.3%,稍稍低于维度为20 时的精度,其训练时间是所有维度中最低的,仅425.73s,结合精度与训练时间两方面,选择10作为向量维度。
模型参数的设置会影响模型的分类效果,本文最终选择的超参数见表1。
表1 本文一维卷积神经网络模型参数。
4.4.2 模型测试
为了验证本文模型的优势与有效性,本文进行了相应的对比实验,即本文所提出的一维卷积神经网络模型(1D-CNN)与目前常见的检测方法,如多层感知机(MLP)[15]、长短期记忆网络(LSTM)[16]以及支持向量机(SVM)模型[17]。结果如表2所示,与其它三种方法相比,本文模型的召回率、准确率与F1 值均是最优,表明了本文方法在检测精度上要好于以往的跨站脚本攻击检测识别方法,同时也说明了相比较浅层的机器学习方法中采用人工提取特征而言,深度学习模型可以很好地提取出跨站攻击样本的特征,从而具备较好的识别能力。
表2 四种模型的对比数据
因为深度学习模型一般会比较耗时,在提高精度的同时也会增加相应的时间,图6 是四种模型的准确率与测试时间关系。可以看出,SVM的测试时间是最短的,但是其是以牺牲一定的准确率为代价,1D-CNN 模型的测试时间相比其它另外两个模型的时间更短,结合准确率指标,1D-CNN 模型可以在保证检测精度的同时减少检测时间。
图6 模型准确率与测试时间对比结果
针对传统的跨站脚本攻击检测工具效率不高、准确率不高的问题,本文提出一种基于一维卷积神经网络的跨站脚本攻击检测方法。该方法考虑到XSS 攻击为避开检测进行了相应的编码处理,因此采用反向解码与范化处理,同时进行分词以及借鉴Word2Vec 工具进行向量化处理,然后输入到本文所设计的一维卷积神经网络模型进行二分类处理。通过相关对比实验比较,得出本文方法对XSS攻击具有较高的检测效率与准确率。
本文只是使用一维卷积神经网络模型对跨站脚本攻击这种漏洞进行检测,后期的研究将会考虑面向其他Web漏洞进行相应建模,例如跨站请求伪造、缓冲区溢出、SQL注入等。