複製鏈接
請複製以下鏈接發送給好友

SYN

鎖定
SYN:同步序列編號(Synchronize Sequence Numbers)。是TCP/IP建立連接時使用的握手信號。在客户機和服務器之間建立正常的TCP網絡連接時,客户機首先發出一個SYN消息,服務器使用SYN+ACK應答表示接收到了這個消息,最後客户機再以ACK消息響應。這樣在客户機和服務器之間才能建立起可靠的TCP連接,數據才可以在客户機和服務器之間傳遞。
TCP連接的第一個包,非常小的一種數據包。SYN 攻擊包括大量此類的包,由於這些包看上去來自實際不存在的站點,因此無法有效進行處理。每個機器的欺騙包都要花幾秒鐘進行嘗試方可放棄提供正常響應。
中文名
同步序列編號
外文名
Synchronize Sequence Numbers
所屬學科
計算機科學
詞語分類
計算機專業術語
解    釋
TCP/IP建立連接時使用的握手信號
用    途
黑客的一種攻擊手法
攻擊性質
DDoS攻擊的一種

SYN攻擊性質

在黑客攻擊事件中,SYN攻擊是最常見又最容易被利用的一種攻擊手法。
SYN攻擊屬於DDoS攻擊的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。SYN攻擊除了能影響主機外,還可以危害路由器防火牆等網絡系統,事實上SYN攻擊並不管目標是什麼系統,只要這些系統打開TCP服務就可以實施。服務器接收到連接請求(syn= j),將此信息加入未連接隊列,併發送請求包給客户(syn=k,ack=j+1),此時進入SYN_RECV狀態。當服務器未收到客户端的確認包時,重發請求包,一直到超時,才將此條目從未連接隊列刪除。配合IP欺騙,SYN攻擊能達到很好的效果,通常,客户端在短時間內偽造大量不存在的IP地址,向服務器不斷地發送syn包,服務器回覆確認包,並等待客户的確認,由於源地址是不存在的,服務器需要不斷的重發直至超時,這些偽造的SYN包將長時間佔用未連接隊列,正常的SYN請求被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。

SYN攻擊原理

關於SYN攻擊防範技術,人們研究得比較早。歸納起來,主要有兩大類,一類是通過防火牆路由器等過濾網關防護,另一類是通過加固TCP/IP協議棧防範
SYN Flood利用TCP協議缺陷,發送了大量偽造的TCP連接請求,使得被攻擊方資源耗盡,無法及時迴應或處理正常的服務請求。一個正常的TCP連接需要三次握手,首先客户端發送一個包含SYN標誌的數據包,其後服務器返回一個SYN/ACK的應答包,表示客户端的請求被接受,最後客户端再返回一個確認包ACK,這樣才完成TCP連接。在服務器端發送應答包後,如果客户端不發出確認,服務器會等待到超時,期間這些半連接狀態都保存在一個空間有限的緩存隊列中;如果大量的SYN包發到服務器端後沒有應答,就會使服務器端的TCP資源迅速耗盡,導致正常的連接不能進入,甚至會導致服務器的系統崩潰。

SYN攻擊工具

SYN攻擊實現起來非常的簡單,互聯網上有大量現成的SYN攻擊工具。
windows系統下的SYN工具
以synkill.exe為例,運行工具,選擇隨機的源地址和源端口,並填寫目標機器地址和TCP端口,激活運行,很快就會發現目標系統運行緩慢。如果攻擊效果不明顯,可能是目標機器並未開啓所填寫的TCP端口或者防火牆拒絕訪問該端口,此時可選擇允許訪問的TCP端口,通常,windows系統開放tcp139端口,UNIX系統開放tcp7、21、23等端口。

SYN檢測攻擊

檢測SYN攻擊非常的方便,當你在服務器上看到大量的半連接狀態時,特別是源IP地址是隨機的,基本上可以斷定這是一次SYN攻擊。我們使用系統自帶的netstat 工具來檢測SYN攻擊:
# netstat -n -p TCP
tcp 0  0 10.11.11.11:23 124.173.152.8:25882  SYN_RECV -
tcp 0  0 10.11.11.11:23 236.15.133.204:2577  SYN_RECV -
tcp 0  0 10.11.11.11:23 127.160.6.129:51748  SYN_RECV -
tcp 0  0 10.11.11.11:23 222.220.13.25:47393  SYN_RECV -
tcp 0  0 10.11.11.11:23 212.200.204.182:60427 SYN_RECV -
tcp 0  0 10.11.11.11:23 232.115.18.38:278  SYN_RECV -
tcp 0  0 10.11.11.11:23 239.116.95.96:5122 SYN_RECV -
tcp 0  0 10.11.11.11:23 236.219.139.207:49162 SYN_RECV -
...
上面是在LINUX系統中看到的,很多連接處於SYN_RECV狀態(在WINDOWS系統中是SYN_RECEIVED狀態),源IP地址都是隨機的,表明這是一種帶有IP欺騙的SYN攻擊。
我們也可以通過下面的命令直接查看在LINUX環境下某個端囗的未連接隊列的條目數:
#netstat -n -p TCP | grep SYN_RECV | grep :22 | wc -l
324
顯示TCP端囗22的未連接數有324個,雖然還遠達不到系統極限,但應該引起管理員的注意。 [1] 

SYN防範技術

關於SYN攻擊防範技術,人們研究得比較早。歸納起來,主要有兩大類,一類是通過防火牆路由器等過濾網關防護,另一類是通過加固TCP/IP協議棧防範

SYN註冊表設置

在“開始->運行->鍵入regedit”
啓用 SYN 攻擊保護的命名值位於註冊表項 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters之下。值名稱:SynAttackProtect。推薦值:2。
以下部分中的所有項和值均位於註冊表項 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters 之下。
指定必須在觸發 SYN flood 保護之前超過的 TCP 連接請求閾值。值名稱:TcpMaxPortsExhausted。推薦值:5。
啓用 SynAttackProtect 後,該值指定 SYN_RCVD 狀態中的 TCP 連接閾值,超過 SynAttackProtect 時,觸發 SYN flood 保護。值名稱:TcpMaxHalfOpen。推薦值數據:500。
啓用 SynAttackProtect 後,指定至少發送了一次重傳的 SYN_RCVD 狀態中的 TCP 連接閾值。超過 SynAttackProtect 時,觸發 SYN flood 保護。值名稱:TcpMaxHalfOpenRetried。推薦值數據:400

SYN豐富帶寬資源

不難看出syn攻擊時消耗大量帶寬資源,所以要想防禦syn洪水攻擊,一個豐富的帶寬資源是非常有必要的,通常的流量攻擊,攻擊者也是利用擁擠的帶寬資源來堵死目標網絡的,所以這個也是一個重要的防禦前提。

SYN防火牆

利用防火牆來進行防護攻擊是目前最有效的方法,當然前提是攻擊在防護帶寬範圍之內,也就是為什麼第二條推薦帶寬資源,這是保證在防火牆前面不會造成堵塞,來達到防火牆的防護目的。 [1] 
參考資料
  • 1.    Mathis; Mathew; Semke; Mahdavi; Ott. The macroscopic behavior of the TCP congestion avoidance algorithm. ACM SIGCOMM Computer Communication Review. 1997, 27.3: 67–82.