
CC攻擊原理
攻擊者控制某些主機不停地發大量數據包給對方服務器造成服務器資源耗盡,一直到宕機崩潰。CC主要是用來攻擊頁面的,每個人都有這樣的體驗:當一個網頁訪問的人數特別多的時候,打開網頁就慢了,CC就是模擬多個用戶(多少線程就是多少用戶)不停地進行訪問那些需要大量數據操作(就是需要大量CPU時間)的頁面,造成服務器資源的浪費,CPU長時間處于100%,永遠都有處理不完的連接直至就網絡擁塞,正常的訪問被中止。
CC攻擊防御策略
1.取消域名綁定
取消域名綁定后Web服務器的CPU能夠馬上恢復正常狀態,通過IP進行訪問連接一切正常。但是不足之處也很明顯,取消或者更改域名對于別人的訪問帶來了不變,另外,對于針對IP的CC攻擊它是無效的,就算更換域名攻擊者發現之后,攻擊者也會對新域名實施攻擊。
2.更改Web端口
一般情況下Web服務器通過80端口對外提供服務,因此攻擊者實施攻擊就以默認的80端口進行攻擊,所以,可以修改Web端口達到防CC攻擊的目的。
3.IIS屏蔽IP
我們通過命令或在查看日志發現了CC攻擊的源IP,就可以在IIS中設置屏蔽該IP對Web站點的訪問,從而達到防范IIS攻擊的目的。
CC攻擊的防范手段
1.優化代碼
盡可能使用緩存來存儲重復的查詢內容,減少重復的數據查詢資源開銷。減少復雜框架的調用,減少不必要的數據請求和處理邏輯。程序執行中,及時釋放資源,比如及時關閉mysql連接,及時關閉memcache連接等,減少空連接消耗。
2.限制手段
對一些負載較高的程序增加前置條件判斷,可行的判斷方法如下:
必須具有網站簽發的session信息才可以使用(可簡單阻止程序發起的集中請求);必須具有正確的referer(可有效防止嵌入式代碼的攻擊);禁止一些客戶端類型的請求(比如一些典型的不良蜘蛛特征);同一session多少秒內只能執行一次。
3.完善日志
盡可能完整保留訪問日志。日志分析程序,能夠盡快判斷出異常訪問,比如單一ip密集訪問;比如特定url同比請求激增。
防御思路
因為CC攻擊通過工具軟件發起,而普通用戶通過瀏覽器訪問,這其中就會有某些區別。想辦法對這二者作出判斷,選擇性的屏蔽來自機器的流量即可。
初級
普通瀏覽器發起請求時,除了要訪問的地址以外,Http頭中還會帶有Referer,UserAgent等多項信息。遇到攻擊時可以通過日志查看訪問信息,看攻擊的流量是否有明顯特征,比如固定的Referer或UserAgent,如果能找到特征,就可以直接屏蔽掉了。
中級
如果攻擊者偽造了Referer和UserAgent等信息,那就需要從其他地方入手。攻擊軟件一般來說功能都比較簡單,只有固定的發包功能,而瀏覽器會完整的支持Http協議,我們可以利用這一點來進行防御。
首先為每個訪問者定義一個字符串,保存在Cookies中作為Token,必須要帶有正確的Token才可以訪問后端服務。當用戶第一次訪問時,會檢測到用戶的Cookies里面并沒有這個Token,則返回一個302重定向,目標地址為當前頁面,同時在返回的Http頭中加入set cookies字段,對Cookies進行設置,使用戶帶有這個Token。
客戶端如果是一個正常的瀏覽器,那么就會支持http頭中的set cookie和302重定向指令,將帶上正確的Token再次訪問頁面,這時候后臺檢測到正確的Token,就會放行,這之后用戶的Http請求都會帶有這個Token,所以并不會受到阻攔。
客戶端如果是CC軟件,那么一般不會支持這些指令,那么就會一直被攔在最外層,并不會對服務器內部造成壓力。
高級
高級一點的,還可以返回一個網頁,在頁面中嵌入JavaScript來設置Cookies并跳轉,這樣被偽造請求的可能性更小
Token生成算法
Token需要滿足以下幾點要求
1,每個IP地址的Token不同
2, 無法偽造
3, 一致性,即對相同的客戶端,每次生成的Token相同
Token隨IP地址變化是為了防止通過一臺機器獲取Token之后,再通過代理服務區進行攻擊。一致性則是為了避免在服務器端需要存儲已經生成的Token。
推薦使用以下算法生成Token,其中Key為服務器獨有的保密字符串,這個算法生成的Token可以滿足以上這些要求。
Token = Hash( UserAgent + client_ip + key )
