APP下载

基于半监督学习的恶意URL检测方法①

2020-11-24麻瓯勃刘雪娇唐旭栋周宇轩胡亦承

计算机系统应用 2020年11期
关键词:精准度分类器视图

麻瓯勃,刘雪娇,唐旭栋,周宇轩,胡亦承

(杭州师范大学 杭州国际服务工程学院,杭州 311121)

万维网是人们接入互联网的主要入口,用户能够通过URL (统一资源定位符)直接或间接地获取互联网上的各类信息.在这种方式给生活带来便利的同时,攻击者也可利用恶意URL 实现不同类型的攻击.据2018年卡巴斯基安全公告[1]中统计,2017年11月至2018年10月间,该实验室Web 防病毒组件共识别554 159 621个恶意URL,而其在2014年的安全公告中统计通过恶意URL 实现的攻击占当年整个网络攻击的75.76%,这一数值在2015年也达到了73.70%.因此,检测恶意URL 成为了应对网络攻击的重要组成部分.

恶意URL 是指欺骗用户访问,达到执行恶意行为或非法窃取用户数据目的的URL.攻击者在URL 中嵌入恶意代码就可以实现XSS、SQL 注入等攻击,用户访问这些URL 会被窃取个人隐私信息,例如账号密码、个人资料,或者被迫下载和执行恶意程序或脚本(例如病毒、木马、蠕虫等)[2].为了防止被检测系统拦截,攻击者不断设计新型恶意URL,如何及时有效应对这些恶意URL 成为了一大挑战.

目前恶意URL 检测主要基于黑名单(blacklisting)和规则库[3],这种方式实现简单、检测高效,但却难以应对新型恶意URL.机器学习已经在入侵检测领域有了广泛应用,它可以一定程度解决未知攻击难以检测的问题,所以有一些研究[4-10]将其应用在恶意URL 检测上.应用机器学习实现恶意URL 检测遇到的主要困难是:与丰富的攻击手段相似,网络中数据的高复杂性使得统计特征有较大的可变性[11].这导致无监督学习训练出的检测模型虽然能够判断出一些未知的恶意URL,但模型若没有高度可靠,则易出现误报[12].许多检测系统每日报警数可达到几十万次,人为从所有报警中排错是一件极其困难的事情,所以低误报率的检测系统更具实用性.由于存在以上问题,结合有监督学习训练恶意URL 检测模型是目前的主要应用方式.但有监督学习训练检测模型需要大量有标签样本,为样本打标签将增加成本开销并消耗更多时间.

本文结合半监督学习训练恶意URL 检测模型,改进了协同训练算法,只需用少量有标签数据和大量无标签数据即可实现两个不同分类器的相互学习和共同进步.此外,在数据预处理中,除了基于专家知识外,还引用基于统计的Doc2Vec 工具将URL 作为带情感文本处理,这种方式考虑了词序,保留上下文联系,有助于训练的分类器区分恶意URL 与正常URL.

1 相关工作

1.1 恶意URL 检测

黑名单是检测恶意URL 最常用的方法,其本质是过去已被确认为恶意URL 的数据库.每当访问新URL时,都会执行数据库查找.如果该URL 存在于黑名单中,则被判定恶意,系统生成警告,否则判定为良性.但是由于每天都会生成新的URL,维护一个详尽的恶意URL 列表是不现实的.文献[3]中研究显示,为了逃避黑名单检测,许多攻击者会对原始URL 进行少量修改,或通过混淆将URL 修改为“看起来”合法的形式迷惑检测系统[13].因此,黑名单方法具有严重的局限性,绕过它们并不是一件困难的事情,尤其是黑名单对于新生成的恶意URL 缺乏检测能力[4].尽管黑名单面临着上述问题,但由于其实现简单且查询效率高,仍是当今恶意URL 检测系统最常用的技术[14].

启发式(heuristic)方法是对黑名单的一种扩展,主要思想是创建“签名黑名单”,识别常见的攻击,并将签名分配给该攻击类型.检测系统可以在网页上扫描此类签名,并且在发现某些可疑行为时发出标记,这种方法可以检测新URL 中的威胁,比黑名单具有更好的泛化能力.但是,启发式方法只能用于有限数量的常见威胁,不能推广到所有类型的新型攻击,且攻击者使用混淆技术依然可以绕过[4].

为了提高恶意URL 检测器的通用性,近年来对其与机器学习结合的研究日益受到关注.机器学习方法可基于统计属性,训练得到的分类器可以区分URL 为恶意或良性,能够一定程度检测新型恶意URL.支持向量机(SVM)是监督式学习方法之一,在恶意URL 检测中有着较多的应用[15-17],它基于结构风险最小化原则避免了过学习问题,泛化能力强,但应对大规模训练样本时存在计算量过大、训练时间长的问题.逻辑回归是恶意URL 检测中另一种常用的监督式学习方法[18,19],实现简单,计算量小,训练速度快,但容易欠拟合,得到的模型预测准确率相比其它方法不高.文献[15,18]还介绍了朴素贝叶斯(naive Bayes)与决策树(decision trees)在恶意URL 检测中的应用.

1.2 半监督学习

有监督学习需要大量有标签数据训练模型,准确判断一条URL 是否恶意需要丰富的专家知识,这会造成时间开销的增加[20,21].并且当需要标记的URL 数量过多时,标记的准确性会受到影响.由于新型恶意URL的产生速度快,数量多,只应用有监督学习训练检测模型显得低效.半监督学习的引入就是为了一定程度解决上述问题.随着网络应用的普及,无标签数据的获取变得更为容易.半监督学习因为可以借助大量的未标记数据来辅助少量的有标记数据提高训练模型的性能而受到关注[22,23],其利用分类器代替人力进行数据标注,并在此过程中不断学习提升自身区分数据类型的能力.半监督学习的基本依据在于:数据的分布必然不是完全随机的,通过一些有标签数据的局部特征,以及更多没标签数据的整体分布,就能得到可以接受甚至是非常好的分类结果.这表明半监督学习训练的分类器性能不一定优于有监督学习,而最终的训练效果与应用的有标签数据量有关,这需要训练者根据目标进行抉择.一些典型半监督学习算法的优劣势比较如表1所示.

表1 典型半监督学习算法的优劣势比较

自训练(self-training)只需要一个分类器和少量有标签数据就可以实现,核心思想是选择高置信度的未标记样本来扩充训练集,存在的不足是如果无标签URL预测错误,随着训练的进行会造成错误的累积[24,25].协同训练由Blum 和 Mitchell 等[26,27]提出,Nigam 等曾将其应用在文本处理中[28],它需要两个不同分类器共同工作,实现简单,计算量小,但若两个初始分类器性能不够接近,弱分类器容易对强分类器产生较大负面影响.协同正则法(co-regularization)[29]基于正则化框架,试图直接最小化有标记样本上的错误率和两个视图上未标记样本的标记不一致性,不涉及对未标记样本赋予伪标记的过程.该方法有多种算法实现[30,31],并可在信息论框架下解释工作原理[32].但其对于视图构建要求苛刻,易出现高误报率,不适合用于恶意URL 检测.Goldman 和 Zhou[33]提出了一种可用于单视图数据的协同训练法变体,通过使用两种不同的决策树算法在相同属性集上生成两个不同的分类器,然后按协同训练法的方式来进行分类器增强.这种方法严重依赖10 折交叉验证法[34]估计标记置信度,只适用于大量有标记样本的情况.Zhou 和 Li[35]提出三体训练法(tritraining),该方法从单视图训练集中产生3 个分类器后利用预测结果以“少数服从多数”的形式来挑选数据.但由于只用了单视图,分类器间的独立性不足,相互学习效果不佳.

基于以上半监督学习算法遇到的问题,本文提出一种以协同训练与自训练的思想为基础的半监督学习算法,基于双视图,结合两个分类器预测结果共同判断来提升标记伪标签的准确率,依赖的原始打标签数据量少,计算量较小.

2 恶意URL 检测方案设计

本章将先设计基于协同训练的改进算法,用于训练恶意URL 检测分类器.在2.2 节介绍两个初始分类器的训练细节.

2.1 协同训练改进算法

图1给出了本文方法的训练流程.我们先分别用基于专家知识和统计预处理过的少量带标签URL 数据训练两个初始分类器,用这两个初始分类器对剩余的无标签训练集进行预测,设定预测结果良性为正例,恶意为反例.对于同一无标签训练集中的某条URL,只有两个分类器给出的预测结果相同才会通过第一轮筛选,预测结果不相同则将该URL 重新放入无标签训练集中等待下一轮预测.

在第二轮筛选中,会将每条数据的两个分类器预测结果置信度求和,以求出的置信度和作为标准由高到低排序,且正例与反例数据分开处理.本文方法在训练开始前会定义每轮挑选的正例数p和反例数n,即选出置信度和前p名的正例和前n名的反例.将选出的共p+n个数据以分类器预测结果打上伪标签,加入有标签训练集.应用这两个新训练集重新训练生成两个分类器,即代表完成一轮类协同训练.

以上步骤循环执行,直至某一轮训练中两个分类器共同判断的正例个数不足p个或者反例个数不足n个,则跳出训练循环.该阶段无标签训练集中的数据量较少,若通过改变p和n的值继续训练,则后续两个分类器的相同预测结果会不断减少,导致每一轮都需要修改p与n的值,降低了训练效率,且由于每一轮打上伪标签的数据过少而使模型训练效果变化不明显.基于以上原因,本文提出在跳出原有循环后,以协同训练算法继续工作,重新设定一个后续不再改变且数值更小的p与n,直到所有的训练集都被打上伪标签为止.基于上述流程,算法1 中给出了算法实现.

图1 本文方法工作流

?

∪(Djp∪Djn);19.Dj l=Djl 20.end for 21.end if 22.end while q

提供的有标签数据量越多,则两个初始分类器URL 恶意与否的区分能力越强.这对算法执行的影响是,在整体数据集数量相同的情况下,初始分类器性能强代表判定URL 类型正确的可能性更大,则设置的每轮挑选正例数p与反例数n可相对较大,整体的训练轮数较少.初始分类器弱则相反.

2.2 数据预处理与两个初始分类器训练

本文设计构建两种视图用于分类器训练,分别基于专家知识和统计.在构建视图时,若生成的视图不够充分,学习过程会受到标记噪声和采样偏差的制约,仅以学习器相互提供伪标记样本这种方式很难学得近似最优分类器.Wang 和Zhou[36]对此分析指出,分类器在提供预测结果之外,还可提供对预测结果置信度的估计,则能在一定程度上缓解标记噪声和采样偏差的制约,提升学习效果.这表明我们得到的视图即使不充分,基于分歧的半监督学习仍是可行的.

图1中两个分类器训练所需数据在预处理上并不相同.前者需要应用专家知识,通过已判别为恶意URL中的一些特殊规则来处理数据生成视图一,并训练出分类器1.基于统计的方法将结合文本处理实现,应用Doc2Vec 工具预处理数据后生成视图二,训练分类器2.由于两个分类器的预测结果要共同判断,所以原始数据应该完全相同,分别通过两种不同方式进行数据预处理,并划分为训练集和测试集,如图2所示.对于得到的每份训练集需要进行第二次划分,保留大部分没有标签的URL 条目,并将小部分人工打上标签,用于初始分类器的训练,如图3所示.

图2 基于不同方法的数据预处理

图3 训练集中的数据划分

2.2.1 基于专家知识预处理URL

视图1的构建主要依据URL 中出现的特殊符号.在Canali 等的研究中发现[19],恶意URL 中的特殊符号数量普遍多于正常URL,以此为基础,本文设计基于专家知识进行数据预处理后的特征由3 部分组成.URL与普通的英文字符串有所不同,字符之间并非完全独立,且其中会存在一些特殊字符.某些特殊字符在正常请求的URL 中也会出现,但通常占据字符数少,所以可以通过观察后从中选择有代表性的特殊字符作为第一部分特征.另一些特殊字符或关键词在正常的URL中不会出现,一旦检测发现则可以判断为恶意URL,这些特殊字符或关键词是特征的重要组成部分.通过观察发现恶意URL 的字符数在整体上要多于正常的URL 字符数,所以URL 的总字符数将被作为最后一部分特征.

结合参考资料与所用数据集URL 条目的特点,最终确定作为特征的特殊符号与关键词为:“#”、“%”、“&”、“=”、“+”、“-”、“_”、“*”、“.”、“or”、“NULL”,计算每个URL 条目对应特殊符号或者关键词的字符数,加上URL 的总字符数构成一共12 个特征,完成第一类数据预处理.

2.2.2 使用Doc2Vec 预处理URL

视图2的构建思想是将URL 作为文本,通过文本处理器实现向量化.Ma 等[37]提出利用URL 的词汇和主机信息特征训练分类器,可以更快适应恶意URL不断变化的新特征.徐冬冬等[38]利用TF-IDF 将URL作为文本处理实现向量化,并以此训练模型来检测SQL 注入攻击.这两篇文献说明了将URL 作为文本处理的可行性.

文本处理的方法很多,表2给出了目前常用方法的对比.目前通常使用bag-of-words、average word vectors、TF-IDF、Word2Vec 等方式把数据投影到向量空间中.Bag-of-words 没有考虑词序(word order),且忽略了单词的语义信息;average word vectors 对句子中的所有词向量取平均,但也没有考虑到单词的顺序;TF-IDF 是一种加权技术,采用统计方法,根据字词在文本中出现的次数和在整个语料中出现的文档频率来计算重要程度,能过滤掉一些常见却无关紧要的词语,保留影响整个文本的重要词语,但依然没有考虑到词的顺序;Word2Vec 可以通过训练把对文本内容的处理简化为K维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度.在获得词向量后,对词向量进行平均处理,最终得到句子向量.Word2Vec考虑了词序,但忽视了上下文的联系,没有对单词的顺序进行特殊处理,在面对长段落时效果并不理想.恶意URL 普遍较长,只用Word2Vec 的方式来处理并不理想.

表2 多种文本处理方式的对比

为了更少损失文本中的重要信息,本文中将应用Doc2Vec 实现URL 作为文本的处理.Doc2Vec 是Word2Vec 的拓展,目前在情感分析等问题上有着广泛应用.Doc2Vec 不但生成词向量,每个句子同样被映射到向量空间中,可以用矩阵的一列来表示.句向量能和词向量级联或者求平均得到特征,预测句子中的下一个单词,这实现了上下文的联系.Doc2Vec 考虑了文本的词频、语义和语序,还能保留上下文关联信息[39-42].我们可将URL 作为附带情感信息的文本处理,利用Doc2Vec 进行数据处理.

首先,对URL 条目进行分词,Doc2Vec 会把URL每个被分出的词与句都映射到向量空间,将上下文的词向量与句向量级联或者求平均得到特征,用于预测URL 中下一个词.给定如下训练序列,目标函数是:

其中,w代表着URL 中的词与句.URL 中的下一个词存在多种可能,即这是一个多分类问题.我们希望可能性大的词能经常取到,但可能性小的偶尔也可以被选取,所以分类器最后一层使用Softmax 函数来给出各种可能性的评估,计算公式为:

每一个yi可以理解为预测出每个类别i的概率.在该任务中,每个词或句可以看成一个类别.计算的公式为:

其中,U,b是Softmax 函数中的参数,h由从W提取的词向量与句向量的级联或平均构成[41].

Doc2Vec 中有PV-DM 和PV-DBOW 两种语言模型[43,44].对比两种语言模型,PV-DM 预测行为的次数跟整个文本的词句数相近,时间复杂度低,速度快.PVDBOW 则是通过更多的时间、计算开销来生成更精准的向量.本文设计的方法基于半监督思想,初始带标签的数据量基数小,应用PV-DBOW 开销并不大.且由于初始数据量少,若是用PV-DM 会降低初始分类器的预测准确度,在后续多轮学习中这一影响会被放大.综上两点考虑,选择PV-DBOW 来处理向量.

3 实验与分析

3.1 数据处理

本次仿真实验所使用的数据集为西班牙国家研究委员会开发的CSIC 2012.该数据集由Paros 和W3AF等工具生成,异常请求包括SQL 注入、缓冲区溢出、CRLF 注入、XSS、SSI 等,涵盖的类别全面,且使用的所有参数数据都从真实数据库中提取,含有大量实际攻击数据.CSIC 2012 本身是针对Web 攻击检测而诞生的,只需要对该数据集进行一定的处理就能够较好满足恶意URL 检测仿真实验的需求.

实验需要提取数据集中的URL 部分,保留其路径与参数信息.通过去重、清洗等步骤保留下20 441 条URLs 用于本次实验,划分为训练集以及测试集,具体的组成情况如表3所示.

表3 数据集划分与组成

分类器训练分为两部分,第一部分基于有监督学习,用全部打标签的训练集训练分类器.第二部分基于少量有标签与大量无标签训练集进行的半监督学习.半监督训练中包含自训练、协同训练以及本文的设计方法,目的是进行更全面的分类器性能对比,分析本文提出方法的可行性以及优势.为了控制变量,所有方法的训练集URL 条目相同,且全部采用训练量小且训练速度快的逻辑回归二分类算法作为基算法.

本次仿真实验中,得到的所有数据本身已有标签.如表4所示,有监督学习的训练集保留全部标签,即有标签数据量为15 000,而半监督学习初始只保留100个有标签数据.

表4 不同训练方法的打标签数据量统计

对于有监督学习,用2 种不同预处理得到的训练集训练至收敛,最终得到两个分类器.对于3 个不同的半监督学习算法,模型训练将进行多轮,每次有标签数据集更新后需重新训练,且每轮都需要将分类器训练至收敛,直至所有的无标签数据被打上伪标签且被用于最终的分类器训练,每种方法同样会得到两个不同的分类器.4 种方法全部训练完成后,进行分类器测试,根据不同的评估指标对比性能.

3.2 分类器评价标准

对于每个待检测的URL,分类器最终可能产生4 种不同的结果,本实验中这4 种情况分别解释为:

(1)TP(True Positive):恶意URL 样本,且模型预测结果为恶意;

(2)TN(True Negative):正常URL 样本,且模型预测结果为正常;

(3)FP(False Positive):正常URL 样本,模型预测结果为恶意;

(4)FN(False Negative):恶意URL 样本,模型预测结果为正常.

基于以上4 种可能情况,对于分类器的性能评判引入了精准度、F1、AUC 和KS4 个指标,精准度和F1 主要判断训练完成的分类器预测结果的准确性,AUC和KS主要判断分类器对于URL 是否恶意的区分能力强弱.

精准度即精确率,在本实验中表示正确判断为恶意的URL 样本占全部判断为恶意样本的比例:

F1 值是Precision和Recall的调和平均数.因为Precision和Recall有时候会出现矛盾,所以需要对它们进行综合考虑:

AUC值是ROC 曲线下方的面积.ROC 曲线绘制的横坐标是FPR,而纵坐标是TPR.当TPR越大,而TPR越小时,说明分类结果是较好的.TPR与FPR的计算如式(7)、式(8)所示.

KS值源自KS曲线,同样反应分类器的划分能力,不同的是KS曲线采取了另一个视角展示模型功效.KS曲线是将概率从小到大进行排序,取10%的值为阈值,同理将10%×k(k=1,···,9)处值作为阈值,计算不同的FPR和TPR,以10%×k(k=1,···,9)为横坐标,同时分别以TPR和FPR为纵坐标画出两条曲线.两条曲线之间最远的距离就是KS值,而此处对应的阈值,就是划分模型最优异的阈值.

精准度是本次实验中最重要的指标.我们的目标并不是训练出一个能检测出所有恶意URL 的分类器,而是希望能高效、低成本的部署分类器来一定程度上减少恶意URL 带来的损失,且分类器不会有过多的误报而降低可用性,即得到精准度越高越好.当分类器精准度相近时,可综合考虑F1、AUC、KS3 个指标来判断分类器性能的优劣.

3.3 实验结果与对比分析

4种不同训练方法最终分别得到的2 个分类器用设定的实验指标进行对比,结果如表5和表6所示.

表5 分类器1 在4 种不同训练方法下的结果

表6 分类器2 在4 种不同训练方法下的结果

表5显示,对于分类器1,通过本文方法能够得到的精准度明显高于自训练,且略高于有监督学习以及协同训练,说明本文方法得到的分类器1 有最低的误报率.再比较F1、AUC、KS值,可见本文方法在该3 项指标的表现上虽稍低于有监督学习,但在半监督学习中数值与其它2 种方法得到的分类器1 相近.

表6显示4 种不同方法得到的分类器2 的精准度相近,综合比较下有监督学习的F1、AUC、KS3 个评估指标最高,本文方法4 项指标与其接近并稍高于自训练与协同训练.

综合表5与表6,可以分析出本文方法在所用有标签数据远少于有监督学习的情况下得到的2 个分类器4 项指标与有监督学习所得分类器相近,精准度更是分别达到了99.42%与95.23%,即误报率在4 种方式中最低,满足恶意URL 检测应用中的低误报率要求.通过其它3 项指标的对比可知本文方法所的分类器在低误报的同时,保证了对URL 良性或恶意的区分能力.

通过表5和表6的对比我们定义分类器1 为强分类器,分类器2 为弱分类器.在协同训练中由于每轮2 个分类器所新增的伪标签数据来自另一分类器的预测,则可能导致弱分类器的过多错误预测对强分类器的性能产生负面影响.如图4~图7所示,在协同训练的执行过程中强分类器的精准度会有较大起伏,这表明分类器性能在训练过程中的不稳定性,对最终的分类器性能产生较大影响.而本文方法基于共同判断,强分类器每轮新增的伪标签数据依然全部来自自身预测,虽然存在因为与弱分类器的判断结果不同而未选择少量高置信度数据的情况,但却降低了受到弱分类器影响的可能.从图中可以看到本文方法中强分类器的精确度曲线虽也有起伏,但相对平稳,且整体呈上升趋势.综上得出,本文方法相较于协同训练牺牲了一定的性能提升速率得到了更高的稳定性.

图4 分类器1 精准度变化趋势图

图5 分类器1 F1 值变化趋势图

图6 分类器1 AUC 值变化趋势图

图7 分类器1 KS 值变化趋势图

4 总结

本文恶意URL 检测方法结合了特征与文本处理预处理数据,并对协同训练算法进行了改进,仅用0.67%有标签数据训练出的两个分类器预测精准度分别达到99.42%与95.23%,低误报率使得该方法训练得到的检测模型有较高的实用性.这种方式在现实应用中大幅度节约了人为打标签的成本,减少了时间开销,且检测效果接近有监督学习得到的分类器,提供了有效应对新型恶意URL 的方案.未来的工作将考虑如何把这种半监督思想应用于恶意URL 的在线学习中,在节约开销的同时保证检测模型的定时更新.

猜你喜欢

精准度分类器视图
少样本条件下基于K-最近邻及多分类器协同的样本扩增分类
学贯中西(6):阐述ML分类器的工作流程
基于朴素Bayes组合的简易集成分类器①
让党建活动更加有“味”——礼泉县增强“两新”党建精准度
基于AdaBoost算法的在线连续极限学习机集成算法
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
《投影与视图》单元测试题
把脉培训农民需求面 提高农业培训精准度
Django 框架中通用类视图的用法