欢迎光临散文网 会员登陆 & 注册

哈希洪水 DOS

2022-12-15 02:58 作者:阿曜ちゃん  | 我要投稿

为什么,如何防止在 Java 中应用?

哈希泛滥攻击是网络安全中最重要的攻击之一——也是区分软件工程师和安全工程师思维方式的直观方式。 为什么要进行哈希泛洪攻击?

哈希泛洪攻击是拒绝服务攻击。一旦后端接口出现漏洞,整个服务器将停止服务。 我们所说的“脆弱性”是什么? 不得不提

Hash

,这种简单的数据结构几乎每个软件都实现了。人们选择它是因为它具有超快的查找时间:平均

O(1)

和最坏情况下的

O(n)

哈希表的最坏时间复杂度为 O(n),原因有二:

1. 如果太多元素散列到同一个键中:查看这个键内部可能需要 O(n) 时间。

2. 一旦哈希表通过了它的负载平衡——它必须重新哈希[创建一个新的更大的表,并将每个元素重新插入到表中]。

这意味着,当我们要不断地向哈希表中插入n个元素时,如果键没有相同的哈希值,则需要大约O(n)的时间;但是如果键的哈希值不断地发生冲突,

最坏情况将花费大约 O(n^2) 时间

,这使得平均运行时间和最坏情况运行时间彼此非常不同。 这就是为什么 Scott A. Crosby 和 Dan S. Wallach 在 2003 年提出了一个想法,即如果存在一种方法可以利用这种数据结构的漏洞(最坏情况复杂度)手动创建最坏情况的设想。 java.lang.String.hashCode()

此方法返回此字符串的哈希码。 String 对象的哈希码计算如下:

s[0]*31^(n - 1) + s[1]*31^(n - 2) + ... + s[n - 1]

使用int算法,其中s[i]是字符串的第i个字符,n是字符串的长度,^表示求幂。 (空字符串的哈希值为零。)

使用这个算法,我们可以很容易地创建一组具有相同散列值的字符串。一旦交给服务器做哈希表,服务器就会用这种廉价的方法宕机。 2011年的一项实验表明,攻击 Tomcat 服务器只需6KB/s就可以并行化 Intel i7 处理器; 1GB/s 并行化 100000 个 Intel i7 处理器;这使得散列泛洪攻击成为一种更经济有效的 DOS 攻击方式。

如何预防?

现在我们已经为攻击者进行散列泛洪攻击建立了条件:了解

算法的所有细节

,这样他们就可以很容易地制作出一组冲突的密钥。 所以,如果我们让攻击者无法完全使用算法呢? 现在我们可以引入

Hash Seed

,它是每次创建哈希表时随机生成的秘密参数。使用这种哈希种子的哈希算法称为

Keyed Hash Function

。 迄今为止,许多研究机构和组织已经设计了新的哈希函数,例如:

SipHash, MurmurHash, CityHash …

CTF:哈希冲突

在 CTF 中,哈希冲突是指两段数据或文本具有相同的加密哈希。这是非常罕见的。碰撞的重要之处在于它们可用于破解密码哈希。密码通常以散列形式存储在计算机上,因为很难从散列中获取密码。 参考

Scott A. Crosby and Dan S. Wallach. 2003. Denial of service via algorithmic complexity attacks. In Proceedings of the 12th conference on USENIX Security Symposium - Volume 12 (SSYM’03), Vol. 12. USENIX Association, Berkeley, CA, USA, 3-3.

!(Hash table runtime complexity (insert, search and delete))https://stackoverflow.com/questions/9214353/hash-table-runtime-complexity-insert-search-and-delete

Hash-flooding DoS - isdanni (https://isdanni.com/hash-flooding/#javalangstringhashcode)

结束,感谢大家阅读

翻译:阿曜ちゃん

哈希洪水 DOS的评论 (共 条)

分享到微博请遵守国家法律