覺得寫的不錯,故轉載:https://mp.weixin.qq.com/s/idoKIGK7-z3SOjMKCflJlg
一,定義
CC(ChallengeCollapsar,挑戰黑洞)攻擊是DDoS攻擊的一種類型,使用代理服務器向受害服務器發送大量貌似合法的請求。CC根據其工具命名,攻擊者使用代理機制,利用眾多廣泛可用的免費代理服務器發動DDoS攻擊。許多免費代理服務器支持匿名模式,這使追蹤變得非常困難。
CC攻擊的原理就是攻擊者控制某些主機不停地發大量數據包給對方服務器造成服務器資源耗盡,一直到宕機崩潰。CC主要是用來攻擊頁面的,可以歸為DDoS攻擊的一種,兩者之間的原理都是一樣的,即發送大量的請求數據來導致服務器拒絕·服務,是一種連接攻擊。CC攻擊又可分為代理CC攻擊和肉雞CC攻擊。代理CC攻擊是黑客借助代理服務器生成指向受害主機的合法網頁請求,實現DDoS和偽裝就叫Challenge Collapsar。而肉雞CC攻擊是黑客使用CC攻擊軟件,控制大量肉雞,發動攻擊,相比來后者比前者更難防御。因為肉雞可以模擬正常用戶訪問網站的請求偽造成合法數據包。
二,如何判斷是否被CC攻擊
CC攻擊主要工作原理是耗資源,這就需要看是哪種攻擊方式,看抓包分析是否是通過多IP刷新頁面。如果你的網站被CC攻擊導致無法訪問,那么指定會有一種資源(CPU/內存/IO/帶寬)耗盡。
(1)消耗CPU資源
黑客使用大量肉雞來刷新網站動態頁面,CPU占用100%時CPU資源將被耗盡
(2)耗內存資源
黑客不斷刷新動態頁面,搜索數據庫的內容,只要搜索量變大后內存占滿。網站直接打不開或者是非常卡。
(3)耗I/o資源
黑客找到上傳文件,或者是下載文件的頁面,不停的上傳與下載,磁盤資源點滿
(4)耗帶寬資源
根據寬帶速度看流量占用多少,如果流量占滿了,服務器直接丟包掉線或者網站一點都打不開。
隨着CC攻擊的成本越來越低,對網站的CC攻擊成為常態。我們可以對自己的網站進行CC攻擊壓力測試,以便進行更好的防護。(僅在小范圍對自己的網站進行壓力測試,請勿用於非法用途)。
三、CC壓力測試步驟
1、在線測試平台
https://www.idddos.com/是一個線上CC壓力測試平台,可以付費使用來對自己的網站進行測試。
2、手動搭建環境進行CC攻擊測試
(1)設置http代理
這里就不多說了,網上有很多可用的免費http代理。也可以自己架設http代理服務器來做壓力測試。
選擇軟件驗證代理地址,這里用的是花刺代理驗證
然后使用相關壓力測試工具進行測試即可
四、CC攻擊的變種——慢速攻擊
基本原理如下:對任何一個開放了HTTP訪問的服務器HTTP服務器,先建立了一個連接,指定一個比較大的content-length,然后以非常低的速度發包,比如1-10s發一個字節,然后維持住這個連接不斷開。如果客戶端持續建立這樣的連接,那么服務器上可用的連接將一點一點被占滿,從而導致拒絕服務。
和CC攻擊一樣,只要Web服務器開放了Web服務,那么它就可以是一個靶子,HTTP協議在接收到request之前是不對請求內容作校驗的,所以即使你的Web應用沒有可用的form表單,這個攻擊一樣有效。
在客戶端以單線程方式建立較大數量的無用連接,並保持持續發包的代價非常的低廉。slowhttptest是一款對服務器進行慢攻擊的測試軟件,包含了幾種攻擊方式,像Slowloris、SlowHTTP POST、Slow Read attack等。
1、Slowhttptest:源代碼地址:https://github.com/shekyan/slowhttptest
下載下來首先編譯安裝
./configure
然后make && make install
slowhttptest -h
2、Slowhttptest攻擊模式
(1) slowloris模式:
slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u https://host.example.com/index.html -x 24 -p 3
HTTP協議規定,HTTP Request以\r\n\r\n(0d0a0d0a)結尾表示客戶端發送結束,服務端開始處理。Slowloris就是利用這一點來做DDoS攻擊的。攻擊者在HTTP請求頭中將Connection設置為Keep-Alive,要求Web Server保持TCP連接不要斷開,隨后緩慢地每隔幾分鍾發送一個key-value格式的數據到服務端,如果攻擊者使用多線程或者傀儡機來做同樣的操作,服務器的Web容器很快就被攻擊者占滿了TCP連接而不再接受新的請求。
(2)Slowloris的變種–Slow HTTP POST,也稱為Slow body。
slowhttptest -c 3000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://host.example.com/loginform.html -x 10 -p 3
在POST提交方式中,允許在HTTP的頭中聲明content-length,也就是POST內容的長度。在提交了頭以后,將后面的body部分卡住不發送,這時服務器在接受了POST長度以后,就會等待客戶端發送POST的內容,攻擊者保持連接並且以10S-100S一個字節的速度去發送,就達到了消耗資源的效果,因此不斷地增加這樣的鏈接,就會使得服務器的資源被消耗,最后可能宕機。
(3)Slow Read attack
slowhttptest -c 8000 -X -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u https://host.example.com/resources/index.html -p 3
采用調整TCP協議中的滑動窗口大小,來對服務器單次發送的數據大小進行控制,使得服務器需要對一個回應分成很多個包來發送。要使這種攻擊效果更加明顯,請求的資源要盡量大。
總而言之,該工具的原理就是設法讓服務器等待,當服務器在保持連接等待時,就消耗了資源。
3、哪些服務器易被慢速攻擊
慢速攻擊主要利用的是thread-based架構的服務器的特性,這種服務器會為每個新連接打開一個線程,它會等待接收完整個HTTP頭部才會釋放連接。比如Apache會有一個超時時間來等待這種不完全連接(默認是300s),但是一旦接收到客戶端發來的數據,這個超時時間會被重置。正是因為這樣,攻擊者可以很容易保持住一個連接,因為攻擊者只需要在即將超時之前發送一個字符,便可以延長超時時間。而客戶端只需要很少的資源,便可以打開多個連接,進而占用服務器很多的資源。
經驗證,Apache、httpd采用thread-based架構,很容易遭受慢速攻擊。而另外一種event-based架構的服務器,比如nginx和lighttpd則不容易遭受慢速攻擊。
五、CC攻擊的防御
對於 CC 攻擊,其防御必須采用多種方法
1. 服務器垂直擴展和水平擴容
資金允許的情況下,這是最簡單的一種方法,本質上講,這個方法並不是針對 CC 攻擊的,而是提升服務本身處理並發的能力,但確實提升了對 CC 攻擊的承載能力。
垂直擴展:是指增加每台服務器的硬件能力,如升級 CPU,增加內存,升級 SSD 固態硬盤等。
水平擴容:是指通過增加提供服務的服務器來提升承載力。
2. 對於服務中具備高度共性,多用戶可重用,或單用戶多次可重用的數據,一旦從數據庫中檢索出,或通過計算得出后,最好將其放在緩存中,后續請求均可直接從緩存中取得數據,減輕數據庫的檢索壓力和應用服務器的計算壓力,並且能夠快速返回結果並釋放進程,從而也能緩解服務器的內存壓力。
3. 頁面靜態化
與數據緩存一樣,頁面數據本質上也屬於數據,常見的手段是生成靜態化的 html 頁面文件,利用客戶端瀏覽器的緩存功能或者服務端的緩存服務,以及 CDN 節點的緩沖服務,均可以降低服務器端的數據檢索和計算壓力,快速相應結果並釋放連接進程。
4. 不管服務是有登陸態還是沒登陸態,基於 session 等方式都可以為客戶端分配唯一的識別 ID(后稱作 SID),服務端可以將 SID 存到緩存中。當客戶端請求服務時,如果沒有帶 SID(cookie 中或請求參數中等),則由服務端快速分配一個並返回。可以的話,本次請求可以不返回數據,或者將分配 SID 獨立出業務服務。當客戶端請求時帶了合法 SID(即 SID 能在服務端緩存中匹配到),便可以依據 SID 對客戶端進行頻率限制。而對於 SID 非法的請求,則直接拒絕服務。
5. 最后,IP 限制依然可以結合上述規則一起使用,但是可以將其前置到外層的防火牆或負載均衡器上去做,並且可以調大限制的閾值(結合歷史統計數量,預測一個極端的訪問量閾值,在服務器可承受的范圍內,盡量避免誤傷),防止惡意訪問穿透到應用服務器上,造成應用服務器壓力。
參考資料:
如何提升防御 CC 攻擊的能力 | Laravel China 社區
https://learnku.com/articles/4593/how-to-enhance-the-ability-to-defend-against-cc-attacks
慢速連接攻擊和處理方式 – 君子笑而不語 – 博客園
https://www.cnblogs.com/xiaoliu66007/p/10174672.html
CC攻擊 – 簡書
https://www.jianshu.com/p/dff5a0d537d8
轉載地址:https://mp.weixin.qq.com/s/idoKIGK7-z3SOjMKCflJlg