1)什么是慢速攻擊
一說起慢速攻擊,就要談談它的成名歷史了。HTTP Post慢速DoS攻擊第一次在技術社區(qū)被正式披露是2012年的OWASP大會上,由Wong Onn Chee 和 Tom Brennan共同演示了使用這一技術攻擊的威力。
這個攻擊的基本原理如下:對任何一個開放了HTTP訪問的服務器HTTP服務器,先建立了一個連接,指定一個比較大的content-length,然后以非常低的速度發(fā)包,比如1-10s發(fā)一個字節(jié),然后維持住這個連接不斷開。如果客戶端持續(xù)建立這樣的連接,那么服務器上可用的連接將一點一點被占滿,從而導致拒絕服務。
和CC攻擊一樣,只要Web服務器開放了Web服務,那么它就可以是一個靶子,HTTP協(xié)議在接收到request之前是不對請求內(nèi)容作校驗的,所以即使你的Web應用沒有可用的form表單,這個攻擊一樣有效。
在客戶端以單線程方式建立較大數(shù)量的無用連接,并保持持續(xù)發(fā)包的代價非常的低廉。實際試驗中一臺普通PC可以建立的連接在3000個以上。這對一臺普通的Web server,將是致命的打擊。更不用說結合肉雞群做分布式DoS了。
鑒于此攻擊簡單的利用程度、拒絕服務的后果、帶有逃逸特性的攻擊方式,這類攻擊一炮而紅,成為眾多攻擊者的研究和利用對象。
2)慢速攻擊的分類
發(fā)展到今天,慢速攻擊也多種多樣,其種類可分為以下幾種:
Slow headers:Web應用在處理HTTP請求之前都要先接收完所有的HTTP頭部,因為HTTP頭部中包含了一些Web應用可能用到的重要的信息。攻擊者利用這點,發(fā)起一個HTTP請求,一直不停的發(fā)送HTTP頭部,消耗服務器的連接和內(nèi)存資源。抓包數(shù)據(jù)可見,攻擊客戶端與服務器建立TCP連接后,每30秒才向服務器發(fā)送一個HTTP頭部,而Web服務器再沒接收到2個連續(xù)的\r\n時,會認為客戶端沒有發(fā)送完頭部,而持續(xù)的等等客戶端發(fā)送數(shù)據(jù)。
Slow read:客戶端與服務器建立連接并發(fā)送了一個HTTP請求,客戶端發(fā)送完整的請求給服務器端,然后一直保持這個連接,以很低的速度讀取Response,比如很長一段時間客戶端不讀取任何數(shù)據(jù),通過發(fā)送Zero Window到服務器,讓服務器誤以為客戶端很忙,直到連接快超時前才讀取一個字節(jié),以消耗服務器的連接和內(nèi)存資源。抓包數(shù)據(jù)可見,客戶端把數(shù)據(jù)發(fā)給服務器后,服務器發(fā)送響應時,收到了客戶端的ZeroWindow提示(表示自己沒有緩沖區(qū)用于接收數(shù)據(jù)),服務器不得不持續(xù)的向客戶端發(fā)出ZeroWindowProbe包,詢問客戶端是否可以接收數(shù)據(jù)。
慢速攻擊主要利用的是thread-based架構的服務器的特性,這種服務器會為每個新連接打開一個線程,它會等待接收完整個HTTP頭部才會釋放連接。比如Apache會有一個超時時間來等待這種不完全連接(默認是300s),但是一旦接收到客戶端發(fā)來的數(shù)據(jù),這個超時時間會被重置。正是因為這樣,攻擊者可以很容易保持住一個連接,因為攻擊者只需要在即將超時之前發(fā)送一個字符,便可以延長超時時間。而客戶端只需要很少的資源,便可以打開多個連接,進而占用服務器很多的資源。
經(jīng)驗證,Apache、httpd采用thread-based架構,很容易遭受慢速攻擊。而另外一種event-based架構的服務器,比如nginx和lighttpd則不容易遭受慢速攻擊。
Apache服務器現(xiàn)在使用較多的有三種簡單防護方式。
mod_reqtimeout:Apache2.2.15后,該模塊已經(jīng)被默認包含,用戶可配置從一個客戶端接收HTTP頭部和HTTPbody的超時時間和最小速率。如果一個客戶端不能在配置時間內(nèi)發(fā)送完頭部或body數(shù)據(jù),服務器會返回一個408REQUEST TIME OUT錯誤。配置文件如下:
< IfModule mod_reqtimeout.c >RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500 < /IfModule >
mod_qos:Apache的一個服務質(zhì)量控制模塊,用戶可配置各種不同粒度的HTTP請求閾值,配置文件如下:
< IfModule mod_qos.c > /# handle connections from up to 100000 different IPsQS_ClientEntries 100000 /# allow only 50 connections per IPQS_SrvMaxConnPerIP 50 /# limit maximum number of active TCP connections limited to 256MaxClients 256 /# disables keep-alive when 180 (70%) TCP connections are occupiedQS_SrvMaxConnClose 180 /# minimum request/response speed (deny slow clients blocking the server, keeping connections open without requesting anythingQS_SrvMinDataRate 1501200 < /IfModule >
mod_security:一個開源的WAF模塊,有專門針對慢速攻擊防護的規(guī)則,配置如下:
SecRule RESPONSE_STATUS “@streq 408” “phase:5,t:none,nolog,pass, setvar:ip.slow_dos_counter=+1, expirevar:ip.slow_dos_counter=60, id:’1234123456′”
SecRule IP:SLOW_DOS_COUNTER “@gt 5” “phase:1,t:none,log,drop,
msg:’Client Connection Dropped due to high number of slow DoS alerts’, id:’1234123457′”
傳統(tǒng)的流量清洗設備針對CC攻擊,主要通過閾值的方式來進行防護,某一個客戶在一定的周期內(nèi),請求訪問量過大,超過了閾值,清洗設備通過返回驗證碼或者JS代碼的方式。這種防護方式的依據(jù)是,攻擊者們使用肉雞上的DDoS工具模擬大量http request,這種工具一般不會解析服務端返回數(shù)據(jù),更不會解析JS之類的代碼。因此當清洗設備截獲到HTTP請求時,返回一段特殊java script代碼,正常用戶的瀏覽器會處理并正常跳轉(zhuǎn)不影響使用,而攻擊程序會攻擊到空處。
而對于慢速攻擊來說,通過返回驗證碼或者JS代碼的方式依然能達到部分效果。但是根據(jù)慢速攻擊的特征,可以輔助以下幾種防護方式:
1、周期內(nèi)統(tǒng)計報文數(shù)量。一個TCP連接,HTTP請求的報文中,報文過多或者報文過少都是有問題的,如果一個周期內(nèi)報文數(shù)量非常少,那么它就可能是慢速攻擊;如果一個周期內(nèi)報文數(shù)量非常多,那么它就可能是一個CC攻擊。
2、限制HTTP請求頭的最大許可時間。超過最大許可時間,如果數(shù)據(jù)還沒有傳輸完成,那么它就有可能是一個慢速攻擊。
如果你不懂技術,可聯(lián)系主機吧幫忙防御,我們專業(yè)防御各類CC攻擊,DDOS攻擊,安全可靠!
好好好