漏洞原理
HTTP慢速攻擊也叫slow http attack,是一種DoS攻擊的方式。由於HTTP請求底層使用TCP網絡連接進行會話,因此如果中間件對會話超時時間設置不合理,並且HTTP在發送請求的時候采用慢速發HTTP請求,就會導致占用一個HTTP連接會話。如果發送大量慢速的HTTP包就會導致拒絕服務攻擊DoS。
3種攻擊方式
- Slow headers(也稱slowloris):Web應用在處理HTTP請求之前都要先接收完所有的HTTP頭部,Web服務器再沒接收到2個連續的\r\n時,會認為客戶端沒有發送完頭部,而持續的等等客戶端發送數據,消耗服務器的連接和內存資源。
- Slow body(也稱Slow HTTP POST):攻擊者發送一個HTTP POST請求,該請求的Content-Length頭部值很大,使得Web服務器或代理認為客戶端要發送很大的數據。服務器會保持連接准備接收數據,但攻擊客戶端每次只發送很少量的數據,使該連接一直保持存活,消耗服務器的連接和內存資源。
- Slow read(也稱Slow Read attack):客戶端與服務器建立連接並發送了一個HTTP請求,客戶端發送完整的請求給服務器端,然后一直保持這個連接,以很低的速度讀取Response,比如很長一段時間客戶端不讀取任何數據,通過發送Zero Window到服務器,讓服務器誤以為客戶端很忙,直到連接快超時前才讀取一個字節,以消耗服務器的連接和內存資源。
漏洞驗證
使用工具:slowhttptest
SlowHTTPTest是一款對服務器進行慢攻擊的測試軟件,所謂的慢攻擊就是相對於cc或者DDoS的快而言的,並不是只有量大速度快才能把服務器搞掛,使用慢攻擊有時候也能到達同一效果。slowhttptest包含了之前幾種慢攻擊的攻擊方式,包括slowloris, Slow HTTP POST, Slow Read attack等。那么這些慢攻擊工具的原理就是想辦法讓服務器等待,當服務器在保持連接等待時,自然就消耗了資源。
安裝工具
Kali Linux:
apt-get install slowhttptest
其他Linux發行版:
./configure make sudo make install
參數說明
-a 一開始開始值范圍說明符用於范圍頭測試 -b 將字節限制的范圍說明符用於范圍頭測試 -c 連接數限制為65539 -d proxy host:port用於指導所有流量通過web代理 -e proxy host:port端口用於指導只有探針交通通過web代理 -h,B,R或x 指定減緩在頭部分或在消息體,- R 允許范圍檢驗,使慢讀測試- x -g 生成統計數據在CSV和HTML格式,模式是緩慢的xxx。csv / html,其中xxx是時間和日期 -i seconds秒間隔跟蹤數據在幾秒鍾內,每個連接 -k 管道因子次數重復請求在同一連接慢讀測試如果服務器支持HTTP管道內襯。 -l 在幾秒鍾內,秒測試時間 -n 秒間隔從接收緩沖區讀取操作 -o 文件定義輸出文件路徑和/或名稱,如果指定有效- g -p 秒超時等待HTTP響應在探頭連接后,服務器被認為是不可訪問的 -r seconds連接速度 -s 字節值的內容長度標題詳細說明,如果指定- b -t verb自定義 -u URL目標URL,相同的格式鍵入瀏覽器,e。g https://host[:port]/ -v level冗長等級0 – 4的日志 -w 字節范圍廣告的窗口大小會選擇從 -x 字節最大長度的跟蹤數據結束 -y 字節范圍廣告的窗口大小會選擇從 -z 字節從接收緩沖區讀取字節與單一的read()操作
驗證命令
slowloris模式:
slowhttptest -c 1000 -H -i 10 -r 200 -t GET -u https://yourtarget.com/index.html -x 24 -p 3
Slow Body攻擊:
slowhttptest -c 1000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u http://www.mywebsite.com -x 10 -p 3
Slow Read模式:
slowhttptest -c 1000 -X -r 1000 -w 10 -y 20 -n 5 -z 32 -u http://yourtarget.com -p 5 -l 350 -e x.x.x.x:8080
判斷依據
1、當服務器可控,可以通過以下命令來確認是否存在該漏洞: pgrep http | wc -l 進程數量 netstat -antp | grep 443 |wc -l 網絡連接數量 2、在攻擊的時間段,服務無法正常訪問則存在漏洞。
修復建議
- 設定URL白名單和黑名單,識別壞的IP;
- 設置一個絕對連接超時;
- 定義最小的輸入數據速率;
- 對web服務器的http頭部傳輸的最大許可時間進行限制,修改成最大許可時間為20秒。
