hash算法,Ruby Hash算法爆出DoS(拒绝服务)攻击漏洞

Ruby Hash算法爆出DoS(拒绝服务)攻击漏洞hash算法 近日,Ruby 的 Hash 算法被爆出了一个安全漏洞,攻击者可以据此发起 DoS(拒绝服务)攻击。
该漏洞和计算复杂性相关,攻击者通过碰撞字符串 hash 值,可以发现一些字符串序列,使用这些序列,攻击者可以发起拒绝服务攻击,例如,可以将它们作为你的 Rails 应用 HTTP 请求的 POST 参数。
详细说明
该情况与 2003 年在 Perl 中发现的漏洞类似。在 Ruby 1.8 分支中,使用了一个确定性的 hash 函数用于 hash 字符串,“确定性”的意思是除了输入的字符串自身外没有其他的位参与生成 hash 值,因此你可以预先计算一个字符串的 hash 值。
通过收集一系列有相同 hash 值的字符串,攻击者可以让 Ruby 进程碰撞 hash 表(包括 hash 类实例)。Hash 表的 amortized O (1)属性取决于 hash 值分布的均匀性。通过有针对性的输入,攻击者可以让 hash 表工作比预期慢得多,也就是说构造一个n元素表的复杂度是O(n2)。
受影响的版本
Ruby 1.8.7-p352 及所有之前的版本。
Ruby 1.9 系列不会受到这种攻击,它们的哈希实现与 Ruby 1.8 系列不同。
解决方案
目前的解决方案是通过一些 PRNG(伪随机数发生器)生成的随机位来扰乱字符串 hash 函数。通过这样做,字符串的 hash 值将不再是确定的。这样,String#hash 结果只和当前进程的生命周期一致,并会在下次启动时产生一个不同值。针对这种情况,攻击者必须创建一组针对这种混杂方式的健壮的字符串,但这是十分困难的。
请将 Ruby 升级到1.8.7 - P357 或更高版本。
Ruby 1.8.7 - P357 下载:http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/391606
Via ruby-lang.org
Tags:  hash算法原理 hash算法

延伸阅读

最新评论

发表评论