欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

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

程序员文章站 2022-05-27 08:03:13
...
近日,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