一.引言
HTTP Flood攻擊 DDoS的一種,別稱叫做CC攻擊(CC是Challenge Collapsar的縮寫,而Collapsar是國內一家著名安全公司的DDoS防御設備) ,是針對Web服務在 第七層協(xié)議發(fā)起的攻擊,重點在于突破前端的cache,通過HTTP頭中的字段設置直接到達Web Server本身.第七層主要是 應用層,是一些終端的應用,比如(各種文件下載)、瀏覽器、QQ等,可以將其理解為在電腦屏幕上可以看到的東西,也就是我們常說的終端應用。HTTP Flood攻擊的巨大危害性主要表現(xiàn)在三個方面:發(fā)起方便、過濾困難、影響深遠。一般的攻擊者會選擇搜索之類需要做大量數(shù)據查詢的頁面作為攻擊目標,可以消耗服務器盡可能多的資源。攻擊時盡量選擇正常用戶也通過APP訪問的頁面,一般來說就是各種Web API。正常用戶和惡意流量都是來源于APP,人機差別很小,基本融為一體難以區(qū)分
二.攻擊原理
攻擊者通過端口掃描程序在互聯(lián)網上尋找匿名的HTTP 代理(代理是一種比較豐富的資源,花幾天時間獲取代理并不是難事,因此攻擊容易發(fā)起而且可以長期高強度的持續(xù))或者SOCKS代理或僵尸主機向目標服務器發(fā)起大量的 HTTP報文請求,請求涉及 數(shù)據庫操作的URI(Universal Resource Identifier)或 其它消耗系統(tǒng)資源的URI,并且攻擊在HTTP層發(fā)起,極力模仿正常用戶的網頁請求行為,與網站業(yè)務緊密相關,安全廠商很難提供一套通用的且不影響用戶體驗的方案,從而造成服務器資源耗盡,無法響應正常請求,這個攻擊類型和一種網絡攻擊有點像,就是 CC攻擊(Challenge Collapsar),兩者區(qū)別就在于一個是 消耗系統(tǒng)資源,一個是發(fā)送大量數(shù)據包 消耗服務器資源,都是打的持續(xù)仗,最終使服務器無法響應正常請求為止.HTTP Flood攻擊會引起嚴重的連鎖反應,不僅僅是直接導致被攻擊的Web前端響應緩慢,還間接攻擊到后端的業(yè)務層邏輯以及更后端的數(shù)據庫服務,增大它們的壓力,甚至對日志存儲服務器都帶來影響。例如門戶網站經常受到的HTTP Flood攻擊,攻擊的最大特征就是選擇消耗服務器CPU或內存資源的URI,如具有數(shù)據庫操作的URI

三.防御原理
HTTP Flood源認證
源認證防御方式是防御HTTP Flood最常用的手段,這種防御方式適用于客戶端為瀏覽器的HTTP服務器場景,因為瀏覽器支持完整的HTTP協(xié)議棧,可以正?;貞囟ㄏ驁笪幕蛘呤球炞C碼,Anti-DDoS設備基于目的IP地址對HTTP報文進行統(tǒng)計,當HTTP報文達到設定的告警閾值時,啟動源認證防御功能,源認證防御包含以下三種方式:
基本模式(META刷新)
該模式可有效阻止來自非瀏覽器客戶端的訪問,如果僵尸工具沒有實現(xiàn)完整的HTTP協(xié)議棧,不支持自動重定向,無法通過認證。而瀏覽器支持自動重定向,可以通過認證,處理過程如圖所示,該模式不會影響用戶體驗,但防御效果低于增強模式

當網絡中有HTTP代理服務器時,只要有一次源認證通過,Anti-DDoS設備就會將代理服務器IP地址加入白名單,后續(xù)僵尸主機通過使用代理服務器就會繞開源認證,導致防御失效。在這種有代理服務器的網絡中,建議開啟代理檢測功能,檢測HTTP請求是否為通過代理發(fā)出的請求。如果是,Anti-DDoS設備會從HTTP報文中獲取請求者的實際IP地址,將通過認證的真實IP地址和代理服務器IP地址加入白名單,后續(xù)只有此實際源IP地址發(fā)送的報文才能直接通過,其他源IP發(fā)送報文時,Anti-DDoS設備會對其進行源認證,達到防御效果。
增強模式(驗證碼認證)
有些僵尸工具實現(xiàn)了重定向功能,或者攻擊過程中使用的免費代理支持重定向功能,導致基本模式的防御失效,通過推送驗證碼的方式可以避免此類防御失效。此時通過讓用戶輸入驗證碼,可以判斷HTTP訪問是否由真實的用戶發(fā)起,而不是僵尸工具發(fā)起的訪問。因為僵尸網絡攻擊依靠自動植入PC的僵尸工具發(fā)起,無法自動響應隨機變化的驗證碼,故可以有效的防御攻擊。為避免防御對正常用戶體驗的影響,此防御方式僅對超過源訪問閾值的異常源實施。具體處理過程如圖所示

注意:
源認證對于機頂盒做視頻點播場景防護、或者部分移動網絡防護不適用。當客戶端是機頂盒、特定移動網絡時,客戶端無法輸入驗證碼,建議使用動態(tài)指紋學習或URI監(jiān)控防御
302重定向模式
基本模式中的重定向功能只能對整個網頁進行重定向,不能針對網頁中的內嵌資源(比如:圖片)進行重定向。當用戶請求的頁面與頁面內嵌資源不在同一個服務器上,內嵌資源所在服務器發(fā)生異常時,可以對嵌套資源服務器啟動302重定向防御,探測訪問源是否為真實瀏覽器。真實瀏覽器支持重定向功能,可以自動完成重定向過程,不會影響客戶體驗,如果在允許的認證時間周期內,對同一源IP地址的認證次數(shù)大于最大值時,則將該源IP地址判定為攻擊源,加入動態(tài)黑名單
HTTP源統(tǒng)計
HTTP源統(tǒng)計是在基于目的IP流量異常的基礎上,再啟動針對源IP流量進行統(tǒng)計。Anti-DDoS設備首先對到達目的IP的流量進行統(tǒng)計,當目的IP流量觸發(fā)告警閾值時,再啟動到達這個目的IP的每個源的流量進行統(tǒng)計,判定具體某個源流量異常,并對源IP的流量進行限速。
HTTP源統(tǒng)計功能可以更準確的定位異常源,并對異常源發(fā)出的流量進行限速。
URI監(jiān)測
URI監(jiān)測是HTTP源認證防御的補充功能,當通過HTTP源認證的流量還是超過閾值時,可以啟用URI監(jiān)測。Anti-DDoS設備對HTTP源認證過程中加入白名單的源IP也會進行URI監(jiān)測。
當指定時間內,某個URI的訪問流量超過一定閾值時,Anti-DDoS設備啟動針對源IP的URI行為監(jiān)測。當這個源IP地址對某個URI的訪問數(shù)與總訪問數(shù)的比例超過閾值時,則將該源IP地址作為攻擊源并加入動態(tài)黑名單。在配置URI監(jiān)測時,可將消耗內存或計算資源多、容易受攻擊的URI加入“重點監(jiān)測URI”列表。
URI源指紋學習功能
指紋學習方法適用于攻擊源訪問的URI比較固定。因為如果要形成攻擊效果,攻擊者一般都事先探測,找到容易消耗系統(tǒng)資源的URI作為攻擊目標,然后一個攻擊源的一個會話上會有多個針對該URI的請求,最終呈現(xiàn)為該源對選定的URI發(fā)送大量的請求報文。動態(tài)指紋學習正是基于這個原理,Anti-DDoS設備對源訪問的URI進行指紋學習,找到攻擊目標URI指紋,如果對該URI指紋的命中次數(shù)高于設置的閾值就將該源加入黑名單。
四.防御方法
1.主動抑制
為了讓Nginx支持更多的并發(fā)連接數(shù),根據實際情況對工作進程數(shù)和每個工作進程支持的最大連接數(shù)進行調整。例如設置“ worker_processes 10”和“worker_connections 1024”,那這臺服務器支持的最大連接數(shù)就是10×1024=10240。
worker_processes 10;
events {
use epoll;
worker_connections 1024;
}
Nginx 0.7開始提供了2個限制用戶連接的模塊: NginxHttpLimitZoneModule和 NginxHttpLimitReqModule
NginxHttpLimitZoneModule可以根據條件進行并發(fā)連接數(shù)控制
例如可以定義以下代碼:
http {
limit_zone my_zone $binary_remote_addr 10m;
server {
location /somedir/ {
limit_conn my_zone 1;
}
}
}
其中“l(fā)imit_zone my_zone $binary_remote_addr 10m” 的意思是 定義一個名稱為my_zone的存儲區(qū)域、 my_zone中的內容為遠程IP地址、my_zone的大小為10M;“ location /somedir/” 的意思是針對somedir目錄應用規(guī)則;“ limit_conn my_zone 1”的意思是針對上面定義的my_zone 記錄區(qū)記錄的IP地址在指定的目錄中只能建立一個連接
NginxHttpLimitReqModule可以根據條件進行請求頻率的控制
例如可以定義以下代碼:
http {
limit_req_zone $binary_remote_addr zone=my_req_zone: 10m rate=1r/s;
...
server {
...
location /somedir/ {
limit_req_zone zone= my_req_zone burst=2;
}
其中“l(fā)imit_req_zone $binary_remote_addr zone=my_req_zone:10m rate=1r/s” 的意思是定義一個名稱為 my_req_zone的存儲區(qū)域,my_req_zone內容為遠程IP地址,my_req_zone大小為 10M,my_req_zone中的平均請求速率只能為1個每秒;“ location /somedir/ ” 的意思是針對somedir目錄應用規(guī)則;“l(fā) imit_req_zone zone= my_req_zone burst=2”的意思是針對上面定義的my_req_zone記錄區(qū)記錄的IP地址在請求指定的目錄中的內容時最高2個每秒的突發(fā)請求速率。
當有連接觸發(fā)上訴規(guī)則時,Nginx會報“503 Service Temporarily Unavailable”的錯誤,停止用戶請求。返回一個503,對服務器來說影響不大,只占用一個nginx的線程而已,相對來說還是很劃算的
2.被動防御
主動防御已經抵擋了大多數(shù)HTTP GET FLOOD攻擊,但攻擊者會總會找到薄弱的環(huán)節(jié)進行攻擊,所以我在這里介紹一下被動防御的一些方法
(1).封IP地址
訪問者通過瀏覽器正常訪問網站,與服務器建立的連接一般不會超過20個,可以通過腳本禁止連接數(shù)過大的IP訪問.
以下腳本通過netstat命令列舉所有連接,將連接數(shù)最高的一個IP如果連接數(shù)超過150,則通過 iptables阻止訪問
#!/bin/sh
status=`netstat -na|awk '$5 ~ /[0-9]+:[0-9]+/ {print $5}' |awk -F ":" -- '{print $1}' |sort -n|uniq -c |sort -n|tail -n 1`
NUM=`echo $status|awk '{print $1}'`
IP=`echo $status|awk '{print $2}'`
result=`echo "$NUM > 150" | bc`
if [ $result = 1 ]
then
echo IP:$IP is over $NUM, BAN IT!
/sbin/iptables -I INPUT -s $IP -j DROP
fi
運行crontab -e,將上述腳本添加到crontab每分鐘自動運行:
* * * * * /root/xxxx.sh
通過apache自帶的ab工具進行服務器壓力測試:
ab -n 1000 -c 100 http://www.xxx.com/index.php
測試完成后,就可以看到系統(tǒng)中有IP被封的提示:
[root@xxxxxx ~]#tail /var/spool/mail/root
Content-Type: text/plain; charset=ANSI_X3.4-1968
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <;PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
IP:58.246.xx.xx is over 1047, BAN IT!
至此,HTTP GET FLOOD防御成功文章來源:http://www.zghlxwxcb.cn/news/detail-419409.html
(2).根據特征碼屏蔽請求(對CC攻擊效果較好)
一般同一種CC攻擊工具發(fā)起的攻擊請求包總是相同的,而且和正常請求有所差異。當服務器遭遇CC攻擊時,可以快速查看日志,分析其請求的特征,比如User-agent。
下面的是某一次CC攻擊時的User-agent
Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE 3.01)Cache-Control: no-store, must-revalidate
幾乎沒有正常的瀏覽器會在User-agent中帶上“must-revalidate”這樣的關鍵字,所以可以以這個為特征進行過濾,將User-agent中帶有“must-revalidate”的請求全部拒絕訪問,在nginx配置里面的代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-419409.html
if ($http_user_agent ~ must-revalidate) {
return 403;
}
到了這里,關于HTTP Flood攻擊與防御原理的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!