欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
SYN攻擊原理以及防范 - 協(xié)議實(shí)現 - 安全起點(diǎn)
一、TCP握手協(xié)議
  在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。

  第一次握手:建立連接時(shí),客戶(hù)端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認;

  第二次握手:服務(wù)器收到syn包,必須確認客戶(hù)的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);

  第三次握手:客戶(hù)端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢,客戶(hù)端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。

  完成三次握手,客戶(hù)端與服務(wù)器開(kāi)始傳送數據,在上述過(guò)程中,還有一些重要的概念:

未連接隊列:在三次握手協(xié)議中,服務(wù)器維護一個(gè)未連接隊列,該隊列為每個(gè)客戶(hù)端的SYN包(syn=j)開(kāi)設一個(gè)條目,該條目表明服務(wù)器已收到SYN包,并向客戶(hù)發(fā)出確認,正在等待客戶(hù)的確認包。這些條目所標識的連接在服務(wù)器處于Syn_RECV狀態(tài),當服務(wù)器收到客戶(hù)的確認包時(shí),刪除該條目,服務(wù)器進(jìn)入ESTABLISHED狀態(tài)。
Backlog參數:表示未連接隊列的最大容納數目。

  SYN-ACK重傳次數 服務(wù)器發(fā)送完SYN-ACK包,如果未收到客戶(hù)確認包,服務(wù)器進(jìn)行首次重傳,等待一段時(shí)間仍未收到客戶(hù)確認包,進(jìn)行第二次重傳,如果重傳次數超過(guò)系統規定的最大重傳次數,系統將該連接信息從半連接隊列中刪除。注意,每次重傳等待的時(shí)間不一定相同。

  半連接存活時(shí)間:是指半連接隊列的條目存活的最長(cháng)時(shí)間,也即服務(wù)從收到SYN包到確認這個(gè)報文無(wú)效的最長(cháng)時(shí)間,該時(shí)間值是所有重傳請求包的最長(cháng)等待時(shí)間總和。有時(shí)我們也稱(chēng)半連接存活時(shí)間為T(mén)imeout時(shí)間、SYN_RECV存活時(shí)間。
二、SYN攻擊原理


SYN攻擊屬于DOS攻擊的一種,它利用TCP協(xié)議缺陷,通過(guò)發(fā)送大量的半連接請求,耗費CPU和內存資源。SYN攻擊除了能影響主機外,還可以危害路由器、防火墻等網(wǎng)絡(luò )系統,事實(shí)上SYN攻擊并不管目標是什么系統,只要這些系統打開(kāi)TCP服務(wù)就可以實(shí)施。從上圖可看到,服務(wù)器接收到連接請求(syn=j),將此信息加入未連接隊列,并發(fā)送請求包給客戶(hù)(syn=k,ack=j+1),此時(shí)進(jìn)入SYN_RECV狀態(tài)。當服務(wù)器未收到客戶(hù)端的確認包時(shí),重發(fā)請求包,一直到超時(shí),才將此條目從未連接隊列刪除。配合IP欺騙,SYN攻擊能達到很好的效果,通常,客戶(hù)端在短時(shí)間內偽造大量不存在的IP地址,向服務(wù)器不斷地發(fā)送syn包,服務(wù)器回復確認包,并等待客戶(hù)的確認,由于源地址是不存在的,服務(wù)器需要不斷的重發(fā)直至超時(shí),這些偽造的SYN包將長(cháng)時(shí)間占用未連接隊列,正常的SYN請求被丟棄,目標系統運行緩慢,嚴重者引起網(wǎng)絡(luò )堵塞甚至系統癱瘓。

  三、SYN攻擊工具

  SYN攻擊實(shí)現起來(lái)非常的簡(jiǎn)單,互聯(lián)網(wǎng)上有大量現成的SYN攻擊工具。

  1、windows系統下的SYN工具

以synkill.exe為例,運行工具,選擇隨機的源地址和源端囗,并填寫(xiě)目標機器地址和TCP端囗,激活運行,很快就會(huì )發(fā)現目標系統運行緩慢。如果攻擊效果不明顯,可能是目標機器并未開(kāi)啟所填寫(xiě)的TCP端囗或者防火墻拒絕訪(fǎng)問(wèn)該端囗,此時(shí)可選擇允許訪(fǎng)問(wèn)的TCP端囗,通常,windows系統開(kāi)放tcp139端囗,UNIX系統開(kāi)放tcp7、21、23等端囗。

  四、檢測SYN攻擊

  檢測SYN攻擊非常的方便,當你在服務(wù)器上看到大量的半連接狀態(tài)時(shí),特別是源IP地址是隨機的,基本上可以斷定這是一次SYN攻擊。我們使用系統自帶的netstat 工具來(lái)檢測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狀態(tài)(在WINDOWS系統中是SYN_RECEIVED狀態(tài)),源IP地址都是隨機的,表明這是一種帶有IP欺騙的SYN攻擊。

  我們也可以通過(guò)下面的命令直接查看在LINUX環(huán)境下某個(gè)端囗的未連接隊列的條目數:

 ?。etstat -n -p TCP | grep SYN_RECV | grep :22 | wc -l
  324

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

五、SYN攻擊防范技術(shù)


  關(guān)于SYN攻擊防范技術(shù),人們研究得比較早。歸納起來(lái),主要有兩大類(lèi),一類(lèi)是通過(guò)防火墻、路由器等過(guò)濾網(wǎng)關(guān)防護,另一類(lèi)是通過(guò)加固TCP/IP協(xié)議棧防范.但必須清楚的是,SYN攻擊不能完全被阻止,我們所做的是盡可能的減輕SYN攻擊的危害,除非將TCP協(xié)議重新設計。

  1、過(guò)濾網(wǎng)關(guān)防護

  這里,過(guò)濾網(wǎng)關(guān)主要指明防火墻,當然路由器也能成為過(guò)濾網(wǎng)關(guān)。防火墻部署在不同網(wǎng)絡(luò )之間,防范外來(lái)非法攻擊和防止保密信息外泄,它處于客戶(hù)端和服務(wù)器之間,利用它來(lái)防護SYN攻擊能起到很好的效果。過(guò)濾網(wǎng)關(guān)防護主要包括超時(shí)設置,SYN網(wǎng)關(guān)和SYN代理三種。

■網(wǎng)關(guān)超時(shí)設置:防火墻設置SYN轉發(fā)超時(shí)參數(狀態(tài)檢測的防火墻可在狀態(tài)表里面設置),該參數遠小于服務(wù)器的timeout時(shí)間。當客戶(hù)端發(fā)送完SYN包,服務(wù)端發(fā)送確認包后(SYN+ACK),防火墻如果在計數器到期時(shí)還未收到客戶(hù)端的確認包(ACK),則往服務(wù)器發(fā)送RST包,以使服務(wù)器從隊列中刪去該半連接。值得注意的是,網(wǎng)關(guān)超時(shí)參數設置不宜過(guò)小也不宜過(guò)大,超時(shí)參數設置過(guò)小會(huì )影響正常的通訊,設置太大,又會(huì )影響防范SYN攻擊的效果,必須根據所處的網(wǎng)絡(luò )應用環(huán)境來(lái)設置此參數。

  ■SYN網(wǎng)關(guān):SYN網(wǎng)關(guān)收到客戶(hù)端的SYN包時(shí),直接轉發(fā)給服務(wù)器;SYN網(wǎng)關(guān)收到服務(wù)器的SYN/ACK包后,將該包轉發(fā)給客戶(hù)端,同時(shí)以客戶(hù)端的名義給服務(wù)器發(fā)ACK確認包。此時(shí)服務(wù)器由半連接狀態(tài)進(jìn)入連接狀態(tài)。當客戶(hù)端確認包到達時(shí),如果有數據則轉發(fā),否則丟棄。事實(shí)上,服務(wù)器除了維持半連接隊列外,還要有一個(gè)連接隊列,如果發(fā)生SYN攻擊時(shí),將使連接隊列數目增加,但一般服務(wù)器所能承受的連接數量比半連接數量大得多,所以這種方法能有效地減輕對服務(wù)器的攻擊。

  ■SYN代理:當客戶(hù)端SYN包到達過(guò)濾網(wǎng)關(guān)時(shí),SYN代理并不轉發(fā)SYN包,而是以服務(wù)器的名義主動(dòng)回復SYN/ACK包給客戶(hù),如果收到客戶(hù)的ACK包,表明這是正常的訪(fǎng)問(wèn),此時(shí)防火墻向服務(wù)器發(fā)送ACK包并完成三次握手。SYN代理事實(shí)上代替了服務(wù)器去處理SYN攻擊,此時(shí)要求過(guò)濾網(wǎng)關(guān)自身具有很強的防范SYN攻擊能力。
 
  2、加固tcp/ip協(xié)議棧

防范SYN攻擊的另一項主要技術(shù)是調整tcp/ip協(xié)議棧,修改tcp協(xié)議實(shí)現。主要方法有SynAttackProtect保護機制、SYNcookies技術(shù)、增加最大半連接和縮短超時(shí)時(shí)間等。tcp/ip協(xié)議棧的調整可能會(huì )引起某些功能的受限,管理員應該在進(jìn)行充分了解和測試的前提下進(jìn)行此項工作。

  ■SynAttackProtect機制

  為防范SYN攻擊,win2000系統的tcp/ip協(xié)議棧內嵌了SynAttackProtect機制,Win2003系統也采用此機制。SynAttackProtect機制是通過(guò)關(guān)閉某些socket選項,增加額外的連接指示和減少超時(shí)時(shí)間,使系統能處理更多的SYN連接,以達到防范SYN攻擊的目的。默認情況下,Win2000操作系統并不支持SynAttackProtect保護機制,需要在注冊表以下位置增加SynAttackProtect鍵值:

  HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  當SynAttackProtect值(如無(wú)特別說(shuō)明,本文提到的注冊表鍵值都為十六進(jìn)制)為0或不設置時(shí),系統不受SynAttackProtect保護。

  當SynAttackProtect值為1時(shí),系統通過(guò)減少重傳次數和延遲未連接時(shí)路由緩沖項(route cache entry)防范SYN攻擊。


當SynAttackProtect值為2時(shí)(Microsoft推薦使用此值),系統不僅使用backlog隊列,還使用附加的半連接指示,以此來(lái)處理更多的SYN連接,使用此鍵值時(shí),tcp/ip的TCPInitialRTT、window size和可滑動(dòng)窗囗將被禁止。


  我們應該知道,平時(shí),系統是不啟用SynAttackProtect機制的,僅在檢測到SYN攻擊時(shí),才啟用,并調整tcp/ip協(xié)議棧。那么系統是如何檢測SYN攻擊發(fā)生的呢?事實(shí)上,系統根據TcpMaxHalfOpen,TcpMaxHalfOpenRetried和TcpMaxPortsExhausted三個(gè)參數判斷是否遭受SYN攻擊。

  TcpMaxHalfOpen 表示能同時(shí)處理的最大半連接數,如果超過(guò)此值,系統認為正處于SYN攻擊中。Win2000 server默認值為100,Win2000 Advanced server為500。

TcpMaxHalfOpenRetried定義了保存在backlog隊列且重傳過(guò)的半連接數,如果超過(guò)此值,系統自動(dòng)啟動(dòng)SynAttackProtect機制。Win2000 server默認值為80,Win2000 Advanced server為400。

  TcpMaxPortsExhausted 是指系統拒絕的SYN請求包的數量,默認是5。

  如果想調整以上參數的默認值,可以在注冊表里修改(位置與SynAttackProtect相同)

■ SYN cookies技術(shù)

  我們知道,TCP協(xié)議開(kāi)辟了一個(gè)比較大的內存空間backlog隊列來(lái)存儲半連接條目,當SYN請求不斷增加,并這個(gè)空間,致使系統丟棄SYN連接。為使半連接隊列被塞滿(mǎn)的情況下,服務(wù)器仍能處理新到的SYN請求,SYN cookies技術(shù)被設計出來(lái)。

  SYN cookies應用于linux、FreeBSD等操作系統,當半連接隊列滿(mǎn)時(shí),SYN cookies并不丟棄SYN請求,而是通過(guò)加密技術(shù)來(lái)標識半連接狀態(tài)。

在TCP實(shí)現中,當收到客戶(hù)端的SYN請求時(shí),服務(wù)器需要回復SYN+ACK包給客戶(hù)端,客戶(hù)端也要發(fā)送確認包給服務(wù)器。通常,服務(wù)器的初始序列號由服務(wù)器按照一定的規律計算得到或采用隨機數,但在SYNcookies中,服務(wù)器的初始序列號是通過(guò)對客戶(hù)端IP地址、客戶(hù)端端囗、服務(wù)器IP地址和服務(wù)器端囗以及其他一些安全數值等要素進(jìn)行hash運算,加密得到的,稱(chēng)之為cookie。當服務(wù)器遭受SYN攻擊使得backlog隊列滿(mǎn)時(shí),服務(wù)器并不拒絕新的SYN請求,而是回復cookie(回復包的SYN序列號)給客戶(hù)端,如果收到客戶(hù)端的ACK包,服務(wù)器將客戶(hù)端的ACK序列號減去1得到cookie比較值,并將上述要素進(jìn)行一次hash運算,看看是否等于此cookie。如果相等,直接完成三次握手(注意:此時(shí)并不用查看此連接是否屬于backlog隊列)。

  在RedHat linux中,啟用SYN cookies是通過(guò)在啟動(dòng)環(huán)境中設置以下命令來(lái)完成:

  # echo 1 > /proc/sys/net/ipv4/tcp_syncookies

  ■ 增加最大半連接數

  大量的SYN請求導致未連接隊列被塞滿(mǎn),使正常的TCP連接無(wú)法順利完成三次握手,通過(guò)增大未連接隊列空間可以緩解這種壓力。當然backlog隊列需要占用大量的內存資源,不能被無(wú)限的擴大。

WIN2000:除了上面介紹的TcpMaxHalfOpen,TcpMaxHalfOpenRetried參數外,WIN2000操作系統可以通過(guò)設置動(dòng)態(tài)backlog(dynamicbacklog)來(lái)增大系統所能容納的最大半連接數,配置動(dòng)態(tài)backlog由AFD.SYS驅動(dòng)完成,AFD.SYS是一種內核級的驅動(dòng),用于支持基于window socket的應用程序,比如ftp、telnet等。AFD.SYS在注冊表的位置:
HKLM\System\CurrentControlSet\Services\AFD\ParametersEnableDynamicBacklog值為1時(shí),表示啟用動(dòng)態(tài)backlog,可以修改最大半連接數?!?br>

MinimumDynamicBacklog表示半連接隊列為單個(gè)TCP端囗分配的最小空閑連接數,當該TCP端囗在backlog隊列的空閑連接小于此臨界值時(shí),系統為此端囗自動(dòng)啟用擴展的空閑連接(DynamicBacklogGrowthDelta),Microsoft推薦該值為20。


  MaximumDynamicBacklog是當前活動(dòng)的半連接和空閑連接的和,當此和超過(guò)某個(gè)臨界值時(shí),系統拒絕SYN包,Microsoft推薦MaximumDynamicBacklog值不得超過(guò)2000。

DynamicBacklogGrowthDelta值是指擴展的空閑連接數,此連接數并不計算在MaximumDynamicBacklog內,當半連接隊列為某個(gè)TCP端囗分配的空閑連接小于MinimumDynamicBacklog時(shí),系統自動(dòng)分配DynamicBacklogGrowthDelta所定義的空閑連接空間,以使該TCP端囗能處理更多的半連接。Microsoft推薦該值為10。

LINUX:Linux用變量tcp_max_syn_backlog定義backlog隊列容納的最大半連接數。在Redhat7.3中,該變量的值默認為256,這個(gè)值是遠遠不夠的,一次強度不大的SYN攻擊就能使半連接隊列占滿(mǎn)。我們可以通過(guò)以下命令修改此變量的值:

  # sysctl -w net.ipv4.tcp_max_syn_backlog="2048"

  Sun Solaris Sun Solaris用變量tcp_conn_req_max_q0來(lái)定義最大半連接數,在Sun Solaris 8中,該值默認為1024,可以通過(guò)add命令改變這個(gè)值:

  # ndd -set /dev/tcp tcp_conn_req_max_q0 2048

  HP-UX:HP-UX用變量tcp_syn_rcvd_max來(lái)定義最大半連接數,在HP-UX 11.00中,該值默認為500,可以通過(guò)ndd命令改變默認值:

 ?。dd -set /dev/tcp tcp_syn_rcvd_max 2048

  ■縮短超時(shí)時(shí)間

上文提到,通過(guò)增大backlog隊列能防范SYN攻擊;另外減少超時(shí)時(shí)間也使系統能處理更多的SYN請求。我們知道,timeout超時(shí)時(shí)間,也即半連接存活時(shí)間,是系統所有重傳次數等待的超時(shí)時(shí)間總和,這個(gè)值越大,半連接數占用backlog隊列的時(shí)間就越長(cháng),系統能處理的SYN請求就越少。為縮短超時(shí)時(shí)間,可以通過(guò)縮短重傳超時(shí)時(shí)間(一般是第一次重傳超時(shí)時(shí)間)和減少重傳次數來(lái)實(shí)現。

  Win2000第一次重傳之前等待時(shí)間默認為3秒,為改變此默認值,可以通過(guò)修改網(wǎng)絡(luò )接囗在注冊表里的TcpInitialRtt注冊值來(lái)完成。重傳次數由TcpMaxConnectResponseRetransmissions來(lái)定義,注冊表的位置是:HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersregistry key。

  當然我們也可以把重傳次數設置為0次,這樣服務(wù)器如果在3秒內還未收到ack確認包就自動(dòng)從backlog隊列中刪除該連接條目。

  LINUX:Redhat使用變量tcp_synack_retries定義重傳次數,其默認值是5次,總超時(shí)時(shí)間需要3分鐘。

  Sun Solaris Solaris 默認的重傳次數是3次,總超時(shí)時(shí)間為3分鐘,可以通過(guò)ndd命令修改這些默認值。


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
TCP三次握手與四次揮手及Socket編寫(xiě)
tcp連接建立和拆除過(guò)程
關(guān)于三次握手與四次揮手,面試官想考我們什么?
面試官,不要再問(wèn)我三次握手和四次揮手
TCP 三次握手原理,你真的理解嗎?
TCP的SYN隊列和Accept隊列
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久