CC攻擊及其解決方法

2022-03-13 11:12:45 字數 2745 閱讀 7417

好久不關心網路安全之類,今天突然間聽說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,這些都是經過測試有效的。

防範方法

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

1. 使用cookie認證。這時候朋友說cc裡面也允許cookie,但是這裡的cookie是所有連線都使用的,所以啟用ip+cookie認證就可以了。

2. 利用session。這個判斷比cookie更加方便,不光可以ip認證,還可以防重新整理模式,在頁面裡判斷重新整理,是重新整理就不讓它訪問,沒有重新整理符號給它重新整理符號。給些示範**吧,session:

<%if session(「refresh」)<> 1 then

session(「refresh」)=session(「refresh」)+1

response.redirect 「index.asp」

end if

%>

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

3. 通過**傳送的http_x_forwarded_for變數來判斷使用**攻擊機器的真實ip,這招完全可以找到發動攻擊的人,當然,不是所有的**伺服器都傳送,但是有很多**都傳送這個引數。詳細**:

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

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

5. 在存在多站的伺服器上,嚴格限制每乙個站允許的ip連線數和cpu使用時間,這是乙個很有效的方法。

SYN Flood攻擊以及解決方法

syn flood攻擊 最基本的dos攻擊就是利用合理的服務請求來占用過多的服務資源,從而使合法使用者無法得到服務的響應。syn flood屬於dos攻擊的一種。如果惡意的向某個伺服器端口傳送大量的syn包,則可以使伺服器開啟大量的半開連線,分配tcb transmission control bl...

跨站攻擊的解決方法

轉至元資料起始 方法一 對輸入引數進行校驗,等特殊字元不允許輸入.方法二 對輸入引數輸出在頁面前就使用以下標籤進行轉義特殊字元 atg 標籤庫 dsp valueofparam boldcode valueishtml true jstl 標籤庫 c outvalue escapexml false...

SYN 攻擊原理及解決方法

原理 syn foold攻擊主要針對tcp通訊三次握手期間做的手腳,所以要弄懂這個攻擊的原理我們首先必須知道tcp三次握手的詳細過程 由上圖可知tcp三次握手顧名思義要經過三個步驟,這三個步驟分別是 客戶端向服務端傳送syn j 同步訊號假設序號為j 相當於通知服務端我要開始建立連線了 服務端收到客...