1. DDoS攻擊基礎(chǔ)
DDoS(Distributed Denial of Service,分布式拒絕服務(wù))攻擊的主要目的是讓指定目標(biāo)無(wú)法提供正常服務(wù),甚至從互聯(lián)網(wǎng)上消失,是目前最強(qiáng)大、最難防御的攻擊之一。
按照發(fā)起的方式,DDoS可以簡(jiǎn)單分為三類。
第一類以力取勝,海量數(shù)據(jù)包從互聯(lián)網(wǎng)的各個(gè)角落蜂擁而來(lái),堵塞IDC入口,讓各種強(qiáng)大的硬件防御系統(tǒng)、快速高效的應(yīng)急流程無(wú)用武之地。這種類型的攻擊典型代表是ICMP Flood和UDP Flood,現(xiàn)在已不常見(jiàn)。
第二類以巧取勝,靈動(dòng)而難以察覺(jué),每隔幾分鐘發(fā)一個(gè)包甚至只需要一個(gè)包,就可以讓豪華配置的服務(wù)器不再響應(yīng)。這類攻擊主要是利用協(xié)議或者軟件的漏洞發(fā)起,例如Slowloris攻擊、Hash沖突攻擊等,需要特定環(huán)境機(jī)緣巧合下才能出現(xiàn)。
第三類是上述兩種的混合,輕靈渾厚兼而有之,既利用了協(xié)議、系統(tǒng)的缺陷,又具備了海量的流量,例如SYN Flood攻擊、DNS Query Flood攻擊,是當(dāng)前的主流攻擊方式。
本文將一一描述這些最常見(jiàn)、最具代表性攻擊方式,并介紹它們的防御方案。
1.1. SYN Flood
SYN Flood是互聯(lián)網(wǎng)上最經(jīng)典的DDoS攻擊方式之一,最早出現(xiàn)于1999年左右,雅虎是當(dāng)時(shí)最著名的受害者。SYN Flood攻擊利用了TCP三次握手的缺陷,能夠以較小代價(jià)使目標(biāo)服務(wù)器無(wú)法響應(yīng),且難以追查。
標(biāo)準(zhǔn)的TCP三次握手過(guò)程如下:
l 客戶端發(fā)送一個(gè)包含SYN標(biāo)志的TCP報(bào)文,SYN即同步(Synchronize),同步報(bào)文會(huì)指明客戶端使用的端口以及TCP連接的初始序號(hào);
l 服務(wù)器在收到客戶端的SYN報(bào)文后,將返回一個(gè)SYN+ACK(即確認(rèn)Acknowledgement)的報(bào)文,表示客戶端的請(qǐng)求被接受,同時(shí)TCP初始序號(hào)自動(dòng)加1;
l 客戶端也返回一個(gè)確認(rèn)報(bào)文ACK給服務(wù)器端,同樣TCP序列號(hào)被加1。
經(jīng)過(guò)這三步,TCP連接就建立完成。TCP協(xié)議為了實(shí)現(xiàn)可靠傳輸,在三次握手的過(guò)程中設(shè)置了一些異常處理機(jī)制。第三步中如果服務(wù)器沒(méi)有收到客戶端的最終ACK確認(rèn)報(bào)文,會(huì)一直處于SYN_RECV狀態(tài),將客戶端IP加入等待列表,并重發(fā)第二步的SYN+ACK報(bào)文。重發(fā)一般進(jìn)行3-5次,大約間隔30秒左右輪詢一次等待列表重試所有客戶端。另一方面,服務(wù)器在自己發(fā)出了SYN+ACK報(bào)文后,會(huì)預(yù)分配資源為即將建立的TCP連接儲(chǔ)存信息做準(zhǔn)備,這個(gè)資源在等待重試期間一直保留。更為重要的是,服務(wù)器資源有限,可以維護(hù)的SYN_RECV狀態(tài)超過(guò)極限后就不再接受新的SYN報(bào)文,也就是拒絕新的TCP連接建立。
SYN Flood正是利用了上文中TCP協(xié)議的設(shè)定,達(dá)到攻擊的目的。攻擊者偽裝大量的IP地址給服務(wù)器發(fā)送SYN報(bào)文,由于偽造的IP地址幾乎不可能存在,也就幾乎沒(méi)有設(shè)備會(huì)給服務(wù)器返回任何應(yīng)答了。因此,服務(wù)器將會(huì)維持一個(gè)龐大的等待列表,不停地重試發(fā)送SYN+ACK報(bào)文,同時(shí)占用著大量的資源無(wú)法釋放。更為關(guān)鍵的是,被攻擊服務(wù)器的SYN_RECV隊(duì)列被惡意的數(shù)據(jù)包占滿,不再接受新的SYN請(qǐng)求,合法用戶無(wú)法完成三次握手建立起TCP連接。也就是說(shuō),這個(gè)服務(wù)器被SYN Flood拒絕服務(wù)了。
1.2. DNS Query Flood
作為互聯(lián)網(wǎng)最基礎(chǔ)、最核心的服務(wù),DNS自然也是DDoS攻擊的重要目標(biāo)之一。打垮DNS服務(wù)能夠間接打垮一家公司的全部業(yè)務(wù),或者打垮一個(gè)地區(qū)的網(wǎng)絡(luò)服務(wù)。前些時(shí)候風(fēng)頭正盛的黑客組織anonymous也曾經(jīng)宣布要攻擊全球互聯(lián)網(wǎng)的13臺(tái)根DNS服務(wù)器,不過(guò)最終沒(méi)有得手。
UDP攻擊是最容易發(fā)起海量流量的攻擊手段,而且源IP隨機(jī)偽造難以追查。但過(guò)濾比較容易,因?yàn)榇蠖鄶?shù)IP并不提供UDP服務(wù),直接丟棄UDP流量即可。所以現(xiàn)在純粹的UDP流量攻擊比較少見(jiàn)了,取而代之的是UDP協(xié)議承載的DNS Query Flood攻擊。簡(jiǎn)單地說(shuō),越上層協(xié)議上發(fā)動(dòng)的DDoS攻擊越難以防御,因?yàn)閰f(xié)議越上層,與業(yè)務(wù)關(guān)聯(lián)越大,防御系統(tǒng)面臨的情況越復(fù)雜。
DNS Query Flood就是攻擊者操縱大量傀儡機(jī)器,對(duì)目標(biāo)發(fā)起海量的域名查詢請(qǐng)求。為了防止基于ACL的過(guò)濾,必須提高數(shù)據(jù)包的隨機(jī)性。常用的做法是UDP層隨機(jī)偽造源IP地址、隨機(jī)偽造源端口等參數(shù)。在DNS協(xié)議層,隨機(jī)偽造查詢ID以及待解析域名。隨機(jī)偽造待解析域名除了防止過(guò)濾外,還可以降低命中DNS緩存的可能性,盡可能多地消耗DNS服務(wù)器的CPU資源。
關(guān)于DNS Query Flood的代碼,我在2011年7月為了測(cè)試服務(wù)器性能曾經(jīng)寫過(guò)一份代碼,鏈接是http://www.icylife.net/yunshu/show.php?id=832。同樣的,這份代碼人為降低了攻擊性,只做測(cè)試用途。
1.3. HTTP Flood
上文描述的SYN Flood、DNS Query Flood在現(xiàn)階段已經(jīng)能做到有效防御了,真正令各大廠商以及互聯(lián)網(wǎng)企業(yè)頭疼的是HTTP Flood攻擊。HTTP Flood是針對(duì)Web服務(wù)在第七層協(xié)議發(fā)起的攻擊。它的巨大危害性主要表現(xiàn)在三個(gè)方面:發(fā)起方便、過(guò)濾困難、影響深遠(yuǎn)。
SYN Flood和DNS Query Flood都需要攻擊者以root權(quán)限控制大批量的傀儡機(jī)。收集大量root權(quán)限的傀儡機(jī)很花費(fèi)時(shí)間和精力,而且在攻擊過(guò)程中傀儡機(jī)會(huì)由于流量異常被管理員發(fā)現(xiàn),攻擊者的資源快速損耗而補(bǔ)充緩慢,導(dǎo)致攻擊強(qiáng)度明顯降低而且不可長(zhǎng)期持續(xù)。HTTP Flood攻擊則不同,攻擊者并不需要控制大批的傀儡機(jī),取而代之的是通過(guò)端口掃描程序在互聯(lián)網(wǎng)上尋找匿名的HTTP代理或者SOCKS代理,攻擊者通過(guò)匿名代理對(duì)攻擊目標(biāo)發(fā)起HTTP請(qǐng)求。匿名代理是一種比較豐富的資源,花幾天時(shí)間獲取代理并不是難事,因此攻擊容易發(fā)起而且可以長(zhǎng)期高強(qiáng)度的持續(xù)。
另一方面,HTTP Flood攻擊在HTTP層發(fā)起,極力模仿正常用戶的網(wǎng)頁(yè)請(qǐng)求行為,與網(wǎng)站業(yè)務(wù)緊密相關(guān),安全廠商很難提供一套通用的且不影響用戶體驗(yàn)的方案。在一個(gè)地方工作得很好的規(guī)則,換一個(gè)場(chǎng)景可能帶來(lái)大量的誤殺。
最后,HTTP Flood攻擊會(huì)引起嚴(yán)重的連鎖反應(yīng),不僅僅是直接導(dǎo)致被攻擊的Web前端響應(yīng)緩慢,還間接攻擊到后端的Java等業(yè)務(wù)層邏輯以及更后端的數(shù)據(jù)庫(kù)服務(wù),增大它們的壓力,甚至對(duì)日志存儲(chǔ)服務(wù)器都帶來(lái)影響。
有意思的是,HTTP Flood還有個(gè)頗有歷史淵源的昵稱叫做CC攻擊。CC是Challenge Collapsar的縮寫,而Collapsar是國(guó)內(nèi)一家著名安全公司的DDoS防御設(shè)備。從目前的情況來(lái)看,不僅僅是Collapsar,所有的硬件防御設(shè)備都還在被挑戰(zhàn)著,風(fēng)險(xiǎn)并未解除。
1.4. 慢速連接攻擊
提起攻擊,第一反應(yīng)就是海量的流量、海量的報(bào)文。但有一種攻擊卻反其道而行之,以慢著稱,以至于有些攻擊目標(biāo)被打死了都不知道是怎么死的,這就是慢速連接攻擊,最具代表性的是rsnake發(fā)明的Slowloris。
HTTP協(xié)議規(guī)定,HTTP Request以\r\n\r\n結(jié)尾表示客戶端發(fā)送結(jié)束,服務(wù)端開(kāi)始處理。那么,如果永遠(yuǎn)不發(fā)送\r\n\r\n會(huì)如何?Slowloris就是利用這一點(diǎn)來(lái)做DDoS攻擊的。攻擊者在HTTP請(qǐng)求頭中將Connection設(shè)置為Keep-Alive,要求Web Server保持TCP連接不要斷開(kāi),隨后緩慢地每隔幾分鐘發(fā)送一個(gè)key-value格式的數(shù)據(jù)到服務(wù)端,如a:b\r\n,導(dǎo)致服務(wù)端認(rèn)為HTTP頭部沒(méi)有接收完成而一直等待。如果攻擊者使用多線程或者傀儡機(jī)來(lái)做同樣的操作,服務(wù)器的Web容器很快就被攻擊者占滿了TCP連接而不再接受新的請(qǐng)求。
很快的,Slowloris開(kāi)始出現(xiàn)各種變種。比如POST方法向Web Server提交數(shù)據(jù)、填充一大大Content-Length但緩慢的一個(gè)字節(jié)一個(gè)字節(jié)的POST真正數(shù)據(jù)內(nèi)容等等。關(guān)于Slowloris攻擊,rsnake也給出了一個(gè)測(cè)試代碼,參見(jiàn)http://ha.ckers.org/slowloris/slowloris.pl。
2. DDoS攻擊進(jìn)階
2.1. 混合攻擊
以上介紹了幾種基礎(chǔ)的攻擊手段,其中任意一種都可以用來(lái)攻擊網(wǎng)絡(luò),甚至擊垮阿里、百度、騰訊這種巨型網(wǎng)站。但這些并不是全部,不同層次的攻擊者能夠發(fā)起完全不同的DDoS攻擊,運(yùn)用之妙,存乎一心。
高級(jí)攻擊者從來(lái)不會(huì)使用單一的手段進(jìn)行攻擊,而是根據(jù)目標(biāo)環(huán)境靈活組合。普通的SYN Flood容易被流量清洗設(shè)備通過(guò)反向探測(cè)、SYN Cookie等技術(shù)手段過(guò)濾掉,但如果在SYN Flood中混入SYN+ACK數(shù)據(jù)包,使每一個(gè)偽造的SYN數(shù)據(jù)包都有一個(gè)與之對(duì)應(yīng)的偽造的客戶端確認(rèn)報(bào)文,這里的對(duì)應(yīng)是指源IP地址、源端口、目的IP、目的端口、TCP窗口大小、TTL等都符合同一個(gè)主機(jī)同一個(gè)TCP Flow的特征,流量清洗設(shè)備的反向探測(cè)和SYN Cookie性能壓力將會(huì)顯著增大。其實(shí)SYN數(shù)據(jù)報(bào)文配合其他各種標(biāo)志位,都有特殊的攻擊效果,這里不一一介紹。對(duì)DNS Query Flood而言,也有獨(dú)特的技巧。
首先,DNS可以分為普通DNS和授權(quán)域DNS,攻擊普通DNS,IP地址需要隨機(jī)偽造,并且指明服務(wù)器要求做遞歸解析;但攻擊授權(quán)域DNS,偽造的源IP地址則不應(yīng)該是純隨機(jī)的,而應(yīng)該是事先收集的全球各地ISP的DNS地址,這樣才能達(dá)到最大攻擊效果,使流量清洗設(shè)備處于添加IP黑名單還是不添加IP黑名單的尷尬處境。添加會(huì)導(dǎo)致大量誤殺,不添加黑名單則每個(gè)報(bào)文都需要反向探測(cè)從而加大性能壓力。
另一方面,前面提到,為了加大清洗設(shè)備的壓力不命中緩存而需要隨機(jī)化請(qǐng)求的域名,但需要注意的是,待解析域名必須在偽造中帶有一定的規(guī)律性,比如說(shuō)只偽造域名的某一部分而固化一部分,用來(lái)突破清洗設(shè)備設(shè)置的白名單。道理很簡(jiǎn)單,騰訊的服務(wù)器可以只解析騰訊的域名,完全隨機(jī)的域名可能會(huì)直接被丟棄,需要固化。但如果完全固定,也很容易直接被丟棄,因此又需要偽造一部分。
其次,對(duì)DNS的攻擊不應(yīng)該只著重于UDP端口,根據(jù)DNS協(xié)議,TCP端口也是標(biāo)準(zhǔn)服務(wù)。在攻擊時(shí),可以UDP和TCP攻擊同時(shí)進(jìn)行。
HTTP Flood的著重點(diǎn),在于突破前端的cache,通過(guò)HTTP頭中的字段設(shè)置直接到達(dá)Web Server本身。另外,HTTP Flood對(duì)目標(biāo)的選取也非常關(guān)鍵,一般的攻擊者會(huì)選擇搜索之類需要做大量數(shù)據(jù)查詢的頁(yè)面作為攻擊目標(biāo),這是非常正確的,可以消耗服務(wù)器盡可能多的資源。但這種攻擊容易被清洗設(shè)備通過(guò)人機(jī)識(shí)別的方式識(shí)別出來(lái),那么如何解決這個(gè)問(wèn)題?很簡(jiǎn)單,盡量選擇正常用戶也通過(guò)APP訪問(wèn)的頁(yè)面,一般來(lái)說(shuō)就是各種Web API。正常用戶和惡意流量都是來(lái)源于APP,人機(jī)差別很小,基本融為一體難以區(qū)分。
之類的慢速攻擊,是通過(guò)巧妙的手段占住連接不釋放達(dá)到攻擊的目的,但這也是雙刃劍,每一個(gè)TCP連接既存在于服務(wù)端也存在于自身,自身也需要消耗資源維持TCP狀態(tài),因此連接不能保持太多。如果可以解決這一點(diǎn),攻擊性會(huì)得到極大增強(qiáng),也就是說(shuō)Slowloris可以通過(guò)stateless的方式發(fā)動(dòng)攻擊,在客戶端通過(guò)嗅探捕獲TCP的序列號(hào)和確認(rèn)維護(hù)TCP連接,系統(tǒng)內(nèi)核無(wú)需關(guān)注TCP的各種狀態(tài)變遷,一臺(tái)筆記本即可產(chǎn)生多達(dá)65535個(gè)TCP連接。
前面描述的,都是技術(shù)層面的攻擊增強(qiáng)。在人的方面,還可以有一些別的手段。如果SYN Flood發(fā)出大量數(shù)據(jù)包正面強(qiáng)攻,再輔之以Slowloris慢速連接,多少人能夠發(fā)現(xiàn)其中的秘密?即使服務(wù)器宕機(jī)了也許還只發(fā)現(xiàn)了SYN攻擊想去加強(qiáng)TCP層清洗而忽視了應(yīng)用層的行為。種種攻擊都可以互相配合,達(dá)到最大的效果。攻擊時(shí)間的選擇,也是一大關(guān)鍵,比如說(shuō)選擇維護(hù)人員吃午飯時(shí)、維護(hù)人員下班堵在路上或者在地鐵里無(wú)線上網(wǎng)卡都沒(méi)有信號(hào)時(shí)、目標(biāo)企業(yè)在舉行大規(guī)?;顒?dòng)流量飆升時(shí)等。
2.2. 來(lái)自P2P網(wǎng)絡(luò)的攻擊
前面的攻擊方式,多多少少都需要一些傀儡機(jī),即使是HTTP Flood也需要搜索大量的匿名代理。如果有一種攻擊,只需要發(fā)出一些指令,就有機(jī)器自動(dòng)上來(lái)執(zhí)行,才是完美的方案。這種攻擊已經(jīng)出現(xiàn)了,那就是來(lái)自P2P網(wǎng)絡(luò)的攻擊。
大家都知道,互聯(lián)網(wǎng)上的P2P用戶和流量都是一個(gè)極為龐大的數(shù)字。如果他們都去一個(gè)指定的地方下載數(shù)據(jù),使成千上萬(wàn)的真實(shí)IP地址連接過(guò)來(lái),沒(méi)有哪個(gè)設(shè)備能夠支撐住。拿BT下載來(lái)說(shuō),偽造一些熱門視頻的種子,發(fā)布到搜索引擎,就足以騙到許多用戶和流量了,但這只是基礎(chǔ)攻擊。
高級(jí)P2P攻擊,是直接欺騙資源管理服務(wù)器。如迅雷客戶端會(huì)把自己發(fā)現(xiàn)的資源上傳到資源管理服務(wù)器,然后推送給其他需要下載相同資源的用戶,這樣,一個(gè)鏈接就發(fā)布出去。通過(guò)協(xié)議逆向,攻擊者偽造出大批量的熱門資源信息通過(guò)資源管理中心分發(fā)出去,瞬間就可以傳遍整個(gè)P2P網(wǎng)絡(luò)。更為恐怖的是,這種攻擊是無(wú)法停止的,即使是攻擊者自身也無(wú)法停止,攻擊一直持續(xù)到P2P官方發(fā)現(xiàn)問(wèn)題更新服務(wù)器且下載用戶重啟下載軟件時(shí)為止。
3. 總結(jié)
限于篇幅,DDoS攻擊的介紹就寫這么多,而且我也不愿意對(duì)這個(gè)做更進(jìn)一步的闡述了——理解防御這么多已經(jīng)夠用了。
總的來(lái)說(shuō),DDoS攻擊可以很靈巧,可以很優(yōu)美。運(yùn)用之妙,存乎一心。
-
DDoS
+關(guān)注
關(guān)注
3文章
166瀏覽量
23007 -
IDC
+關(guān)注
關(guān)注
4文章
383瀏覽量
37039 -
TCP
+關(guān)注
關(guān)注
8文章
1324瀏覽量
78756
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論