syncookies

在目前以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功能的想法。

基本介紹

  • 中文名:syncookies
  • 用途:有效防範SYN Flood攻擊的手段
  • 平台:Linux系統
  • 發明者:D. J. Bernstain和 Eric Schenk
SYN Flood攻擊,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的原理比較簡單。到實際的套用中,它有多種不同的實現方式。

總結

現在普遍使用的IPv4協定帶有很多安全上的問題,其中面對SYN Flood攻擊的軟弱就是一點。在不改變TCP三次握手流程的情況下,TCP Server幾乎不可能有效的防範SYN Flood的攻擊。要保證完全防範SYN Flood,必須修改三次握手協定。SYN Cookie是一種很有效的方法。它的思想比較簡單,主要是如何具體的實現,Linux系統也提供了一種實現。作者通過研讀Linux2.4.20核心中的代碼,基本了解了Linux核心中實現SYN Cookie的手段,將其總結成文字,與對SYN Cookie同樣感興趣的朋友分享、交流。

相關詞條

熱門詞條

聯絡我們