TCP半連接和syn攻擊(轉)


TCP半連接和syn攻擊

轉載 2014年04月06日 21:36:10

摘自:http://blog.sina.com.cn/s/blog_54b5ea250100g2r8.html

SYN攻擊屬於DOS攻擊的一種,它利用TCP協議缺陷,通過發送大量的半連接請求,耗費CPU和內存資源。TCP協議建立連接的時候需要雙方相互確認信息,來防止連接被偽造和精確控制整個數據傳輸過程數據完整有效。所以TCP協議采用三次握手建立一個連接。
第一次握手:建立連接時,客戶端發送syn包到服務器,並進入SYN_SEND狀態,等待服務器確認第二次握手:服務器收到syn包,必須確認客戶的SYN 同時自己也發送一個SYN包即SYN+ACK包,此時服務器進入SYN_RECV狀態; 
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
SYN攻擊利用TCP協議三次握手的原理,大量發送偽造源IP的SYN包也就是偽造第一次握手數據包,服務器每接收到一個SYN包就會為這個連接信息分配核心內存並放入半連接隊列,如果短時間內接收到的SYN太多,半連接隊列就會溢出,操作系統會把這個連接信息丟棄造成不能連接,當攻擊的SYN包超過半連接隊列的最大值時,正常的客戶發送SYN數據包請求連接就會被服務器丟棄,每種操作系統半連接隊列大小不一樣所以抵御SYN攻擊的能力也不一樣。
每種操作系統都有方法來調整TCP模塊的半連接隊列最大數,例如Win2000操作系統在注冊表
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters里 TcpMaxHalfOpen,TcpMaxHalfOpenRetried ,Linux操作系統用變量tcp_max_syn_backlog來定義半連接隊列的最大數。
但是每建立一個半連接資源就會耗費系統的核心內存,操作系統的核心內存是專門提供給系統內核使用的內存不能進行虛擬內存轉換是非常緊缺的資源windows2000 系統當物理內存是4g的時候核心內存只有不到300M,系統所有核心模塊都要使用核心內存所以能給半連接隊列用的核心內存非常少。Windows 2003 默認安裝情況下,WEB SERVER的80端口每秒鍾接收5000個SYN數據包一分鍾后網站就打不開了。標准SYN數據包64字節 5000個等於 5000*64 *8(換算成bit)/1024=2500K也就是 2.5M帶寬,如此小的帶寬就可以讓服務器的端口癱瘓,由於攻擊包的源IP是偽造的很難追查到攻擊源,,所以這種攻擊非常多。

 
 
------------------------------------------------------------------------------------
  tcp半開連接是指發送了tcp連接請求,等待對方應答的狀態,此時連接並沒有完全建立起來,雙方還無法進行通信交互的狀態,此時就稱為半連接。由於一個完整的tcp連接需要經過三次握手才能完成,這里把三次握手之前的連接都稱之為半連接(見圖1)。 
  為了便於理解,我們把一次完整的tcp連接比作汽車通過一座大橋,在通過大橋之前的行程都稱之為tcp半開連接。tcp半開連接數就是大橋的車道,由於這個這個半連接數量如果設置過大,不僅耗費大量系統資源,而且還可能會遭受很多ddos攻擊。因此,出於安全考慮,默認xp sp2(包括sp3)只允許同時存在10個tcp半開連接,也就是說這個大橋只有10個車道,破解就是通過修改tcpip.sys,拓寬這個大橋,使之擁有更多的車道,也就是增加tcp半開連接數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM