2007 年,Google 工程师 Michael Zalewski 在研究了 HTTP/1.1 Range 头域的实现后,发表了一篇备忘,详细说明了 Apache 和 IIS 网页服务器中存在的一个潜在漏洞。
在我印象中,一个单独的、短的请求就可用来诱使服务器无目的地地发出数以 GB 的伪数据,而不顾服务器文件大小、连接数以及管理员设定的持续(keep-alive)请求数的限制。
8 月 19 号,“ Full Disclosure ”安全邮件列表中发布了一段 Apache DDoS 工具原型的 Perl 脚本。8 月 24 号,Apache 安全小组就此发表了一篇备忘进行解释:
它最常见地表现在静态内容生成且通过 mod_deflate 模块进行压缩的时候,但其它在内存中缓存或生成内容的模块也可能会受到影响。这是一种非常普遍(缺省的,不是么?)的配置方式。
攻击可以远程进行,并且中等数量的请求就会导致内存和 CPU 占用率显著提高。
我们注意到该工具已经得到越来越多的应用。
目前还没有修复该漏洞的补丁和新版本的 apache,因此本公告将在长期修复补丁发布时更新。修复补丁预计将在接下来的 96 小时内发布。
星期五,Apache发布了第二则公告,其中他们解释了当服务器处理请求以返回多个(重叠的)范围时,Apache httpd 进程和它所谓的内部“桶队列(bucket brigades)”是如何按照请求的顺序进行处理的。单个请求可以请求非常大的范围(例如从字节 0 到结尾),差距达到 100 倍。目前,这种类型的请求内部会扩展相当于 100 次大型的取指令操作,所有这些都以低效率的方式保存在内存中。
处理方式有两种,要么使事情更有效率,要么清除或者简化被认为过于笨重的请求。在最终修复方案出来前有几种直接选择可缓解这一状况。
Apache 提出的缓解措施包括从完全禁止 Range 头域到限制请求包的大小及部署定制的 Range 计数模块。Lori MacVittie详细说明了如何通过使用 Big-IP 来实现缓解措施。
评论