DDoS攻防戰 (一) : 概述

 

  歲寒 而後知松柏以後凋也html

——論語·子罕前端

 

  (此圖摘自《Web腳本攻擊與防護技術核心剖析》一書,做者:郝永清先生)git

  

  DDoS,即 Distributed Denial of Service ,可譯爲分散式阻斷服務攻擊。github

  上圖與DDoS的字面已經清楚的表述出了此類攻擊的原理,勿需多言。這類攻擊氾濫存在的主要緣由之一是網絡服務的開放性,這一特色致使了DDoS攻擊沒法根本杜絕,目前主要應對策略是積極防護與消極防護。算法

 

  典型DDoS的攻擊方式:安全

    ·死亡之Ping服務器

  icmp封裝於IP報文之中,而IP對於很大的數據載荷採用分片傳輸的策略,而接收方須要對這些IP分片進行重組,若是接收方的重組算法不能很好地處理意外狀況,後果會很嚴重,典型的意外狀況包括:網絡

    1.連續分片的偏移量之間不符合它們應該的邏輯關係,攻擊者僞造出這樣的一系列分包是很容易的;併發

    2.重組完成後的IP頭與數據載荷,總長度竟超過了IP報文總長2^16字節(64kB)的限制,一個實現的例子是,前面各分片一概正常,惟有最後一個IP分片的數據載荷儘可能填充到最大,如達到以太網最大傳輸單元MTU 1500字節上限,這樣重組後的報文總長度就達到了約(64kB+1500B-20B-8B=65.44kB)的大小。tcp

    這種攻擊方式附加了對目標系統協議棧算法的漏洞利用。

    ·淚滴TearDrop

  淚滴攻擊指的是向目標機器發送損壞的IP包,諸如重疊的包或過大的包載荷。藉由這些手段,該攻擊能夠經過TCP/IP協議棧中分片重組代碼中的bug來癱瘓各類不一樣的操做系統。(此段摘自維基百科中文,實現方式可參考上死亡之Ping)

    ·UDP洪水

      UDP是一種無鏈接協議,當數據包經過 UDP 發送時,全部的數據包在發送和接收時不須要進行握手驗證。當大量 UDP 數據包發送給受害系統時,可能會致使帶寬飽和從而使得合法服務沒法請求訪問受害系統。遭受 DDoS UDP 洪泛攻擊時,UDP 數據包的目的端口多是隨機或指定的端口,受害系統將嘗試處理接收到的數據包以肯定本地運行的服務。若是沒有應用程序在目標端口運行,受害系統將對源IP發出 ICMP 數據包,代表「目標端口不可達」。某些狀況下,攻擊者會僞造源IP地址以隱藏本身,這樣從受害系統返回的數據包不會直接回到殭屍主機,而是被髮送到被僞造地址的主機。有時 UDP 洪泛攻擊也可能影響受害系統周圍的網絡鏈接,這可能致使受害系統附近的正常系統遇到問題。然而,這取決於網絡體系結構和線速。(此段摘自維基百科中文) 

    ·TCP RST 攻擊

  TCP協議存在安全漏洞,正常的TCP鏈接能夠被非法的第三方復位,這是由於TCP鏈接通信不包含認證的功能。如,在已知鏈接的五元組的狀況下,攻擊者能夠僞造帶有RST/SYN標誌的TCP報文或普通數據報文,當其sequence number落在TCP鏈接的滑動窗口範圍內,可能致使會話終止或者虛假數據插入。(這裏僅僅提一下,詳細可參考文章《從TCP協議的原理來談談rst復位攻擊》、《憶龍2009:TCP非法復位漏洞及解決方法》)

    ·TCP 全鏈接攻擊

  龐大的攻擊羣同時地、不斷地與目標服務器創建正常的TCP鏈接,從而嚴重影響正經常使用戶的鏈接服務。

    ·Syn Flood

  攻擊者向目標服務器發送大量(僞造源IP地址、僞造源端口、正確目標IP地址、正確目標端口)tcp syn數據包,目標服務器爲了維持這麼大量的虛假鏈接,大量的tcp狀態機維持在了SYN_RCVD狀態,嚴重地影響了處理速度與消耗了系統資源,而反觀攻擊者,僞造併發送這些小數據包,各項資源消耗都極低,對於網絡傳輸速度爲3Mb/s的一個攻擊者來講,攻擊包的速率大約可達每秒(3Mb/8/40=9830)個,若是網絡傳輸速度達到30Mb/s,單個攻擊者的攻擊包速率可爲98300/s,若是再考慮到分佈式攻擊,狀況將變得極爲惡劣。    

 

    ·CC攻擊

  CC,即 Chanllenge Collapsar ,可直譯爲 黑洞挑戰,CC攻擊是 DDoS 攻擊的一種類型,使用代理服務器向受害服務器發送大量貌似合法的請求,巧妙之處在於,網絡上有許多免費代理服務器,甚至不少都支持匿名代理,因此其優勢爲:

  1.攻擊者事先不須要抓取攻擊傀儡,但仍需獲得可用的、符合要求的代理 ip:port 列表;

  2.匿名代理,使得追蹤變得很是困難,但並不是不可能!

 

  四層及如下的DDoS防護:

  新型攻擊方式的產生、流行,必然致使對應防護策略的出現。

  而針對四層及四層如下的DDoS攻擊,如今的硬件防火牆大多都能對死亡之Ping、icmp洪水、淚滴等作到很好的防護效果,因此,這裏重點介紹SynFlood的若干防護策略:

    SynCookie:等到系統資源到達某一臨界點,內核協議棧啓用SynCookie機制,進行Syn包源IP:PORT驗證,它自己是一種很是巧妙的實現,具體可參考文章《SYN Cookie的原理和實現》;  

    SynProxy:即Syn代理,通常可在前端防火牆上實現(LVS在內核層實現了這一功能,原理爲SynCookie+Proxy);

    SynCheck:對Syn包依據必定的規則進行檢驗,以過濾掉一部分不規則的包;

    SynFirstDrop:Syn首包丟棄策略,但若是攻擊者將僞造的Syn報文發送兩次,這種方法就失去了效果(國內部分防火牆產品就是採起的這種方法)。

    以上的這些常見防護方法均可以分別經過硬件和軟件來實現,通常來說,硬件防火牆處理能力要比軟件方法強,但價格也更加昂貴,儘管軟件實現性能會有降低,但也沒有太差,例如,ipvs工做於內核層,淘寶在大部分網站使用其做爲Director,下面是一些官方數據:

  若是在上面這些數據的基礎之上,前端Director實現集羣以分擔系統負載,性能將會更佳,可見軟件防火牆在使用的得當的狀況之下,能極大下降系統成本,並且性能理想,這是通過淘寶的系統實際驗證了的。

  筆者將會在接下來的文章裏講述針對應用層的DDoS攻擊的實現、防範,以及一個防火牆內核模塊的實現。若有問題或者建議,歡迎留言討論 :)      

 

 附錄:

  參考資料:《Web腳本攻擊與防護技術核心剖析》、《TCP-IP詳解卷1:協議》、《LVS在淘寶環境中的應用》《LVS在大規模網絡環境下的應用

  2004左右,Fr.Qaker先生公開了CC攻擊的原理、實現代碼、防範方法,結果卻被惡意破壞者利用以進行大範圍的互聯網攻擊,接着, Fr.Qaker便開源了本身開發的CC防火牆  :)

  這是Fr.Qaker當時一篇帖子《抗CC防火牆AntiAttackFireWall(AAFW)開源公告及源代碼下載

相關文章
相關標籤/搜索