http慢速攻擊簡介
http慢速攻擊是利用Http現有合法機制,在建立了與Http伺服器的連接配接後,盡量長時間保持該連接配接,不釋放,達到對http伺服器的攻擊。
發展到今天,慢速攻擊也多種多樣可分為以下幾種:
slow post:攻擊者通過發送post封包向伺服器請求送出資料,将總封包長度設定為一個很大是數值,但是在随後的資料發送中,每次隻發送很小的白問,這樣導緻伺服器端一直等待攻擊者發送資料。
Slow headers:Web應用在處理HTTP請求之前都要先接收完所有的HTTP頭部,因為HTTP頭部中包含了一些Web應用可能用到的重要的資訊。攻擊者利用這點,發起一個HTTP請求,一直不停的發送HTTP頭部,消耗伺服器的連接配接和記憶體資源。抓包資料可見,攻擊用戶端與伺服器建立TCP連接配接後,每30秒才向伺服器發送一個HTTP頭部,而Web伺服器再沒接收到2個連續的\r\n時,會認為用戶端沒有發送完頭部,而持續的等等用戶端發送資料。
Slow read:用戶端與伺服器建立連接配接并發送了一個HTTP請求,用戶端發送完整的請求給伺服器端,然後一直保持這個連接配接,以很低的速度讀取Response,比如很長一段時間用戶端不讀取任何資料,通過發送Zero Window到伺服器,讓伺服器誤以為用戶端很忙,直到連接配接快逾時前才讀取一個位元組,以消耗伺服器的連接配接和記憶體資源。抓包資料可見,用戶端把資料發給伺服器後,伺服器發送響應時,收到了用戶端的ZeroWindow提示(表示自己沒有緩沖區用于接收資料),伺服器不得不持續的向用戶端發出ZeroWindowProbe包,詢問用戶端是否可以接收資料。
示例
與任何一個開放了HTTP通路的伺服器HTTP伺服器,先建立了一個連接配接,指定一個比較大的content-length,然後以非常低的速度發包。
比如1-10s發一個位元組,然後維持住這個連接配接不斷開。
如果用戶端持續建立這樣的連接配接,那麼伺服器上可用的連接配接将一點一點被占滿,進而導緻拒絕服務。
和CC攻擊一樣,隻要Web伺服器開放了Web服務,那麼它就可以是一個靶子,HTTP協定在接收到request之前是不對請求内容作校驗的,是以即使你的Web應用沒有可用的form表單,這個攻擊一樣有效。
在用戶端以單線程方式建立較大數量的無用連接配接,并保持持續發包的代價非常的低廉。實際試驗中一台普通PC可以建立的連接配接在3000個以上。這對一台普通的Web server,将是緻命的打擊。更不用說結合殭屍電腦群做分布式DoS了。
常見的慢速攻擊工具:Slowhttptest和Slowloris
抓包分析如下:
防護手段
真對http慢速攻擊的特點,防護時可對每秒鐘http并發連接配接數進行檢查。
當每秒種http并發連接配接數超過設定值時,會觸發http封包檢查,檢查出一下任意一種情況,都認定受到http慢速連接配接攻擊。
1.連續多個httppost封包的總長度都很大,但是其http載荷長度都很小。
2.連續多個httpget/post封包的封包頭都沒有結束辨別。
将該源ip判定為攻擊源加入黑名單,同時斷開此ip位址與http伺服器的連接配接。
對web伺服器的http頭部傳輸的最大許可時間進行限制,修改成最大許可時間為20秒。
統計每個TCP連接配接的時長并計算機關時間内通過的封包數量即可做精确識别。一個TCP連接配接中,HTTP封包太少和封包太多都是不正常的,過少可能是慢速連接配接攻擊。
過多可能是使用HTTP 1.1協定進行deHTTP Flood攻擊,在一個TCP連接配接中發送多個HTTP請求。
周期内統計封包數量。一個TCP連接配接,HTTP請求的封包中,封包過多或者封包過少都是有問題的,如果一個周期内封包數量非常少,那麼它就可能是慢速攻擊;如果一個周期内封包數量非常多,那麼它就可能是一個CC攻擊。
限制HTTP請求頭的最大許可時間。超過最大許可時間,如果資料還沒有傳輸完成,那麼它就有可能是一個慢速攻擊。