DDos分佈式阻斷服務攻擊

DDoS(Denial Of Service)攻擊是指故意的攻擊網絡協議實現的缺陷或直接通過野蠻手段殘忍地耗盡被攻擊對象的資源,目的是讓目標計算機或網絡無法提供正常的服務或資源訪問,使目標系統服務系統停止響應甚至崩潰。

DDOS的主要幾個攻擊  
1.SYN變種攻擊  發送僞造源IP的SYN數據包但是數據包不是64字節而是上千字節這種攻擊會造成一些防火牆處理錯誤鎖死,消耗服務器CPU內存的同時還會堵塞帶寬。  
2.TCP混亂數據包攻擊  發送僞造源IP的 TCP數據包,TCP頭的TCP Flags 部分是混亂的可能是syn ,ack ,syn+ack ,syn+rst等等,會造成一些防火牆處理錯誤鎖死,消耗服務器CPU內存的同時還會堵塞帶寬。 
3.針對用UDP協議的攻擊  很多聊天室,視頻音頻軟件,都是通過UDP數據包傳輸的,攻擊者針對分析要攻擊的網絡軟件協議,發送和正常數據一樣的數據包,這種攻擊非常難防護,一般防護牆通過攔截攻擊數據包的特徵碼防護,但是這樣會造成正常的數據包也會被攔截,  
4.針對WEB Server的多連接攻擊  通過控制大量肉雞同時連接訪問網站,造成網站無法處理癱瘓,這種攻擊和正常訪問網站是一樣的,只是瞬間訪問量增加幾十倍甚至上百倍,有些防火牆可以通過限制每個連接過來的IP連接數來防護,但是這樣會造成正常用戶稍微多打開幾次網站也會被封,  5.針對WEB Server的變種攻擊  通過控制大量肉雞同時連接訪問網站,一點連接建立就不斷開,一直髮送發送一些特殊的GET訪問請求造成網站數據庫或者某些頁面耗費大量的CPU,這樣通過限制每個連接過來的IP連接數就失效了,因爲每個肉雞可能只建立一個或者只建立少量的連接。這種攻擊非常難防護,後面給大家介紹防火牆的解決方案  
6. 針對WEB Server的變種攻擊  通過控制大量肉雞同時連接網站端口,但是不發送GET請求而是亂七八糟的字符,大部分防火牆分析攻擊數據包前三個字節是GET字符然後來進行http協議的分析,這種攻擊,不發送GET請求就可以繞過防火牆到達服務器,一般服務器都是共享帶寬的,帶寬不會超過10M 所以大量的肉雞攻擊數據包就會把這臺服務器的共享帶寬堵塞造成服務器癱瘓,這種攻擊也非常難防護,因爲如果只簡單的攔截客戶端發送過來沒有GET字符的數據包,會錯誤的封鎖很多正常的數據包造成正常用戶無法訪問,後面給大家介紹防火牆的解決方案  
7.針對遊戲服務器的攻擊  因爲遊戲服務器非常多,這裏介紹最早也是影響最大的傳奇遊戲,傳奇遊戲分爲登陸註冊端口7000,人物選擇端口7100,以及遊戲運行端口7200,7300,7400等,因爲遊戲自己的協議設計的非常複雜,所以攻擊的種類也花樣倍出,大概有幾十種之多,而且還在不斷的發現新的攻擊種類,這裏介紹目前最普遍的假人攻擊,假人攻擊是通過肉雞模擬遊戲客戶端進行自動註冊、登陸、建立人物、進入遊戲活動從數據協議層面模擬正常的遊戲玩家,很難從遊戲數據包來分析出哪些是攻擊哪些是正常玩家。  以上介紹的幾種最常見的攻擊也是比較難防護的攻擊。一般基於包過濾的防火牆只能分析每個數據包,或者有限的分析數據連接建立的狀態,防護SYN,或者變種的SYN,ACK攻擊效果不錯,但是不能從根本上來分析tcp,udp協議,和針對應用層的協議,比如http,遊戲協議,軟件視頻音頻協議,現在的新的攻擊越來越多的都是針對應用層協議漏洞,或者分析協議然後發送和正常數據包一樣的數據,或者乾脆模擬正常的數據流,單從數據包層面,分析每個數據包裏面有什麼數據,根本沒辦法很好的防護新型的攻擊。  SYN攻擊解析  SYN攻擊屬於DOS攻擊的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。TCP協議建立連接的時候需要雙方相互確認信息,來防止連接被僞造和精確控制整個數據傳輸過程數據完整有效。所以TCP協議採用三次握手建立一個連接。  第一次握手:建立連接時,客戶端發送syn包到服務器,並進入SYN_SEND狀態,等待服務器確認;   第二次握手:服務器收到syn包,必須確認客戶的SYN 同時自己也發送一個SYN包 即SYN+ACK包,此時服務器進入SYN_RECV狀態;   第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。  SYN攻擊利用TCP協議三次握手的原理,大量發送僞造源IP的SYN包也就是僞造第一次握手數據包,服務器每接收到一個SYN包就會爲這個連接信息分配核心內存並放入半連接隊列,如果短時間內接收到的SYN太多,半連接隊列就會溢出,操作系統會把這個連接信息丟棄造成不能連接,當攻擊的SYN包超過半連接隊列的最大值時,正常的客戶發送SYN數據包請求連接就會被服務器丟棄, 每種操作系統半連接隊列大小不一樣所以抵禦SYN攻擊的能力也不一樣。那麼能不能把半連接隊列增加到足夠大來保證不會溢出呢,答案是不能,每種操作系統都有方法來調整TCP模塊的半連接隊列最大數,例如Win2000操作系統在註冊表 HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters裏 TcpMaxHalfOpen,TcpMaxHalfOpenRetried ,Linux操作系統用變量tcp_max_syn_backlog來定義半連接隊列的最大數。但是每建立一個半連接資源就會耗費系統的核心內存,操作系統的核心內存是專門提供給系統內核使用的內存不能進行虛擬內存轉換是非常緊缺的資源windows2000 系統當物理內存是4g的時候 核心內存只有不到300M,系統所有核心模塊都要使用核心內存所以能給半連接隊列用的核心內存非常少。Windows 2003 默認安裝情況下,WEB SERVER的80端口每秒鐘接收5000個SYN數據包一分鐘後網站就打不開了。標準SYN數據包64字節 5000個等於 5000*64 *8(換算成bit)/1024=2500K也就是 2.5M帶寬 ,如此小的帶寬就可以讓服務器的端口癱瘓,由於攻擊包的源IP是僞造的很難追查到攻擊源,,所以這種攻擊非常多。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章