摘 要:
随着移动互联网的蓬勃发展,Web应用已经广泛深入各行各业。针对Web应用的攻击已成为企业面临的主要安全问题之一。面对日益增加的Web应用攻击,传统基于规则的安全产品难以实现对未知威胁的拦截,且随着规则的逐渐增加,将严重影响安全产品的性能。因此,研究多分类检测模型,实现模型对威胁数据的识别检测,并通过模型优化及真实环境数据进行对比验证。结果证明,基于随机森林及lightGBM算法构建的多分类模型,在多分类模型的评估指标上优于基于SVM的多分类检测模型,能够达到理想的检测效果。1 国内外研究现状
2 机器学习算法及特征工程
2.1 机器学习算法
2.1.1 随机森林
2.1.2 LightGBM
2.1.3 支持向量机
2.2 特征工程
2.2.1 特征处理
2.2.2 特征提取
3 威胁入侵检测模型构建
3.1 数据收集及特征工程
3.1.1 数据集来源
3.1.2 特征工程
3.2 多分类模型构建
3.2.1 训练环境说明
3.2.2 模型训练
3.2.3 模型评估
4 实验及模型对比
4.1 实验数据准备
4.2 模型对比分析
4.2.1 随机森林
4.2.2 LightGBM
4.2.3 SVM
4.2.4 综合对比分析
5 结 语
近年来,随着移动互联网的蓬勃发展,Web应用已经广泛深入各行各业,承载着各大公司的关键、核心业务。现阶段,Web应用已成为网络安全攻击的主要目标。为了应对威胁攻击,传统基于规则的安全防护产品起到了至关重要的作用。但是,随着Web应用及组件漏洞的逐渐增加和攻击方式的逐渐演进,传统基于规则的安全产品难以实现对众多已知及未知威胁的有效拦截。所以,研究、探索新一代检测技术已经成为各大安全公司及科研究机构的重点研究内容。本文主要基于机器学习对Web应用入侵检测技术进行研究,构建了多分类Web应用入侵威胁检测模型,包括基于随机森林的多分类检测模型、基于lightGBM的多分类检测模型及基于SVM的多分类检测模型,并通过实验对比了3种不同机器学习算法的多分类检测模型。结果证明,基于随机森林及lightGBM算法构建的多分类模型,在多分类模型的评估指标上优于基于SVM的多分类检测模型,能够达到理想的检测效果。Web应用的飞速发展,极大地方便了人们的日常生活,已经成为互联网时代最重要的基础设施之一。Web应用在给人们带来巨大便利的同时,也伴随着不可忽视的安全风险。用户爆炸性增长,使得新威胁和攻击不断出现。大量网站遭受攻击、用户数据泄露,给企业与用户造成了严重影响。Web应用入侵安全问题已成为企业面临的重要问题。
现有基于规则的Web应用入侵威胁检测、防护产品都存在误报率、漏报率高等问题,主要原因在于威胁在不断演进,但威胁规则更新不实时,无法抵抗0day漏洞攻击。Rieck等人提出了一种基于网页内容分析的启发式威胁检测方法,经过规则过滤后再对Web入侵的最终执行动作进行分析,通过一些异常指标进行威胁判定。Prakash等人利用带有相似性规则的启发式检测技术,构建了一个PhishNet系统,利用威胁数据及所体现出来的相似规则对异常URL进行检测。但是,该系统的性能依赖于威胁的数据量。当威胁数据量较大时,需要大量及专业的安全研究人员支持以构建相关规则。Le等人选择先将Web入侵的URL根据不同的部分进行切割,包括URL的域名、路径、参数等部分,并对每个部分进行选定特征的提取,如参数的长度及个数等。Ma等人提取对Web入侵的URL中的host等特征,以此进行Web应用入侵威胁检测。Kolari等人则采用词袋模型解决Web威胁入侵的检测问题。刘健等人通过训练多个机器学习模型,定义每个模型对Web入侵URL检测的层级关系,设置每个机器学习模型的判别阈值。如果上层机器学习模型对URL的检测结果超过所指定的判别阈值,则该URL被判定为异常URL,判断为威胁入侵。它利用将URL逐层传递到每层机器学习模型中检测的方式,以降低对Web入侵威胁检测结果的误报率。陈光英等人研究以系统调用序列和网络数据包作为检测对象,建立以支持向量机算法模型的入侵检测方法。综上所述,将机器学习应用于Web应用威胁检测,国内外均有大量的研究基础。可见,将机器学习技术融入安全防护产品是威胁检测发展的必然趋势。随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器。通过组合多个弱分类器,最终结果通过投票或取均值使得整体模型的结果具有较高的精确度和泛化性能。随机森林算法模型,如图1所示。(1)随机抽样,训练决策树。N个样本的样本集,有放回地抽取N次,每次抽取1个,形成一个有N个样本的样本集,用来训练一个决策树,作为决策树根节点处的样本。(2)选择节点分裂属性。当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,m应远小于M,然后从这m个属性中采用某种策略(如信息增益)来选择1个属性作为该节点的分裂属性。(3)重复步骤2,直到不能分裂。决策树形成过程中每个节点都要按照步骤2来分裂。如果下一次该节点选出来的属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,不再继续分裂。需要注意,每棵树都会完整成长而不会剪枝。(4)将生成的多棵分类数组成随机森林。如果是回归问题,则最后的输出是每个树输出的均值;如果是分类问题,则根据投票原则,确定最终的类别。LightGBM(Light Gradient Boosting Machine)是微软开源的实现GBDT算法的框架,支持高效率的并行训练。梯度提决策升树(Gradient Boosting Decision Tree,GBDT)是一种基于迭代所构造的决策树算法,既可以做回归也可以做分类。它以分类回归树(Classification and Regression Trees,CART)模型作为弱学习器,将新学习器建立在之前学习器损失函数梯度下降的方向,通过不断迭代来训练模型。迭代过程中,每一轮预测值和实际值有残差,下一轮根据残差再进行预测,最后将所有预测相加作为最终结论。因此,GBDT可以表示为决策树的加法模型,如式(1)所示:式中,表示决策树,为决策树参数,为树的个数。根据向前分步算法,第步的模型可以表示为:设定为第i个样本的真实值,为第i个样本的预测值,取损失函数为平方损失,那么损失函数可以表示为:根据式(4)极小化损失函数可得到参数:通过多次迭代,更新回归树可以得到最终模型。LightGBM使用基于直方图的分割算法取代了传统的预排序遍历算法,不仅在训练速度和空间效率上均优于GBDT,还能有效防止过拟合,更加适用于训练海量高维数据。支持向量机(Support Vector Machine,SVM)是在分类与回归中分析数据的机器学习算法。SVM通过寻找一个满足分类要求的最优分类超平面,将实例表示为空间中的点。最优超平面将实例明显地间隔分开,通过判断实例在超平面的哪一侧来预测所属类别。理论上,SVM可以实现对线性可分数据的最优分类。除了进行线性分类之外,SVM还可以使用核技巧将原空间的数据映射到高维特征空间,然后在高维特征空间进行线性分类模型训练,从而有效实现非线性分类。特征工程是指从原始数据中提取特征并将其转换为适合机器学习模型的格式,通常指的是从N个特征集合中选出M个特征的子集并满足条件。它包括特征处理和特征提取两个方面。特征处理指通过包括一组特征中去除冗余或不相关的特征来降维。特征提取广义上指的是一种变换,将处于高维空间的样本通过映射或变换的方式转换到低维空间,达到降维的目的。两者常联合使用,如先通过变换将高维特征空间映射到低维特征空间,后去除冗余和不相关的特征来进一步降低维数。训练机器学习模型的数据集由于数据量通常很大,会存在数据不全(缺失值)、数据重复(冗余数据)及数据错误(异常值)等问题(如收入-15元,或身高1 688 cm)。可以采用局部数据的线性插值法进行补缺或使用一个全局常量或属性的平均值填充空缺值。如无法填充,则可考虑进行忽略。数据集中的冗余数据,可以采用对数据去重、删除冗余的方式。数据集中存在的错误数据,可以根据已有数据的规律及数据类型的特点进行修改,或者采用将错误数据移除数据集的方式。本文研究的主要特征即为文本特征。数据主要来源于Web,表示形式通常表现为URL形式。对于文本特征的处理国内外研究很多。罗燕等人针对词频-逆向文件频率(Term Frequency-Inverse Document Frequency,TF-IDF)提取特征效率低、准确性差的问题,提出了一种基于词频统计的关键词提取方法。实验结果表明,基于词频统计的关键词提取方法的精确率、召回率等指标方面均优于传统的TF-IDF算法,且能提高关键词提取的效率;庞剑锋等人利用向量空间模型对3种分类方法进行研究,提出了文本分类系统模型。本文对于特征提取方法采用TF-IDF模型,是一种用于信息检索与数据挖掘的常用加权技术。词频(Term Frequency,TF),某个词语在文件中(或单个语句中)出现的次数。这个数字通常会被归一化,一般是词频除以文章总词数,以防止它偏向长的文件(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否)。逆文本频率(Inverse Document Frequency,IDF)反映了一个词在所有文本(整个数据集)中出现的频率。如果一个词在很多文本中出现,那么它的IDF值应该低。反过来,如果一个词在比较少的文本中出现,那么它的IDF值应该高。常见的词如“是”“或”“好”等,IDF值应该低。如果一个词在所有的文本中都出现,那么它的IDF值为0。(5)式中,是在某一文本中词w出现的次数,N是该文本总词数。
式中,Y是文档总数,是包含词条w的文档数.需要说明的是,分母加1是为了避免w未出现在任何文档中从而导致分母为0的情况。从以上计算公式可以看出,某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。Web应用入侵通常通过在URL上构建恶意文本的方式进行,因此本文根据Web应用入侵的文本特征构建了基于TF-IDF特征提取的随机森林、LightGBM及SVM多分类模型。通过优化并比较3个模型,结合生产环境及搜集的开源数据,对3个模型进行优化及验证。通过多分类评估指标进行评估,可得出各模型的分类效果。
构造本研究中所提出的模型需要经历多个阶段的处理,包括数据集的收集及预处理、特征的提取和选定、机器学习模型的训练及模型的参数调优等。在本次研究工作中,采用多种渠道多种来源获取训练所需的数据。所收集的数据整体分为正常数据和异常数据。通过网页爬虫,选定某几个网站,对网站进行访问,爬虫自动获取网站访问的URL链接,以此作为正常访问数据;搜集生产系统中通过WAF访问并标记为正常的日志,提取访问URL。通过开源数据集进行搜集;搜集生产系统中通过WAF访问并标记为异常的日志,提取数据URL链接;基于开源软件生成。总体训练数据包含7种类型,分别为XSS、SQL注入、LFI、命令执行、目录遍历、RFI以及正常的流量样本数据,数量如表1所示。总体搜集数据量为286 951条。
对搜集到的数据进行统一的格式化处理,以便能够进行特征工程。正常数据。爬虫获取的数据,为单个URL完整的连接,因此需要对URL进行处理。根据URL的组成结构,恶意payload不会存在于protocol协议部分、hostname主机地址以及port端口部分(或域名)。所以,对于URL数据,只需提取URL中的path及parameter部分即可。将提取的结果逐行存储为json格式,并将文件命名为normal,作为正常数据的标签。WAF访问日志需要分析日志格式,批量进行日志筛选,提取WAF标记为normal的日志数据,再将日志数据中GET请求的URL(包含parameter)进行切分处理并存储于normal文件。如果为POST请求,则分别提取URL和parameter中的数据,存储于normal文件。异常数据。开源数据集,根据数据集单条数据的标签对数据进行提取分类。不同标签数据类型存储于不同的文件,如sql.json。单条数据格式同样存储为json格式,以便模型提取训练。WAF访问日志筛选标记为攻击的数据,提取日志中attack字段,即为异常payload。同样,按照开源数据集的处理方式进行存储。开源软件生成,根据不同的开源软件类型生成的payload,按照异常数据类型进行存储。①异常值处理。删除训练集中所存在的空数据及其他异常数据。②数据变换。Web攻击通常会存在变换Payload大小写、添加空字符、URL html编码以及base64编码等操作,以试图绕过安全防护产品的检测。所以,为了使机器学习模型能够达到更好的识别能力,需要将搜集的训练集中的数据进行变换操作,包括将每一条数据中的内容统一转为小写字符、解析样本数据中的URL编码、对html转义字符进行处理以及将样本中出现的数字统一替换为0等。字符类型的标签数据转换为数值类型,如标签为[xss,sqli,os_command],转换后为[0,1,2]。以XSS为例,其他类型样本的处理流程一致,原始样本如下:d%3D375%22%3E%3Cscript%3Ealert%281337%29%3C/script%3Eid%3d375%22%3e%3cscript%3ealert%281337%29%3c/script%3e(2)解析样本数据中的URL编码以及进行html转义字符处理:(4)处理URL中的Schemes和地址等无效信息:本样本标签是XSS,将标签“XSS”编码为0,作为模型训练的标签。
③数据去重。经过异常值处理及数据变换后,存在部分冗余数据,如上一步示例中的处理结果。因此,需要对整个数据集数据进行去重处理。本文研究的内容为文本数据特征提取,包含样本分词、分词后的ngram处理及tfidf转换。①样本分词。将样本数据以‘char’的粒度进行分词处理,如?id=0&age=0分词后为?,i,d,=,0,&,a,g,e,=,0。②Ngram处理。将分过词的样本进行ngram处理。ngram中n的取值范围是(1,2),n为1表示每条样本中分好的词不考虑前后组合,转换后?,i,d,=,0,&,a,g,e,=,0的形式保持不变。n为2表示样本中分好的词进行前后相邻的两两组合,如i,d,=,0,&,a,g,e,=,0,处理后为id,d=,=0,0&,&a,ag,ge,e=,=0。ngram和分词的方法已封装在sklearn库中。③tfidf转换。tfidf用于将非结构化的数据转换成结构化的数值矩阵。样本数据经过分词、ngram处理后进行去重,得到一个不重复的词集,在不限制特征数量的情况下,将词集中每个词作为一个特征形成一个词向量空间。每篇文档都会转化成一个向量,向量的维度等于词集中词的数量。假如有10 000个文档,处理后有2 000个不重复的词。这些文档将会转换成一个10 000×2 000的数值矩阵。矩阵中任意的第m行、第n列的取值表示n所对应的词在m对应的文本中的tfidf值。tfidf已封装在sklearn库中。i,d,=,0,",>,<,s,c,r,i,p,t,>,a,l,e,r,t,(,0,),<,>
ngram处理,组合方式是单个字符自成一组,以及进行两个相邻字符的两两组合:i,d,=,0,",>,<,s,c,r,p,t,a,l,e,(,), d=",=0,0","">,><,,>a,al,le,er,rt,t(,(0,0),)<,
tfidf处理,将文本数据转换成数值矩阵,行表示样本数,每一列表示一个词,所有样本中有多少个不重复的词,矩阵就有多少列,并通过tfidf的取值反映出每个词在文档中的权重。示例中只有1个样本,样本包含42个不同的词,所以输出是一个1×42的矩阵。经过特征工程后,可以利用算法进行模型训练,特征是一个1×42的矩阵,如表3所示。
其他类型数据的处理步骤和XSS样本处理一致,只是不同的种类样本,标签对应不同的值,所有类型样本的特征的维度是固定的。比如,设定1 000维,样本条数为n,那么特征就是一个n×1 000的数值矩阵,标签就是一个n×1的矩阵。
模型构建编程语言为Python,版本为python3.6。训练模型用到的Python主要工具库以及功能描述如下。re:Python正则表达式模块,用于数据预处理阶段,结合其他工具对数据进行处理;URLlib:用于前期的数据预处理,对URL数据进行解析;pandas:数据分析工具,用于数据读取、数据处理和分析;sklearn:机器学习工具,用于特征工程、训练随机森林及SVM模型以及模型评估;分别基于sklearn及lightgbm库构建随机森林、LightGBM及SVM多分类模型。如图2所示。训练时,将特征和标签输入到算法进行训练,训练后得到模型。预测时,输入新样本的特征到模型,模型预测出新样本的标签。将原数据分为训练集和测试集。训练集训练模型,并根据测试集的特征做预测,将预测结果与测试集本身的标签进行对比。
本文研究的模型为多分类模型。模型评估基于多分类模型的评估准则。评估指标是精确率、召回率和F值,这些数值在测试集上越高表示模型性能越好。以上评估方法已封装在sklearn库中。
实验使用数据286 951条,类型分别为XSS、SQL注入、LFI、命令执行、目录遍历、RFI以及正常的流量样本数据。数据分布如图3所示。训练数据存储在csv文件中,每个csv文件代表一种类型的数据,文件中每一行代表一个样本。通过训练及优化随机森林模型参数,当设置n_estimators参数为300,criterion设置为gini时,模型识别效果最好。最终在模型参数固定情况下,使用20%的数据为测试集,80%数据为训练集,重复执行多次得到随机森林的实验结果如表4所示。观察多次实验结果,得到平均精确率为99.5%,平均召回率为99.2%,平均F1值为99.3%。从实验结果来看,多次实验结果相近,证明随机森林多分类效果稳定,同时分类结果各评估值均能达到理想的结果。通过训练及优化LightGBM模型参数,当设置n_estimators参数为533、random_state设置为7时,模型识别效果最好。最终在模型参数固定情况下,使用20%的数据作为测试集,80%数据作为训练集,重复执行多次得到LightGBM的实验结果,如表5所示。观察多次实验结果,得到平均精确率为99.4%,平均召回率为99.2%,平均F1值为99.3%。从实验结果来看,多次测试结果指标稳定,分类准确率较高。
通过训练及优化SVM模型参数,设定kernel参数为rbf、gamma设置为scale时,模型识别效果最好。最终在模型参数固定情况下,使用20%的数据作为测试集,80%数据作为训练集,重复执行多次得到SVM模型的实验结果,如表6所示。观察多次实验结果,得到平均精确率为99.1%,平均召回率为99.1%,平均F1值为99.1%。综合结果可以分析出,在使用相同样本进行训练的情况下,基于随机森林算法和LightGBM算法的多分类模型,效果较SVM多分类模型更好。随机森林分类模型在分类评估指标上同LightGBM分类模型指标接近,证明其分类效果相近。SVM由于径向基核函数,理论上会拟合任何数据分布,但是会不断给数据升维,增加特征数量,导致SVM训练效率非常低。同时,实验中发现,SVM模型的分类效率明显低于随机森林分类模型和LightGBM分类模型。本文研究了基于机器学习模型在Web应用入侵检测的可行性,并通过实验验证了基于随机森林及lightGBM算法构建的多分类模型,在多分类模型的评估指标上优于基于SVM的多分类检测模型,能够达到理想的检测效果。综上所述,将机器学习用于信息安全领域,在理论与实践中具有巨大意义。但是,由于机器学习模型检测效率较传统规则检测效率低,本文研究成果目前仅能与已有的安全防护软件进行融合(如WAF)进行离线威胁检测,通过检测结果补充已有的安全规则,提升安全产品的防护能力。所以,研究如何提升机器学习模型的威胁识别效率,实现模型的实时检测能力,替换传统的规则检测方式,将会是本文后续的研究工作。引用本文:杨成刚.基于机器学习的Web应用入侵威胁检测[J].通信技术,2021,54(4):967-975.
选自《通信技术》2021年第4期(为便于排版,已省去原文参考文献)《信息安全与通信保密》杂志投稿邮箱:
相关资源