woff 發表於 2010-8-27 12:06:07

TCP SYN Flood攻擊的原理機制/檢測與防範及防禦方法

http://www.bingdun.com 2005-5-16 作者:冰盾科技 出自:冰盾科技

TCP SYN Flood攻擊的原理機制/檢測與防範及防禦方法

現在的攻擊者,無所不在了.對於一些攻擊手法,很多高手也都是看在眼裡而沒什麼實質性防範措施.除了改端口,換IP,弄域名..還能做什麼? 本篇文章介紹了TCP SYN Flood攻擊的原理機制/檢測與防範及防禦方法,希望能給大夥一個思路.

TCP SYN Flood攻擊的機制

客戶端通過發送在TCP報頭中SYN標誌置位的數據分段到服務端來請求建立連接。通常情況下,服務端會按照IP報頭中的來源地址來返回SYN/ACK置位的數據包給客戶端,客戶端再返回ACK到服務端來完成一個完整的連接(Figure-1)。
   在攻擊發生時,客戶端的來源IP地址是經過偽造的(spoofed),現行的IP路由機制僅檢查目的IP地址並進行轉發,該IP包到達目的主機後返回路徑無法通過路由達到的,於是目的主機無法通過TCP三次握手建立連接。在此期間因為TCP緩存隊列已經填滿,而拒絕新的連接請求。目的主機一直嘗試直至超時 (大約75秒)。這就是該攻擊類型的基本機制。
  發動攻擊的主機只要發送較少的,來源地址經過偽裝而且無法通過路由達到的SYN連接請求至目標主機提供TCP服務的端口,將目的主機的TCP緩存隊列填滿,就可以實施一次成功的攻擊。實際情況下,發動攻擊時往往是持續且高速的。

Figure-3 SYN Flood Attack
   這裡需要使用經過偽裝且無法通過路由達到的來源IP地址,因為攻擊者不希望有任何第三方主機可以收到來自目的系統返回的SYN/ACK,第三方主機會返回一個RST(主機無法判斷該如何處理連接情況時,會通過RST重置連接),從而妨礙攻擊進行。

Figure-4 IP Spoofing
  由此可以看到,這種攻擊方式利用了現有TCP/IP協議本身的薄弱環節,而且攻擊者可以通過IP偽裝有效的隱蔽自己。但對於目的主機來說,由於無法判斷攻擊的真正來源。而不能採取有效的防禦措施。


TCP SYN Flood檢測與防範

一、分析
  從上面的分析,可以看出TCP SYN Flood遠程拒絕服務攻擊具有以下特點:
  針對TCP/IP協議的薄弱環節進行攻擊;
  發動攻擊時,只要很少的數據流量就可以產生顯著的效果;
  攻擊來源無法定位;
  在服務端無法區分TCP連接請求是否合法。
  二、系統檢查
  一般情況下,可以一些簡單步驟進行檢查,來判斷系統是否正在遭受TCP SYN Flood攻擊。
  1、服務端無法提供正常的TCP服務。連接請求被拒絕或超時;
  2、通過 netstat -an 命令檢查系統,發現有大量的SYN_RECV連接狀態。


三、防範
  如何才能做到有效的防範呢?
  1、 TCP Wrapper
  使用TCP Wrapper(只有unix-like系統支持該功能,NT?可憐)可能在某些有限的場合下有用,比如服務端只處理有限來源IP的TCP連接請求,其它未指定來源的連接請求一概拒絕。這在一個需要面向公眾提供服務的場合下是不適合的。而且攻擊者可以通過IP偽裝(IP Spoof)來直接攻擊受TCP Wrapper保護的TCP服務,更甚者可以攻擊者可以偽裝成服務器本身的地址進行攻擊。
  2、增加TCP Backlog容量
  增加TCP Backlog容量是一種治標不治本的做法。它一方面要佔用更多的系統內存,另一方面延長了TCP處理緩存隊列的時間。攻擊者只要不停地的進行SYN Flood一樣可以達到拒絕服務的目的。
  3、 ISP接入
  所有的ISP在邊界處理進入的主幹網絡的IP數據包時檢測其來源地址是否合法,如果非指定來源IP地址範圍,可以認為是IP Spoofing行為並將之丟棄。

在實際環境中,應為涉及的範圍太過廣泛,該方案無法實施。這是一個社會問題而非技術問題。


TCP SYN Flood檢測與防範

一、TCP連接監控(TCP Interception)
  為了有效的防範TCP SYN Flood攻擊,在保證通過慢速網絡的用戶可以正常建立到服務端的合法連接的同時,需要盡可能的減少服務端TCP Backlog的清空時間,大多數防火牆採用了TCP連接監控的工作模式。

1.防火牆接到來自用戶端Z的SYN連接請求,在本地建立面向該連接的監控表項;
  2.防火牆將該連接請求之轉發至服務端A;
  3.服務端A相應該連接請求返回SYN/ACK,同時更新與該連接相關聯的監控表項;
  4.防火牆將該SYN/ACK轉發至用戶端Z;
  5.防火牆發送ACK至服務端A,同時服務端A中TCP Backlog該連接的表項被移出;
  6.這時,根據連接請求是否合法,可能有以下兩種情況發生:
    a.如果來自用戶端Z的連接請求合法,防火牆將該ACK轉發至服務端A,服務端A會忽略該ACK,因為一個完整的TCP連接已經建立;
    b.如果來自用戶端Z的連接請求非法(來源IP地址非法),沒有在規定的時間內收到返回的ACK,防火牆會發送RST至服務端A以拆除該連接。
  7.開始TCP傳輸過程。
  由此可以看出,該方法具有兩個局限:
  1.不論是否合法的連接請求都直接轉發至服務端A,待判斷為非法連接(無返回ACK)時才採取措施拆除連接,浪費服務端系統資源;
  2.防火牆在本地建立表項以監控連接(一個類似TCP Backlog的表),有可能被攻擊者利用。
  二、天網DoS防禦網關
  天網防火牆採用經過優化的TCP連接監控工作方式。該方式在處理TCP連接請求的時候,在確定連接請求是否合法以前,用戶端Z與服務端A是隔斷的。

1.防火牆接到來自用戶端Z的SYN連接請求;
  2.防火牆返回一個經過特殊處理的SYN/ACK至客戶端Z以驗證連接的合法性;
  3.這時,根據連接請求是否合法,可能有以下兩種情況發生:
    a.防火牆接收到來自客戶端Z的ACK回應,該連接請求合法。轉至第4步繼續;
    b.防火牆沒有接收到來自客戶端Z的ACK回應,該連接請求非法,不進行處理;
  4.防火牆在本地建立面向該連接的監控表項,並發送與該連接請求相關聯的SYN至服務端A;
  5.防火牆接到來自服務端A的SYN/ACK回應;
  6.防火牆返回ACK以建立一個完整的TCP連接;
  7.防火牆發送ACK至客戶端Z,提示可以開始TCP傳輸過程。
  其中,在第2/3/4/7步過程中,防火牆內部進行了如下操作:
  1.在第2步中,為了驗證連接的合法性,防火牆返回的SYN/ACK是經過特殊處理的,並提示客戶端Z暫時不要傳送有效數據;
  2.在第3步中,防火牆接收到來自客戶端Z的ACK,檢驗其合法性。
  3.在第4步中,防火牆在本地建立面向該連接的監控表項,同時發送與該連接相關的SYN至服務端A;
  4.在第7步中,防火牆通過將TCP數據傳輸與監控表項進行比對,並調整序列號和窗口以使之匹配。開始TCP數據傳輸。
  在這裡,天網防火牆通過高效的算法(64K位的Hash)提供了超過30萬以上的同時連接數的容量,為數據傳輸的高效和可靠提供了強有力地保障。

zeric85819 發表於 2011-9-4 00:52:05

幫你頂,人還是厚道點好

shischi 發表於 2011-9-4 00:40:22

有空一起交流一下
頁: [1]
查看完整版本: TCP SYN Flood攻擊的原理機制/檢測與防範及防禦方法