Apache HTTP DoS工具解析


国外安全人员昨天发布了一个很有意思的HTTP Dos攻击工具。这个工具能够通过耗尽服务器的可用连接,对Apache(以及其它一些服务器,见下文)进行拒绝服务攻击(Denial of Service attack)。虽然现在已经有很多其它的Dos工具,但这个工具比较特殊,因为它会向服务器发送不完整的HTTP请求报文,让HTTP连接一直处于开放状态。

在这种情况下,服务器只有打开连接并等待完整的报文送达。但结果是,客户端(也就是这个Dos工具)根本不会把完整的报文信息发送过去,反而会继续发送一些恶意构造的报文行(bogus header line),使得这个连接不能被关闭。

最开始发送的那部分HTTP请求是完全合法的:

GET / HTTP/1.1
Host: host
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)
Content-Length: 42
在发送完这部分信息之后,客户端将停等待一段时间。注意,作为一个合法的报文段,它还缺少一个回车换行来作为结束符。现在这个工具所发送的伪造的报文行是:

X-a: b
显然,这一行报文没有任何意义,服务器会忽略它并继续等待。当然,如果你想创建一个入侵检测系统(IDS)签名的话,你也可以自己设置这一行的内容。

发布该工具的那个网站说,这个工具对Apache 1.x 和 Apache 2.x 版本以及Squid都有效。 而且,考虑到这个工具根本不需要发送大量数据包就可以耗尽服务器的连接数,导致一个带宽很小的用户都可能对一台高速服务器发起攻击,这个工具的潜在威胁真是不容小视。所幸的是微软IIS6.0 和 IIS7.0的用户暂时还不受影响。

目前,我还不知道在Apache的配置有没有可以防止它攻击的设置选项,增加MaxClients这一项的值只会增加攻击的难度,但无法杜绝服务器被攻击。不过我们的一位名叫Tomasz Miklas的读者表示,他能通过在Apache服务器前增加一个反向代理解决这个问题。

我们会密切关注这一点,还会在今后继续发布相关的信息。我们很期待其它Web服务器以及负载均衡器(load balancers)将如何抵御这种攻击。