Apache和Squid的末日? -- 试用Slowloris HTTP DoS

| 2 Comments | No TrackBacks
最近Slowloris很受推崇,评价很高,可以用很少的带宽实现攻击效果,下班之后试用了一把。
Multiple HTTP Server Low Bandwidth Denial of Service (slowloris.pl)
下载地址在这里
攻击原理:
攻击方先发送一个http header:
GET / HTTP/1.1\r\n
Host: Target host\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n
Content-Length: 42\r\n
结果就少了一个\r\n, Apache说: 我等!
攻击方再发一坨X-a: b\r\n
Apache已经找不到人生的目标了,继续等...,
攻击方不停的新建连接,等到Apache连接数耗尽,目标达到

受影响(affects)的httpd:
    Apache 1.x/2.x, dhttpd, GoAhead WebServer, Squid, others...?
不受影响(Not affects)的httpd:
    IIS6.0,IIS7.0, lighty, others...?


Slowloris有几个很重要的基本参数:
tcp connection timeout:默认5秒
re-try timeout:默认100秒
connections:1000
Multithreading:Enabled
剩下的就是perldoc ./slowloris.pl的事情了,没装perldoc直接去看文件末尾也能看懂

试验1:
全默认参数, 尝试攻击CentOS 5.2 x64自行编译的Apache2.2.8,mpm_prefork模式,MaxClients850, 硬件DellPE1950, XeonE5405@2.00GHZ x 4, 8GB内存, 146GB10krpmSAS硬盘
结果:成功!

试验2:
全默认参数, 尝试攻击CentOS 5.2 x64自行编译的squid,默认的filedescriptors = 1024, 硬件配置同上
结果:有效果,不满意,平均访问5次只有1次被拒绝

试验3:
re-try timeout 5秒, 尝试攻击CentOS 5.2 x64自行编译的squid,默认的filedescriptors = 1024, 硬件配置同上
结果:有进步,平均访问3次只有1次能正常

试验4:
re-try timeout 5秒, connections:2000, 尝试攻击CentOS 5.2 x64自行编译的squid,默认的filedescriptors = 1024, 硬件配置同上
结果:完全拿不到返回结果了...NagiosNRPE也报错,嘿嘿

试验5:
re-try timeout 5秒, connections:2000, 尝试攻击CentOS 5.2 x64自行编译的squid,编译时将filedescriptors设定为65536, 硬件配置同上
结果:强大的squid啊...攻击完全没效果

试验6:
re-try timeout 5秒, connections:10000, 尝试攻击CentOS 5.2 x64自行编译的squid,编译时将filedescriptors设定为65536, 硬件配置同上
结果:嘿嘿, 把squid列到affects里面不是没有原因滴, 基本上可以判定完全无法访问

试验7:
re-try timeout 5秒, connections:3000, 尝试攻击Ubuntu 8.04LTS apt-get安装的Nginx0.6.31,硬件配置Xeon2.8GHZx4, 4GB内存
结果: 完全无效,Nginx撑连接果然很强悍, 某人说某web2.0网站因配置出了点错导致Nginx撑了70W连接,木有垮掉

试验8:
to be continue...


攻击方:
1. 找了个国外的位于Tor匿名网络内主机,但是资源受限, 最多2k并发, 用来攻击Apache
2. Core2 4300@1.80GHZ 双核 + 2GB内存 ubuntu desktop 8.04.2跑10K个connection木有问题,但是20k个就会报out of memory最后segment fault退出, slowloris的攻击能力可能仅限于内存


实验结果:
Slowloris很好很强大!单独的一个Apache直接就可以死翘翘了lol, squid也有危险
攻击的时候去访问网页,会一直卡在等待结果的状态,一旦终止攻击脚本,立刻就可以拿到返回结果
相比SYN,Slowloris有一定缺陷,攻击停止的时候会在Apache的AccessLog中突然产生大量连续重复的日志,返回值400 305, 很容易被追踪到。没有修改脚本的话,攻击squid的时候日志中会出现Unsupported method in request 'X-a: b__'
Lighty暂时没测试, 据说即使Nginx受到影响,但是适当的配置timeout num limit_conn limit_per 可以解决掉slowloris。

Apache和squid的生命周期真的已经到尽头了么?

参考链接:
Slowloris
Slowloris blog
Bugzilla@Squid-cache: Squid vulnerable to Dos via partial HTTP requests
SLOWLORIS A NGINX (ATAK TYPU DOS) <-波兰语,英文版在此
Apache vs Nginx : Web Server Performance Deathmatch
Slowloris HTTP DoS工具试用
Slowloris HTTP DoS


No TrackBacks

TrackBack URL: http://blog.suchasplus.com/mt/mt-tb.cgi/232

2 Comments

Apache不认为这是自己的问题,因为通过配置一些选项,可以减轻攻击的效果.且单ip攻击很容易被block掉。 http://httpd.apache.org/docs/trunk/misc/security_tips.html#dos

Leave a comment