SYN攻擊是最常見又最容易被利用的一種攻擊手法。相信很多人還記得2000年YAHOO網站遭受的攻擊事例,當時黑客利用的就是簡單而有效的SYN攻擊,有些網絡蠕蟲病毒配合SYN攻擊造成更大的破壞。本文介紹SYN攻擊的基本原理、工具及檢測方法,并全面探讨SYN攻擊防範技術。
一、TCP握手協定
在TCP/IP協定中,TCP協定提供可靠的連接配接服務,采用三次握手建立一個連接配接。
第一次握手:建立連接配接時,用戶端發送syn包(syn=j)到伺服器,并進入SYN_SEND狀态,等待伺服器确認;
第二次握手:伺服器收到syn包,必須确認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀态;
第三次握手:用戶端收到伺服器的SYN+ACK包,向伺服器發送确認包ACK(ack=k+1),此包發送完畢,用戶端和伺服器進入ESTABLISHED狀态,完成三次握手。
完成三次握手,用戶端與伺服器開始傳送資料,在上述過程中,還有一些重要的概念:
未連接配接隊列:在三次握手協定中,伺服器維護一個未連接配接隊列,該隊列為每個用戶端的SYN包(syn=j)開設一個條目,該條目表明伺服器已收到SYN包,并向客戶發出确認,正在等待客戶的确認包。這些條目所辨別的連接配接在伺服器處于Syn_RECV狀态,當伺服器收到客戶的确認包時,删除該條目,伺服器進入ESTABLISHED狀态。
Backlog參數:表示未連接配接隊列的最大容納數目。
SYN-ACK重傳次數:伺服器發送完SYN-ACK包,如果未收到客戶确認包,伺服器進行首次重傳,等待一段時間仍未收到客戶确認包,進行第二次重傳,如果重傳次數超過系統規定的最大重傳次數,系統将該連接配接資訊從半連接配接隊列中删除。注意,每次重傳等待的時間不一定相同。
半連接配接存活時間:是指半連接配接隊列的條目存活的最長時間,也即服務從收到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請求被丢棄,目标系統運作緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。