SYN Cookie原理及在Linux核心中的實現(轉)
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的原理比較簡單。到實際的應用中,它有多種不同的實現方式。
在目前以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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Cookie、Session、JWT在koa中的應用及實現原理CookieSessionJWT
- LINUX下SYN FLOOD攻擊及LINUX下SYN攻防簡述Linux
- Linux安全之三大攻擊(SYN,DDOS,CC)原理及處理Linux
- SYN洪水攻擊原理
- AOP如何實現及實現原理
- 【linux】helloword原理分析及實戰Linux
- simple-mybatis的原理及實現MyBatis
- 分散式鎖的實現及原理分散式
- java中的鎖及實現原理Java
- 在 Linux 中查詢 CPU 的核數Linux
- 【轉】大檔案上傳原理及C#實現方案C#
- cookie與session的區別以及在Django中的實現CookieSessionDjango
- SpringMVC實現原理及解析SpringMVC
- KVO使用及實現原理
- Promise原理探究及實現Promise
- NNLM原理及Pytorch實現PyTorch
- Flutter 實現原理及在馬蜂窩的跨平臺開發實踐Flutter
- Linux核心中斷Linux
- vue 實現原理及簡單示例實現Vue
- C++ 多型的實現及原理C++多型
- zookeeper 分散式鎖的原理及實現分散式
- Kafka核心中的分散式機制實現Kafka分散式
- Cookie原理Cookie
- TreeMap原理實現及常用方法
- DES原理及程式碼實現
- LRU cache原理及go實現Go
- JSONP 跨域原理及實現JSON跨域
- MapReduce原理及簡單實現
- 在K8S中,Scheduler 作用及實現原理有哪些?K8S
- Linux網路安全技術與實現第2章之原理及實驗Linux
- UITableView的原理——探究及重新實現程式碼UIView
- TCP/IP協議棧在Linux核心中的執行時序分析TCP協議Linux
- CGLib動態代理原理及實現CGLib
- consistent hash 原理,優化及實現優化
- Svm演算法原理及實現演算法
- RPC基本原理及實現RPC
- HashMap實現原理及原始碼分析HashMap原始碼
- ARouter原理剖析及手動實現
- synchronized實現原理及鎖優化synchronized優化