歲寒 然后知松柏之后凋也
——論語·子罕
(此圖摘自《Web腳本攻擊與防御技術核心剖析》一書,作者:郝永清先生)
DDoS,即 Distributed Denial of Service ,可譯為分散式阻斷服務攻擊。
上圖與DDoS的字面已經清楚的表述出了此類攻擊的原理,勿需多言。這類攻擊泛濫存在的主要原因之一是網絡服務的開放性,這一特點導致了DDoS攻擊無法根本杜絕,目前主要應對策略是積極防御與消極防御。
典型DDoS的攻擊方式:
·死亡之Ping
icmp封裝于ip報文之中,而IP對于很大的數據載荷采用分片傳輸的策略,而接收方需要對這些IP分片進行重組,如果接收方的重組算法不能很好地處理意外情況,后果會很嚴重,典型的意外情況包括:
1.連續分片的偏移量之間不符合它們應該的邏輯關系,攻擊者偽造出這樣的一系列分包是很容易的;
2.重組完成后的IP頭與數據載荷,總長度竟超過了IP報文總長2^16字節(64kB)的限制,一個實現的例子是,前面各分片一律正常,唯有最后一個IP分片的數據載荷盡量填充到最大,如達到以太網最大傳輸單元MTU 1500字節上限,這樣重組后的報文總長度就達到了約(64kB+1500B-20B-8B=65.44kB)的大小。
這種攻擊方式附加了對目標系統協議棧算法的漏洞利用。
·淚滴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)開源公告及源代碼下載》
新聞熱點
疑難解答