什么是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個/秒,服務器永遠有處理不完的連接,服務器的CPU 100%并長時間保持,然后丟連接的60秒服務器也判斷處理不過來了,新的連接也處理不了,這樣服務器達到了超級繁忙狀態。
當然,CC也可以利用這里方法對FTP進行攻擊,也可以實現TCP-FLOOD,這些都是經過測試有效的。
如何判斷網站是否被CC攻擊?
1、如果網站是動態網站,比如asp/asp.NET/php等,在被CC攻擊的情況下,IIS站點會出錯提示SERVER IS TOO BUSY,如果不是使用IIS來提供網站服務,會發現提供網站服務的程序無緣無故自動崩潰,出錯。如果排除了網站程序的問題,而出現這類型的情況,基本上可以斷定是網站被CC攻擊了。
2、如果網站是靜態站點,比如html頁面,在被CC攻擊的情況下,打開任務管理器,看網絡流量,會發現網絡應用里數據的發送出現嚴重偏高的現象,在大量的CC攻擊下,甚至會達到99%的網絡占用,當然,在被CC攻擊的情況下網站是沒辦法正常訪問的,但是通過3389連接服務器還是可以正常連接。
3、如果是被小量CC攻擊,則站點還是可以間歇性訪問到,但是一些比較大的文件,比如圖片會出現顯示不出來的現象。如果是動態網站被小量CC攻擊,還會發現服務器的CPU占用率出現飆升的現象。這是最基本的CC攻擊癥狀。
CC攻擊怎么防御?
對于CC攻擊,其防御必須采用多種方法,而這些方法本質上也是在提高服務器的并發能力
1、服務器垂直擴展和水平擴容
資金允許的情況下,這是最簡單的一種方法,本質上講,這個方法并不是針對CC攻擊的,而是提升服務本身處理并發的能力,但確實提升了對CC攻擊的承載能力。垂直擴展:是指增加每臺服務器的硬件能力,如升級CPU、增加內存、升級SSD固態硬盤等。水平擴容:是指通過增加提供服務的服務器來提升承載力。上述擴展和擴容可以在服務的各個層級進行,包括:應用服務器、數據庫服務器和緩存服務器等等。
2、數據緩存(內存級別,不要用文件)
對于服務中具備高度共性,多用戶可重用,或單用戶多次可重用的數據,一旦從數據庫中檢索出,或通過計算得出后,最好將其放在緩存中,后續請求均可直接從緩存中取得數據,減輕數據庫的檢索壓力和應用服務器的計算壓力,并且能夠快速返回結果并釋放進程,從而也能緩解服務器的內存壓力。要注意的是,緩存不要使用文件形式,可以使用redis、mem—cached等基于內存的nosql緩存服務,并且與應用服務器分離,單獨部署在局域網內。局域網內的網絡IO肯定比起磁盤IO要高。為了不使局域網成為瓶頸,千兆網絡也是有必要的。
3、頁面靜態化
與數據緩存一樣,頁面數據本質上也屬于數據,常見的手段是生成靜態化的html頁面文件,利用客戶端瀏覽器的緩存功能或者服務端的緩存服務,以及CDN節點的緩沖服務,均可以降低服務器端的數據檢索和計算壓力,快速響應結果并釋放連接進程。
4、用戶級別的調用頻率限制
不管服務是有登陸態還是沒登陸態,基于session等方式都可以為客戶端分配唯一的識別ID(后稱作SID),服務端可以將SID存到緩存中。當客戶端請求服務時,如果沒有帶SID(cookie中或請求參數中等),則由服務端快速分配一個并返回。可以的話,本次請求可以不返回數據,或者將分配SID獨立出業務服務。當客戶端請求時帶了合法SID(即SID能在服務端緩存中匹配到),便可以依據SID對客戶端進行頻率限制。而對于SID非法的請求,則直接拒絕服務。相比根據IP進行的頻率限制,根據SID的頻率限制更加精準可控,可最大程度地避免誤殺情況。
5、IP限制
最后,IP限制依然可以結合上述規則一起使用,但是可以將其前置至)JCb層的防火墻或負載均衡器上去做,并且可以調大限制的閾值,防止惡意訪問穿透到應用服務器上,造成應用服務器壓力。
感謝您的閱讀,加個關注不迷路~