您的位置:首頁>科技>正文

什麼是CC攻擊?怎麼防禦CC攻擊?

Tips:“小鳥雲”是深圳前海小鳥雲計算有限公司旗下雲計算品牌, 國內領先的企業級雲計算服務商。 團隊擁有多年行業經驗, 專注雲計算技術研發, 面向廣大開發者、政企用戶、金融機構等, 提供基於智慧雲伺服器的全方位雲計算解決方案, 為用戶提供可信賴的企業級公有雲服務。

CC攻擊原理

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個/秒, 伺服器永遠有處理不完的連接, 伺服器的CPU100%並長時間保持, 然後丟連接的60秒伺服器也判斷處理不過來了, 新的連接也處理不了, 這樣伺服器達到了超級繁忙狀態。

蝴蝶:我們假設伺服器處理Search只用了0.01S, 也就是10毫秒(這個速度你可以去各個有開放時間顯示的論壇看看),

我們使用的執行緒也只有120, 很多伺服器的丟連線時間遠比60S長, 我們的使用執行緒遠比120多, 可以想像可怕了吧, 而且客戶機只要發送了斷開, 連接的保持是代理做的, 而且當伺服器收到SQL請求, 肯定會進入佇列, 不論連接是否已經斷開, 而且伺服器是併發的, 不是循序執行, 這樣使得更多的請求進入記憶體請求, 對伺服器負擔更大。

當然, CC也可以利用這裡方法對FTP進行攻擊, 也可以實現TCP-FLOOD, 這些都是經過測試有效的。

防範方法

說了攻擊原理, 大家肯定會問, 那麼怎麼防禦?使用硬體防火牆我不知道如何防範, 除非你完全遮罩頁面訪問, 我的方法是通過頁面的編寫實現防禦。

1、使用Cookie認證。 這時候朋友說CC裡面也允許Cookie, 但是這裡的Cookie是所有連接都使用的, 所以啟用IP+Cookie認證就可以了。

2、利用Session。這個判斷比Cookie更加方便,不光可以IP認證,還可以防刷新模式,在頁面裡判斷刷新,是刷新就不讓它訪問,沒有刷新符號給它刷新符號。給些示範代碼吧,Session:

1then

Session(“refresh”)=session(“refresh”)+1

Response.redirect“index.asp”

Endif

這樣用戶第一次訪問會使得Refresh=1,第二次訪問,正常,第三次,不讓他訪問了,認為是刷新,可以加上一個時間參數,讓多少時間允許訪問,這樣就限制了耗時間的頁面的訪問,對正常客戶幾乎沒有什麼影響。

3、通過代理發送的HTTP_X_FORWARDED_FOR變數來判斷使用代理攻擊機器的真實IP,這招完全可以找到發動攻擊的人,當然,不是所有的代理伺服器都發送,但是有很多代理都發送這個參數。詳細代碼:

這樣會生成CCLog.txt,它的記錄格式是:真實IP[代理的IP]時間,看看哪個真實IP出現的次數多,就知道是誰在攻擊了。將這個代碼做成Conn.asp檔,替代那些連接資料庫的檔,這樣所有的資料庫請求就連接到這個檔上,然後馬上就能發現攻擊的人。

4、還有一個方法就是把需要對資料查詢的語句做在Redirect後面,讓對方必須先訪問一個判斷頁面,然後Redirect過去。

5、在存在多站的伺服器上,嚴格限制每一個站允許的IP連接數和CPU使用時間,這是一個很有效的方法。

CC的防禦要從代碼做起,其實一個好的頁面代碼都應該注意這些東西,還有SQL注入,不光是一個入侵工具,更是一個DDOS缺口,大家都應該在代碼中注意。舉個例子吧,某伺服器,開動了5000線的CC攻擊,沒有一點反應,因為它所有的訪問資料庫請求都必須一個隨機參數在Session裡面,全是靜態頁面,沒有效果。突然發現它有一個請求會和外面的伺服器聯繫獲得,需要較長的時間,而且沒有什麼認證,開800線攻擊,伺服器馬上滿負荷了。

代碼層的防禦需要從點點滴滴做起,一個腳本代碼的錯誤,可能帶來的是整個站的影響,甚至是整個伺服器的影響,慎之!

所以啟用IP+Cookie認證就可以了。

2、利用Session。這個判斷比Cookie更加方便,不光可以IP認證,還可以防刷新模式,在頁面裡判斷刷新,是刷新就不讓它訪問,沒有刷新符號給它刷新符號。給些示範代碼吧,Session:

1then

Session(“refresh”)=session(“refresh”)+1

Response.redirect“index.asp”

Endif

這樣用戶第一次訪問會使得Refresh=1,第二次訪問,正常,第三次,不讓他訪問了,認為是刷新,可以加上一個時間參數,讓多少時間允許訪問,這樣就限制了耗時間的頁面的訪問,對正常客戶幾乎沒有什麼影響。

3、通過代理發送的HTTP_X_FORWARDED_FOR變數來判斷使用代理攻擊機器的真實IP,這招完全可以找到發動攻擊的人,當然,不是所有的代理伺服器都發送,但是有很多代理都發送這個參數。詳細代碼:

這樣會生成CCLog.txt,它的記錄格式是:真實IP[代理的IP]時間,看看哪個真實IP出現的次數多,就知道是誰在攻擊了。將這個代碼做成Conn.asp檔,替代那些連接資料庫的檔,這樣所有的資料庫請求就連接到這個檔上,然後馬上就能發現攻擊的人。

4、還有一個方法就是把需要對資料查詢的語句做在Redirect後面,讓對方必須先訪問一個判斷頁面,然後Redirect過去。

5、在存在多站的伺服器上,嚴格限制每一個站允許的IP連接數和CPU使用時間,這是一個很有效的方法。

CC的防禦要從代碼做起,其實一個好的頁面代碼都應該注意這些東西,還有SQL注入,不光是一個入侵工具,更是一個DDOS缺口,大家都應該在代碼中注意。舉個例子吧,某伺服器,開動了5000線的CC攻擊,沒有一點反應,因為它所有的訪問資料庫請求都必須一個隨機參數在Session裡面,全是靜態頁面,沒有效果。突然發現它有一個請求會和外面的伺服器聯繫獲得,需要較長的時間,而且沒有什麼認證,開800線攻擊,伺服器馬上滿負荷了。

代碼層的防禦需要從點點滴滴做起,一個腳本代碼的錯誤,可能帶來的是整個站的影響,甚至是整個伺服器的影響,慎之!

Next Article
喜欢就按个赞吧!!!
点击关闭提示