一、什么是哈希洪水攻擊
哈希洪水攻擊(Hash-Flooding Attack)是一種拒絕服務(wù)攻擊(Denial of Service),一旦后端接口存在合適的攻擊面,攻擊者就能輕松讓整臺服務(wù)器陷入癱瘓。。洪水攻擊同時也是信息安全領(lǐng)域,最值得研究的課題之一。
哈希洪水攻擊原理
我們知道,在常用的數(shù)據(jù)結(jié)構(gòu)里,有些數(shù)據(jù)結(jié)構(gòu)的“平均運行時間”和“最差運行時間”差得很多,比如哈希表。
如果想連續(xù)插入多個元素到哈希表中,假定這些元素的鍵很少出現(xiàn)相同的哈希值,平均運行時間較少,但如果頻繁出現(xiàn)相同的哈希值,所需要的時間就會成倍的增加。
基于這一現(xiàn)象,有人突發(fā)奇想,既然“最差運行時間”和“平均運行時間”可以差距那么大,我們是不是可以找到一種方法,使該算法一直使用最差運行時間運行,進而占用大量服務(wù)器資源,以最小的代價促使服務(wù)器癱瘓?
還真可以實現(xiàn)!
2011年有人曾經(jīng)做過一次實驗,攻擊一臺基于Java(Tomcat)的服務(wù)器時,只需要6kb/s的流量,就可以癱瘓Intel i7處理器。成本如此之低令人發(fā)指。
如果你還不明白哈希洪水攻擊,我們可以通過一個簡單的例子,進一步了解。
假設(shè)A在經(jīng)營一家菜鳥驛站,那時候的菜鳥驛站,還沒有快件管理系統(tǒng),A只能自己制定策略管理快件。
A很快想到了一個辦法,以客戶手機號的尾數(shù)作為判斷條件,對快件進行分類整理。比如手機尾號為75的的快遞,就放在7號貨架的第5層上。
由于經(jīng)營有方,A的菜鳥驛站的生意越來越好。
然而,快遞不配送到家,引起了顧客B的不滿,A和B經(jīng)常為此鬧得十分不愉快。B決定狠狠報復(fù)一下。
經(jīng)過一段時間的觀察,B發(fā)現(xiàn)菜鳥驛站的快遞分類方法的規(guī)律。于是B聯(lián)合自己的小伙伴,去申請了大量以7x結(jié)尾的手機號,并利用這些手機號在網(wǎng)上進行刷單,產(chǎn)生大量的空包裹。
很快,7號貨架被這些“惡意”快遞占滿,那些以7x結(jié)尾的正??蛻羧】爝f的時間越來越長,顧客滿意度直線下降,A所經(jīng)營的菜鳥驛站經(jīng)常遭到投訴,生意越來越差。
最終,因為人手不夠,無法及時處理這些快遞,A的菜鳥驛站最終關(guān)門歇業(yè)。
以上就是哈希洪水攻擊的過程。
防御哈希洪水攻擊
哈希洪水攻擊實在過于簡單粗暴,那有沒有什么辦法防御這類攻擊呢?
有!
通過菜鳥驛站這個例子,我們很容易想到兩種方法。
名列前茅種是限制參數(shù)個數(shù),每個貨架上能放多少包裹都是固定的,只有老包裹被取走,新包裹才能放上去。
第二種是想一套策略,禁止不明用戶提交數(shù)據(jù),你這個包括掂起來空空的,有可能是刷單的包裹,對不起,不能放在貨架上。
理論上這些方法都可以有效防止哈希洪水攻擊,但沒辦法從根本上杜絕這類攻擊。
有人想到了一種絕妙的方法,既然B很容易就能猜到A管理快遞的規(guī)則,那么我們對規(guī)則進行加密,不就可以防止哈希洪水攻擊的發(fā)生嗎?
只要我們每建一個哈希表,就隨機生成一個新的秘密參數(shù)。這樣一來,即使相同的內(nèi)容,放在不同的表里也會產(chǎn)生完全不同的內(nèi)存分配。
這一過程,黑客無法預(yù)測,也就無法發(fā)動攻擊。
設(shè)計更加安全的帶密鑰的哈希算法,使黑客難以繞過,發(fā)動攻擊。
延伸閱讀:
二、哈希表概述
哈希表的哈希函數(shù)輸入一個鍵,并向返回一個哈希表的索引。可能的鍵的集合很大,但是哈希函數(shù)值的集合只是表的大小。
哈希函數(shù)的其他用途包括密碼系統(tǒng)、消息摘要系統(tǒng)、數(shù)字簽名系統(tǒng),為了使這些應(yīng)用程序按預(yù)期工作,沖突的概率必須非常低,因此需要一個具有非常大的可能值集合的散列函數(shù)。
密碼系統(tǒng):給定用戶密碼,操作系統(tǒng)計算其散列,并將其與存儲在文件中的該用戶的散列進行比較。(不要讓密碼很容易被猜出散列到相同的值)。
消息摘要系統(tǒng):給定重要消息,計算其散列,并將其與消息本身分開發(fā)布。希望檢查消息有效性的讀者也可以使用相同的算法計算其散列,并與發(fā)布的散列進行比較。(不要希望偽造消息很容易,仍然得到相同的散列)。