DoS的攻擊方式有很多種,最基本的DoS攻擊就是利用合理的服務請求來占用過多的服務資源,從而使合法用戶無法得到服務的響應。 DDoS攻擊手段是在傳統(tǒng)的DoS攻擊基礎(chǔ)之上產(chǎn)生的一類攻擊方式。單一的DoS攻擊一般是采用一對一方式的,當攻擊目標CPU速度低、內(nèi)存小或者網(wǎng)絡帶寬小等等各項性能指標不高它的效果是明顯的。隨著計算機與網(wǎng)絡技術(shù)的發(fā)展,計算機的處理能力迅速增長,內(nèi)存大大增加,同時也出現(xiàn)了千兆級別的網(wǎng)絡,這使得DoS攻擊的困難程度加大了 - 目標對惡意攻擊包的"消化能力"加強了不少,例如你的攻擊軟件每秒鐘可以發(fā)送3,000個攻擊包,但我的主機與網(wǎng)絡帶寬每秒鐘可以處理10,000個攻擊包,這樣一來攻擊就不會產(chǎn)生什么效果。 這時侯分布式的拒絕服務攻擊手段(DDoS)就應運而生了。你理解了DoS攻擊的話,它的原理就很簡單。如果說計算機與網(wǎng)絡的處理能力加大了10倍,用一臺攻擊機來攻擊不再能起作用的話,攻擊者使用10臺攻擊機同時攻擊呢?用100臺呢?DDoS就是利用更多的傀儡機來發(fā)起進攻,以比從前更大的規(guī)模來進攻受害者。 高速廣泛連接的網(wǎng)絡給大家?guī)砹朔奖悖矠镈DoS攻擊創(chuàng)造了極為有利的條件。在低速網(wǎng)絡時代時,黑客占領(lǐng)攻擊用的傀儡機時,總是會優(yōu)先考慮離目標網(wǎng)絡距離近的機器,因為經(jīng)過路由器的跳數(shù)少,效果好。而現(xiàn)在電信骨干節(jié)點之間的連接都是以G為級別的,大城市之間更可以達到2.5G的連接,這使得攻擊可以從更遠的地方或者其他城市發(fā)起,攻擊者的傀儡機位置可以在分布在更大的范圍,選擇起來更靈活了。
如圖一,一個比較完善的DDoS攻擊體系分成四大部分,先來看一下最重要的第2和第3部分:它們分別用做控制和實際發(fā)起攻擊。請注意控制機與攻擊機的區(qū)別,對第4部分的受害者來說,DDoS的實際攻擊包是從第3部分攻擊傀儡機上發(fā)出的,第2部分的控制機只發(fā)布命令而不參與實際的攻擊。對第2和第3部分計算機,黑客有控制權(quán)或者是部分的控制權(quán),并把相應的DDoS程序上傳到這些平臺上,這些程序與正常的程序一樣運行并等待來自黑客的指令,通常它還會利用各種手段隱藏自己不被別人發(fā)現(xiàn)。在平時,這些傀儡機器并沒有什么異常,只是一旦黑客連接到它們進行控制,并發(fā)出指令的時候,攻擊傀儡機就成為害人者去發(fā)起攻擊了。 有的朋友也許會問道:"為什么黑客不直接去控制攻擊傀儡機,而要從控制傀儡機上轉(zhuǎn)一下呢?"。這就是導致DDoS攻擊難以追查的原因之一了。做為攻擊者的角度來說,肯定不愿意被捉到(我在小時候向別人家的雞窩扔石頭的時候也曉得在第一時間逃掉,呵呵),而攻擊者使用的傀儡機越多,他實際上提供給受害者的分析依據(jù)就越多。在占領(lǐng)一臺機器后,高水平的攻擊者會首先做兩件事:1. 考慮如何留好后門(我以后還要回來的哦)!2. 如何清理日志。這就是擦掉腳印,不讓自己做的事被別人查覺到。比較不敬業(yè)的黑客會不管三七二十一把日志全都刪掉,但這樣的話網(wǎng)管員發(fā)現(xiàn)日志都沒了就會知道有人干了壞事了,頂多無法再從日志發(fā)現(xiàn)是誰干的而已。相反,真正的好手會挑有關(guān)自己的日志項目刪掉,讓人看不到異常的情況。這樣可以長時間地利用傀儡機。 但是在第3部分攻擊傀儡機上清理日志實在是一項龐大的工程,即使在有很好的日志清理工具的幫助下,黑客也是對這個任務很頭痛的。這就導致了有些攻擊機弄得不是很干凈,通過它上面的線索找到了控制它的上一級計算機,這上級的計算機如果是黑客自己的機器,那么他就會被揪出來了。但如果這是控制用的傀儡機的話,黑客自身還是安全的。控制傀儡機的數(shù)目相對很少,一般一臺就可以控制幾十臺攻擊機,清理一臺計算機的日志對黑客來講就輕松多了,這樣從控制機再找到黑客的可能性也大大降低。 這里用"組織"這個詞,是因為DDoS并不象入侵一臺主機那樣簡單。一般來說,黑客進行DDoS攻擊時會經(jīng)過這樣的步驟: 1. 搜集了解目標的情況
對于DDoS攻擊者來說,攻擊互聯(lián)網(wǎng)上的某個站點,如http://www.,有一個重點就是確定到底有多少臺主機在支持這個站點,一個大的網(wǎng)站可能有很多臺主機利用負載均衡技術(shù)提供同一個網(wǎng)站的www服務。以yahoo為例,一般會有下列地址都是提供http://www.yahoo.com服務的: 如果要進行DDoS攻擊的話,應該攻擊哪一個地址呢?使66.218.71.87這臺機器癱掉,但其他的主機還是能向外提供www服務,所以想讓別人訪問不到http://www.yahoo.com的話,要所有這些IP地址的機器都癱掉才行。在實際的應用中,一個IP地址往往還代表著數(shù)臺機器:網(wǎng)站維護者使用了四層或七層交換機來做負載均衡,把對一個IP地址的訪問以特定的算法分配到下屬的每個主機上去。這時對于DDoS攻擊者來說情況就更復雜了,他面對的任務可能是讓幾十臺主機的服務都不正常。 所以說事先搜集情報對DDoS攻擊者來說是非常重要的,這關(guān)系到使用多少臺傀儡機才能達到效果的問題。簡單地考慮一下,在相同的條件下,攻擊同一站點的2臺主機需要2臺傀儡機的話,攻擊5臺主機可能就需要5臺以上的傀儡機。有人說做攻擊的傀儡機越多越好,不管你有多少臺主機我都用盡量多的傀儡機來攻就是了,反正傀儡機超過了時候效果更好。 但在實際過程中,有很多黑客并不進行情報的搜集而直接進行DDoS的攻擊,這時候攻擊的盲目性就很大了,效果如何也要靠運氣。其實做黑客也象網(wǎng)管員一樣,是不能偷懶的。一件事做得好與壞,態(tài)度最重要,水平還在其次。 2. 占領(lǐng)傀儡機
這一部分實際上是使用了另一大類的攻擊手段:利用形攻擊。這是和DDoS并列的攻擊方式。簡單地說,就是占領(lǐng)和控制被攻擊的主機。取得最高的管理權(quán)限,或者至少得到一個有權(quán)限完成DDoS攻擊任務的賬號。對于一個DDoS攻擊者來說,準備好一定數(shù)量的傀儡機是一個必要的條件,下面說一下他是如何攻擊并占領(lǐng)它們的。 首先,黑客做的工作一般是掃描,隨機地或者是有針對性地利用掃描器去發(fā)現(xiàn)互聯(lián)網(wǎng)上那些有漏洞的機器,象程序的溢出漏洞、cgi、Unicode、ftp、數(shù)據(jù)庫漏洞…(簡直舉不勝舉啊),都是黑客希望看到的掃描結(jié)果。隨后就是嘗試入侵了,具體的手段就不在這里多說了,感興趣的話網(wǎng)上有很多關(guān)于這些內(nèi)容的文章。 總之黑客現(xiàn)在占領(lǐng)了一臺傀儡機了!然后他做什么呢?除了上面說過留后門擦腳印這些基本工作之外,他會把DDoS攻擊用的程序上載過去,一般是利用ftp。在攻擊機上,會有一個DDoS的發(fā)包程序,黑客就是利用它來向受害目標發(fā)送惡意攻擊包的。 3. 實際攻擊 老到的攻擊者一邊攻擊,還會用各種手段來監(jiān)視攻擊的效果,在需要的時候進行一些調(diào)整。簡單些就是開個窗口不斷地ping目標主機,在能接到回應的時候就再加大一些流量或是再命令更多的傀儡機來加入攻擊。 SYN-Flood是目前最流行的DDoS攻擊手段,早先的DoS的手段在向分布式這一階段發(fā)展的時候也經(jīng)歷了浪里淘沙的過程。SYN-Flood的攻擊效果最好,應該是眾黑客不約而同選擇它的原因吧。那么我們一起來看看SYN-Flood的詳細情況。 Syn Flood原理 - 三次握手 TCP連接的三次握手 圖二 TCP三次握手 如圖二,在第一步中,客戶端向服務端提出連接請求。這時TCP SYN標志置位??蛻舳烁嬖V服務端序列號區(qū)域合法,需要檢查。客戶端在TCP報頭的序列號區(qū)中插入自己的ISN。服務端收到該TCP分段后,在第二步以自己的ISN回應(SYN標志置位),同時確認收到客戶端的第一個TCP分段(ACK標志置位)。在第三步中,客戶端確認收到服務端的ISN(ACK標志置位)。到此為止建立完整的TCP連接,開始全雙工模式的數(shù)據(jù)傳輸過程。 Syn Flood攻擊者不會完成三次握手 圖三 Syn Flood惡意地不完成三次握手 假設一個用戶向服務器發(fā)送了SYN報文后突然死機或掉線,那么服務器在發(fā)出SYN+ACK應答報文后是無法收到客戶端的ACK報文的(第三次握手無法完成),這種情況下服務器端一般會重試(再次發(fā)送SYN+ACK給客戶端)并等待一段時間后丟棄這個未完成的連接,這段時間的長度我們稱為SYN Timeout,一般來說這個時間是分鐘的數(shù)量級(大約為30秒-2分鐘);一個用戶出現(xiàn)異常導致服務器的一個線程等待1分鐘并不是什么很大的問題,但如果有一個惡意的攻擊者大量模擬這種情況,服務器端將為了維護一個非常大的半連接列表而消耗非常多的資源----數(shù)以萬計的半連接,即使是簡單的保存并遍歷也會消耗非常多的CPU時間和內(nèi)存,何況還要不斷對這個列表中的IP進行SYN+ACK的重試。實際上如果服務器的TCP/IP棧不夠強大,最后的結(jié)果往往是堆棧溢出崩潰---即使服務器端的系統(tǒng)足夠強大,服務器端也將忙于處理攻擊者偽造的TCP連接請求而無暇理睬客戶的正常請求(畢竟客戶端的正常請求比率非常之?。藭r從正??蛻舻慕嵌瓤磥?,服務器失去響應,這種情況我們稱做:服務器端受到了SYN Flood攻擊(SYN洪水攻擊)。 下面是我在實驗室中模擬的一次Syn Flood攻擊的實際過程 這一個局域網(wǎng)環(huán)境,只有一臺攻擊機(PIII667/128/mandrake),被攻擊的是一臺Solaris 8.0 (spark)的主機,網(wǎng)絡設備是Cisco的百兆交換機。這是在攻擊并未進行之前,在Solaris上進行snoop的記錄,snoop與tcpdump等網(wǎng)絡監(jiān)聽工具一樣,也是一個很好的網(wǎng)絡抓包與分析的工具??梢钥吹焦糁埃繕酥鳈C上接到的基本上都是一些普通的網(wǎng)絡包。
接著,攻擊機開始發(fā)包,DDoS開始了…,突然間sun主機上的snoop窗口開始飛速地翻屏,顯示出接到數(shù)量巨大的Syn請求。這時的屏幕就好象是時速300公里的列車上的一扇車窗。這是在Syn Flood攻擊時的snoop輸出結(jié)果:
這時候內(nèi)容完全不同了,再也收不到剛才那些正常的網(wǎng)絡包,只有DDoS包。大家注意一下,這里所有的Syn Flood攻擊包的源地址都是偽造的,給追查工作帶來很大困難。這時在被攻擊主機上積累了多少Syn的半連接呢?我們用netstat來看一下:
其中SYN_RCVD表示當前未完成的TCP SYN隊列,統(tǒng)計一下: 共有五千多個Syn的半連接存儲在內(nèi)存中。這時候被攻擊機已經(jīng)不能響應新的服務請求了,系統(tǒng)運行非常慢,也無法ping通。 這是在攻擊發(fā)起后僅僅70秒鐘左右時的情況。 到目前為止,進行DDoS攻擊的防御還是比較困難的。首先,這種攻擊的特點是它利用了TCP/IP協(xié)議的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻擊。一位資深的安全專家給了個形象的比喻:DDoS就好象有1,000個人同時給你家里打電話,這時候你的朋友還打得進來嗎? 不過即使它難于防范,也不是說我們就應該逆來順受,實際上防止DDoS并不是絕對不可行的事情?;ヂ?lián)網(wǎng)的使用者是各種各樣的,與DDoS做斗爭,不同的角色有不同的任務。我們以下面幾種角色為例:
網(wǎng)管員做為一個企業(yè)內(nèi)部網(wǎng)的管理者,往往也是安全員、守護神。在他維護的網(wǎng)絡中有一些服務器需要向外提供WWW服務,因而不可避免地成為DDoS的攻擊目標,他該如何做呢?可以從主機與網(wǎng)絡設備兩個角度去考慮。 主機上的設置
網(wǎng)絡設備上的設置 1.防火墻
第五項主要是防止自己的服務器被當做工具去害人。 2.路由器
其中使用CEF和Unicast設置時要特別注意,使用不當會造成路由器工作效率嚴重下降,升級IOS也應謹慎。路由器是網(wǎng)絡的核心設備,與大家分享一下進行設置修改時的小經(jīng)驗,就是先不保存。Cisco路由器有兩份配置startup config和running config,修改的時候改變的是running config,可以讓這個配置先跑一段時間(三五天的就隨意啦),覺得可行后再保存配置到startup config;而如果不滿意想恢復原來的配置,用copy start run就行了。 ISP / ICP為很多中小型企業(yè)提供了各種規(guī)模的主機托管業(yè)務,所以在防DDoS時,除了與企業(yè)網(wǎng)管理員一樣的手段外,還要特別注意自己管理范圍內(nèi)的客戶托管主機不要成為傀儡機??陀^上說,這些托管主機的安全性普遍是很差的,有的連基本的補丁都沒有打就赤膊上陣了,成為黑客最喜歡的"肉雞",因為不管這臺機器黑客怎么用都不會有被發(fā)現(xiàn)的危險,它的安全管理太差了;還不必說托管的主機都是高性能、高帶寬的-簡直就是為DDoS定制的。而做為ISP的管理員,對托管主機是沒有直接管理的權(quán)力的,只能通知讓客戶來處理。在實際情況時,有很多客戶與自己的托管主機服務商配合得不是很好,造成ISP管理員明知自己負責的一臺托管主機成為了傀儡機,卻沒有什么辦法的局面。而托管業(yè)務又是買方市場,ISP還不敢得罪客戶,怎么辦?咱們管理員和客戶搞好關(guān)系吧,沒辦法,誰讓人家是上帝呢?呵呵,客戶多配合一些,ISP的主機更安全一些,被別人告狀的可能性也小一些。 他們提供了互聯(lián)網(wǎng)存在的物理基礎(chǔ)。如果骨干網(wǎng)絡運營商可以很好地合作的話,DDoS攻擊可以很好地被預防。在2000年yahoo等知名網(wǎng)站被攻擊后,美國的網(wǎng)絡安全研究機構(gòu)提出了骨干運營商聯(lián)手來解決DDoS攻擊的方案。其實方法很簡單,就是每家運營商在自己的出口路由器上進行源IP地址的驗證,如果在自己的路由表中沒有到這個數(shù)據(jù)包源IP的路由,就丟掉這個包。這種方法可以阻止黑客利用偽造的源IP來進行DDoS攻擊。不過同樣,這樣做會降低路由器的效率,這也是骨干運營商非常關(guān)注的問題,所以這種做法真正采用起來還很困難。 對DDoS的原理與應付方法的研究一直在進行中,找到一個既有效又切實可行的方案不是一朝一夕的事情。但目前我們至少可以做到把自己的網(wǎng)絡與主機維護好,首先讓自己的主機不成為別人利用的對象去攻擊別人;其次,在受到攻擊的時候,要盡量地保存證據(jù),以便事后追查,一個良好的網(wǎng)絡和日志系統(tǒng)是必要的。無論DDoS的防御向何處發(fā)展,這都將是一個社會工程,需要IT界的同行們來一起關(guān)注,通力合作。
|
|