1 詳細描述:
緩慢的http拒絕服務攻擊是一種專門針對於Web的應用層拒絕服務攻擊,攻擊者操縱網絡上的肉雞,對目標Web服務器進行海量http request攻擊,直到服務器帶寬被打滿,造成了拒絕服務。
慢速HTTP拒絕服務攻擊經過不斷的演變和發展,主要有三種攻擊類型,分別是Slow headers、Slow body、Slow read。以Slow headers為例,Web應用在處理HTTP請求之前都要先接收完所有的HTTP頭部,因為HTTP頭部中包含了一些Web應用可能用到的重要的信息。攻擊者利用這點,發起一個HTTP請求,一直不停的發送HTTP頭部,消耗服務器的連接和內存資源。抓包數據可見,攻擊客戶端與服務器建立TCP連接后,每40秒才向服務器發送一個HTTP頭部,而Web服務器再沒接收到2個連續的\r\n時,會認為客戶端沒有發送完頭部,而持續的等等客戶端發送數據。如果惡意攻擊者客戶端持續建立這樣的連接,那么服務器上可用的連接將一點一點被占滿,從而導致拒絕服務。這種攻擊類型稱為慢速HTTP拒絕服務攻擊。
2 原理
是以極低的速度往服務器發送HTTP請求。由於Web Server對於並發的連接數都有一定的上限,因此若是惡意地占用住這些連接不釋放,那么Web Server的所有連接都將被惡意連接占用,從而無法接受新的請求,導致拒絕服務。
要保持住這個連接,RSnake構造了一個畸形的HTTP請求,准確地說,是一個不完整的HTTP請求。
- GET / HTTP/1.1\r\n
- HOST: host\r\n
- User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; )\r\n
- Content-Length: 42\r\n
在正常的HTTP包頭中,是以兩個CLRF表示HTTP Headers部分結束的。
由於Web Server只收到了一個\r\n,因此將認為HTTP Headers部分沒有結束,並保持此連接不釋放,繼續等待完整的請求。此時客戶端再發送任意HTTP頭,保持住連接即可。
X-a: b\r\n
當構造多個連接后,服務器的連接數很快就會達到上限。
3 測試工具SlowHTTPTest
安裝方法一:
1 安裝openssl和libssl-dev
- sudo apt-get install openssl
- sudo apt-get install libssl-dev
安裝libssl如果失敗,執行apt-get update,然后再執行sudo apt-get install libssl-dev
2 安裝slowhttptest
- git clone https://github.com/shekyan/slowhttptest.git
- cd slowhttptest
- ./configure
- make
- make install
安裝方法二:
- sudo apt-get install slowhttptest
使用:
測試http緩慢攻擊可以這樣,把url換成自己的:
- slowhttptest -c 1000 -X -g -o -slow_read_stats -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u http://192.168.18.252/bWAPP/sm_dos_1.php -p 8
參數:
- -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()操作
4 解決辦法:
針對不同的Server其對慢速http拒絕服務攻擊防范方法也不同,建議使用以下措施防范慢速http拒絕服務攻擊:
WebSphere
========
- 1、限制 HTTP 數據的大小
在WebSphere Application Server 中進行如下設置:
任何單個 HTTP 頭的默認最大大小為 32768 字節。可以將它設置為不同的值。
HTTP 頭的默認最大數量為 50。可以將它設置為不同的限制值。
另一種常見的 DOS 攻擊是發送一個請求,這個請求會導致一個長期運行的 GET 請求。WebSphere Application Server Plug-in 中的 ServerIOTimeoutRetry 屬性可限制任何請求的重試數量。這可以降低這種長期運行的請求的影響。
設置限制任何請求正文的最大大小。詳見參考鏈接。
- 2、設置keepalive參數
打開ibm http server安裝目錄,打開文件夾conf,打開文件httpd.conf,查找KeepAlive值,改ON為OFF,其默認為ON。
這個值說明是否保持客戶與HTTP SERVER的連接,如果設置為ON,則請求數到達MaxKeepAliveRequests設定值時請求將排隊,導致響應變慢。
Weblogic
============
1、在配置管理界面中的協議->一般信息下設置 完成消息超時時間小於400
2、在配置管理界面中的協議->HTTP下設置 POST 超時、持續時間、最大 POST 大小為安全值范圍。
Nginx
============
1、通過調整$request_method,配置服務器接受http包的操作限制;
2、在保證業務不受影響的前提下,調整client_max_body_size, client_body_buffer_size, client_header_buffer_size,large_client_header_buffersclient_body_timeout, client_header_timeout的值,必要時可以適當的增加;
3、對於會話或者相同的ip地址,可以使用HttpLimitReqModule and HttpLimitZoneModule參數去限制請求量或者並發連接數;
4、根據CPU和負載的大小,來配置worker_processes 和 worker_connections的值,公式是:max_clients = worker_processes * worker_connections。
Apache
============
建議使用mod_reqtimeout和mod_qos兩個模塊相互配合來防護。
1、mod_reqtimeout用於控制每個連接上請求發送的速率。配置例如:
#請求頭部分,設置超時時間初始為10秒,並在收到客戶端發送的數據后,每接收到500字節數據就將超時時間延長1秒,但最長不超過40秒。可以防護slowloris型的慢速攻擊。
RequestReadTimeout header=10-40,minrate=500
#請求正文部分,設置超時時間初始為10秒,並在收到客戶端發送的數據后,每接收到500字節數據就將超時時間延長1秒,但最長不超過40秒。可以防護slow message body型的慢速攻擊。
RequestReadTimeout body=10-40,minrate=500
需注意,對於HTTPS站點,需要把初始超時時間上調,比如調整到20秒。
2、mod_qos用於控制並發連接數。配置例如:
當服務器並發連接數超過600時,關閉keepalive
QS_SrvMaxConnClose 600
限制每個源IP最大並發連接數為50
QS_SrvMaxConnPerIP 50
這兩個數值可以根據服務器的性能調整。
IHS服務器
============
請您先安裝最新補丁包,然后啟用mod_reqtimeout模塊,在配置文件中加入:
LoadModule reqtimeout_module modules/mod_reqtimeout.so
為mod_reqtimeout模塊添加配置:
<IfModule mod_reqtimeout.c>
RequestReadTimeout header=10-40,MinRate=500 body=10-40,MinRate=500
</IfModule>
對於HTTPS站點,建議header=20-40,MinRate=500。
參見:http://www-01.ibm.com/support/docview.wss?uid=swg21652165
F5負載均衡修復建議
============
關於F5的慢速攻擊防護配置,請參考以下鏈接:
https://support.f5.com/kb/en-us/solutions/public/10000/200/sol10260.html
https://devcentral.f5.com/articles/mitigating-slow-http-post-ddos-attacks-with-irules-ndash-follow-up