最近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的生命周期真的已经到尽头了么?
参考链接:
SlowlorisSlowloris blogBugzilla@Squid-cache:
Squid vulnerable to Dos via partial HTTP requestsSLOWLORIS A NGINX (ATAK TYPU DOS) <-波兰语,英文版
在此Apache vs Nginx : Web Server Performance DeathmatchSlowloris HTTP DoS工具试用Slowloris HTTP DoS