【安全】58反抓取簡介

0x00 介紹

網絡爬蟲,常又被稱呼為Spider,網絡機器人,主要模擬網絡交互協議,長時間,大規模的獲取目標數據。

普通爬蟲會從網站的一個鏈接開始,不斷收集網頁資源,同時不斷延伸抓取新獲取的URL以及相應的資源。在對抓取目標內容結構分析的基礎上,還會有目的性更強的聚焦型爬蟲。

爬蟲對網站的抓取,最直接的影響就是增加服務器負載,影響正常業務的使用。但是僅僅限制爬蟲的抓取頻次是遠遠不夠的。更重要的是對網站資源的保護,比如房產類信息中的小區名稱、戶型、建造年代、房型圖、視頻、面積、總價、單價等。同樣的,在58招聘,黃頁,二手車等業務線中,也存在著大量可用資源。更有甚者,利用業務邏輯漏洞或系統漏洞,爬蟲也可大量獲取平臺內用戶、商戶信息,平臺信息,其間不乏敏感數據,從而導致涉及信息洩露的各種群體及法律相關事件。

0x01 搜索引擎

在網絡中實際上也會存在大量的如Google,百度,360,微軟Bing等搜索引擎的爬蟲,一般這些搜索引擎都會對請求的瀏覽器UA進行定義,如百度PC端:PC UA:

Mozilla/5.0(compatible;Baiduspider/2.0;+http://www.baidu.com/search/spider.html)

眾所周知,瀏覽器信息都可以被偽造和篡改,所以單憑UA頭信息來識別是不夠的,反查HOST是識別搜索引擎的一種方法,但由於一些搜索引擎無法查明HOST,所以單一的識別方法並不十分有效。行為類的判別方法或許將更加重要。

Robots協議

這裡順便提一句Robots協議,Robots協議(也稱為爬蟲協議、機器人協議等)的全稱是“網絡爬蟲排除標準”(Robots Exclusion Protocol)。

即使是正規的搜索引擎的爬蟲,也可能對一些網站造成負載壓力,或網站並不期望搜索引擎抓取一些頁面,這時Robots協議就會起到作用了。文件“Robots.txt”將告訴不同的爬蟲能訪問的頁面和禁止訪問的頁面,但是這個協議因為不強制爬蟲遵守,而起不到防止爬蟲的功能。

0x02 一些典型的爬取手段

在瞭解基本的爬取手段前,我們來看看,目前網絡中,哪些人是爬蟲的生產者(或搬運工)。

我們先來對他們進行一下分類:

Ø 學生,初級興趣愛好者,初級爬蟲程序員,數據分析師

Ø 數據公司

Ø 商業對手

Ø 失控的爬蟲和搜索引擎

一些愛好者或者初級爬蟲程序員,可能會通過網絡蒐集可用的腳本或者框架,其中python無疑是用的最多最廣的,並且誕生了很多優秀的庫和框架,如scrapy、BeautifulSoup 、pyquery、Mechanize等。

網絡上也存在著大量的數據公司,他們提供數據交易平臺,用戶可以購買定製數據,定製爬蟲等。


【安全】58反抓取簡介

商業競爭對手也會互相抓取對方數據,獲取對方平臺資源或為己用,或用於進行商業數據分析,相信這裡的爬蟲工程師已不再是搬運工的水平,他們有著明確的目的性和專業技能。

除了搜索引擎外,網絡上還存在著失控的爬蟲,他們可能存在於一些雲服務器上,也可能存在於被入侵的電腦,這些程序可能已無人管理,但是在持續運行著抓取程序。

下面介紹一些典型的抓取手段

設置頻率

防爬一方面是為了防止服務器的高負載,那麼那些真正想獲取網站資源的爬蟲,就不會輕易觸碰這條底線,所以設置爬蟲頻率是一個不錯的方法,爬蟲會試探網站的規則,每爬取一次數據就會設置一定的SLEEP時間,這個時間都有可能是隨機變化的,從而繞過平臺策略。不過換一個角度考慮,一天算下來,是86400秒,那麼在時間有限又不能觸碰網站策略的前提下,如何更高效的抓取數據呢?辦法應該還是挺多的,後文會略有涉及。

代理IP

因為網站的瀏覽很多情況下並不存在賬戶屬性,所以攔截爬蟲最直接的手段,就是對IP的封禁。但是爬蟲為了高效的獲取網站數據,會使用多線程,分佈式,多IP進行抓取,他們可以輕易的從網上獲取免費的代理IP,如果擔心代理IP的穩定性,可以購買付費代理IP庫,現在很多數據網站,也提供了付費的代理IP服務。

代理IP只是一種手段,其實爬蟲只要更換了IP,往往就可以繼續抓取任務。最簡單的例子比如我們在瀏覽一些網站時,可能會觸發網站的機器人挑戰,用戶在挑戰成功後(例如正確輸入了圖片驗證碼的文字,或準確的滑動了滑塊)就可以繼續瀏覽。對於爬蟲來講,這裡要突破驗證碼,在驗證碼無法突破的情況下,就需要更換IP,哪怕是重啟一下路由獲取新的IP地址。

偽造瀏覽器

部分網站會針對瀏覽器(user-agent)做爬蟲判斷,對於一些初級爬蟲,可能會存在非法的瀏覽器描述,比如python,phantomjs,pyspider等,這類UA會被直接封禁。針對瀏覽器也會有計數類策略,但因為瀏覽器信息很容易被篡改,所以只要維護一個瀏覽器庫隨機調用,就會繞過計數類策略。

還有爬蟲使用內置瀏覽器,比如一些數據公司發佈的數據採集器,八爪魚,火車頭等,這已經不是簡單的篡改瀏覽器信息,他們支持各種新的css渲染特性和js運行時語法,這種方式主要在對抗對瀏覽器特徵的檢查。

設備模擬

設備指紋作為目前反欺詐的利器,被很多企業使用,WEB端的JS或者APP端的SDK,用於唯一標識用戶設備。反抓取會利用IP結合設備指紋來制定一些策略,比如計數等。我們先不談設備指紋碰撞或者被破解的問題,單就指紋的申請,已經可以模擬真實設備信息進行批量請求,指紋入庫等待後續使用。所以單獨針對指紋的策略,也不一定有效。

破解驗證碼

一般反抓取策略的初步攔截會以人機挑戰為主,例如各種驗證碼,對於爬蟲來講,驗證碼的破解就會成為關鍵一環。根據驗證碼形態的不同,破解方式會存在人工打碼,機器算法識別,接入打碼平臺等。這個環節的對抗也是相當激烈的,每一次的驗證碼升級,都有一定的時效性,只有不斷升級挑戰方式,才能有效的對抗爬蟲。

網絡協議參數的偽造

因為爬蟲本身就是程序在模擬用戶與網站的交互,所以理論上來講,當模擬程度足夠高時,很難區分機器行為。初級爬蟲可能會忽略cookie,refer等信息,高級一點的爬蟲就會對cookie進行設置或者對refer進行偽造。

0x03 反抓取常用的對抗方法

針對一些典型的爬取方法,自然會有一些基本的對抗方法,下面簡單描述一下常用的反抓取手段:

IP

最容易想到的就是針對IP的頻率類或次數累積限制,但是針對抓取的特點,可以進一步進行細分,如結合時段,城市,網站頁面類型,訪問間隔,跨度,以及一些協議參數的變化情況等。

瀏覽器檢測

對瀏覽器描述信息的檢測是最基礎的,在此基礎上,可以進一步針對瀏覽器特性進行檢查,基於瀏覽器的 UserAgent 字段描述的瀏覽器品牌、版本型號信息,對js運行時各個原生對象的屬性及方法進行檢驗,觀察其特徵是否符合該版本的瀏覽器所應具備的特徵,如Plugin,language,webgl,hairline等。

網絡協議參數檢測

進行基本的參數檢測,如cookie,refer是否為空,是否合法,refer是否正確等。同時需要結合用戶終端進行判斷,如區分WEB,APP,移動平板;以及入口應用的特性進行判斷,如主站,微信小程序,QQ及其他入口渠道等。

驗證碼

驗證碼產品提供多種人機識別方式,包括傳統字符驗證碼,滑動拼圖驗證碼,點選驗證碼,短信驗證碼,語音驗證碼等,以及結合生物特徵的用戶鼠標、觸屏(移動端)等行為的行為驗證技術。

設備指紋

APP設備指紋SDK,用戶設備環境檢測,如是否為模擬器,是否ROOT等;M端,PC端設備指紋JS環境檢測等。

服務端檢測請求設備指紋是否合法。

APP,M,PC端設備標記,保證設備唯一性的基礎上進行如計數統計、行為分析等。

WEB端

JS埋點,JS網頁加密,JS代碼混淆等;

Ajax/Fetch異步請求,Noscript標籤的結合使用;

CSS字體庫等渲染,FONT-FACE拼湊式,BACKGROUND拼湊式,字符穿插式,偽元素隱蔽式,元素定位覆蓋模式,IFRAME異步加載,Flash、圖片或者pdf來呈現網站內容等;

假鏈接,如在網頁多處放幾個一個像素的隨機圖片名假鏈;網頁多處放幾個隨機不可見的假鏈;網頁多處放幾個隨機的前景色和背景色相同的假鏈;網頁多處放隨機的位置超出屏幕的假鏈。

因為數據平臺定向抓取會分析網站結構,所以定期更改模板算一個應對方法,其餘還有例如動態變換html標籤,網頁使用壓縮算法輸出內容,網頁內容不定時自動截斷等;

假數據,返回假數據,實際在防守的同時對抓取方的一種進攻,對抓取方恨之入骨可採用此方法,問題是可能帶來誤傷,或者當抓取方發現被無情欺騙時,激起對方的憤怒進而升級抓取手段,甚至蓄意的破壞。當然針對競品公司,應該予以無情的打擊。

行為分析

通過爬蟲與正常用戶的一些行為差別進行的分析,如:

對localStorage的訪問,一般爬蟲不存儲localStorage數據,所以每次會訪問;

正常用戶訪問會在較短時間裡完成某一時間週期的總請求數的絕大部分,映射到總用戶上,確定的一段時間裡,正常用戶訪問的總頁數會在某個量級時開始驟減;

識別通過修改參數如ID等的遍歷行為。

API防刷

其實網絡數據的交互都是通過API實現的,那麼針對API接口的一些防護措施也能有效的控制爬蟲,比如同IP/指紋對API接口頻率調用設置閾值;使用接口加密服務,多套算法隨機使用,算法週期更新等;根據API接口的深度,在觸達路徑進行數據埋點,識別請求路徑等。

賬戶

一些網站信息必須用戶登錄後才可訪問,這樣反抓取除了通用方法外,還可以結合賬戶維度制定一些策略,比如同賬戶訪問次數、頻率限制;同賬戶多設備限制;同賬戶次數累積;同賬戶多瀏覽器訪問;同賬戶訪問城市切換,訪問多業務線等。

安全畫像

安全畫像是58信息安全的一項重要服務,58自主研發的基於大數據的威脅情報系統,該服務是一個分析型安全防控管理系統,可基於風控系統實現統一的信息安全風控管理,幫助業務方實現事前的情報預警,事中的風險識別,事後的案件追溯,並與第三方數據有效集成,最終幫助業務線實現精準風險打擊和智慧運營的效果。

在反抓取對抗中,我們也使用了IP類,設備類,賬號類,手機號類等各種畫像標籤,效果顯著。

0x04 58反抓取系統概要介紹

58反抓取SCF服務,為各業務線提供反抓取能力,接入成本低,時間短,目前日均處理接近10億次請求,系統處理能力平日在每秒1W次左右,系統服務處理時間為單次0.5ms。目前已基本覆蓋58房產、招聘、黃頁、二手車;趕集房產、招聘;安居客新房、二手房等各大業務線。

58反抓取系統示意圖:


【安全】58反抓取簡介

各接入方通過SCF服務接入反抓取系統;策略管理系統為各接入方配置策略集;分析單元執行策略集,並將命中目標送至判決單元進行後續處理;通過實時監控和大數據平臺進行數據分析。

反抓取策略管理系統,是整個反抓取能力的核心,是新反抓取技術方案,新能力,新風控工具的體現,目前可實現通用策略集的批量自動化配置。

反抓取實時監控系統,通過服務調用量監控,識別風險,並對異常流量進行預警。


【安全】58反抓取簡介


風險的處罰,處罰的數據維度包括UID,cookie,IP,設備指紋等:


【安全】58反抓取簡介


處罰的攔截方式包含通過,驗證碼(圖片驗證碼、滑動驗證碼、短信驗證碼、語音驗證碼),返回假數據,攔截頁中斷操作等。


【安全】58反抓取簡介

0x05 反抓取流量分析平臺介紹

反抓取信息的重要來源,在於對流量的判斷,包括流量變化,協議特徵等。通過對流量變化趨勢,機器特徵的識別和聚類,往往可以發現現存問題,並且可以通過對個別業務線的風險識別,進而對其他業務線進行預警,達到態勢感知的效果。

基於nginx日誌,針對反抓取進行的流量分析,可分析判斷來自PC,M端,APP等惡意爬蟲、自動機、模擬器等偽造真實用戶發起的惡意機器流量;可根據惡意機器流量判斷攻擊目標,攻擊行為和攻擊趨勢,並進行惡意流量預警;可對業務方進行流量熱度排名,域名熱度排名,接口熱度排名等。

域名排名,可以瞭解當前時期域名流量熱度以及時間內流量變化情況:

【安全】58反抓取簡介

對域名下基本特徵的分析,可以識別機器行為等:

【安全】58反抓取簡介


流量離散度分析,在於判斷流量的變化程度,並與歷史情況進行比對


【安全】58反抓取簡介

同時還有對IP,UA,URL的排名和具體分析。

後續將增加更細緻的分析,更多維度的統計,並提供風險輸出能力。


0x06 結語

上文主要介紹了一些爬蟲的基本概念、爬取方法、對抗方法,以及概要介紹了58反抓取服務能力,在反爬蟲領域,能做和要做的事情還有很多。無論對於爬蟲還是反爬蟲,非常多新技術、新思路都在不斷湧現,這就要求產品、技術人員,緊跟科技發展潮流,勇於突破固有思維,進行創新,並緊密結合公司業務場景,為公司發展保駕護航。


分享到:


相關文章: