對抗模擬瀏覽器的DDoS攻擊
收藏該文基于瀏覽器的僵尸網(wǎng)絡(luò)就是DDoS世界里的T-1000s。他們之所以如此危險是因為他們就跟終結(jié)者里的反派一樣,被設(shè)計的可以適應(yīng)各種情況的攻擊。當(dāng)其他原始的網(wǎng)絡(luò)僵尸還在暴力破解你的防御的時候,基于瀏覽器的僵尸就已經(jīng)模擬真實的人類從前門進(jìn)入了。
當(dāng)你意識到情況不對時,他們已經(jīng)突破邊界,搞宕服務(wù)器,已經(jīng)無力回天了。
那么應(yīng)該怎么防御T-1000呢,怎么分辨一次訪問是來自與真實的瀏覽器還是一個基于瀏覽器的僵尸?傳統(tǒng)的過濾僵尸的策略在面對能夠保存cookie和執(zhí)行javascript的僵尸時都失效了。而不分青紅皂白地讓所有用戶都填寫驗證碼無異于自我毀滅,尤其是當(dāng)這種攻擊可能持續(xù)數(shù)個星期的時候。
為了研究防御方法,我們來看一個真實的案例:
這次攻擊是一個未知的僵尸網(wǎng)絡(luò)發(fā)起的。這些基于瀏覽器的僵尸可以保存cookie,執(zhí)行javascript。攻擊的早期我們識別出是PhantomJS無界面瀏覽器。
PhanomJS是一套開發(fā)無界面瀏覽器的工具。它提供所有瀏覽器的功能但是沒有界面,沒有按鈕,沒有地址欄。一般被用在自動化測試和網(wǎng)絡(luò)監(jiān)控上。
這次攻擊持續(xù)了150個小時以上。這個過程中,我們記錄了全球超過180000個惡意IP。高峰期每秒6000次攻擊,平均一天有690000000次以上。攻擊IP的數(shù)量和分布范圍讓我們覺得這應(yīng)該不僅僅是一個僵尸網(wǎng)絡(luò),而是可能整合了多個。下圖是攻擊ip的地理分布。

攻擊過程中我們截獲了861個不同的user-agent。攻擊者修改了頭部的結(jié)構(gòu)試圖繞過我們的防御。
下圖是攻擊最多的ip:
有趣的是攻擊者除了使用模擬瀏覽器的僵尸,還試圖模擬人類的行為來躲避基于行為檢測的安全規(guī)則。這些僵尸會先訪問不同的頁面,然后像人類那樣訪問一些隨機(jī)的頁面,最后才會聚集在一起消耗資源。
盡管基于瀏覽器的僵尸能夠突破傳統(tǒng)的過濾。但是由于它使用了一個已知的無界面瀏覽器,這樣子就可以通過我們的客戶端分類機(jī)制檢測到。
我們的客戶端分類機(jī)制基于我們已經(jīng)收集的大量信息總結(jié)出來的簽名。發(fā)生這次攻擊的時候,我們的信息庫已經(jīng)有超過10000000個簽名。每一個簽名都包括:
User-agent
IPs and ASN info
HTTP Headers
JavaScript footprint
Cookie/Protocol support variations
我們不僅僅收集一些明顯的信息,比如user-agent,還收集一些瀏覽器之間復(fù)雜的細(xì)微差別。安全的對抗是封閉的,所以不說一些技術(shù)細(xì)節(jié)的話很難把這個機(jī)制解釋清楚。稍微說一點,我們會尋找瀏覽器處理編碼方面細(xì)微的差別,比如,我們通過瀏覽器處理HTTP頭里兩次空格和特殊字符來區(qū)別不同的瀏覽器。
所以我們的數(shù)據(jù)庫里有成千上萬個已知的瀏覽器和僵尸簽名,覆蓋各種場景。在這個案例中,攻擊者的武器PhantomJS webkit當(dāng)然也是我們簽名庫中的一個。
當(dāng)攻擊者在規(guī)劃如何讓他的僵尸看起來更像人類的時候,我們的團(tuán)隊必須做的就是讓我們的系統(tǒng)發(fā)現(xiàn)攻擊者用的無界面瀏覽器是哪一種。之后我們做的就是簡單的屏蔽了所有的PhantomJS的實例。我們甚至留了一個備選,讓用戶填一個驗證碼,以免屏蔽掉了真正的人類訪問。
不出意料的,沒有驗證碼被填寫。
幾天之后,當(dāng)我們已經(jīng)完全依靠機(jī)器識別,不需要人工干預(yù)了。攻擊者依然在使用新的user-agent和新的ip試圖繞過防御。但是所有殘忍的T-1000s都已經(jīng)被我們冰凍起來了。他們使用的方法,簽名,模式都已經(jīng)被記錄下來作為將來的參考。
原文地址:http://thehackernews.com/2013/11/ddos-attack-from-browser-based-botnets.html