一种HTTP应用层的DOS攻击
时间:2009-06-23 来源:linux论坛
一种HTTP应用层的DOS攻击
一、攻击情况介绍
最近HTTP上的DOS(Deny Of Service:拒绝服务攻击)攻击方式被提出来(http://isc.sans.org/diary.html?storyid=6601)。虽然这 种攻击不算新颖,据说以前也被提出过(http: //www.securityfocus.com/archive/1/456339/30/0/threaded),但是没有得到重视。
这种针对HTTP服务器的攻击很简单,就是不断发送没有完成的HTTP头,直到你的服务器耗尽所有的资源。攻击的方式如下:
1、首先向服务器发出如下HTTP头部:
GET / HTTP/1.1\r\n
Host: 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
2、然后每隔一定时间继续发出一个自定义的头部:
X-a: b\r\n
须知根据HTTP协议,HTTP请求头部与请求主体的分隔是多一个\r\n。也就是说上述的HTTP头部一直没有发送完成,HTTP服务器会等在那里准备接受余下的内容,一直到接受超时,然后关闭连接。默认的apache读取头部的超时据说是3000秒。
Apache的情况是,每接受一个连接新开一个进程或线程,这样新接受一个连接的资源消耗很大,我测试的过结果是,一般apache只需在超时时间内,持续发送500个以上的包,apache就不会再接收新的连接了。
二、攻击工具介绍及结果
工具下载:http://ha.ckers.org/slowloris/
该工具就是根据上面的原理写出的一个测试工具。推荐在Linux或Unix下使用,具体的使用方法可以看下载文件后面的注释。它不像一般分布式DOS攻击,就如它声称的一样,只需少量的资源和负载就可以让一台web server拒绝服务。
该网站的测试结果是:
1、攻击有效
Apache 1.x
Apache 2.x
dhttpd
GoAhead WebServer
Squid
2、攻击无效
IIS6.0
IIS7.0
lighttpd
nginx
Cherokee
根据我的测试结果,实际上对Nginx之类的服务器也有影响,需要耗尽Nginx所有的连接才能让其拒绝服务。可以肯定对所有web服务器软件都有影响,但是不像apache那么明显。至少,不会像攻击软件作者声称的那样,动用少量资源就可以成功攻击一台web服务器。
可以说,这是由于协议本身设计就是这样的,没有办法避免,就如Syn flood攻击一样。此类攻击比一般TCP层DOS攻击要好对付的是,由于HTTP协议一般是TCP连接,需要建立连接以后才能发动攻击,所以攻击者的定位可以很快确定。
三、采取的对策
这里是我想到的一些应对方法:
1、减少HTTP头部连接超时的时间,尤其是HTTP请求中GET、HEAD方法的超时时间。注意一般POST方法的头部包含了上传的内容,所以传输时间会很长,要避免将合法的请求提前关闭。
2、限定单个IP的连接数。缺点是,有些学校、大公司都通过NAT方式连接互联网,所以同一个IP的连接数会很多。
3、特别针对Apache,将Nginx此类反向服务器放在apache前面,用来撑连接,代理合法的请求。
采取这些方法以后,我想攻击者至少需要花相当多的力气才能让一台web服务器拒绝服务。
一、攻击情况介绍
最近HTTP上的DOS(Deny Of Service:拒绝服务攻击)攻击方式被提出来(http://isc.sans.org/diary.html?storyid=6601)。虽然这 种攻击不算新颖,据说以前也被提出过(http: //www.securityfocus.com/archive/1/456339/30/0/threaded),但是没有得到重视。
这种针对HTTP服务器的攻击很简单,就是不断发送没有完成的HTTP头,直到你的服务器耗尽所有的资源。攻击的方式如下:
1、首先向服务器发出如下HTTP头部:
GET / HTTP/1.1\r\n
Host: 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
2、然后每隔一定时间继续发出一个自定义的头部:
X-a: b\r\n
须知根据HTTP协议,HTTP请求头部与请求主体的分隔是多一个\r\n。也就是说上述的HTTP头部一直没有发送完成,HTTP服务器会等在那里准备接受余下的内容,一直到接受超时,然后关闭连接。默认的apache读取头部的超时据说是3000秒。
Apache的情况是,每接受一个连接新开一个进程或线程,这样新接受一个连接的资源消耗很大,我测试的过结果是,一般apache只需在超时时间内,持续发送500个以上的包,apache就不会再接收新的连接了。
二、攻击工具介绍及结果
工具下载:http://ha.ckers.org/slowloris/
该工具就是根据上面的原理写出的一个测试工具。推荐在Linux或Unix下使用,具体的使用方法可以看下载文件后面的注释。它不像一般分布式DOS攻击,就如它声称的一样,只需少量的资源和负载就可以让一台web server拒绝服务。
该网站的测试结果是:
1、攻击有效
Apache 1.x
Apache 2.x
dhttpd
GoAhead WebServer
Squid
2、攻击无效
IIS6.0
IIS7.0
lighttpd
nginx
Cherokee
根据我的测试结果,实际上对Nginx之类的服务器也有影响,需要耗尽Nginx所有的连接才能让其拒绝服务。可以肯定对所有web服务器软件都有影响,但是不像apache那么明显。至少,不会像攻击软件作者声称的那样,动用少量资源就可以成功攻击一台web服务器。
可以说,这是由于协议本身设计就是这样的,没有办法避免,就如Syn flood攻击一样。此类攻击比一般TCP层DOS攻击要好对付的是,由于HTTP协议一般是TCP连接,需要建立连接以后才能发动攻击,所以攻击者的定位可以很快确定。
三、采取的对策
这里是我想到的一些应对方法:
1、减少HTTP头部连接超时的时间,尤其是HTTP请求中GET、HEAD方法的超时时间。注意一般POST方法的头部包含了上传的内容,所以传输时间会很长,要避免将合法的请求提前关闭。
2、限定单个IP的连接数。缺点是,有些学校、大公司都通过NAT方式连接互联网,所以同一个IP的连接数会很多。
3、特别针对Apache,将Nginx此类反向服务器放在apache前面,用来撑连接,代理合法的请求。
采取这些方法以后,我想攻击者至少需要花相当多的力气才能让一台web服务器拒绝服务。
相关阅读 更多 +