一次防CC***案例

本文來自 :http://baiying.blog.51cto.com/1068039/1113087

名詞解釋:摘自百度百科

名稱起源  CC = Challenge Collapsar,其前身名爲Fatboy***,是利用不斷對網站發送連接請求致使形成拒絕服務的目的,

 

  CC***是DDOS(分佈式拒絕服務)的一種,相比其它的DDOS***CC似乎更有技術含量一些。這種***你見不到真實源IP,見不到特別大的異常流量,但造成服務器無法進行正常連接。最讓站長們憂慮的是這種***技術含量低,利用工具和一些IP代理一個初、中級的電腦水平的用戶就能夠實施***。因此,大家有必要了解CC***的原理及如果發現CC***和對其的防範措施。

 

CC***的原理

  CC***的原理就是***者控制某些主機不停地發大量數據包給對方服務器造成服務器資源耗盡,一直到宕機崩潰。CC主要是用來***頁面的,每個人都有這樣的體驗:當一個網頁訪問的人數特別多的時候,打開網頁就慢了,CC就是模擬多個用戶(多少線程就是多少用戶)不停地進行訪問那些需要大量數據操作(就是需要大量CPU時間)的頁面,造成服務器資源的浪費,CPU長時間處於100%,永遠都有處理不完的連接直至就網絡擁塞,正常的訪問被中止。

 

防CC***

  CC***可以歸爲DDoS***的一種。他們之間的原理都是一樣的,即發送大量的請求數據來導致服務器拒絕服務,是一種連接***。CC***又可分爲代理CC***,和肉雞CC***。代理CC***是***藉助代理服務器生成指向受害主機的合法網頁請求,實現DOS,和僞裝就叫:cc(Challenge Collapsar)。而肉雞CC***是***使用CC***軟件,控制大量肉雞,發動***,相比來後者比前者更難防禦。因爲肉雞可以模擬正常用戶訪問網站的請求。僞造成合法數據包。

 

  CC***主要是用來***網站的。想必大家都有這樣的經歷,就是在訪問某個網站時,如果這個網站比較大,訪問的人比較多,打開頁面的速度會比較慢,對不?!一般來說,訪問的人越多,論壇的頁面越多,數據庫就越大,被訪問的頻率也越高,佔用的系統資源也就相當可觀,現在知道爲什麼很多空間服務商都說大家不要上傳論壇,聊天室等東西了吧。

 

  一個靜態頁面不需要服務器多少資源,甚至可以說直接從內存中讀出來發給你就可以了,但是論壇之類的動態網站就不一樣了,我看一個帖子,系統需要到數據庫中判斷我是否有讀帖子的權限,如果有,就讀出帖子裏面的內容,顯示出來——這裏至少訪問了2次數據庫,如果數據庫的體積有200MB大小,系統很可能就要在這200MB大小的數據空間搜索一遍,這需要多少的CPU資源和時間?如果我是查找一個關鍵字,那麼時間更加可觀,因爲前面的搜索可以限定在一個很小的範圍內,比如用戶權限只查用戶表,帖子內容只查帖子表,而且查到就可以馬上停止查詢,而搜索肯定會對所有的數據進行一次判斷,消耗的時間是相當的大。

 

  CC***就是充分利用了這個特點,模擬多個用戶(多少線程就是多少用戶)不停的進行訪問(訪問那些需要大量數據操作,就是需要大量CPU時間的頁面,比如asp/php/jsp/cgi)。很多朋友問到,爲什麼要使用代理呢?因爲代理可以有效地隱藏自己的身份,也可以繞開所有的防火牆,因爲基本上所有的防火牆都會檢測併發的TCP/IP連接數目,超過一定數目一定頻率就會被認爲是Connection-Flood。當然也可以使用肉雞發動CC***。肉雞的CC***效果更可觀。致使服務器CPU%100,甚至死機的現象。

 

  使用代理***還能很好的保持連接,我們這裏發送了數據,代理幫我們轉發給對方服務器,我們就可以馬上斷開,代理還會繼續保持着和對方連接(我知道的記錄是有人利用2000個代理產生了35萬併發連接)。

 

  當然,CC也可以利用這裏方法對FTP、遊戲端口、聊天房間等進行***,也可以實現TCP-FLOOD,這些都是經過測試有效的。

 

  防禦CC***可以通過多種方法,禁止網站代理訪問,儘量將網站做成靜態頁面,限制連接數量等。

事發前:本來我的這個受***站點是公司下線的一個業務,但網站仍在運行,已經沒什麼訪問量了。可是受***當天我發現監控上此站點的連接數從8點開始往上飆升,於是登錄網站查看在線人數,結果實際登錄人數就我一個!而網卡流量還不到50K,問題出現了就得解決啊

於是打開訪問日誌查看,日誌裏不停的記錄着非本站點的訪問,比如我站點域名爲www.51cto.com 但是日誌裏記錄的內容如下(此日誌是我處理cc***後的,只是讓大家看個訪問的現象):

199.201.122.141 - [10/Jan/2013:10:45:03 +0800] GET http://www.7xgj.com:81/login.jsp?id=106&name=%C7%C1%A6%A7%D1%F3 HTTP/1.1 "403" 564 "http://www.7xgj.com:81/login.jsp?id=+N3&name=+C3" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)" "0.000" "340" "-"
199.201.122.141 - [10/Jan/2013:10:45:04 +0800] GET http://www.7xgj.com:81/login.jsp?id=106&name=%C7%C1%A6%A7%D1%F3 HTTP/1.1 "403" 564 "http://www.7xgj.com:81/login.jsp?id=+N3&name=+C3" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)" "0.000" "340" "-"
199.201.122.141 - [10/Jan/2013:10:45:04 +0800] GET http://www.7xgj.com:81/login.jsp?id=512&name=%B4%B4%C6%A0%A7%C7 HTTP/1.1 "403" 564 "http://www.7xgj.com:81/login.jsp?id=+N3&name=+C3" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)" "0.000" "340" "-"
199.201.122.141 - [10/Jan/2013:10:45:05 +0800] GET http://www.7xgj.com:81/login.jsp?id=512&name=%B4%B4%C6%A0%A7%C7 HTTP/1.1 "403" 564 "http://www.7xgj.com:81/login.jsp?id=+N3&name=+C3" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)" "0.000" "340" "-"
199.201.122.141 - [10/Jan/2013:10:45:05 +0800] GET http://www.7xgj.com:81/login.jsp?id=898&name=%F1%B0%E8%D2%C5%F1 HTTP/1.1 "403" 564 "http://www.7xgj.com:81/login.jsp?id=+N3&name=+C3" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)" "0.000" "340" "-"
199.201.122.141 - [10/Jan/2013:10:45:06 +0800] GET http://www.7xgj.com:81/login.jsp?id=898&name=%F1%B0%E8%D2%C5%F1 HTTP/1.1 "403" 564 "http://www.7xgj.com:81/login.jsp?id=+N3&name=+C3" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)" "0.000" "340" "-"
199.201.122.141 - [10/Jan/2013:10:45:06 +0800] GET http://www.7xgj.com:81/login.jsp?id=173&name=%E7%C5%A0%D5%A2%E5 HTTP/1.1 "403" 564 "http://www.7xgj.com:81/login.jsp?id=+N3&name=+C3" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)" "0.000" "340" "-"
199.201.122.141 - [10/Jan/2013:10:45:07 +0800] GET http://www.7xgj.com:81/login.jsp?id=173&name=%E7%C5%A0%D5%A2%E5 HTTP/1.1 "403" 564 "http://www.7xgj.com:81/login.jsp?id=+N3&name=+C3" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)" "0.000" "340" "-"

此ip短時間發送大量這種非對本站訪問的連接,於是先把他給在防火牆上斃掉:

#!/bin/sh
IP=`tail -n 1000 /data/logs/test.log | awk '{print $1}' | sort | uniq -c | sort -rn| awk '$1 > 100 {print $2}'`
for i in $IP
do
iptables -I INPUT -p tcp --dport 80 -s $i -j DROP
done

這樣連接數立馬下降到正常水平,除了在iptables上這麼處理,還有就是禁用了nginx虛擬主機的空主機頭:

server {
listen 80 default;
location / {
return 403;
}

}

對以ip訪問的請求統統拒絕訪問。開始以爲是某地區dns解析問題,經分析日誌,來源的ip分佈全球各地。初步判斷,這是被其他代理服務器發起的***。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章