基于Scrapy+LR分类器的暗链检测方法的设计与实现
张培
摘要:随着网页被植入暗链的网络安全事件不断增加,传统基于规则检测暗链的规则库覆盖不全面、低检出率等问题更加凸显。设计一种基于Scrapy和LR分类器的暗链检测方法,通过Scrapy爬取目标网页,利用分类器模型检测是否植入暗链,检测结果用来扩充数据集,迭代更新分类器模型。模型训练中利用网格搜索与交叉验证选择最优超参数,最优模型的f1分数达到0.956。此外随着数据集的扩充,测试集的暗链检测召回率及f1分数逐渐提高。
关键词:暗链;爬虫;Scrapy;LR分类器;sklearn
中图分类号:TP393.08? ? ? 文献标识码:A
文章编号:1009-3044(2021)17-0236-03
开放科学(资源服务)标识码(OSID):
Design and Implementation for Hidden Hyperlink Detection Based on Scrapy and LR Classifier
ZHANG Pei
(Information Center, Jiangsu University, Zhenjiang 212023, China)
Abstract: With the increasing number of cybersecurity incidents in which hidden hyperlinks are implanted into websites, the problems such as incomplete coverage and low detection of the traditional rule-based detection method have become more prominent. Design of a method based on scrapy and LR classifier, crawl the target webpage through scrapy, which use the trained classifier model to detect whether hidden hyperlinks are implanted, the detection results are used to expand the dataset and iteratively update the classifier model. In model training, grid search and cross-validation are used to select the optimal hyperparameter, and the f1 score of the optimal model can reach 0.956. In addition, with the expansion of the data set, the detection recall rate and f1 score of the test set gradually improved.
Key words: hidden hyperlink; crawler; scrapy; LR classifier; sklearn
1 背景
国家互联网应急中心编写的《2019年中国互联网网络安全报告》中指出2019年我国境内被篡改的网站数量为185573个,其中暗链超过50%[1]。暗链是网页里一种隐藏的链接,常被黑帽用于提升SEO(搜索引擎优化)权重,技术上通常利用网站的漏洞或后门植入赌博彩票、淫秽色情、游戏私服、非法办证、虚假医疗等黑灰色非法产业的网站链接。网站被植入暗链会引起浏览器风险提示、搜索引擎惩罚、用户被欺骗等后果,甚至会被上级部门通报,很大程度上影响单位形象导致信誉受损。
面对网站被偷偷植入暗链的问题,通过定期网页爬虫主动发现并分析可有效减少暗链数目,避免不必要的损失。爬虫是一种可以自动、高效地抓取海量网页用来分析、挖掘的技术,市场上有多种优秀爬虫框架(如Scrapy)可供工作中使用[2-3]。通常我们可以借助规则库、关键字匹配等传统方法检测网页被植入暗链[4-5],但随着植入暗链的网页数量的日渐增多、植入手段更加丰富,传统方法存在的特征覆盖不全面、特征库无法及时更新、检出率低等问题更加凸显。
本文旨在设计与实现一种通过Scrapy爬取待检测的目标网页、然后利用LR分类器识别是否植入暗鏈的检测方法。此外,检测结果用来扩充数据集,迭代更新分类器,使用网格搜索与交叉验证选择最优参数,提高检出率。
2 方法设计
本文使用Scrapy爬虫框架编写页面爬虫程序,定期爬取目标域名下的全量网页。利用训练好的LR分类器模型进行预测抓取到的网页是否被植入暗链,将标记为存在暗链的数据追加到分类器模型训练中用到的数据集,重新训练模型,具体设计流程如图1所示。
2.1 LR分类器模型
暗链检测本质上就是判断一个网页存在暗链还是不存在暗链,是一个典型的二分类问题。本文选择机器学习中常见的二分类算法-逻辑回归(LR,Logistic Regression)[6-7]训练分类器,逻辑回归以概率的形式输出结果,可解释性强、训练快。这里利用机器学习工具包sklearn[8]完成LR分类器模型的训练与应用。
2.1.1 暗链特征提取
通过篡改网页源码中的HTML属性、CSS样式、JavaScript脚本可以达到部分链接“看不见”的效果,本文参考文献[9]中提出的源码可疑域、敏感域,借助xpath解析库提取了可疑域及敏感域中的a标签主要文本特征(href、text/title),表1列举了常见a标签的xpath提取暗链的解析表达式。
2.1.2 特征工程
对2.1.1提取的文本特征进行特征值化,考虑中文文本语句无用词、标点符号多的情况,这里利用分词工具jieba将暗链的文本特征转换成topK个词特征,这里设置K为60。
利用常用的TFIDF(Term Frequency/Inverse Document Frequency)算法进行向量化,该算法综合考虑词在单个样本中的存在頻率和在整个数据集中的存在频率,适当地对某些出现频率低的关键词进行加权。实际环境中网页类型复杂、链接数目多,使用TFIDF进行特征值化后的特征维度成千上万,这里使用PCA(Principle Component Analysis)技术在解决维度泛滥的情况下保留大部分的特征信息,这里选择保留95%,图2给出了特征工程的伪代码。
2.1.3 训练准备
由于实际我们能准备的暗链语料很少,但希望得到更高检出率的分类器模型,这里使用交叉验证将训练数据分成为训练集和验证集,利用验证集在训练过程中及时评估模型结果选择合理的参数。此外,使用网格搜索技术提高模型效果,即对部分超参数取不同值进行排列组合,最终穷举得到一个最优的模型超参数。
2.2 LR分类器模型
Scrapy是一个代码结构简单、开发速度快的异步网络爬虫框架,通过Scrapy Engine完成了Spider(爬虫)、Scheduler(调度器)、Downloader(下载器)、Item Pipeline(管道)等模块之间的信号、数据传递。
在自定义的Spider模块中定义入口待爬队列start_urls,例如某高校全部子域名的首页。此外,明确待检测的目标域名列表,这里要求待爬取页面的域名或Referer的域名在目标域名列表中。
针对爬取的网页响应体Response,我们主要进行以下三类处理:
使用LR分类器模型判断是否植入暗链。若存在暗链,将referer、url、response等信息生成Item,提交给Item Pipeline处理,存入数据库/文件中,用于扩增数据集。
当前爬取页面的域名在目标域名列表中,构建Selector(选择器)解析对象,提取a标签中的url,若url的域名不在目标域名列表中,则构建Request加入Scheduler的url队列。
当前爬取页面的域名在目标域名列表中,使用正则表达式'((http(s)?:\/\/)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:[0-9]{1,5})?[-a-zA-Z0-9()@:%_\\\+\.~#?//=])'提取显示页面可见的url,若url的域名不在目标域名列表中,则构建Request加入Scheduler的url队列。
实际爬虫过程中,我们会遇到waf拦截、安全狗、IP限制、等反爬手段,通常我们可以指定User agent、IP代理、对接Selenium等方式避免。此外过程中还存在下载超时、编码异常、url重定向等问题,图3给出了Scrapy爬虫中的一些应对配置。
3 方法评估
本文数据集来自2017中国网络安全技术对抗赛《恶意网页分析》赛题,我们选择其中417个被植入暗链的页面作为反例,随机选择1074个正常页面作为正例。
上文提到利用网格搜索技术选择最优超参数,这里正则化项参数选择l1、l2,优化算法参数选择liblinear、lbfgs、newton-cg、sag。这里我们选择f1分数作为评估指标,f1分数兼顾了分类模型的精确率和召回率,结果在0和1之间,越接近1效果越好。此外我们选择10折交叉验证,训练集中9份被用作训练,剩下的1份用来验证。表2给出了各参数下的f1分数的平均值及标准差,可以看出正则化项选择l1,优化算法选择liblinear的情况下可以得到最高为0.956的f1分数。
现实工作中我们希望越多真实被植入暗链的页面被检测出来,召回率可以表示实际植入暗链页面有多少被预测成反例。这里数据集按3:1划分训练集和测试集,利用测试集预测模型的真实效果。图4给出不同反例数目下的召回率及f1得分结果,随着反例数目的增加,模型效果越来越好。这表明我们通过Scrapy爬虫持续扩充数据集中的反例数量,迭代训练新的模型,进而会得到更高的检出率。
4 结束语
本文基于实际工作中利用规则检测暗链存在的检出率低、规则更新不及时等问题,设计与实现了一种基于scrapy和LR分类器的暗链检测方法。使用LR分类器模型预测scrapy爬取的目标网页,检测结果用来扩展数据集反例,迭代训练分类器。实验结果表明本方法可以得到较高的f1分数,且实际暗链检出率在模型迭代的过程中逐渐增加。下一步的工作会进一步丰富网页的暗链特征提取。
参考文献:
[1] CNCERT.2019年中国互联网网络安全报告[EB/OL].[2020-08-11].https://www.cert.org.cn/publish/main/46/2020/20200 811124544754595627/20200811124544754595627_.html.
[2] Yin F L,He X T,Liu Z X.Research on scrapy-based distributed crawler system for crawling semi-structure information at high speed[C]//2018 IEEE 4th International Conference on Co mputer and Communications (ICCC).December 7-10,2018,Chengdu,China.IEEE,2018:1356-1359.
[3] 安子建.基于Scrapy框架的网络爬虫实现与数据抓取分析[D].长春:吉林大学,2017.
[4] 杜小芳.一种快速检测网页黑链的方法:CN109981604A[P].2019-07-05.
[5] 邢容.基于文本识别技术的网页恶意代码检测方法研究[D].北京:中国科学院,2012.
[6] 张蕾,崔勇,刘静,等.机器学习在网络空间安全研究中的应用[J].计算机学报,2018,41(9):1943-1975.
[7] Liu T,Zhang L T.Application of logistic regression in WEB vulnerability scanning[C]//2018 International Conference on Sensor Networks and Signal Processing (SNSP).October 28-31,2018,Xi'an,China.IEEE,2018:486-490.
[8] 黄永昌. scikit-learn机器学习:常用算法原理及编程实战[M].北京:机械工业出版社,2018.
[9] 孟雷.多域识别构建监督学习模型检测网页暗链[J].信息安全与通信保密,2019(10):63-71.
【通联编辑:代影】