1. 程式人生 > >DoS攻擊種類

DoS攻擊種類

分析 碎片 基本 drop 發包 刪除 防火墻 高效率 hash

DoS攻擊有許多種類,主要有Land攻擊、死亡之ping、淚滴、Smurf攻擊及SYN洪水等。
  
據統計,在所有黑客攻擊事件中,syn洪水攻擊是最常見又最容易被利用的一種DoS攻擊手法。
  1.攻擊原理
  要理解SYN洪水攻擊,首先要理解TCP連接的三次握手過程(Three-wayhandshake)。在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。第一次握手:建立連接時,客戶端發送SYN包((SYN=i)到服務器,並進入SYN SEND狀態,等待服務器確認;
  第二次握手:服務器收到SYN包,必須確認客戶的SYN (ACK=i+1 ),同}Jj’自己也發送一個SYN包((SYN j)}即SYN+ACK包,此時服務器進入SYN_RECV狀態;

  第三次握手:客戶端收到服務器的SYN十ACK包,向服務器發送確認包ACK(ACK=j+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手,客戶端與服務器開始傳送數據。
  在上述過程中,還有一些重要的概念:
  半連接:收到SYN包而還未收到ACK包時的連接狀態稱為半連接,即尚未完全完成三次握手的TCP連接。
  半連接隊列:在三次握手協議中,服務器維護一個半連接隊列,該隊列為每個客戶端的SYN包(SYN=i )開設一個條目,該條目表明服務器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在服務器處於SYN_ RECV狀態,當服務器收到客戶的確認包時,刪除該條目,服務器進入ESTABLISHED狀態。
  Backlog參數:表示半連接隊列的最大容納數目。
  SYN-ACK重傳次數:服務器發送完SYN-ACK包,如果未收到客戶確認包,服務器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接信息、從半連接隊列中刪除。註意,每次重傳等待的時間不一定相同。
  半連接存活時間:是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。
  上面三個參數對系統的TCP連接狀況有很大影響。
  SYN洪水攻擊屬於DoS攻擊的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。SYN攻擊除了能影響主機外,還可以危害路由器、防火墻等網絡系統,事實上SYN攻擊並不管目標是什麽系統,只要這些系統打開TCP服務就可以實施。從圖4-3可看到,服務器接收到連接請求(SYN=i )將此信息加入未連接隊列,並發送請求包給客戶( SYN=j,ACK=i+1 ),此時進入SYN_RECV狀態。當服務器未收到客戶端的確認包時,重發請求包,一直到超時,才將此條目從未連接隊列刪除。配合IP欺騙,SYN攻擊能達到很好的效果,通常,客戶端在短時間內偽造大量不存在的IP地址,向服務器不斷地發送SYN包,服務器回復確認包,並等待客戶的確認,由於源地址是不存在的,服務器需要不斷的重發直至超時,這些偽造的SYN包將長時間占用未連接隊列,正常的SYN 請求
  被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。過程如下:
  攻擊主機C(地址偽裝後為C‘)-----大量SYN包---->彼攻擊主機
  C‘<-------SYN/ACK包----被攻擊主機
  由於C’地址不可達,被攻擊主機等待SYN包超時。攻擊主機通過發人量SYN包填滿未連接隊列,導致正常SYN包被拒絕服務。另外,SYN洪水攻擊還可以通過發大量ACK包進行DoS攻擊。
  
2.傳統算法
  抵禦SYN洪水攻擊較常用的方法為網關防火墻法、中繼防火墻法和SYNcookies。為便於敘述,將系統拓撲圖簡化為圖4-4。圖中,按網絡在防火墻內側還是外側將其分為內網、外網(內網是受防火墻保護的)。其次,設置防火墻的SYN重傳計時器。超時值必須足夠小,避免backlog隊列被填滿;同時又要足夠大保證用戶的正常通訊。
  (1) 網關防火墻法
  網關防火墻抵禦攻擊的基本思想是:對於內網服務器所發的SYN/ACK包,防火墻立即發送ACK包響應。當內網服務器接到ACK包後,從backlog隊列中移出此半連接,連接轉為開連接,TCP連接建成。由於服務器處理開連接的能力比處理半連接大得多,這種方法能有效減輕對內網服務器的SYN攻擊,能有效地讓backlog隊列處於未滿狀態,同時在重傳一個未完成的連接之前可以等待更長時間。
  以下為算法完整描述:
  第一步,防火墻截獲外網客戶端發向內網服務器SYN數據包,允許其通過,抵達內網服務器。同時在連接跟蹤表中記錄此事件.
  第二步,防火墻截獲服務器發向客戶端的SYN/ACK響應包,用連接跟蹤表中記錄的相應SYN包匹配它.
  第三步,防火墻讓截獲的SYN/ACK繼續進行(發向客戶端)。同時,向內網服務器發送ACK包。這樣,對服務器來說,TCP連接三次握手已經完成。系統在backlog隊列中刪掉此半連接.
  第四步,看此TCP連接是否有效,相應產生兩種解決方法。如果客戶端的連接嘗試是有效的,那麽防火墻將接到來自客戶端的ACK包,然後防火墻將它轉發到服務器。服務器會忽略這個冗余的ACK包,這在TCP協議中是允許的.
  如果客戶端的IP地址並不存在,那麽防火墻將收不到來自客戶端的ACK包,重轉計時器將超時。這時,防火墻重傳此連接.
  (2) 中繼防火墻法
  中繼防火墻抵禦攻擊的思想是:防火墻在向內網服務器發SYN包之前,首先完成與外網的三次握手連接,從而消除SYN洪水攻擊的成立條件。
  以下為算法完整描述:
  第一步,防火墻截獲外網客戶端發向內網服務器SYN數據包.
  第二步,防火墻並不直接向內網發SYN數據包,而是代替內網服務器向外網發SYNIACK數據包.
  第三步,只有接到外網的ACK包,防火墻向內網發SYN包.
  第四步,服務器應答SYN/ACK包.
  第五步,防火墻應答ACK包.
  (3) 分析
  首先分析算法的性能,可以看出:為了提高效率,上述算法使用了狀態檢測等機制(可通過本系統的基本模塊層得以實現)
  對於非SYN包(CSYN/ACK及ACK包),如果在連線跟蹤信息表未查找到相應項,則還要匹配規則庫,而匹配規則庫需比較諸多項(如IP地址、端口號等),花費較大,這會降低防火墻的流量。另外,在中繼防火墻算法中,由於使用了SYN包代理,增加了防火墻的負荷,也會降低防火墻的流量。
  其次,當攻擊主機發ACK包,而不是SYN包,算法將出現安全漏洞。一般地,TCP連接從SYN包開始,一旦 SYN包匹配規則庫,此連接將被加到連接跟蹤表中,並且系統給其60s延時。之後,當接到ACK包時,此連接延時突然加大到3600s。如果,TCP連接從ACK包開始,同時此連接未在連接跟蹤表中註冊,ACK包會匹配規則庫。如匹配成功,此連接將被加到連接跟蹤表中,同時其延時被設置為3600s。即使系統無響應,此連接也不會終止。如果攻擊者發大量的ACK包,就會使半連接隊列填滿,導致無法建立其它TCP連接。此類攻擊來自於內網。因為,來自於外網的ACK包攻擊,服務器會很快發RST包終止此連接(SOs>。而對於內網的外發包,其限制規則的嚴格性要小的多。一旦攻擊者在某時間段內從內網發大量ACK包,並且速度高於防火墻處理速度,很容易造成系統癱瘓。
  (4) SYN cookies

  Linux支持SYN cookies,它通過修改TCP協議的序列號生成方法來加強抵禦SYN洪水攻擊能力。在TCP協議中,當收到客戶端的SYN請求時,服務器需要回復SYN-SACK包給客戶端,客戶端也要發送確認包給服務器。通常,服務器的初始序列號由服務器按照一定的規律計算得到或采用隨機數,但在SYN cookies中,服務器的初始序列號是通過對客戶端IP地址、客戶端端口、服務器IP地址和服務器端口以及其他一些安全數值等要素進行hash運算,加密得到的,稱之為cookie。當服務器遭受SYN攻擊使得backlog隊列滿時,服務器並不拒絕新的SYN請求,而是回復cookie(回復包的SYN序列號)給客戶端,如果收到客戶端的ACK包,服務器將客戶端的ACK序列號減去1得到。cookie比較值,並將上述要素進行一次hash運算,看看是否等於此cookie。如果相等,直接完成三次握手(註意:此時並不用查看此連接是否屬於backlog隊列)。

(5)land攻擊

land 攻擊是一種使用相同的源和目的主機和端口發送數據包到某臺機器的攻擊。結果通常使存在漏洞的機器崩潰。


  在Land攻擊中,一個特別打造的SYN包中的原地址和目標地址都被設置成某一個服務器地址,這時將導致接受服務器向它自己的地址發送SYN一ACK消息,結果這個地址又發回ACK消息並創建一個空連接,每一個這樣的連接都將保留直到超時掉。對Land攻擊反應不同,許多UNIX實現將崩潰,而 Windows NT 會變的極其緩慢(大約持續五分鐘)。

(6)死亡之Ping

(ping of death)


  對目標IP不停地Ping探測從而致使目標主機網絡癱瘓。常見工具有蝸牛炸彈、AhBomb等。


  由於在早期的階段,路由器對包的最大尺寸都有限制,許多操作系統對TCP/IP棧的實現在ICMP包上都是規定64KB,並且在對包的標題頭進行讀取之後,要根據該標題頭裏包含的信息來為有效載荷生成緩沖區,當產生畸形的,聲稱自己的尺寸超過ICMP上限的包也就是加載的尺寸超過64K上限時,就會出現內存分配錯誤,導致TCP/IP堆棧崩潰,致使接受方死機。


  防禦:現在所有的標準TCP/IP實現都已實現對付超大尺寸的包,並且大多數防火墻能夠自動過濾這些攻擊,包括:從windows 98之後的windows NT(service pack 3之後),Solaris、和Mac OS都具有抵抗一般ping of death攻擊的能力。此外,對防火墻進行配置,阻斷ICMP以及任何未知協議,都講防止此類攻擊。


  ping -t(無限ping) -l(長度) 65500 ip 死亡之ping(發送大於64K的文件並一直ping就成了死亡之ping)

(7)淚滴

teardrop)


  淚滴攻擊利用那些在TCP/IP堆棧實現中信任IP碎片中的包的標題頭所包含的信息來實現自己的攻擊。IP分段含有指示該分段所包含的是原包的哪一段的信息,某些TCP/IP(包括servicepack 4以前的NT)在收到含有重疊偏移的偽造分段時將崩潰。


  防禦:服務器應用最新的服務包,或者在設置防火墻時對分段進行重組,而不是轉發它們

(8)Smurf攻擊

Smurf攻擊是以最初發動這種攻擊的程序名“Smurf”來命名的。這種攻擊方法結合使用了IP欺騙和ICMP回復方法使大量網絡傳輸充斥目標系統,引起目標系統拒絕為正常系統進行服務。Smurf攻擊通過使用將回復地址設置成受害網絡的廣播地址的ICMP應答請求(ping)數據包,來淹沒受害主機,最終導致該網絡的所有主機都對此ICMP應答請求做出答復,導致網絡阻塞。更加復雜的Smurf將源地址改為第三方的受害者,最終導致第三方崩潰。

DoS攻擊種類