發(fā)現(xiàn)最新式的DDOS攻擊方式
DdoS攻擊是利用一批受控制的機器向一臺機器發(fā)起攻擊,這樣來勢迅猛的攻擊令人難以防備,因此具有較大的破壞性。通過本文的介紹,希望大家更多的了解DDos攻擊。
下面簡單介紹攻擊者如何以64字節(jié)ACK包換取服務(wù)器1518大數(shù)據(jù)包重傳,如果源IP偽造成功,攻擊者從理論上將獲得20余倍的帶寬放大攻擊效果 .如果有兩個目標網(wǎng)站,本方法將一箭雙雕。
攻擊原理:利用TCP協(xié)議收到ACK后的快速重傳機制,攻擊正常TCP/IP協(xié)議棧示意圖當(dāng)我們獲得http response回應(yīng)后,立即回復(fù)一個ack數(shù)據(jù)包,此ack數(shù)據(jù)包的seq值是http response數(shù)據(jù)包中的ack seq值,而ack seq值為http response數(shù)據(jù)包的seq序號值。
這樣當(dāng)server收到此ack數(shù)據(jù)包后,會認為是自己剛才發(fā)送的http response包在網(wǎng)絡(luò)中已丟失,會利用快速重傳機制加以重傳。如果我們拼命發(fā)送大量的ack包,則服務(wù)器就會不斷進行重傳。Ack數(shù)據(jù)包的大小只需64字節(jié),但http response通常都在512字節(jié)左右,最長可達1518字節(jié)。因為正常tcp協(xié)議序號的不可預(yù)測性,所以我們在這次攻擊中暴露了自己的真實IP.
攻擊采用靜態(tài)syn cookie的ddos設(shè)備防護下的服務(wù)器,所謂靜態(tài)syn cookie就是以客戶端請求之syn包為參數(shù)計算回復(fù)syn ack中的seq值,并在ack包回傳時判斷連接合法性的方法,這種方法被ddos廠商大量采用,并且獲得數(shù)量可觀的國家發(fā)明專利,你經(jīng)常會聽到ddos廠商的人說他們的設(shè)備比防火墻“牛”多了,可輕松達到百兆線速syn防御,但百兆防火墻30M攻擊流量就可以干掉,說這種話的ddos廠商,我可以打賭他們的設(shè)備80%采用了這種syn cookie算法。
Syn cookie算法的好處是只在synflood攻擊時消耗CPU資源,這對于X86下強悍的通用CPU來說,正適用。
讀者可能會感到很奇怪,為什么如此成熟的技術(shù)防火墻不采用,而讓ddos廠商成天擠對?這有如下幾個方面的原因:1:防火墻也用syn cookie進行synflood防御的,但大多不是靜態(tài)syn cookie,而是嚴格記錄連接狀態(tài)采用動態(tài)syn cookie,所以當(dāng)syn flood攻擊時不光消耗CPU,還要消耗大量內(nèi)存。這也就是我本文開頭提及的本方法可以攻擊大部分ddos廠商和小部分防火墻廠商的原因。
2:syn cookie/syn proxy是bsd系統(tǒng)內(nèi)核源碼的一部分,在Linux最新版的2.6內(nèi)核中syn proxy還沒有被包含。所以ddos設(shè)備也大多由bsd系統(tǒng)組成。當(dāng)然bsd是開源的,移植也不是什么大問題嘍。
3:防火墻大多以Linux下的開源軟件netfilter為基礎(chǔ),但netfilter中hash算法和連接表設(shè)計不是很優(yōu)秀,防火墻轉(zhuǎn)發(fā)性能的瓶頸就在于此,如果再加入syn proxy表項,會進一步降低對數(shù)據(jù)包的處理能力或加大連接表體積。高端防火墻大都支持數(shù)百萬的連接數(shù),這百萬的表項就夠防火墻喝一壺的了,再加一個syn proxy表項,性能還不得掉的稀里嘩拉的?
4:防火墻很重要的一個網(wǎng)絡(luò)功能就是DNAT,在沒有DNAT操作前,防火墻不知道這些syn包的最終目的地是自身還是DMZ區(qū)的服務(wù)器,所以syn包必須DNAT后才知道是否要進行syn cookie保護。但這時就已經(jīng)進入到netfilter處理框架了,性能當(dāng)然就跟不上了。你見過幾個ddos設(shè)備支持NAT的?如果支持了,他的性能也會下降不少。如果防火墻工作在橋模式下,不經(jīng)過netfilter處理框架,防火墻就可以搖身一變成為性能卓越的抗ddos設(shè)備了,嗎功能都沒有,當(dāng)然一身輕松了。呵呵…但您買的是防火墻,會這么大材小用嗎?
言歸正傳,采用靜態(tài)syn cookie的ddos設(shè)備,我們只需要重放一個ack包就可以達到與服務(wù)器的三次握手效果,因此可以做到源IP地址偽裝。(這個偽裝的源IP地址是你以前用過的,并且與ddos設(shè)備通訊過,并保存下來的,現(xiàn)在將它重放而己。如果你看不懂我在說什么,參照我寫的《對國內(nèi)ddos廠商技術(shù)點評》一文,抓包分析一下就知道了)。第二步就是發(fā)送一個正常的http request請求,隨后就是大量的虛假ack請求重傳。
天知道,誰在用我們偽裝的源IP地址,做為一個連帶的犧牲品。你可能會認為受害服務(wù)器B會回復(fù)rst包給受害服務(wù)器A.這是有可能,但如果服務(wù)器B前面加裝了一個“狀態(tài)檢測”防火墻,就會直接丟棄這個反射的http response數(shù)據(jù)包。
本思路有價值的地方:1. 利用一條合法連接,對服務(wù)器進行下行帶寬攻擊,現(xiàn)在的“狀態(tài)檢測”設(shè)備不一定可以發(fā)現(xiàn)2. 目標服務(wù)器應(yīng)用層程序感知不到這種攻擊,可以逃避基于應(yīng)用層流量統(tǒng)計的防御方式,因為重傳是TCP協(xié)議特性,TCP協(xié)議自動完成。重傳的數(shù)據(jù)包,對應(yīng)用層來說是透明的。
3. 現(xiàn)在只是一種思路,不局限于TCP協(xié)議。UDP加入重傳機制后,也可以保證通訊可靠性。并且這是私人或公司獨立開發(fā)的協(xié)議,漏洞會比TCP協(xié)議更大。
4. drdos的帶寬放大效果也只不過是6倍而己,并且消耗的是上行帶寬。
5. 真正的威脅不在現(xiàn)在,而是在對“長肥管道”的攻擊效果。對方下行帶寬越寬,攻擊效果越明顯。TCP會禁用分片,所以重傳數(shù)據(jù)包大小依靠你與服務(wù)器之間最小的那個設(shè)備的MTU值,所以你見到的TCP協(xié)議的IP首部中的長度字段不會超時1518.但在“長肥管道”中,IP首部的長度字段會達到65535的極大值,對這些數(shù)據(jù)包的重傳攻擊,會達到令人吃驚的1:1024的放大效果。
1M對1G 1G對1T明白?就是因為這點,我才會提供本思路,否則1:25的消耗也是蠻力。
攻擊完善的TCP協(xié)議其實是很困難的:1.具體可以參見RFC2581中關(guān)于Fast Retransmit/Fast Recovery的說明部分。
2.你的ack包構(gòu)造不好,服務(wù)器協(xié)議棧還是會利用超時重傳,而不是快速重傳。
DdoS攻擊是黑客最常用的攻擊手段,我們一定要對其多多防范才是。
【編輯推薦】