坚信科学,分享技术

2018全新版本,未来在blog.54chen.com更新博客!

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

年终攻击hashDos-哈希表多碰撞实现拒绝服务-破解办法

起因:
Wed, 28 Dec 2011 22:28:16 GMT apache tomcat公布了一个安全漏洞。

http://mail-archives.apache.org/mod_mbox/www-announce/201112.mbox/%3C4EFB9800.5010106@apache.org%3E

漏洞原理:
依靠相应语言的hashtable/hashmap实现过程(request多为此结构),当不同的key存入时如果hash值相等则以链表方式连接在前面。此漏洞利用碰撞相同的hash值得到一个长链表,重新get时,map的计算过程会将时间复杂度巨增,原来一个简单的过程将变成一个很费cpu的过程。

影响到的:
最快时间tomcat公布了解决办法。
php进行了升级。
ms也发了公告http://technet.microsoft.com/en-us/security/bulletin/ms11-100。

解决办法:
tomcat
临时办法:
默认大小2097152,当maxPostSize=0时,不限制;maxPostSize=20971520时,为20M,改为一个小于10k的值,所有版本可用,会影响用户。
持久办法:
用新的版本,maxParameterCount默认值1000。
nginx
临时办法:
默认的最大请求body大小为8m,修改设置client_max_body_size=10k;此招为各种情况下万金油,会影响用户。
持久办法:
暂无,应该很快会有max_request_count的参数。
php
持久办法:
php升级到5.3.9,5.2需要打patch。详细见:http://www.laruence.com/2011/12/30/2440.html

后记
54chen人肉构造打到php,php立马100%,转到java(resin+spring+rose),轻松化解,没有反应。

hashDos,important


原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]
本文链接: http://www.54chen.com/php-tech/hashdos.html

This entry was posted in php and tagged . Bookmark the permalink.

10 Responses to “年终攻击hashDos-哈希表多碰撞实现拒绝服务-破解办法”

  1. Yousri 说:

    这样还是没办法根治啊?

  2. reeze 说:

    打Java得找对Java所使用的哈希算法吧。
    如果使用和PHP一样的碰撞序列,而Java的哈希方法不一样,当然木有反应。。

    • 54chen 说:

      呵呵,我用的是java专用的序列,在本地执行put需要一分钟以上。java的hash算法如下:
      static int hash(int h) {
      h ^= (h >>> 20) ^ (h >>> 12);
      return h ^ (h >>> 7) ^ (h >>> 4);
      }
      65536循环数是可用的,同php一样。

      • laruence 说:

        那应该是你没构造好, 我度同事已经验证, Java的"高斯炮"已经造好, 一个请求, 一个核就100%

        • 54chen 说:

          构造没有问题,我在本地run一个java的hashmap写入也是cpu 100%,和我使用的web容器正确处理了这种情况有关。

  3. Fu 说:

    能给点你测试的源程序研究一下这个问题吗?

  4. tanglei 说:

    求java的demo啊。

  5. yaodong 说:

    感谢
    纠正一下
    maxParameterCount默认值是 1w 不是1k

Leave a Reply