洪水攻击作为黑客最常用的一种攻击手段,以实施简单粗暴著名,而且它大多无视防御。洪水攻击同时也是信息安全领域,最值得研究的课题之一。
最常见的洪水攻击,便是大名鼎鼎的DDoS。今天我们只聊DDoS中的其中一种类型——哈希洪水攻击。
哈希洪水攻击是一种拒绝服务攻击,只要黑客找到攻击面,就可以轻松得让整个服务器陷入瘫痪。
哈希洪水攻击原理
我们知道,在常用的数据结构里,有些数据结构的“平均运行时间”和“最差运行时间”差得很多,比如哈希表。
如果想连续插入多个元素到哈希表中,假定这些元素的键很少出现相同的哈希值,平均运行时间较少,但如果频繁出现相同的哈希值,所需要的时间就会成倍的增加。
基于这一现象,有人突发奇想,既然“最差运行时间”和“平均运行时间”可以差距那么大,我们是不是可以找到一种方法,使该算法一直使用最差运行时间运行,进而占用大量服务器资源,以最小的代价促使服务器瘫痪?
还真可以实现!
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管理快递的规则,那么我们对规则进行加密,不就可以防止哈希洪水攻击的发生吗?
只要我们每建一个哈希表,就随机生成一个新的秘密参数。这样一来,即使相同的内容,放在不同的表里也会产生完全不同的内存分配。
这一过程,黑客无法预测,也就无法发动攻击。
设计更加安全的带密钥的哈希算法,使黑客难以绕过,发动攻击。
随着互联网的发展,攻守双方展开了激烈的搏斗。Google、UIC等机构的研究人员设计了许多新的哈希函数,这些算法不停的更新,现如今已经形成一套稳定的算法标准,比众多编程语言和开源项目所采纳。
这些编程语言和开源项目,天然免疫哈希洪水攻击。