洪水攻擊作為黑客最常用的一種攻擊手段,以實施簡單粗暴著名,而且它大多無視防御。洪水攻擊同時也是信息安全領域,最值得研究的課題之一。
最常見的洪水攻擊,便是大名鼎鼎的DDoS。今天我們只聊DDoS中的其中一種類型——哈希洪水攻擊。
哈希洪水攻擊是一種拒絕服務攻擊,只要黑客找到攻擊面,就可以輕松得讓整個服務器陷入癱瘓。
哈希洪水攻擊原理
我們知道,在常用的數(shù)據(jù)結構里,有些數(shù)據(jù)結構的“平均運行時間”和“最差運行時間”差得很多,比如哈希表。
如果想連續(xù)插入多個元素到哈希表中,假定這些元素的鍵很少出現(xiàn)相同的哈希值,平均運行時間較少,但如果頻繁出現(xiàn)相同的哈希值,所需要的時間就會成倍的增加。
基于這一現(xiàn)象,有人突發(fā)奇想,既然“最差運行時間”和“平均運行時間”可以差距那么大,我們是不是可以找到一種方法,使該算法一直使用最差運行時間運行,進而占用大量服務器資源,以最小的代價促使服務器癱瘓?
還真可以實現(xiàn)!
2011年有人曾經(jīng)做過一次實驗,攻擊一臺基于Java(Tomcat)的服務器時,只需要6kb/s的流量,就可以癱瘓Intel i7處理器。成本如此之低令人發(fā)指。
如果你還不明白哈希洪水攻擊,我們可以通過一個簡單的例子,進一步了解。
假設A在經(jīng)營一家菜鳥驛站,那時候的菜鳥驛站,還沒有快件管理系統(tǒng),A只能自己制定策略管理快件。
A很快想到了一個辦法,以客戶手機號的尾數(shù)作為判斷條件,對快件進行分類整理。比如手機尾號為75的的快遞,就放在7號貨架的第5層上。
由于經(jīng)營有方,A的菜鳥驛站的生意越來越好。
然而,快遞不配送到家,引起了顧客B的不滿,A和B經(jīng)常為此鬧得十分不愉快。B決定狠狠報復一下。
經(jīng)過一段時間的觀察,B發(fā)現(xiàn)菜鳥驛站的快遞分類方法的規(guī)律。于是B聯(lián)合自己的小伙伴,去申請了大量以7x結尾的手機號,并利用這些手機號在網(wǎng)上進行刷單,產(chǎn)生大量的空包裹。
很快,7號貨架被這些“惡意”快遞占滿,那些以7x結尾的正?蛻羧】爝f的時間越來越長,顧客滿意度直線下降,A所經(jīng)營的菜鳥驛站經(jīng)常遭到投訴,生意越來越差。
最終,因為人手不夠,無法及時處理這些快遞,A的菜鳥驛站最終關門歇業(yè)。
以上就是哈希洪水攻擊的過程。
防御哈希洪水攻擊
哈希洪水攻擊實在過于簡單粗暴,那有沒有什么辦法防御這類攻擊呢?
有!
通過菜鳥驛站這個例子,我們很容易想到兩種方法。
第一種是限制參數(shù)個數(shù),每個貨架上能放多少包裹都是固定的,只有老包裹被取走,新包裹才能放上去。
第二種是想一套策略,禁止不明用戶提交數(shù)據(jù),你這個包括掂起來空空的,有可能是刷單的包裹,對不起,不能放在貨架上。
理論上這些方法都可以有效防止哈希洪水攻擊,但沒辦法從根本上杜絕這類攻擊。
有人想到了一種絕妙的方法,既然B很容易就能猜到A管理快遞的規(guī)則,那么我們對規(guī)則進行加密,不就可以防止哈希洪水攻擊的發(fā)生嗎?
只要我們每建一個哈希表,就隨機生成一個新的秘密參數(shù)。這樣一來,即使相同的內容,放在不同的表里也會產(chǎn)生完全不同的內存分配。
這一過程,黑客無法預測,也就無法發(fā)動攻擊。
設計更加安全的帶密鑰的哈希算法,使黑客難以繞過,發(fā)動攻擊。
隨著互聯(lián)網(wǎng)的發(fā)展,攻守雙方展開了激烈的搏斗。Google、UIC等機構的研究人員設計了許多新的哈希函數(shù),這些算法不停的更新,現(xiàn)如今已經(jīng)形成一套穩(wěn)定的算法標準,比眾多編程語言和開源項目所采納。
這些編程語言和開源項目,天然免疫哈希洪水攻擊。