SYN Cookie原理及在Linux核心中的實現(轉)

ba發表於2007-08-16
SYN Cookie原理及在Linux核心中的實現(轉)[@more@]  概述

  在目前以IPv4為支撐的網路協議上搭建的網路環境中,SYN Flood是一種非常危險而常見的DoS攻擊方式。到目前為止,能夠有效防範SYN Flood攻擊的手段並不多,而SYN Cookie就是其中最著名的一種。SYN Cookie原理由D. J. Bernstain和 Eric Schenk發明。在很多作業系統上都有各種各樣的實現。其中包括Linux。本文就分別介紹一下SYN Flood攻擊和SYN Cookie的原理,更重要的是介紹Linux核心中實現SYN Cookie的方式。最後,本文給出一種增強目前Linux中SYN Cookie功能的想法。

  一 SYN Flood攻擊

  SYN Flood攻擊是一種典型的拒絕服務型(Denial of Service)攻擊。所謂拒絕服務型攻擊就是透過進行攻擊,使受害主機或網路不能夠良好的提供服務,從而間接達到攻擊的目的。

  SYN Flood攻擊利用的是IPv4中TCP協議的三次握手(Three-Way Handshake)過程進行的攻擊。大家知道協議規定,如果一端想向另一端發起TCP連線,它需要首先傳送TCP SYN 包到對方,對方收到後傳送一個TCP SYN+ACK包回來,發起方再傳送TCP ACK包回去,這樣三次握手就結束了。我們把TCP連線的發起方叫作"TCP客戶機(TCP Client)",TCP連線的接收方叫作"TCP伺服器(TCP Server)"。值得注意的是在TCP伺服器收到TCP SYN request包時,在傳送TCP SYN+ACK包回TCP客戶機前,TCP伺服器要先分配好一個資料區專門服務於這個即將形成的TCP連線。一般把收到SYN包而還未收到ACK包時的連線狀態成為半開連線(Half-open Connection)。

  在最常見的SYN Flood攻擊中,攻擊者在短時間內傳送大量的TCP SYN包給受害者,這時攻擊者是TCP客戶機,受害者是TCP伺服器。根據上面的描述,受害者會為每個TCP SYN包分配一個特定的資料區,只要這些SYN包具有不同的源地址(這一點對於攻擊者來說是很容易偽造的)。這將給TCP伺服器系統造成很大的系統負擔,最終導致系統不能正常工作。

  二 SYN Cookie原理

  SYN Cookie是對TCP伺服器端的三次握手協議作一些修改,專門用來防範SYN Flood攻擊的一種手段。它的原理是,在TCP伺服器收到TCP SYN包並返回TCP SYN+ACK包時,不分配一個專門的資料區,而是根據這個SYN包計算出一個cookie值。在收到TCP ACK包時,TCP伺服器在根據那個cookie值檢查這個TCP ACK包的合法性。如果合法,再分配專門的資料區進行處理未來的TCP連線。

  從上面的介紹可以看出,SYN Cookie的原理比較簡單。到實際的應用中,它有多種不同的實現方式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-961588/,如需轉載,請註明出處,否則將追究法律責任。

相關文章