識別網絡爬蟲的策略分析
一、網絡爬蟲
爬蟲(crawler)也可以被稱為spider和robot,通常是指對目標網站進行自動化瀏覽的腳本或者程序,包括使用requests庫編寫腳本等。隨著互聯網的不斷發展,網絡爬蟲愈發常見,并占用了大量的網絡資源。由爬蟲產生的網絡流量占總流量的37.2%,其中由惡意爬蟲產生的流量約占65%[1]。如何在網絡流量中識別爬蟲,是判斷爬蟲行為意圖的前提,常見的使用爬蟲的場景包括:搜索引擎等使用爬蟲爬取網站上的信息,研究機構使用爬蟲搜集數據,以及攻擊者使用爬蟲搜集用戶信息、識別軟件后門等。
針對網絡爬蟲,目前常用的方法包括在服務器上的robots.txt文件中進行適當的配置,將用戶代理列入白名單等,這些操作可以檢測和阻止一些低級別的惡意爬蟲。然而,高級和復雜的網絡爬蟲仍然難以檢測,因為它們通常會偽裝成合法的爬蟲或正常用戶。此外,運營部門需要投入較多的時間和資源來收集和分析網絡流量記錄報告,以發現隱藏的網絡爬蟲的痕跡。網絡爬蟲通常會觸發大量告警,給安全運營人員帶來了較大的數據處理壓力。此外,部分惡意攻擊者也會使用爬蟲來收集信息,因此從海量的告警中,識別出網絡爬蟲,并判斷其行為意圖十分重要。在安全運營場景中,如何根據安全設備產生的告警數據,設計出識別爬蟲,并判斷其行為意圖的方案,目前仍需要不斷地探索以及深入的思考。
在往期內容中,筆者已經介紹了Aristaeus平臺使用瀏覽器指紋、TLS指紋和IP行為分析等方式識別爬蟲的行為意圖的工作[2],由于Aristaeus平臺使用的域名在實驗前均未注冊使用過,因此這一工作中采集到的流量均為爬蟲,并在此基礎上對良性/惡意的爬蟲進行了區分。本文對基于web日志信息識別爬蟲以及判斷其行為意圖的研究進行總結分析[3],包括常見的判斷爬蟲的方法,以及機器學習、深度學習等方法識別爬蟲,以及各種識別爬蟲行為意圖的方法。
二、識別網絡爬蟲的常見方法
常用的判定爬蟲的方法包括檢查其HTTP協議頭的User-agent字段,這一字段包含用戶訪問時所使用的操作系統及版本、瀏覽器類型及版本等標識信息。如果該字段中表明為瀏覽器等使用的爬蟲,使用DNS正向和反向查找的方法可以確定發起請求的IP地址是否與其聲明的一致,則可以將其進行判別。一個IP地址可能使用不同的用戶代理或者不同的自動化工具生成HTTP請求頭,這一現象可能是良性爬蟲使用NAT或者代理造成的,但也可能是惡意爬蟲在進行欺騙行為,包括在User-agent字段中更改操作系統、瀏覽器版本等[4],例如筆者在日常告警數據中觀察到User-Agent字段存在
“User-Agent: Mozilla/5.0+(compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html) Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)”
這類情況。目前也有許多開源的項目使用上述方法檢測網絡爬蟲,例如CrawlerDetect 就是github上的一個開源項目[5],通過User-Agent和 http_from 字段檢測爬蟲,目前能夠檢測到 1,000 種網絡爬蟲。
由于上述方法只能判斷一部分網絡爬蟲,在安全運營場景中,對于其余無法識別的爬蟲,可以基于HTTP請求的速率、訪問量、請求方法、請求文件大小等行為特征,設計算法進行識別。由合法機構運行的網絡爬蟲,包括搜索引擎和研究機構等,通常不會造成網絡的阻塞。惡意的網絡爬蟲主要是在機器上運行的腳本編程,通常具有較高的 HTTP 請求率,且對URL訪問量很大。基于網絡爬蟲的這一特點,可以提取各個IP地址發出HTTP請求的速率、以及其URL的訪問量作為特征。由于爬蟲的主要目的是從網站下載信息,所以較多地使用GET方法,而不是使用POST方法進行上傳操作。此外,爬蟲通常需要在嘗試爬取文件之前確定文件的類型,所以與正常瀏覽相比,可能會使用更多的HEAD方法[4]。通過統計分析各個IP地址的HTTP請求中各類方法所占比例,可以提取出HTTP請求方法的分布特征。
通常網絡爬蟲對特定文件類型的請求更多,例如較多地請求 .html文件,而對 .jpeg等文件類型的請求較少。爬蟲通常會進行策略優化,以實現在最短的時間內將爬取效率最大化,往往會跳過大文件而去尋找較小的文件,所以HTTP的 GET方法可能會返回更多的小文件。如果某些被爬取的URL需要進一步驗證,爬蟲的請求將被定向到這些驗證頁面,因此會產生3XX 或 4XX 的 HTTP 請求返回碼[4]。通過統計分析各個IP地址請求的文件類型、大小的分布,以及響應碼的分布,可以提取出描述請求文件和響應特征,對應于告警信息中的URI,content_length,q_body和r-body等字段。
Lagopoulos等人提出了一種用于網絡機器人檢測的語義方法[6],這一方法主要是基于以人為主體的網絡用戶通常對特定主題感興趣,而爬蟲則是隨機地在網絡上爬行的假設,設計出了一套檢測方法。這一工作從會話中提取的典型特征包括:
請求總數:請求的數量。
會話持續時間:第一個請求和最后一個請求之間經過的總時間
平均時間:兩個連續請求之間的平均時間。
標準偏差時間:兩個連續請求之間時間的標準偏差。
重復請求:使用與以前相同的HTTP方法請求已經訪問過的頁面。
HTTP請求:四個特性,每個特性包含與以下HTTP響應代碼之一相關聯的請求的百分比:成功(2xx)、重定向(3xx)、客戶機錯誤(4xx)和服務器錯誤(5xx)。
特定類型請求:特定類型的請求占所有請求數的百分比,這一特征在不同的應用程序中表現不同。
除了上述特征外,這一工作從會話中提取到了一部分語義特征:包括主題總數、獨特主題、頁面相似度、頁面的語義差異等,并使用了四種不同的模型,包括使用RBF的SVM,梯度增強模型,多層感知器和極端梯度增強來測試檢測結果。從不同特征集上的實驗結果可以看出,RBF在語義特征上取得了最好的性能,GB在簡單典型特征上取得了最好的性能,GB在典型特征和語義特征的結合上也取得了最好的性能。
此外,Wan等人在2019年提出了一種名為PathMarker的反爬蟲技術,可以通過檢測網頁或請求之間的關系來檢測分布式爬蟲[7]。在這一方法中,通過向URL添加標記來跟蹤訪問該URL之前的頁面,并識別訪問該URL的用戶。根據URL訪問路徑和訪問時間的不同模式,使用支持向量機模型來區分惡意網絡爬蟲和普通用戶。實驗結果表明,該系統能夠成功識別96.74%的爬蟲長會話和96.43%的普通用戶長會話。PathMarker的體系結構如圖1所示,最后使用自動化的公共圖靈測試(CAPTCHA)實時地識別爬蟲和普通用戶。
圖1 PathMarker的體系架構
上述兩個工作均引入了語義內容作為檢測爬蟲的特征之一,其核心思想在于普通用戶和爬蟲請求網頁的主題不同。基于這一結果,可以使用doc2vec 和 word2vec替換LDA,以更好地表示會話中訪問內容的語義[6]。
三、識別爬蟲的行為意圖
匹配黑名單是常用的識別惡意爬蟲的方式,然而在目前觀測到的攻擊中,大多數惡意IP都是被感染的個人設備,且爬蟲經常會切換新的IP地址,多數IP的生存周期都不超過一天,這些操作都可以避免被黑名單過濾。例如,在Aristaeus平臺監測到的發出惡意請求的IP地址中,只有13%出現在當前流行的惡意IP黑名單中,這表明黑名單對惡意爬蟲的IP地址覆蓋率較低[2]。此外,還可以根據訪問行為是否符合robots協議來判斷是否為惡意爬蟲。通常每個網站都會設置robots.txt,內容包含不要訪問某些文件夾或文件,或限制爬蟲訪問網站的頻率。通常我們認為惡意爬蟲不會遵守robots協議,并且會使用robots.txt來識別他們可能忽略的站點,這一行為模式可以用于識別惡意爬蟲。然而,在Aristaeus平臺的研究中,并未發現爬蟲發出的請求違背robots協議的現象[2],這表明爬蟲采取的策略中已明確避免出現上述行為,所以這類方式在實際應用中可能難以有效地識別爬蟲。
基于這一實際情況,采用更加細粒度的方式描述爬蟲行為,并提取相應的行為特征是后續識別爬蟲行為意圖的解決方向。例如,良性的爬蟲不會發送未經請求的POST或利用漏洞進行攻擊,與之相反,惡意爬蟲則會向身份驗證端點發送未經請求的POST或無效的請求,可以視為偵察行為。爬蟲請求中是否存在欺騙的行為也可以用于判斷其意圖,例如構建wget、curl、Chrome等工具的TLS指紋庫,通過將請求中聲明的用戶代理與其TLS指紋進行匹配[2],可以檢測出進行身份欺瞞的爬蟲,并在后續的分析中進一步分析其行為特征。
四、結論
通過使用User-Agent字段及DNS正方向查詢可以初步識別常見搜索引擎的爬蟲,基于IP地址發出HTTP請求的行為特征,并引入對請求行為的語義特征描述等,可以在剩余告警信息中檢測出使用腳本得到的爬蟲。隨著爬蟲策略的優化更新,使用靜態黑名單過濾或判斷爬蟲是否遵守robots協議,通常很難達到較好的效果。如果需要進一步辨別爬蟲的行為意圖,可以通過建立構建爬蟲程序的指紋庫,判斷爬蟲的真實身份是否與其聲明一致。針對IP的請求內容,構建描述是否對web應用程序進行指紋識別、是否在掃描可能存在的敏感文件等指紋庫,可以更加精確地檢測惡意爬蟲。在后續的研究工作中,筆者希望通過將上述檢測方法付諸實踐,基于告警信息對爬蟲進行檢測,并深入分析爬蟲的行為意圖,進而輔助安全運營人員研判。
審核編輯:湯梓紅
-
服務器
+關注
關注
12文章
9308瀏覽量
86071 -
網絡爬蟲
+關注
關注
1文章
52瀏覽量
8722
發布評論請先 登錄
相關推薦
評論