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

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