前言
HTTP 中文名稱為超文本傳輸協議,常被用于 Web 服務請求和響應數據的傳輸。常見的 HTTP 請求有 GET 請求和 POST 請求兩種。通常,GET 請求用于從 Web 服務器獲取數據和資源,例如請求頁面、獲取圖片和文檔等;
POST 請求用于向 Web 服務器提交數據和資源,例如發送用戶名/密碼、上傳文件等。在處理這些 HTTP 請求的過程中,Web 服務器通常需要解析請求、處理和執行服務端腳本、驗證用戶權限并多次訪問數據庫,這會消耗大量的計算資源和 IO 訪問資源。
CC攻擊原理
HTTP Flood 俗稱CC攻擊(Challenge Collapsar)是DDOS(分布式拒絕服務)的一種,前身名為Fatboy攻擊,也是一種常見的網站攻擊方法。是針對 Web 服務在第七層協議發起的攻擊。攻擊者相較其他三層和四層,并不需要控制大量的肉雞,取而代之的是通過端口掃描程序在互聯網上尋找匿名的 HTTP 代理或者 SOCKS 代理,攻擊者通過匿名代理對攻擊目標發起HTTP 請求。匿名代理服務器在互聯網上廣泛存在。因此攻擊容易發起而且可以保持長期高強度的持續攻擊,同樣可以隱藏攻擊者來源避免被追查。
HTTP/CC 攻擊的特點:
HTTP/CC 攻擊的 ip 都是真實的,分散的
HTTP/CC 攻擊的數據包都是正常的數據包
HTTP/CC 攻擊的請求都是有效請求,且無法拒絕
HTTP/CC 攻擊的是網頁,服務器可以連接,ping 也沒問題,但是網頁就是訪問不了
如果 IIS 一開,服務器很快就死,容易丟包。
那如何造成更大的殺傷呢。Web 服務與 DNS 服務類似,也存在緩存機制。如果攻擊者的大量請求命中了服務器緩存,那么這種攻擊的主要作用僅體現在消耗網絡帶寬資源上,對于計算和 IO 資源的消耗是非常有限的。因此,高效的 HTTP/CC 攻擊 應不斷發出針對不同資源和頁面的 HTTP 請求,并盡可能請求無法被緩存的資源( 如關鍵詞搜索結果、用戶相關資料等 ),這樣才能更好的加重服務器的負擔,達到理想的攻擊效果。當然 HTTP/CC 攻擊 也會引起嚴重的連鎖反應,不僅僅是直接導致被攻擊的 Web 前端響應緩慢,還間接攻擊到后端的 Java 等業務層邏輯以及更后端的數據庫服務,增大它們的壓力,HTTP/CC 攻擊 產生的海量日志數據甚至會對日志存儲服務器都帶來影響。
如果 Web 服務器支持 HTTPS,那么進行 HTTPS 洪水攻擊是更為有效的一種攻擊方式。原因有二:
其一,在進行 HTTPS 通信時,Web 服務器需要消耗更多的資源用來認證和加解密。
其二,目前一部分防護設備無法對 HTTPS 通信數據流進行處理,會導致攻擊流量繞過防護設備,直接對 Web 服務器造成攻擊。
CC攻擊防御
攻擊靠演技,防護當然是靠火眼精睛叻。
防御思路
HTTP/CC 攻擊 防御主要通過緩存的方式進行,盡量由設備的緩存直接返回結果來保護后端業務。當高級攻擊者穿透緩存時,清洗設備會截獲 HTTP 請求做特殊處理。因為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需要滿足以下幾點要求
? 每個IP地址的Token不同
? 無法偽造
? 一致性,即對相同的客戶端,每次生成的Token相同
Token隨IP地址變化是為了防止通過一臺機器獲取Token之后,再通過代理服務區進行攻擊。一致性則是為了避免在服務器端需要存儲已經生成的Token。
推薦使用以下算法生成Token,其中Key為服務器獨有的保密字符串,這個算法生成的Token可以滿足以上這些要求:
Token = Hash( UserAgent + client_ip + key )
總結:
早期的方法是對源 IP 的 HTTP 請求頻率設定閾值,高于既定閾值的 IP 地址加入黑名單。這種方法過于簡單,容易帶來誤殺,并且無法屏蔽來自代理服務器的攻擊,因此逐漸廢止,取而代之的是基于 JavaScript 跳轉的人機識別方案。
HTTP Flood 是由程序模擬 HTTP 請求,一般來說不會解析服務端返回數據,更不會解析 JS之類代碼。因此當清洗設備截獲? HTTP 請求時,返回一段特殊 JavaScript 代碼,正常用戶的瀏覽器會處理并正常跳轉不影響使用,而攻擊程序會攻擊到空處。 由于 HTTP/CC 攻擊 的偽裝方式千變萬化,很少有策略或者硬件防護能做到完美清洗,所以,針對 HTTP/CC 攻擊,我們大多時候需要具備一定技術的網絡維護人員進行見招拆招。
簡易CC攻擊防御方法
1. 利用Session做訪問計數器:
利用Session針對每個IP做頁面訪問計數器或文件下載計數器,防止用戶對某個頁面頻繁刷新導致數據庫頻繁讀取或頻繁下載某個文件而產生大額流量。(文件下載不要直接使用下載地址,才能在服務端代碼中做CC攻擊的過濾處理)
2. 把網站做成靜態頁面:
大量事實證明,把網站盡可能做成靜態頁面,不僅能大大提高抗攻擊能力,而且還給駭客入侵帶來不少麻煩,至少到現在為止關于HTML的溢出還沒出現,看看吧!新浪、搜狐、網易等門戶網站主要都是靜態頁面,若你非需要動態腳本調用,那就把它弄到另外一臺單獨主機去,免的遭受攻擊時連累主服務器。
3. 增強操作系統的TCP/IP棧
Win2000和Win2003作為服務器操作系統,本身就具備一定的抵抗DDOS攻擊的能力,只是默認狀態下沒有開啟而已,若開啟的話可抵擋約10000個SYN攻擊包,若沒有開啟則僅能抵御數百個,具體怎么開啟,自己去看微軟的文章吧!《強化 TCP/IP 堆棧安全》。也許有的人會問,那我用的是Linux和FreeBSD怎么辦?很簡單,按照這篇文章去做吧!《SYN Cookies》。
4. 在存在多站的服務器上,嚴格限制每一個站允許的IP連接數和CPU使用時間
這是一個很有效的方法。CC的防御要從代碼做起,其實一個好的頁面代碼都應該注意這些東西,還有SQL注入,不光是一個入侵工具,更是一個DDOS缺口,大家都應該在代碼中注意。舉個例子吧,某服務器,開動了5000線的CC攻擊,沒有一點反應,因為它所有的訪問數據庫請求都必須一個隨機參數在Session里面,全是靜態頁面,沒有效果。突然發現它有一個請求會和外面的服務器聯系獲得,需要較長的時間,而且沒有什么認證,開800線攻擊,服務器馬上滿負荷了。代碼層的防御需要從點點滴滴做起,一個腳本代碼的錯誤,可能帶來的是整個站的影響,甚至是整個服務器的影響!
5. 服務器前端加CDN中轉
(免費的有百度云加速、360網站衛士、加速樂、安全寶等),如果資金充裕的話,可以購買高防的盾機,用于隱藏服務器真實IP,域名解析使用CDN的IP,所有解析的子域名都使用CDN的IP地址。此外,服務器上部署的其他域名也不能使用真實IP解析,全部都使用CDN來解析。
另外,防止服務器對外傳送信息泄漏IP地址,最常見的情況是,服務器不要使用發送郵件功能,因為郵件頭會泄漏服務器的IP地址。如果非要發送郵件,可以通過第三方代理(例如sendcloud)發送,這樣對外顯示的IP是代理的IP地址。
總之,只要服務器的真實IP不泄露,10G以下小流量DDOS的預防花不了多少錢,免費的CDN就可以應付得了。如果攻擊流量超過20G,那么免費的CDN可能就頂不住了,需要購買一個高防的盾機來應付了,而服務器的真實IP同樣需要隱藏
簡易CC攻擊防御策略
確定Web服務器正在或者曾經遭受CC攻擊,那如何進行有效的防范呢?
(1).取消域名綁定?
一般cc攻擊都是針對網站的域名進行攻擊,比如我們的網站域名是“www.abc.com”,那么攻擊者就在攻擊工具中設定攻擊對象為該域名然后實施攻擊。 對于這樣的攻擊我們的措施是取消這個域名的綁定,讓CC攻擊失去目標。
(2).域名欺騙解析?
如果發現針對域名的CC攻擊,我們可以把被攻擊的域名解析到127.0.0.1這個地址上。我們知道127.0.0.1是本地回環IP是用來進行網絡測試的,如果把被攻擊的域名解析到這個IP上,就可以實現攻擊者自己攻擊自己的目的,這樣他再多的肉雞或者代理也會宕機,讓其自作自受。
(3).更改Web端口?
一般情況下Web服務器通過80端口對外提供服務,因此攻擊者實施攻擊就以默認的80端口進行攻擊,所以,我們可以修改Web端口達到防CC攻擊的目的。運行IIS管理器,定位到相應站點,打開站點“屬性”面板,在“網站標識”下有個TCP端口默認為80,我們修改為其他的端口就可以了。
(4).屏蔽IP?
我們通過命令或在查看日志發現了CC攻擊的源IP,就可以在防火墻中設置屏蔽該IP對Web站點的訪問,從而達到防范攻擊的目的。
End
————————————————
版權聲明:本文為CSDN博主「一只IT小小鳥」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_34777600/article/details/81978262
? ? 有服務器需求請加QQ1911624872咨詢