基于单分类支持向量机的XSS攻击检测研究

2021-06-21 02:31顾兆军李志平张礼哲
计算机应用与软件 2021年6期
关键词:分词漏洞样本

顾兆军 李志平 张礼哲

1(中国民航大学计算机科学与技术学院 天津 300300)2(中国民航大学民航信息安全管理与测评中心 天津 300300)

0 引 言

跨站脚本攻击是众多Web漏洞中危害性及影响力最大的漏洞之一。根据国家信息安全漏洞库(CNNVD)统计[1],2019年1月至7月,该漏洞库共收集XSS漏洞1 089个,高居漏洞数量榜榜首。在开放式Web应用程序安全项目(Open Web Application Security Project,OWASP)2007年、2010年、2013年和2017年的十大Web安全漏洞报告中,XSS漏洞是OWASP TOP10中第二普遍的安全问题,其危害性也始终位于前列,并存在于近三分之二的应用程序中。因此,对跨站脚本攻击漏洞的研究刻不容缓,国内外安全专家和研究学者对XSS攻击进行了深入的研究。

传统XSS检测工具使用XSS-Filter对用户输入进行过滤,XSS-Filter采用正则表达式对输入的参数做脚本过滤,以此来过滤XSS攻击。然而随着攻击手段不断增强,传统过滤方法已经不能保持高效性与准确性。Rao等[2]提出基于字符串匹配算法XBuster,XBuster将每个HTTP请求参数拆分为HTML和JavaScript上下文,以不同方式处理两个上下文类型,XBuster防御所有类型的XSS攻击向量,包括部分脚本注入、属性注入和HTML注入。Pan等[3]提出一个旨在解决Web浏览器扩展中的DOM-XSS漏洞的框架,该框架结合静态分析和动态分析,降低了检测的假阳性率,但其只限于检测DOM-XSS。张思聪等[4]提出一种基于最大熵模型的XSS攻击检测模型,将攻击检测转化为对用户输入进行二分类的问题,但该模型对存储型XSS攻击的检测效果不够完善。

早期XSS检测方法是利用人工选取攻击特征向量进行检测,但随着XSS攻击方式不断增加,其局限性凸显,难以高效地检测攻击。单分类支持向量机(OCSVM)能够在短时间内仅使用一类样本训练出检测模型,具有较高的准确性。本文将XSS攻击检测映射成对输入数据进行分类的问题,提出利用TF-IDF算法对样本数据进行特征向量化的方法,通过OCSVM训练分类模型实现XSS攻击检测。

1 相关知识

1.1 XSS概述

XSS攻击指的是攻击者将带有攻击性的HTML代码和脚本插入存在漏洞的Web应用程序中。用户在执行Web应用程序时,会收到伪装成应用程序合法代码一部分的恶意内容。由于用户无法区分内容是否合法,从而执行该恶意脚本,最终导致遭受XSS攻击。XSS通常分为三类:反射型跨站脚本、存储型跨站脚本和基于DOM型的跨站脚本。虽然跨站脚本分为三种不同类型,但其本质都是未对用户的输入进行严格过滤核查,用户在不知情的情况下执行XSS攻击脚本,最终导致遭受攻击。

1.2 XSS研究现状

当前,许多国内外研究学者提出了各种XSS攻击的检测方法,主要可分为静态分析方法、动态分析方法和机器学习检测技术三种。

静态分析方法是指对程序的源代码进行分析,通过查看源码来查询可能存在的漏洞[5],因此使用此方法的前提是能获取到Web应用程序的源代码。静态分析的有效性主要依靠净化规则的完备性,其优点是在依靠程序源代码的基础上检测效率高,但伴随的问题是可能出现误报和漏报的情况。动态分析方法则无须获取源代码,通过模拟用户攻击的过程,向注入点注入包含特定攻击代码的脚本,根据服务器端的响应信息来判断该注入点是否存在XSS攻击漏洞[5]。影响动态分析方法的检测效率主要有三个因素:爬虫抓取网页的效率、查找输入与输出点的效率和攻击的向量集大小。

使用机器学习方法检测XSS攻击是最近几年提出来的。此方法的主要思路是收集网站的正常行为和恶意行为,并使用相应的机器学习算法对其进行学习,最后通过学习到的模型进行攻击检测。例如,文献[6]使用朴素贝叶斯、J48决策树和SVM三种机器学习算法进行模型训练,实验结果表明三种方法均可有有效实现XSS攻击漏洞检测,且在性能上SVM表现较好。

基于机器学习的XSS攻击检测方法,其检测效率与具体的算法相关,决定结果依赖于数据集的质量。本文将攻击检测转化为对用户的输入进行的分类问题。基于SVM的检测模型需要两类的数据集,一类是XSS攻击数据,另一类是正常用户输入数据。对于XSS攻击检测,在实际应用场景中,正常用户输入数据难以获取其特征,影响模型检测结果。而单分类支持向量机在较短的时间内,只需要一类样本就可以训练攻击检测模型,能建立较准确的分类模型。

1.3 单分类支持向量机

基于支持向量机(Support Vector Machine,SVM)的分类理论以及单分类的思想,OCSVM最早由Schölkopf等[7]提出。传统SVM的基本目标是构造一个广义最优超平面,将数据点暴露在分类曲面的两侧,并且尽可能增大分类曲面两侧点的间隔,从而将训练数据集分成两类,分类区间尽可能大。与传统SVM相似,针对样本空间{xi,i=1,2,…,N},OCSVM通过核函数将输入样本映射到高维特征空间,然后使用超平面将特征空间的数据与原点分离[8]。目前,OCSVM分为两种[9],一种为Schölkopf等[7]提出的超平面法,另一种是Tax[10]提出的超球面法。当使用的核函数为径向基函数(Radial Basis Function,RBF)的高斯版本时,这两种方法的效果相同。高斯核函数表达式如下:

(1)

式中:σ(σ>0)为高斯核的带宽。

OCSVM能够在较短的计算时间内只用一类样本训练出检测模型。本文基于此分类器的高效性进行模型训练。基本思想是将输入样本通过核函数映射到高维空间,并尝试将样本与高维空间中的原点分离,得到基于超球面的模型,即以a为中心R为半径的包含正常数据样本的超平面。通过计算数据样本与超平面中心在特征空间的距离来获取样本的异常程度:

f(x)=‖φ(x)-c‖2-R2

(2)

如果评价函数值f(x)<0,表明样本在超平面内,被判定为正常点;若f(x)>0,说明样本在超平面外部,则被判断为异常点。考虑到防止模型的过拟合现象,同时数据样本可能存在噪声,因此引入松弛因子ξi,样本需要满足约束条件:

‖φ(x)-c‖2≤R2+ξiξ≥0

(3)

式(3)约束条件对应的目标函数为:

(4)

式中:C为平衡超球面半径和松弛变量的参数,其物理意义可看作是对数据的不纯净度的估计。上述过程就是求解一个凸约束二次规划问题,引入拉格朗日乘子,则原约束优化问题的拉格朗日函数为:

‖φ(x)-c‖2

(5)

式中:αi≥0,βi≥0。对R、c和ξi分别求偏导得:

(6)

将式(6)结果代入式(5)得到原问题的对偶问题:

(7)

根据αi的取值将样本进行分类,通过计算拉格朗日函数以及超球体参数求解对偶问题,得到最终的检测模型。

1.4 TF-IDF算法

TF-IDF是一种经典的词语权重计算方法。由词频(Term Frequency,TF)和逆向文档频率(Inverse Document Frequency,IDF)组成。其中,词频表示文本中各个词出现的频率,计算公式如下:

(8)

(9)

式中:|D|表示语料库中的文件总数;|{j:ti∈dj}|表示包含词语ti的文件数目。最后,TF-IDF值表示为:

tfidfi,j=tfi,j×idfi

(10)

TF-IDF的中心思想就是词的重要性与它在文件中出现的次数成正比,同时与在语料库中出现的频率成反比。

2 检测模型

攻击检测模型流程如图1所示。将获取的样本数据进行数据预处理,根据训练需要将经过预处理的数据分为训练数据和测试数据。训练数据用来训练模型,再利用测试数据进行参数调优最终得到检测模型。

图1 检测模型流程

2.1 数据预处理

2.1.1攻击样本范化

训练目的是让模型认识XSS攻击行为,因此实验所用数据集应具有丰富性,涵盖较为全面的XSS攻击数据,从而提升模型的训练效率。在实际应用中,攻击者会对攻击代码做各种变形操作,以试图绕过对用户输入的过滤及核查。站在攻击者角度对训练数据进行适当的变形操作,丰富XSS攻击数据库的类型。由此训练出来的模型对各种变形的XSS攻击行为有更好的辨识度,增加其有效性。本文采用常用的几种变形处理方法[11],如表1所示。

表1 XSS攻击代码变形方式

2.1.2 改进TF-IDF方法特征向量化

特征选取的效果直接影响模型的检测准确率。早期基于机器学习方法检测XSS攻击选择自定义特征向量,此种方式对于各种类型以及变异的XSS攻击代码无法做到更为全面的特征选择。本文的研究基础是对用户输入做出分类,识别出输入是否属于XSS攻击。因此采用改进TF-IDF算法的特征向量化方法,对样本数据进行分类。

在许多文本分类研究中,使用TF-IDF方法计算的词一般为常用的词语或者是特定的词组。例如文献[12]所计算词频的关键词为特定的专用词语,具有唯一性。另外在没有经过指定词组的分类研究中,经过TF-IDF计算后提取出来的词多为常用词语。而在本文的特征向量化过程中,要处理的数据包含了大量的数字、字母特殊符号和各种字符的组合。如果按照传统常用词分词方法或者特殊符号的分词方法,在计算TF-IDF时会造成特征过于复杂,影响效率。为了提高数据的分类效率,采用n-gram方法[13]分割样本数据得到分词集合。

定义分词集合是按照长度为n的滑动窗口分割字符串得到的分割后的子串集合,集合中的每个子串称为分词,这里的字符串指的是用于模型训练的样本数据或者待检测的数据。

例如待分割的字符串为:“”,n=2时,滑动窗口如图2所示,得到2-gram分词集合:

图2 长度为2的滑动窗口

S2={,>a,al,le,er,rt,

t(,(u,ur,rl,l),)<,}

样本中的每一条数据采用此方法得到与其对应的分词集合,再由式(8)、式(9)、式(10)计算可得到由[w(a,b)]三种元素组成的TF-IDF特征矩阵。其中,元素a对应数据集中的每条样本的编号,元素b对应的是当前分词在所有数据被分词后中的编号。因此,矩阵[w(a,b)]表示编号为b的分词在第a号数据样本中TF-IDF值为w,最后得到与每一条数据对应的TF-IDF特征矩阵,提高数据分类的效率。

2.2 模型建立及参数调优

模型的建立需要进行核函数的选择及参数优化。采用高斯核的支持向量机可以获得非常平滑的估计,并且核值范围为(0,1),这使得计算过程变得简单[14]。因此使用高斯核函数作为分类模型训练的核函数。分类模型的性能还依赖于可调参数的选取,本文使用混淆矩阵进行参数调优,混淆矩阵如表2所示。

表2 混淆矩阵

为了评价模型的检测效果,本文使用精确率、召回率和加权调和平均Fβ三种评价指标。

精确率P定义为:

(11)

召回率R定义为:

(12)

加权调和平均数Fβ是基于精确率和召回率定义的,是对P和R的一种权衡,定义为:

(13)

式中:β>0是精确率对召回率的相对重要性的一种度量参数,一般形式为F1,即β=1。β>1时召回率有更大影响;β<1时精确率有更大影响。

根据前文分析,本文设计的OCSVM模型主要流程如下:

Step1获取数据。从各权威网站获取XSS攻击代码以及正常用户输入数据,得到训练样本以及测试样本。

Step2数据预处理。将获得的训练样本进行适当的变形处理,丰富攻击样本类型,得到更为全面的训练样本数据。

Step3数据范化。利用n-gram方法对样本进行分析,然后根据TF-IDF算法计算得到标准化的输入数据。

Step4选择合适的核函数以及调优参数。选用高斯核作为核函数,进行参数调优。

Step5建立模型。根据Step 4选择的参数,建立最优分类模型。

3 实 验

3.1 实验环境

为了验证OCSVM模型在检测XSS攻击方面的可行性和有效性,本文设计了实验进行验证,实验环境如表3所示。

表3 实验环境

3.2 数据收集

在本文前期工作阶段,从权威漏洞提交网站Exploit-db、xssed、HTML5SEC以及国外著名安全工程时Rsnake总结出的XSS Cheat Sheet,以及在GitHub上搜集XSS payload以保证有足够的训练数据。另外,从网站上收集正常输入数据作为测试样本用来测试模型的检测效率。从上述权威网站收集到的XSS payload有很多不同类型,但大多数都符合一定的组成方式[15],主要类型如表4所示。

表4 XSS payload组合方式

续表4

在实验数据方面,准备三类样本数据。一类是用来训练模型的训练样本;另两类是用来调优的黑白样本。训练样本是从前文提到的各权威网站上搜集的XSS payload攻击样本共10 000条。其中8 000条作为训练模型的训练样本,2 000条为计算调优的攻击样本。另外收集2 000条用户正常输入作为计算调优的白样本。

3.3 数据处理

在实际应用场景中,许多Web应用都会对用户的输入做一些过滤及核查。而从网站上获取的未经处理XSS攻击样本许多都是较为简单的攻击代码或者JavaScript脚本,难以绕过后台的输入过滤及核查,因此需要对获得的初始攻击样本进行适当的变形操作。以攻击样本“”为例,采用表2方法对其进行变形操作,变形结果如表5所示。

表5 XSS攻击代码变形方式

根据定义,以字符串“alert(/xss/)”为例,经分割后得到的分词集合S2包含11个分词,最终得到的TF-IDF特征矩阵如表6所示。

表6 “alert(/xss/)”特征矩阵

3.4 实验结果及分析

本文将传统检测方法XSS Filter、SVM分类模型和OCSVM分类模型作对比,讨论OCSVM模型检测XSS攻击的整体效果,使用精确率P、召回率R和加权调和平均数Fβ作为模型的评价指标。精确率与召回率实验对比结果如表7所示。

表7 精确率与召回率实验结果

为直观显示,将表7对比结果转换成柱状图,如图3所示。

图3 各项比较结果

可以看出,在召回率方面,OCSVM模型相对传统检测方法XSS Filter高出许多,虽然相对于基于SVM的检测模型提升效果并不是非常明显。由于OCSVM模型中将训练模型的样本经过变形以及分词处理,然后将样本特征向量化,让训练模型能更好地学习识别XSS攻击,因此其准确率明显高于XSS Filter和SVM。

在实际应用中,不同的产业系统及实际需求对精确率和召回率的要求程度会有所不同。比如在某些重要工业控制系统中,在进行Web漏洞检测时对检测的精确率要求程度较高。因此在评价检测模型的效率时需要考虑实际情况的因素,需要引入加权调和平均数Fβ进行模型评价,其中β>0。图4比较了三种模型在不同β值下的Fβ实验结果。

图4 不同β值检测效率对比

可以看出,当β值越大,即当召回率有更大影响时,三种方法的检测效果均有所下降。当β<1时OCSVM的整体检测效率均优于SVM,且高出的差距比β>1时更为明显。因此,本文检测XSS攻击的方法在一定程度上更适合对精确率要求更高的应用场景中。综上所述,OCSVM在不同β值下的综合检测效率都要优于其他两种检测方法。

4 结 语

本文利用单分类支持向量机在解决单类样本的分类问题上具有的特有优势,无须对样本进行标记,然后基于TF-IDF方法对样本进行特征向量化,减少人工选取特征的局限性,使用XSS攻击样本进行模型训练即可训练得出分类模型。OCSVM具有更快训练速度及更高效的处理效率。实验验证了OCSVM的可行性以及实用性,并且基于模型的评判标准,OCSVM相对于传统XSS Filter和SVM具有更好的性能,提高了检测XSS攻击准确率,减少了检测的误报率。未来将进一步完善攻击样本的多样性,保证模型在学习训练时的样本覆盖性更强,以降低攻击检测的漏报率,进一步提高OCSVM模型分类的性能。

猜你喜欢
分词漏洞样本
漏洞
分词在英语教学中的妙用
结巴分词在词云中的应用
结巴分词在词云中的应用
规划·样本
侦探推理游戏(二)
人大专题询问之“方城样本”
随机微分方程的样本Lyapunov二次型估计
漏洞在哪儿
“官员写作”的四个样本