張培
摘要:隨著網(wǎng)頁被植入暗鏈的網(wǎng)絡(luò)安全事件不斷增加,傳統(tǒng)基于規(guī)則檢測暗鏈的規(guī)則庫覆蓋不全面、低檢出率等問題更加凸顯。設(shè)計一種基于Scrapy和LR分類器的暗鏈檢測方法,通過Scrapy爬取目標(biāo)網(wǎng)頁,利用分類器模型檢測是否植入暗鏈,檢測結(jié)果用來擴(kuò)充數(shù)據(jù)集,迭代更新分類器模型。模型訓(xùn)練中利用網(wǎng)格搜索與交叉驗(yàn)證選擇最優(yōu)超參數(shù),最優(yōu)模型的f1分?jǐn)?shù)達(dá)到0.956。此外隨著數(shù)據(jù)集的擴(kuò)充,測試集的暗鏈檢測召回率及f1分?jǐn)?shù)逐漸提高。
關(guān)鍵詞:暗鏈;爬蟲;Scrapy;LR分類器;sklearn
中圖分類號:TP393.08? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2021)17-0236-03
開放科學(xué)(資源服務(wù))標(biāo)識碼(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 背景
國家互聯(lián)網(wǎng)應(yīng)急中心編寫的《2019年中國互聯(lián)網(wǎng)網(wǎng)絡(luò)安全報告》中指出2019年我國境內(nèi)被篡改的網(wǎng)站數(shù)量為185573個,其中暗鏈超過50%[1]。暗鏈?zhǔn)蔷W(wǎng)頁里一種隱藏的鏈接,常被黑帽用于提升SEO(搜索引擎優(yōu)化)權(quán)重,技術(shù)上通常利用網(wǎng)站的漏洞或后門植入賭博彩票、淫穢色情、游戲私服、非法辦證、虛假醫(yī)療等黑灰色非法產(chǎn)業(yè)的網(wǎng)站鏈接。網(wǎng)站被植入暗鏈會引起瀏覽器風(fēng)險提示、搜索引擎懲罰、用戶被欺騙等后果,甚至?xí)簧霞壊块T通報,很大程度上影響單位形象導(dǎo)致信譽(yù)受損。
面對網(wǎng)站被偷偷植入暗鏈的問題,通過定期網(wǎng)頁爬蟲主動發(fā)現(xiàn)并分析可有效減少暗鏈數(shù)目,避免不必要的損失。爬蟲是一種可以自動、高效地抓取海量網(wǎng)頁用來分析、挖掘的技術(shù),市場上有多種優(yōu)秀爬蟲框架(如Scrapy)可供工作中使用[2-3]。通常我們可以借助規(guī)則庫、關(guān)鍵字匹配等傳統(tǒng)方法檢測網(wǎng)頁被植入暗鏈[4-5],但隨著植入暗鏈的網(wǎng)頁數(shù)量的日漸增多、植入手段更加豐富,傳統(tǒng)方法存在的特征覆蓋不全面、特征庫無法及時更新、檢出率低等問題更加凸顯。
本文旨在設(shè)計與實(shí)現(xiàn)一種通過Scrapy爬取待檢測的目標(biāo)網(wǎng)頁、然后利用LR分類器識別是否植入暗鏈的檢測方法。此外,檢測結(jié)果用來擴(kuò)充數(shù)據(jù)集,迭代更新分類器,使用網(wǎng)格搜索與交叉驗(yàn)證選擇最優(yōu)參數(shù),提高檢出率。
2 方法設(shè)計
本文使用Scrapy爬蟲框架編寫頁面爬蟲程序,定期爬取目標(biāo)域名下的全量網(wǎng)頁。利用訓(xùn)練好的LR分類器模型進(jìn)行預(yù)測抓取到的網(wǎng)頁是否被植入暗鏈,將標(biāo)記為存在暗鏈的數(shù)據(jù)追加到分類器模型訓(xùn)練中用到的數(shù)據(jù)集,重新訓(xùn)練模型,具體設(shè)計流程如圖1所示。
2.1 LR分類器模型
暗鏈檢測本質(zhì)上就是判斷一個網(wǎng)頁存在暗鏈還是不存在暗鏈,是一個典型的二分類問題。本文選擇機(jī)器學(xué)習(xí)中常見的二分類算法-邏輯回歸(LR,Logistic Regression)[6-7]訓(xùn)練分類器,邏輯回歸以概率的形式輸出結(jié)果,可解釋性強(qiáng)、訓(xùn)練快。這里利用機(jī)器學(xué)習(xí)工具包sklearn[8]完成LR分類器模型的訓(xùn)練與應(yīng)用。
2.1.1 暗鏈特征提取
通過篡改網(wǎng)頁源碼中的HTML屬性、CSS樣式、JavaScript腳本可以達(dá)到部分鏈接“看不見”的效果,本文參考文獻(xiàn)[9]中提出的源碼可疑域、敏感域,借助xpath解析庫提取了可疑域及敏感域中的a標(biāo)簽主要文本特征(href、text/title),表1列舉了常見a標(biāo)簽的xpath提取暗鏈的解析表達(dá)式。
2.1.2 特征工程
對2.1.1提取的文本特征進(jìn)行特征值化,考慮中文文本語句無用詞、標(biāo)點(diǎn)符號多的情況,這里利用分詞工具jieba將暗鏈的文本特征轉(zhuǎn)換成topK個詞特征,這里設(shè)置K為60。
利用常用的TFIDF(Term Frequency/Inverse Document Frequency)算法進(jìn)行向量化,該算法綜合考慮詞在單個樣本中的存在頻率和在整個數(shù)據(jù)集中的存在頻率,適當(dāng)?shù)貙δ承┏霈F(xiàn)頻率低的關(guān)鍵詞進(jìn)行加權(quán)。實(shí)際環(huán)境中網(wǎng)頁類型復(fù)雜、鏈接數(shù)目多,使用TFIDF進(jìn)行特征值化后的特征維度成千上萬,這里使用PCA(Principle Component Analysis)技術(shù)在解決維度泛濫的情況下保留大部分的特征信息,這里選擇保留95%,圖2給出了特征工程的偽代碼。
2.1.3 訓(xùn)練準(zhǔn)備
由于實(shí)際我們能準(zhǔn)備的暗鏈語料很少,但希望得到更高檢出率的分類器模型,這里使用交叉驗(yàn)證將訓(xùn)練數(shù)據(jù)分成為訓(xùn)練集和驗(yàn)證集,利用驗(yàn)證集在訓(xùn)練過程中及時評估模型結(jié)果選擇合理的參數(shù)。此外,使用網(wǎng)格搜索技術(shù)提高模型效果,即對部分超參數(shù)取不同值進(jìn)行排列組合,最終窮舉得到一個最優(yōu)的模型超參數(shù)。
2.2 LR分類器模型
Scrapy是一個代碼結(jié)構(gòu)簡單、開發(fā)速度快的異步網(wǎng)絡(luò)爬蟲框架,通過Scrapy Engine完成了Spider(爬蟲)、Scheduler(調(diào)度器)、Downloader(下載器)、Item Pipeline(管道)等模塊之間的信號、數(shù)據(jù)傳遞。
在自定義的Spider模塊中定義入口待爬隊列start_urls,例如某高校全部子域名的首頁。此外,明確待檢測的目標(biāo)域名列表,這里要求待爬取頁面的域名或Referer的域名在目標(biāo)域名列表中。
針對爬取的網(wǎng)頁響應(yīng)體Response,我們主要進(jìn)行以下三類處理:
使用LR分類器模型判斷是否植入暗鏈。若存在暗鏈,將referer、url、response等信息生成Item,提交給Item Pipeline處理,存入數(shù)據(jù)庫/文件中,用于擴(kuò)增數(shù)據(jù)集。
當(dāng)前爬取頁面的域名在目標(biāo)域名列表中,構(gòu)建Selector(選擇器)解析對象,提取a標(biāo)簽中的url,若url的域名不在目標(biāo)域名列表中,則構(gòu)建Request加入Scheduler的url隊列。
當(dāng)前爬取頁面的域名在目標(biāo)域名列表中,使用正則表達(dá)式'((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的域名不在目標(biāo)域名列表中,則構(gòu)建Request加入Scheduler的url隊列。
實(shí)際爬蟲過程中,我們會遇到waf攔截、安全狗、IP限制、等反爬手段,通常我們可以指定User agent、IP代理、對接Selenium等方式避免。此外過程中還存在下載超時、編碼異常、url重定向等問題,圖3給出了Scrapy爬蟲中的一些應(yīng)對配置。
3 方法評估
本文數(shù)據(jù)集來自2017中國網(wǎng)絡(luò)安全技術(shù)對抗賽《惡意網(wǎng)頁分析》賽題,我們選擇其中417個被植入暗鏈的頁面作為反例,隨機(jī)選擇1074個正常頁面作為正例。
上文提到利用網(wǎng)格搜索技術(shù)選擇最優(yōu)超參數(shù),這里正則化項參數(shù)選擇l1、l2,優(yōu)化算法參數(shù)選擇liblinear、lbfgs、newton-cg、sag。這里我們選擇f1分?jǐn)?shù)作為評估指標(biāo),f1分?jǐn)?shù)兼顧了分類模型的精確率和召回率,結(jié)果在0和1之間,越接近1效果越好。此外我們選擇10折交叉驗(yàn)證,訓(xùn)練集中9份被用作訓(xùn)練,剩下的1份用來驗(yàn)證。表2給出了各參數(shù)下的f1分?jǐn)?shù)的平均值及標(biāo)準(zhǔn)差,可以看出正則化項選擇l1,優(yōu)化算法選擇liblinear的情況下可以得到最高為0.956的f1分?jǐn)?shù)。
現(xiàn)實(shí)工作中我們希望越多真實(shí)被植入暗鏈的頁面被檢測出來,召回率可以表示實(shí)際植入暗鏈頁面有多少被預(yù)測成反例。這里數(shù)據(jù)集按3:1劃分訓(xùn)練集和測試集,利用測試集預(yù)測模型的真實(shí)效果。圖4給出不同反例數(shù)目下的召回率及f1得分結(jié)果,隨著反例數(shù)目的增加,模型效果越來越好。這表明我們通過Scrapy爬蟲持續(xù)擴(kuò)充數(shù)據(jù)集中的反例數(shù)量,迭代訓(xùn)練新的模型,進(jìn)而會得到更高的檢出率。
4 結(jié)束語
本文基于實(shí)際工作中利用規(guī)則檢測暗鏈存在的檢出率低、規(guī)則更新不及時等問題,設(shè)計與實(shí)現(xiàn)了一種基于scrapy和LR分類器的暗鏈檢測方法。使用LR分類器模型預(yù)測scrapy爬取的目標(biāo)網(wǎng)頁,檢測結(jié)果用來擴(kuò)展數(shù)據(jù)集反例,迭代訓(xùn)練分類器。實(shí)驗(yàn)結(jié)果表明本方法可以得到較高的f1分?jǐn)?shù),且實(shí)際暗鏈檢出率在模型迭代的過程中逐漸增加。下一步的工作會進(jìn)一步豐富網(wǎng)頁的暗鏈特征提取。
參考文獻(xiàn):
[1] CNCERT.2019年中國互聯(lián)網(wǎng)網(wǎng)絡(luò)安全報告[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框架的網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)與數(shù)據(jù)抓取分析[D].長春:吉林大學(xué),2017.
[4] 杜小芳.一種快速檢測網(wǎng)頁黑鏈的方法:CN109981604A[P].2019-07-05.
[5] 邢容.基于文本識別技術(shù)的網(wǎng)頁惡意代碼檢測方法研究[D].北京:中國科學(xué)院,2012.
[6] 張蕾,崔勇,劉靜,等.機(jī)器學(xué)習(xí)在網(wǎng)絡(luò)空間安全研究中的應(yīng)用[J].計算機(jī)學(xué)報,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機(jī)器學(xué)習(xí):常用算法原理及編程實(shí)戰(zhàn)[M].北京:機(jī)械工業(yè)出版社,2018.
[9] 孟雷.多域識別構(gòu)建監(jiān)督學(xué)習(xí)模型檢測網(wǎng)頁暗鏈[J].信息安全與通信保密,2019(10):63-71.
【通聯(lián)編輯:代影】