一、什么是哈希洪水攻击
哈希洪水攻击(Hash-Flooding Attack)是一种拒绝服务攻击(Denial of Service),一旦后端接口存在合适的攻击面,攻击者就能轻松让整台服务器陷入瘫痪。。洪水攻击同时也是信息安全领域,最值得研究的课题之一。
哈希洪水攻击原理
我们知道,在常用的数据结构里,有些数据结构的“平均运行时间”和“最差运行时间”差得很多,比如哈希表。
如果想连续插入多个元素到哈希表中,假定这些元素的键很少出现相同的哈希值,平均运行时间较少,但如果频繁出现相同的哈希值,所需要的时间就会成倍的增加。
基于这一现象,有人突发奇想,既然“最差运行时间”和“平均运行时间”可以差距那么大,我们是不是可以找到一种方法,使该算法一直使用最差运行时间运行,进而占用大量服务器资源,以最小的代价促使服务器瘫痪?
还真可以实现!
2011年有人曾经做过一次实验,攻击一台基于Java(Tomcat)的服务器时,只需要6kb/s的流量,就可以瘫痪Intel i7处理器。成本如此之低令人发指。
如果你还不明白哈希洪水攻击,我们可以通过一个简单的例子,进一步了解。
假设A在经营一家菜鸟驿站,那时候的菜鸟驿站,还没有快件管理系统,A只能自己制定策略管理快件。
A很快想到了一个办法,以客户手机号的尾数作为判断条件,对快件进行分类整理。比如手机尾号为75的的快递,就放在7号货架的第5层上。
由于经营有方,A的菜鸟驿站的生意越来越好。
然而,快递不配送到家,引起了顾客B的不满,A和B经常为此闹得十分不愉快。B决定狠狠报复一下。
经过一段时间的观察,B发现菜鸟驿站的快递分类方法的规律。于是B联合自己的小伙伴,去申请了大量以7x结尾的手机号,并利用这些手机号在网上进行刷单,产生大量的空包裹。
很快,7号货架被这些“恶意”快递占满,那些以7x结尾的正常客户取快递的时间越来越长,顾客满意度直线下降,A所经营的菜鸟驿站经常遭到投诉,生意越来越差。
最终,因为人手不够,无法及时处理这些快递,A的菜鸟驿站最终关门歇业。
以上就是哈希洪水攻击的过程。
防御哈希洪水攻击
哈希洪水攻击实在过于简单粗暴,那有没有什么办法防御这类攻击呢?
有!
通过菜鸟驿站这个例子,我们很容易想到两种方法。
名列前茅种是限制参数个数,每个货架上能放多少包裹都是固定的,只有老包裹被取走,新包裹才能放上去。
第二种是想一套策略,禁止不明用户提交数据,你这个包括掂起来空空的,有可能是刷单的包裹,对不起,不能放在货架上。
理论上这些方法都可以有效防止哈希洪水攻击,但没办法从根本上杜绝这类攻击。
有人想到了一种绝妙的方法,既然B很容易就能猜到A管理快递的规则,那么我们对规则进行加密,不就可以防止哈希洪水攻击的发生吗?
只要我们每建一个哈希表,就随机生成一个新的秘密参数。这样一来,即使相同的内容,放在不同的表里也会产生完全不同的内存分配。
这一过程,黑客无法预测,也就无法发动攻击。
设计更加安全的带密钥的哈希算法,使黑客难以绕过,发动攻击。
延伸阅读:
二、哈希表概述
哈希表的哈希函数输入一个键,并向返回一个哈希表的索引。可能的键的集合很大,但是哈希函数值的集合只是表的大小。
哈希函数的其他用途包括密码系统、消息摘要系统、数字签名系统,为了使这些应用程序按预期工作,冲突的概率必须非常低,因此需要一个具有非常大的可能值集合的散列函数。
密码系统:给定用户密码,操作系统计算其散列,并将其与存储在文件中的该用户的散列进行比较。(不要让密码很容易被猜出散列到相同的值)。
消息摘要系统:给定重要消息,计算其散列,并将其与消息本身分开发布。希望检查消息有效性的读者也可以使用相同的算法计算其散列,并与发布的散列进行比较。(不要希望伪造消息很容易,仍然得到相同的散列)。