通过构造Hash冲突实现各种语言的拒绝服务攻击

回复 收藏


攻击的原理很简单, 目前很多语言, 使用hash来存储k-v数据, 包括常用的来自用户的POST数据, 攻击者可以通过构造请求头, 并伴随POST大量的特殊的”k”值(根据每个语言的Hash算法不同而定制), 使得语言底层保存POST数据的Hash表因为”冲突”(碰撞)而退化成链表. http://tkxxd.net/data/attachment/forum/201112/31/142645t9bj33wd7jdku7r0.png

这个攻击方法危害很高, 攻击成本也很小. 一个台式机可以轻松搞垮数十台, 上百台服务器.

实例:
  1. <?php echo '';
  2. $size = pow(2, 16); // 16 is just an example, could also be 15 or 17
  3. $startTime = microtime(true);
  4. $array = array();
  5. for ($key = 0, $maxKey = ($size - 1) * $size; $key <= $maxKey; $key += $size) {
  6.     $array[$key] = 0;
  7. }
  8. $endTime = microtime(true);
  9. echo 'Inserting ', $size, ' evil elements took ', $endTime - $startTime, ' seconds', "\n";
  10. $startTime = microtime(true);
  11. $array = array();
  12. for ($key = 0, $maxKey = $size - 1; $key <= $maxKey; ++$key) {
  13.     $array[$key] = 0;
  14. }
  15. $endTime = microtime(true);
  16. echo 'Inserting ', $size, ' good elements took ', $endTime - $startTime, ' seconds', "\n";
大家如果有用5.2的, 如果被此类攻击威胁, 可以打上下面的patch, PHP5.3的, 可以考虑升级到5.3.9, 已经包含了此patch(因为5.3.9目前是RC状态, 所以如果不愿意升级, 也可以参照这个patch自己为5.3写一个):

https://github.com/laruence/laru ... -5.2-max-input-vars

另外, 其他语言java, ruby等, 请各位也预先想好对策, 限制post_size是治标不治本的方法, 不过可以用来做临时解决方案.

参考文章:
http://nikic.github.com/2011/12/ ... ng-a-PHP-array.html
http://www.laruence.com/2011/12/30/2440.html


转自: http://tkxxd.net/forum.php?mod=viewthread&tid=319
2011-12-31 14:44 举报
已邀请:
0

阿铭 管理员

赞同来自:

通过nginx增加一个模块预防攻击
http://www.54chen.com/_linux_/ ... .html

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: