聲明
背景
漏洞掃描工具掃出“檢測到目標(biāo)主機(jī)可能存在緩慢的HTTP拒絕服務(wù)攻擊”
檢測到目標(biāo)主機(jī)可能存在緩慢的HTTP拒絕服務(wù)攻擊.png
Lighttpd 配置
參數(shù)配置
示意圖
HTTP緩慢攻擊
原理
HTTP 慢速攻擊也叫 slow http attack频蛔,是一種 DoS 攻擊的方式陵究。由于 HTTP 請(qǐng)求底層使用 進(jìn)行會(huì)話,因此如果中間件對(duì)會(huì)話超時(shí)時(shí)間設(shè)置不合理裳擎,并且HTTP在發(fā)送請(qǐng)求的時(shí)候采用慢速發(fā) HTTP 請(qǐng)求,就會(huì)
涯保。如果發(fā)送大量慢速的 HTTP 包就會(huì)導(dǎo)致拒絕服務(wù)攻擊DoS
目的
消耗服務(wù)器的連接和內(nèi)存資源。
如果客戶端持續(xù)建立這樣的連接周伦,那么服務(wù)器上可用的連接將一點(diǎn)一點(diǎn)被占滿夕春,從而導(dǎo)致DoS(拒絕服務(wù))。
分類
1. slow headers
Web應(yīng)用在横辆,Web 服務(wù)器再?zèng)]接收到 2 個(gè)連續(xù)的
\r\n
時(shí)撇他,會(huì)認(rèn)為客戶端沒有發(fā)送完頭部,而持續(xù)的等客戶端發(fā)送數(shù)據(jù)狈蚤。
攻擊者利用這點(diǎn)困肩,發(fā)起一個(gè)HTTP請(qǐng)求,一直不停的發(fā)送HTTP頭部脆侮,消耗服務(wù)器的連接和內(nèi)存資源锌畸。
2. slow body(Slow HTTP POST)
攻擊者發(fā)送一個(gè) HTTP POST 請(qǐng)求,將靖避,使得 Web 服務(wù)器或代理認(rèn)為客戶端要發(fā)送很大的數(shù)據(jù)潭枣,服務(wù)器會(huì)保持連接準(zhǔn)備接收數(shù)據(jù)。
但是在隨后的數(shù)據(jù)發(fā)送中幻捏,(比如10-100s發(fā)一個(gè)字節(jié))盆犁,這樣導(dǎo)致服務(wù)器端一直等待攻擊者發(fā)送數(shù)據(jù)。
3. show read
客戶端與服務(wù)器建立連接并發(fā)送了一個(gè)HTTP請(qǐng)求篡九,客戶端發(fā)送完整的請(qǐng)求給服務(wù)器端谐岁,然后一直保持這個(gè)連接,以榛臼。
如很長一段時(shí)間客戶端不讀取任何數(shù)據(jù)伊佃,通過發(fā)送Zero Window到服務(wù)器,讓服務(wù)器誤以為客戶端很忙沛善,直到連接快超時(shí)前才讀取一個(gè)字節(jié)航揉,以消耗服務(wù)器的連接和內(nèi)存資源。
防御手段
可對(duì)每秒鐘http并發(fā)連接數(shù)進(jìn)行檢查金刁。
對(duì)web服務(wù)器的http頭部傳輸?shù)淖畲笤S可時(shí)間進(jìn)行限制帅涂。
示例
- 工具 slowhttptest,具體安裝步驟參考Slowhttptest安裝步驟
- 測試
slowhttptest -c 400 -H -i 10 -r 200 -t GET -u 目標(biāo)url -x 24 -p 3 -l 200
常用參數(shù):
- -c 400: 總連接數(shù)
- -H: slowloris 模式尤蛮,表示test type為Slow headers
- -B: 表示Slow body
- -X: 表示Slow read
- -i 10: 發(fā)送數(shù)據(jù)間的間隔10s
- -r 200: 200個(gè)連接每秒
- -t GET: 使用GET請(qǐng)求方式
- -u url: 目標(biāo)url格式為具體的接口url
- -x 24: 發(fā)送的最大數(shù)據(jù)成都24
- -p 3: 等待3秒來確定Dos攻擊是否成功
-
-l 200: 測試持續(xù)時(shí)間
測試結(jié)果-無此漏洞.png
測試結(jié)果為“Exit status: No open connections left"漠秋,代表無此漏洞。
測試結(jié)束后connected數(shù)量較多抵屿,closed數(shù)量很少或0,說明之前建立的400個(gè)慢速攻擊測試連接沒有關(guān)閉捅位,存在漏洞轧葛。
- 附上個(gè)類型攻擊的結(jié)果
- slow headers
slowhttptest -c 400 -H -i 10 -r 200 -t GET -u 目標(biāo)url -x 24 -p 3 -l 200
- slow body
slowhttptest -c 400 -B -i 10 -r 200 -s 20000 -t GET -u 目標(biāo)url -x 24 -p 3 -l 200
- slow read
slowhttptest -c 400 -X -i 10 -r 200 -s 20000 -t GET -u 目標(biāo)url -x 24 -p 3 -l 200