SYN攻擊基本原理與防範技術方法

 

據統計,在所有駭客攻擊事件中,SYN攻擊是最常見又最容易被利用的一種攻擊手法。相信很多人還記得2000年YAHOO網站遭受的攻擊事例,當時駭客利用的就是簡單而有效的SYN攻擊,有些網路蠕蟲病毒配合SYN攻擊造成更大的破壞。本文介紹SYN攻擊的基本原理、工具及檢測方法,並全面探討SYN攻擊防範技術。
;y
一、TCP握手協議
 
www.phate.tw%q4I'?(Q5e
在TCP/IP協議中,TCP協議提供可靠的連接服務,採用三次握手建立一個連接。
第一次握手︰建立連接時,客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
 
%r&X;d
駭客,免費軟體,程式設計,資訊安全,開源碼,教學,JAVA,VB,C#,程式教學%C6U$J5J'`1g!Z
第二次握手︰伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;

第三次握手︰客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
 
Phate Technology7\ q/Q9U d5`'e2t
完成三次握手,客戶端與伺服器開始傳送數據,在上述過程中,還有一些重要的概念︰www.phate.tw8['~ ~*~8?$W4[

0b&[8X,f8L*h未連接隊列︰在三次握手協議中,伺服器維護一個未連接隊列,該隊列為每個客戶端的 SYN包(syn=j)開設一個條目,該條目表明伺服器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在伺服器處於 Syn_RECV狀態,當伺服器收到客戶的確認包時,刪除該條目,伺服器進入ESTABLISHED狀態。

 
Backlog參數︰表示未連接隊列的最大容納數目。

SYN-ACK 重傳次數 伺服器發送完SYN-ACK包,如果未收到客戶確認包,伺服器進行首次重傳,等待一段時間仍未收到客戶確認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統將該連接訊息從半連接隊列中刪除。注意,每次重傳等待的時間不一定相同。Phate Technology6x0o-h:|-r"C)a&z7Q(O

半連接存活時間︰是指半連接隊列的條目存活的最長時間,也即服務從收到SYN包到確認這個報文無效的最長時間,該時間值是所有重傳請求包的最長等待時間總和。有時我們也稱半連接存活時間為Timeout時間、SYN_RECV存活時間。

二、SYN攻擊原理
SYN攻擊屬於DOS攻擊的一種,它利用TCP協議缺陷,透過發送大量的半連接請求,耗費CPU和內存資原。SYN攻擊除了能影響主機外,還可以危害路由器、防火牆等網路系統,事實上SYN攻擊並不管目標是什麼系統,只要這些系統打開 TCP服務就可以實施。從上圖可看到,伺服器接收到連接請求(syn=j),將此訊息加入未連接隊列,並發送請求包給客戶(syn=k,ack=j+1),此時進入SYN_RECV狀態。當伺服器未收到客戶端的確認包時,重發請求包,一直到超時,才將此條目從未連接隊列刪除。配合IP欺騙,SYN攻擊能達到很好的效果,通常,客戶端在短時間內偽造大量不存在的IP位址,向伺服器不斷地發送syn包,伺服器回複確認包,並等待客戶的確認,由於原位址是不存在的,伺服器需要不斷的重發直至超時,這些偽造的SYN包將長時間佔用未連接隊列,正常的SYN請求被丟棄,目標系統營運緩慢,嚴重者引起網路堵塞甚至系統癱瘓。
 
費軟體|程式設計1W8N.B(p,F2B
三、SYN攻擊工具

SYN攻擊實現起來非常的簡單,互聯網上有大量現成的SYN攻擊工具。
 
Windows系統下的SYN工具︰

以 synkill.exe為例,營運工具,選擇隨機的原位址和原端 ,並填寫目標機器位址和TCP端 ,激活營運,很快就會發現目標系統營運緩慢。如果攻擊效果不明顯,可能是目標機器並未開啟所填寫的TCP端 或者防火牆拒絕訪問該端 ,此時可選擇允許訪問的TCP端 ,通常,Windows系統開放tcp139端 ,UNIX系統開放tcp7、21、23等端 。

四、檢測SYN攻擊

檢測SYN攻擊非常的方便,當你在伺服器上看到大量的半連接狀態時,特別是原IP位址是隨機的,基本上可以斷定這是一次SYN攻擊。我們使用系統自帶的netstat 工具來檢測SYN攻擊︰
R&v5|"P2u

QUOTE:
0f4E!~7i#x+a#k1f
# netstat -n -p TCP tcp 0  0
10.11.11.11:23124.173.152.8:25882  SYN_RECV - tcp 0 0
10.11.11.11:23236.15.133.204:2577  SYN_RECV - tcp 0  0
10.11.11.11:23127.160.6.129:51748  SYN_RECV - tcp 0  0
10.11.11.11:23222.220.13.25:47393  SYN_RECV - tcp 0  0
10.11.11.11:23212.200.204.182:60427 SYN_RECV - tcp 0  0
10.11.11.11:23232.115.18.38:278 SYN_RECV - tcp 0  0
10.11.11.11:23239.116.95.96:5122 SYN_RECV - tcp 0  0
10.11.11.11:23236.219.139.207:49162 SYN_RECV - ...

Phate Technology4@6n*h @ y$u:P
駭客,免費軟體,程式設計,資訊安全,開源碼,教學,JAVA,VB,C#,程式教學,@'[4_!\'e-f
上面是在LINUX系統中看到的,很多連接處於SYN_RECV狀態(在WINDOWS系統中是SYN_RECEIVED狀態),原IP位址都是隨機的,表明這是一種帶有IP欺騙的SYN攻擊。
是一個開放的技術交流區,討論內容包含資訊安全、高階程式語言、腳本語言、韌體設計......等0e _8r&J,v0A/w$Q y7S
我們也可以透過下面的命令直接檢視在LINUX環境下某個端 的未連接隊列的條目數︰
 
QUOTE:
#netstat -n -p TCP   grep SYN_RECV   grep :22   wc -l 324

顯示TCP端 22的未連接數有324個,雖然還遠達不到系統極限,但應該引起管理員的注意。

五、SYN攻擊防範技術


關於SYN攻擊防範技術,人們研究得比較早。歸納起來,主要有兩大類,一類是透過防火牆、路由器等過濾通訊閘防護,另一類是透過加固TCP/IP協議棧防範.但必須清楚的是,SYN攻擊不能完全被阻止,我們所做的是儘可能的減輕SYN攻擊的危害,除非將TCP協議重新設計。

1、過濾通訊閘防護
這裡,過濾通訊閘主要指明防火牆,當然路由器也能成為過濾通訊閘。防火牆部署在不同網路之間,防範外來非法攻擊和防止守密訊息外泄,它處於客戶端和伺服器之間,利用它來防護SYN攻擊能起到很好的效果。過濾通訊閘防護主要包括超時設定,SYN通訊閘和SYN代理三種。
‧通訊閘超時設定︰

www.phate.tw,]'Y+K$w%G:O/o,A)\0[
防火牆設定SYN轉發超時參數(狀態檢測的防火牆可在狀態表裡面設定),該參數遠小於伺服器的timeout時間。當客戶端發送完SYN包,服務端發送確認包後(SYN+ACK),防火牆如果在計數器到期時還未收到客戶端的確認包(ACK),則往伺服器發送RST包,以使伺服器從隊列中刪去該半連接。值得注意的是,通訊閘超時參數設定不宜過小也不宜過大,超時參數設定過小會影響正常的通訊,設定太大,又會影響防範SYN攻擊的效果,必須根據所處的網路應用環境來設定此參數。
 
資訊安全|免費軟
體|程式設計(P4?:I4i2~3V2V5n
Phate Technology1M!m-C+].j
‧SYN通訊閘︰

SYN通訊閘收到客戶端的SYN包時,直接轉發給伺服器;SYN通訊閘收到伺服器的 SYN/ACK包後,將該包轉發給客戶端,同時以客戶端的名義給伺服器發ACK確認包。此時伺服器由半連接狀態進入連接狀態。當客戶端確認包到達時,如果有數據則轉發,否則丟棄。事實上,伺服器除了維持半連接隊列外,還要有一個連接隊列,如果發生SYN攻擊時,將使連接隊列數目增加,但一般伺服器所能承受的連接數量比半連接數量大得多,所以這種方法能有效地減輕對伺服器的攻擊。


‧SYN代理︰

當客戶端 SYN包到達過濾通訊閘時,SYN代理並不轉發SYN包,而是以伺服器的名義主動回複SYN/ACK包給客戶,如果收到客戶的ACK包,表明這是正常的訪問,此時防火牆向伺服器發送ACK包並完成三次握手。SYN代理事實上代替了伺服器去處理SYN攻擊,此時要求過濾通訊閘自身具有很強的防範SYN攻擊能力。

2、加固tcp/ip協議棧資訊安全|免費軟體|程式設計8f$s8e&g"]3I,m4{
防範SYN攻擊的另一項主要技術是調整tcp/ip協議棧,修改tcp協議實現。主要方法有SynAttackProtect保護機製、SYN cookies技術、增加最大半連接和縮短超時時間等。tcp/ip協議棧的調整可能會引起某些功能的受限,管理員應該在進行充分了解和測試的前提下進行此項工作。

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料