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

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