蝴蝶:前段時間上海一家游戲娛樂公司的網站遭到了基於頁面請求的DDOS分布式拒絕服務攻擊,網站陷入完全癱瘓狀態,並被黑客的匿名信勒索,金額高達10萬元,而在勒索過程中,這群黑客還表示會對騰訊QQ等網站下手,隨後QQ“服務器維護”幾天.12月5號的時候,全球BitTorrent服務器也受到了很強烈的DDOS攻擊,一度陷入癱瘓。而DDOS攻擊中最流行的也是威力最大的就是基於頁面的DDOS以及將這個攻擊理論發揮得淋漓盡致的攻擊工具CC,本文特邀CC作者和我們共同了解CC的相關攻擊原理和防范方法,希望能讓更多的朋友了解這樣的攻擊方式並能防范它。
很多朋友都知道木桶理論,一桶水的最大容量不是由它最高的地方決定的,而是由它最低的地方決定,服務器也是一樣,服務器的安全性也是由它最脆弱的地方決定的,最脆弱的地方有多危險服務器就有多危險.DDOS也是一樣,只要你的服務器存在一個很耗資源的地方,限制又不夠,就馬上成為別人DDOS的對象.比如SYN-FLOOD,它就是利用服務器的半連接狀態比完全連接狀態更耗資源,而SYN發動方只需要不停的發包,根本不需要多少資源.
一個好的DDOS攻擊必須是通過自己極少資源的消耗帶來對方較大的資源消耗,否則比如ICMP-FLOOD和UDP-FLOOD都必須和別人一樣大的帶寬,對方服務器消耗多少資源自己也得賠上多少資源,效率極其低下,又很容易被人發現,現在基本沒有什麼人用了.
攻擊原理
CC主要是用來攻擊頁面的.大家都有這樣的經歷,就是在訪問論壇時,如果這個論壇比較大,訪問的人比較多,打開頁面的速度會比較慢,對不?!一般來說,訪問的人越多,論壇的頁面越多,數據庫就越大,被訪問的頻率也越高,占用的系統資源也就相當可觀,現在知道為什麼很多空間服務商都說大家不要上傳論壇,聊天室等東西了吧.
一個靜態頁面不需要服務器多少資源,甚至可以說直接從內存中讀出來發給你就可以了,但是論壇就不一樣了,我看一個帖子,系統需要到數據庫中判斷我是否有讀讀帖子的權限,如果有,就讀出帖子裡面的內容,顯示出來——這裡至少訪問了2次數據庫,如果數據庫的體積有200MB大小,系統很可能就要在這200MB大小的數據空間搜索一遍,這需要多少的CPU資源和時間?如果我是查找一個關鍵字,那麼時間更加可觀,因為前面的搜索可以限定在一個很小的范圍內,比如用戶權限只查用戶表,帖子內容只查帖子表,而且查到就可以馬上停止查詢,而搜索肯定會對所有的數據進行一次判斷,消耗的時間是相當的大.
CC就是充分利用了這個特點,模擬多個用戶(多少線程就是多少用戶)不停的進行訪問(訪問那些需要大量數據操作,就是需要大量CPU時間的頁面).很多朋友問到,為什麼要使用代理呢?因為代理可以有效地隱藏自己的身份,也可以繞開所有的防火牆,因為基本上所有的防火牆都會檢測並發的TCP/IP連接數目,超過一定數目一定頻率就會被認為是Connection-Flood.
使用代理攻擊還能很好的保持連接,我們這裡發送了數據,代理幫我們轉發給對方服務器,我們就可以馬上斷開,代理還會繼續保持著和對方連接(我知道的記錄是有人利用2000個代理產生了35萬並發連接).
可能很多朋友還不能很好的理解,我來描述一下吧.我們假設服務器A對Search.asp的處理時間需要0.01S(多線程只是時間分割,對結論沒有影響),也就是說他一秒可以保證100個用戶的Search請求,服務器允許的最大連接時間為60s,那麼我們使用CC模擬120個用戶並發連接,那麼經過1分鐘,服務器的被請求了7200次,處理了6000次,於是剩下了1200個並發連接沒有被處理.有的朋友會說:丟連接!丟連接!問題是服務器是按先來後到的順序丟的,這1200個是在最後10秒的時候發起的,想丟?!還早,經過計算,服務器滿負開始丟連接的時候,應該是有7200個並發連接存在隊列,然後服務器開始120個/秒的丟連接,我們發動的連接也是120個/秒,服務器永遠有處理不完的連接,服務器的CPU 100%並長時間保持,然後丟連接的60秒服務器也判斷處理不過來了,新的連接也處理不了,這樣服務器達到了超級繁忙狀態.
蝴蝶:我們假設服務器處理Search只用了0.01S,也就是10毫秒(這個速度你可以去各個有開放時間顯示的論壇看看),我們使用的線程也只有120,很多服務器的丟連接時間遠比60S長,我們的使用線程遠比120多,可以想象可怕了吧,而且客戶機只要發送了斷開,連接的保持是代理做的,而且當服務器收到SQL請求,肯定會進入隊列,不論連接是否已經斷開,而且服務器是並發的,不是順序執行,這樣使得更多的請求進入內存請求,對服務器負擔更大.
當然,CC也可以利用這裡方法對FTP進行攻擊,也可以實現TCP-FLOOD,這些都是經過測試有效的.
12下一頁閱讀全文