慢速攻擊原理:
http慢速攻擊是利用http合法機制,在建立連接后,盡量長時間保持連接,不釋放,達到對HTTP服務攻擊,攻擊者發送POST請求,自行構造報文向服務器提交數據,將報文長度設置一個很大的值,且在隨后每次發送中,每次只發送一個很小的報文,這樣導致服務器一直等待數據,連接始終一直被占用。
如果攻擊者使用多線程或傀儡機子去做同樣操作,服務器WEB容器很快就被占滿TCP連接而不再接受新請求
slowhttptest是一款對服務器進行慢攻擊的測試軟件,包含了幾種攻擊方式,像Slowloris、SlowHTTP POST、Slow Read attack等。
總而言之,該工具的原理就是設法讓服務器等待,當服務器在保持連接等待時,就消耗了資源。
1、 最具代表性的是rsnake發明的Slowloris,又被稱為slow headers。
【攻擊原理】
HTTP協議規定,HTTP Request以\r\n\r\n(0d0a0d0a)結尾表示客戶端發送結束,服務端開始處理。那么,如果永遠不發送\r\n\r\n會如何?Slowloris就是利用這一點來做DDoS攻擊的。攻擊者在HTTP請求頭中將Connection設置為Keep-Alive,要求Web Server保持TCP連接不要斷開,隨后緩慢地每隔幾分鍾發送一個key-value格式的數據到服務端,如a:b\r\n,導致服務端認為HTTP頭部沒有接收完成而一直等待。如果攻擊者使用多線程或者傀儡機來做同樣的操作,服務器的Web容器很快就被攻擊者占滿了TCP連接而不再接受新的請求。
2、Slowloris的變種--Slow HTTP POST,也稱為Slow body。
【攻擊原理】
在POST提交方式中,允許在HTTP的頭中聲明content-length,也就是POST內容的長度。
在提交了頭以后,將后面的body部分卡住不發送,這時服務器在接受了POST長度以后,就會等待客戶端發送POST的內容,攻擊者保持連接並且以10S-100S一個字節的速度去發送,就達到了消耗資源的效果,因此不斷地增加這樣的鏈接,就會使得服務器的資源被消耗,最后可能宕機。
3、Slow Read attack
【攻擊原理】
采用調整TCP協議中的滑動窗口大小,來對服務器單次發送的數據大小進行控制,使得服務器需要對一個回應分成很多個包來發送。要使這種攻擊效果更加明顯,請求的資源要盡量大。
用Wireshark抓包可以看出,當請求a.wmv資源(大小有9M多)時,客戶端windowssize被刻意設置為1152字節。客戶端緩沖區在被來自服務器的數據填滿后,發出了[TCP ZeroWindow]告警,迫使服務端等待。
受到以上各種慢速攻擊后,服務器再無法訪問
解決辦法:
1.使用NGINX,因為其本身就對慢速攻擊有很好防護
2.tomcat可通過運行模式NIO和connectionTimeout值進行緩解
3.dos deflate軟件:https://www.cnblogs.com/cloudapps/p/4996050.html
另外,在tomcat中配置connectionTimeout參數也可以防止head攻擊下的拒絕服務,但是對於body和read情況下沒有能力解決(論壇上也說了,tomcat就不是做這個事兒的)。