深入淺出DDoS攻擊防御敵情篇
it專家網(wǎng) 發(fā)表于:12年12月03日 11:00 [轉(zhuǎn)載] DOIT.com.cn
DDoS(Distributed Denial of Service,分布式拒絕服務(wù))攻擊的主要目的是讓指定目標(biāo)無法提供正常服務(wù),甚至從互聯(lián)網(wǎng)上消失,是目前最強大、最難防御的攻擊之一。
DDoS攻擊基礎(chǔ)
DDoS(Distributed Denial of Service,分布式拒絕服務(wù))攻擊的主要目的是讓指定目標(biāo)無法提供正常服務(wù),甚至從互聯(lián)網(wǎng)上消失,是目前最強大、最難防御的攻擊之一。
按照發(fā)起的方式,DDoS可以簡單分為三類。
第一類以力取勝,海量數(shù)據(jù)包從互聯(lián)網(wǎng)的各個角落蜂擁而來,堵塞IDC入口,讓各種強大的硬件防御系統(tǒng)、快速高效的應(yīng)急流程無用武之地。這種類型的攻擊典型代表是ICMP Flood和UDP Flood,現(xiàn)在已不常見。
第二類以巧取勝,靈動而難以察覺,每隔幾分鐘發(fā)一個包甚至只需要一個包,就可以讓豪華配置的服務(wù)器不再響應(yīng)。這類攻擊主要是利用協(xié)議或者軟件的漏洞發(fā)起,例如Slowloris攻擊、Hash沖突攻擊等,需要特定環(huán)境機緣巧合下才能出現(xiàn)。
第三類是上述兩種的混合,輕靈渾厚兼而有之,既利用了協(xié)議、系統(tǒng)的缺陷,又具備了海量的流量,例如SYN Flood攻擊、DNS Query Flood攻擊,是當(dāng)前的主流攻擊方式。
本文將一一描述這些最常見、最具代表性攻擊方式,并介紹它們的防御方案。
SYN Flood
SYN Flood是互聯(lián)網(wǎng)上最經(jīng)典的DDoS攻擊方式之一,最早出現(xiàn)于1999年左右,雅虎是當(dāng)時最著名的受害者。SYN Flood攻擊利用了TCP三次握手的缺陷,能夠以較小代價使目標(biāo)服務(wù)器無法響應(yīng),且難以追查。
標(biāo)準(zhǔn)的TCP三次握手過程如下:
客戶端發(fā)送一個包含SYN標(biāo)志的TCP報文,SYN即同步(Synchronize),同步報文會指明客戶端使用的端口以及TCP連接的初始序號;
服務(wù)器在收到客戶端的SYN報文后,將返回一個SYN+ACK(即確認(rèn)Acknowledgement)的報文,表示客戶端的請求被接受,同時TCP初始序號自動加1;
客戶端也返回一個確認(rèn)報文ACK給服務(wù)器端,同樣TCP序列號被加1。
經(jīng)過這三步,TCP連接就建立完成。TCP協(xié)議為了實現(xiàn)可靠傳輸,在三次握手的過程中設(shè)置了一些異常處理機制。第三步中如果服務(wù)器沒有收到客戶端的最終ACK確認(rèn)報文,會一直處于SYN_RECV狀態(tài),將客戶端IP加入等待列表,并重發(fā)第二步的SYN+ACK報文。重發(fā)一般進(jìn)行3-5次,大約間隔30秒左右輪詢一次等待列表重試所有客戶端。另一方面,服務(wù)器在自己發(fā)出了SYN+ACK報文后,會預(yù)分配資源為即將建立的TCP連接儲存信息做準(zhǔn)備,這個資源在等待重試期間一直保留。更為重要的是,服務(wù)器資源有限,可以維護(hù)的SYN_RECV狀態(tài)超過極限后就不再接受新的SYN報文,也就是拒絕新的 TCP連接建立。
SYN Flood正是利用了上文中TCP協(xié)議的設(shè)定,達(dá)到攻擊的目的。攻擊者偽裝大量的IP地址給服務(wù)器發(fā)送SYN報文,由于偽造的IP地址幾乎不可能存在,也就幾乎沒有設(shè)備會給服務(wù)器返回任何應(yīng)答了。因此,服務(wù)器將會維持一個龐大的等待列表,不停地重試發(fā)送SYN+ACK報文,同時占用著大量的資源無法釋放。更為關(guān)鍵的是,被攻擊服務(wù)器的SYN_RECV隊列被惡意的數(shù)據(jù)包占滿,不再接受新的SYN請求,合法用戶無法完成三次握手建立起TCP連接。也就是說,這個服務(wù)器被SYN Flood拒絕服務(wù)了。
對SYN Flood有興趣的可以看看https://www.icylife.net/yunshu/show.php?id=367,這是我2006年寫的代碼,后來做過幾次修改,修改了Bug,并降低了攻擊性,純做測試使用。
DNS Query Flood
作為互聯(lián)網(wǎng)最基礎(chǔ)、最核心的服務(wù),DNS自然也是DDoS攻擊的重要目標(biāo)之一。打垮DNS服務(wù)能夠間接打垮一家公司的全部業(yè)務(wù),或者打垮一個地區(qū)的網(wǎng)絡(luò)服務(wù)。前些時候風(fēng)頭正盛的黑客組織anonymous也曾經(jīng)宣布要攻擊全球互聯(lián)網(wǎng)的13臺根DNS服務(wù)器,不過最終沒有得手。
UDP攻擊是最容易發(fā)起海量流量的攻擊手段,而且源IP隨機偽造難以追查。但過濾比較容易,因為大多數(shù)IP并不提供UDP服務(wù),直接丟棄UDP 流量即可。所以現(xiàn)在純粹的UDP流量攻擊比較少見了,取而代之的是UDP協(xié)議承載的DNS Query Flood攻擊。簡單地說,越上層協(xié)議上發(fā)動的DDoS攻擊越難以防御,因為協(xié)議越上層,與業(yè)務(wù)關(guān)聯(lián)越大,防御系統(tǒng)面臨的情況越復(fù)雜。
DNS Query Flood就是攻擊者操縱大量傀儡機器,對目標(biāo)發(fā)起海量的域名查詢請求。為了防止基于ACL的過濾,必須提高數(shù)據(jù)包的隨機性。常用的做法是UDP層隨機偽造源IP地址、隨機偽造源端口等參數(shù)。在DNS協(xié)議層,隨機偽造查詢ID以及待解析域名。隨機偽造待解析域名除了防止過濾外,還可以降低命中DNS緩存的可能性,盡可能多地消耗DNS服務(wù)器的CPU資源。
關(guān)于DNS Query Flood的代碼,我在2011年7月為了測試服務(wù)器性能曾經(jīng)寫過一份代碼,鏈接是https://www.icylife.net/yunshu/show.php?id=832。同樣的,這份代碼人為降低了攻擊性,只做測試用途。
HTTP Flood
上文描述的SYN Flood、DNS Query Flood在現(xiàn)階段已經(jīng)能做到有效防御了,真正令各大廠商以及互聯(lián)網(wǎng)企業(yè)頭疼的是HTTP Flood攻擊。HTTP Flood是針對Web服務(wù)在第七層協(xié)議發(fā)起的攻擊。它的巨大危害性主要表現(xiàn)在三個方面:發(fā)起方便、過濾困難、影響深遠(yuǎn)。
SYN Flood和DNS Query Flood都需要攻擊者以root權(quán)限控制大批量的傀儡機。收集大量root權(quán)限的傀儡機很花費時間和精力,而且在攻擊過程中傀儡機會由于流量異常被管理員發(fā)現(xiàn),攻擊者的資源快速損耗而補充緩慢,導(dǎo)致攻擊強度明顯降低而且不可長期持續(xù)。HTTP Flood攻擊則不同,攻擊者并不需要控制大批的傀儡機,取而代之的是通過端口掃描程序在互聯(lián)網(wǎng)上尋找匿名的HTTP代理或者SOCKS代理,攻擊者通過匿名代理對攻擊目標(biāo)發(fā)起HTTP請求。匿名代理是一種比較豐富的資源,花幾天時間獲取代理并不是難事,因此攻擊容易發(fā)起而且可以長期高強度的持續(xù)。
公司簡介 | 媒體優(yōu)勢 | 廣告服務(wù) | 客戶寄語 | DOIT歷程 | 誠聘英才 | 聯(lián)系我們 | 會員注冊 | 訂閱中心
Copyright © 2013 DOIT Media, All rights Reserved. 北京楚科信息技術(shù)有限公司 版權(quán)所有.