朴杨鹤然 任俊玲
摘 要:针对目前主流恶意网页检测技术耗费资源多、检测周期长和分类效果低等问题,提出一种基于Stacking的恶意网页集成检测方法,将异质分类器集成的方法应用在恶意网页检测识别领域。通过对网页特征提取分析相关因素和分类集成学习来得到检测模型,其中初级分类器分别使用K近邻(KNN)算法、逻辑回归算法和决策树算法建立,而次级的元分类器由支持向量机(SVM)算法建立。与传统恶意网页检测手段相比,此方法在资源消耗少、速度快的情况下使识别准确率提高了0.7%,获得了98.12%的高准确率。实验结果表明,所提方法构造的检测模型可高效准确地对恶意网页进行识别。
关键词:恶意网页;机器学习;分类器集成;Stacking
中图分类号:TP309.2
文献标志码:A
文章编号:1001-9081(2019)04-1081-08
Abstract: Aiming at the problems of excessive cost of resource, long detection period and low classification effect of mainstream malicious webpage detection technology, a Stacking-based malicious webpage integrated detection method was proposed, with heterogeneous classifiers integration method applying to malicious webpage detection and recognition. By extracting and analyzing the relevant factors of webpage features, and performing classification and ensemble learning, the detection model was obtained. In the detection model, the primary classifiers were constructed based on K-Nearest Neighbors (KNN) algorithm, logistic regression algorithm and decision tree algorithm respectively, and Support Vector Machine (SVM) classifier was used for the construction of secondary classifier. Compared with the traditional malicious webpage detection methods, the proposed method improves the recognition accuracy by 0.7% and obtains a high accuracy of 98.12% in the condition of low resource consumption and high velocity. The experimental results show that the detection model constructed by the proposed method can recognize malicious webpages efficiently and accurately.
Key words: malicious webpage; machine learning; classifier ensemble; Stacking
0 引言
目前,各種钓鱼网页、挂马网页及其变种层出不穷,恶意网页所采用的攻击和欺骗手段也日趋复杂。用户在浏览各类网页时稍不留神就会处于危害之中,主机可能会无声无息地被恶意网页感染,不仅导致用户本身信息数据和财产的损失,受害者还很可能会成为攻击者的跳板,作为“肉鸡”用于攻击其他的用户。由于恶意网页有如此广泛的传播面同时能够带来相当可观的黑色收入,因而非常受“黑产组织”的欢迎。而如今每天甚至每小时的网页数量呈爆炸式增长,也为恶意网页的隐蔽提供了极佳的条件。鉴于恶意网页形式多样、影响广泛、隐蔽性强的特点,如何高效快速地识别恶意网页已成为如今互联网安全的一个重要研究课题。
恶意网页检测技术主要有针对行为的动态检测和针对特征的静态检测两大类别。动态网页分析检测是在蜜罐、虚拟机的环境下,通过将获取到的超级文本标记语言(HyperText Markup Language,HTML)或JavaScript等网页源代码在虚拟的环境中运行并使用浏览器对网页进行访问,实时监测系统情况和网页的动态行为,如系统中的注册表、进程、文件等的状态改变等,依此来判断正在运行的网页是否属于恶意网页类别[1]。该方法对未知数据的检测正确率相对较高,但虚拟机引擎技术与蜜罐检测技术的系统资源消耗十分巨大,其对时间和资源的消耗也很高,因此只有在一些大型检测中心才会使用此类检测识别方式。而多数恶意网页检测技术的研究集中在静态特征检测方面,本文也主要针对静态检测技术进行研究和探索。
静态检测为直接通过网页的源代码进行恶意网页识别的技术,包括模式匹配、静态代码分析、启发式规则和机器学习[2]等方法。具体为:1)模式匹配是恶意代码检测识别的基本办法,主要通过检测是否含有由已知的恶意网页源代码片段生成的特征码来实现对网页的识别。该方法需要一定长度的特征码才可以保证识别的正确性,否则极易将正常网页代码错误识别成恶意的。
采取包含通配符的特征码是对该技术的一种改进方式,可以识别相当一部分的恶意网页代码。文献[3]中的网络检测系统Snort就是使用基于模式匹配的静态检测系统。
2)静态代码分析则通过将待检测网页源代码与代表网页语义特征的源码结构模板进行比对,经由衡量其与模板的相对距离等来判定网页是否为恶意的。黄建军等[4]设计了基于植入特征的恶意网页源代码检测手段,即采用识别网页架构源码特征的方法。
上述两种方法中特征码或结构模板都需要提前定义好,因此不能对未知类别的攻击进行有效检测识别。
3)启发式规则就是基于某种技术或可以自主发现的某种特性来对数据进行识别的方法。该方法往往会为不同规则分配特定特征,通过设置每个规则的权重并对其进行综合识别,判定其与预先设定的阈值的关系来判定是否为恶意网页。张昊等[5]提出了基于判断矩阵法的检测技术,即通过对不同网页统计特征赋权重来综合判断网页中是否含有造成用户损失的恶意代码。启发式规则的优点在于可以对未知的恶意网页进行判定,但可能导致较高的误判率。
4)机器学习方法通过对训练样本进行训练得到分类模型,并通过分类模型对未知网页进行分类。利用机器学习方法能够从大量恶意网页与正常网页的数据集中训练学习出有效的分类特征信息,并通过分类模型对其进行分类。
如Ma等[6]提出了一种基于统一资源定位符(Uniform Resource Locator,URL)特征和host信息的分类方法,并论证了多种机器学习算法对此类特征的表现与对比差异,但选取的特征数量不多。
Yoo等[7]提出了一种基于异常与误用判断模块的检测系统,其中含有两个不同分类器模型:一个使用监督算法;另一个使用半监督算法,共同用于恶意网页检测。
李洋[8]则提出了一种基于混合型机器学习算法的恶意网页源代码识别系统,采用了三种不同的分类算法,根据三种不同分类模型的测试结果进行最终分类器选取。王正琦等[9]设计出了基于两层分类器的恶意网页检测技术,分别使用朴素贝叶斯和支持向量机(Support Vector Machine, SVM)层次化地实现了检测。
由上可见,基于机器学习的恶意网页检测多为从网页特征的设置和分类方法的选取等方面进行探讨,且逐步由基于单一机器学习算法向多种机器学习算法的组合转变,相对于其他方法有较大的灵活性和较好的识别效果,以上文献中提出的方法也在一定程度上促进了恶意网页检测技术的进步,但在特征的多样性以及检测速度和准确率上仍有一些不足。
本文在对上述各种研究成果进行分析与梳理的基础上,选择机器学习作为恶意网页识别的方法,同时为了多维度提取恶意网页特征,首先对恶意网页进行分类后,针对不同类别进行特征提取,并将异质分类器集成的方法应用到恶意网页检测领域,提出了一种基于Stacking的恶意网页集成识别方法,通过多个初级分類器和元分类器多层次结合的方法实现恶意网页的判别,在检测效率和准确性方面都有所提升。
1 相关知识
1.1 恶意网页分类
目前对恶意网页没有非常广泛通用的分类方法,本文通过对恶意网页的针对目标、行为表现与特征进行分析,将恶意网页分为两类:一类为篡改被黑类网页,即通过嵌入恶意代码使恶意程序、木马病毒等能够通过其进行攻击与感染的网页;另一类为虚假钓鱼类网页,而通过虚假内容对用户进行钓鱼攻击从而非法获取用户数据的网页。篡改被黑类网页原本是提供正常服务的合法网页,因其后台被黑客攻破或者存在一些可利用漏洞,导致正常网页上代码被修改,从而隐蔽地攻击正在访问的用户;虚假钓鱼类网页则本身就是对正常网页的模仿,通过URL和页面内容混淆视听,使访问用户误以为是正常网页,从而对用户进行信息、资金盗取或者钓鱼攻击。因此,这两类恶意网页在进行检测时提取特征的角度各不相同。
1.2 基本分类模型
1.2.1 支持向量机算法
SVM算法是一种有监督学习的算法,即将向量映射到更高维度的空间里,从而建立一个最优分类面即最大间隔超平面。SVM致力于得到一个可以满足分类需求的最优分类面,同时使数据集中的各类点与分类面的距离尽可能远,也就是使它两侧的区域(margin)最大。
本文使用的SVM算法采用的核函数是径向基核函数(Radial Basis Function,RBF):
因其还可以使用如下形式描述,因此称高斯核(Gaussian Kernel):
RBF核能够把一个样本映射到更高维度的空里间,与多项式核对比,RBF中需要确定参数的较少,而参数的数量会直接影响到使用函数的复杂度。SVM作为分类算法,最后可以得到空间距离最优解,即最公平的类别区分。相对于其他算法仅可以获得局部的最优解,SVM性能相对较好。
1.2.2 K近邻算法
K近邻(K-Nearest Neighbors, KNN)算法为通过测定不相同特征间距离对不同样本进行分类。若是某样本位于特征空间里面的K个极为相似,
就是最邻近样本里的大部分均归属某同种类别,则此样本也属这一类别,K一般取小于或等于20的整数。在此种算法中,所选邻近样本均是已有分类结果的样本。本文的K近邻算法使用曼哈顿距离:
此方法仅依靠最靠近的一个或多个样本的分类结果来对待检测样本的种类进行分类。
1.2.3 决策树算法
决策树(Decision Tree, DT)为树形的结构,通过寻找最佳划分特征进而实现样本分类,本文采用C4.5算法。决策树的内部节点表示为某个特征的阈值,而叶节点则表示一个类和其分布,决策树的分类规则不仅易于理解而且准确率较优。C4.5的节点选择标准为最大信息增益率,计算公式为:
C4.5使用贪心算法作为归纳算法,通过自顶向下递归的方法对树进行构造,若所有训练样本都处于同一类别中,那么此节点就成为叶子节点,不然的话选择一个最优分类特征当作内部节点且创建分支,分支过程通过计算信息增益来进行衡量,并运用剪枝技术消除噪声和孤立点。对于所给样本,从根节点处向下进行判断就可以得到分类识别结果。
1.2.4 逻辑回归算法
逻辑回归(Logistic Regression,LR)通过拟合曲线或者学习超平面实现分类,回归就是根据已知的自变量从而得到因变量,即通过获取的特征数据得到预测分类。逻辑回归算法通过逐渐缩减分类范围,将预估值缩小在区间[0,1]内。常用Sigmoid函数δ(Z)=(1+e-Z)-1来展示。属性x所属类型为y1的可能性为:
逻辑回归模型的优点是可发现特征之间联系和将模型进行正则化。逻辑回归和SVM二者的差异是使用不同损失函数(loss function),且逻辑回归的分类速率比SVM对比有所升高。
1.2.5 简单投票法
简单投票法(Voting)就是将各个初级分类器的结果进行投票,占最多票数的结果作为最终结果,即遵循絕大多数原则。简单投票法包括同等投票法和加权投票法,同等投票法如果出现票数相等的情况,可能就会进行随机选择来决定最终判别结果。为了避免这种情况和使最终结果更精确,就要为每个分类器进行加权,即加权投票法。而权值的计算是此种方法性能好坏关键。
1.3 其他相关知识
1.3.1 Stacking集成学习方法
集成学习法主要有两类,即同质集成与异质集成[10]。当初级分类器由同一个机器学习算法产生时,如误差反向传播(Back Propagation, BP)神经网络,此时集成中只包含同种类型的初级分类器,如“神经网络集成”中全是神经网络,此类的集成就称为“同质”。集成亦可以由多种不同类型的初级分类器组成,例如同时含有朴素贝叶斯和SVM,这类集成即称为“异质”。异质集成里面的初级分类器均通过各不相同的算法产生。
同质集成中颇具代表性的方法有套袋法(Bagging) 和提升法(Boosting),它们都是对使用相同机器学习算法的分类器进行集成。其中Bagging通过对原始训练集样本进行有放回、相同概率的抽样方法来得到若干小训练集,然后使用这些有差异的小训练集对多个初级分类器进行训练;Boosting在构建初级分类器时,会提升以前分错类的训练样本的抽样权重值使得每轮训练均基于不同分布的数据,并在最后集成时对每个初级分类器进行加权平均。
本文采用的是异质集成的代表Stacking学习法,是通过将多种机器学习算法组合来提升分类器的泛化性能,其基本过程如图1所示。其中,首先对训练集分别训练从而得到初级学习器,然后以初级学习器的分类结果作为元分类器的输入,进行元学习训练出元分类器。Stacking通过使用不同的机器学习算法来保证初级分类器拥有多样性,并通过元分类器以最优方法对初级分类结果进行整合,相比同质集成的方法,分类的精度和准确率都会提高,同时导致过拟合的风险度则会降低。
1.3.2 K折交叉验证
K折交叉验证(K-fold cross-validation)是用来测试算法准确性的常用测试方法。首先将数据集分成k份,轮流将其中k-1份作为训练数据,1份作为测试数据进行实验。每次实验都会得出相应的正确率(或差错率)。k次的结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次k折交叉验证再求其均值,作为对算法准确性的估计。
1.3.3 恶意代码混淆
为了躲避一些检测工具的检测识别,攻击者常对进行恶意攻击的网页代码进行代码混淆(Obfuscated code),即对代码进行编码或者在代码中加入特殊符号或无用字符,从而使代码变得难以检测,据统计相当多的恶意代码都运用了JavaScript混淆。JavaScript混淆包括使用统一码(Unicode)、美国信息交换标准代码(American Standard Code for Information Interchange, ASCII)编码或使用异或运算(XOR)等替代已有的代码字符串。
如果使用ASCII或Unicode编码对恶意代码进行混淆,浏览器在访问页面时会通过escape()和unescape()等函数将混淆字符重新转换为恶意网页代码,因此这些函数与方法在混淆代码中出现的次数会比在普通网页源代码中出现次数要较多。而使用逻辑异或对恶意代码进行混淆的时候则需给逻辑运算设定一个键值,再将恶意代码与键值进行异或运算,并最终被特殊符号所替代。
2 特征工程
一个分类器性能的好坏关键问题在于有效的特征选择。首先对网页源代码进行处理,将其解析成文档对象模型(Document Object Model, DOM)树结构可根据HTML标签对其内容进行分析。DOM树即依据代码结构所生成的节点集,由此可以在结构树中寻找所需的节点或者参数。分析DOM树的结构时要加载文档并对其层次结构进行构建。DOM树对HTML代码进行各种操作的定义,由此可将HTML代码以含有元素、属性的DOM树结构形式进行展现。
本文从恶意网页目标、行为表现等角度将其分为篡改被黑类网页和虚假钓鱼类网页两类,通过分析,发现这两类恶意网页数据都有自己不同特征,因此首先从这两类特征出发,并结合根据词组或代码在类别文档中出现的频率即基于数学统计的计算词频(Term Frequency,TF)和基于领域知识的人工选择等方法分别进行特征统计,最终筛选出33维特征用于对分类器的训练。
2.1 篡改被黑类网页特征