明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

SYN flood網(wǎng)絡(luò)攻擊的原理及其防備方法

[摘要]拒絕服務(wù)攻擊(Denial of Service, dos)是目前比較有效而又非常難于防御的一種網(wǎng)絡(luò)攻擊方式, 它的目的就是使服務(wù)器不能夠?yàn)檎TL問的用戶提供服務(wù)。 所以, dos對一些緊密依靠互...

拒絕服務(wù)攻擊(Denial of Service, dos)是目前比較有效而又非常難于防御的一種網(wǎng)絡(luò)攻擊方式, 它的目的就是使服務(wù)器不能夠?yàn)檎TL問的用戶提供服務(wù)。 所以, dos對一些緊密依靠互聯(lián)網(wǎng)開展業(yè)務(wù)的企業(yè)和組織帶來了致命的威脅。

1 SYN Flood攻擊介紹:

  拒絕服務(wù)攻擊(Denial of Service, dos)是目前比較有效而又非常難于防御的一種網(wǎng)絡(luò)攻擊方式, 它的目的就是使服務(wù)器不能夠?yàn)檎TL問的用戶提供服務(wù)。 所以, dos對一些緊密依靠互聯(lián)網(wǎng)開展業(yè)務(wù)的企業(yè)和組織帶來了致命的威脅。

  SYN Flood是最為有效和流行的一種dos攻擊形式。 它利用TCP三次握手協(xié)議的缺陷, 向目標(biāo)主機(jī)發(fā)送大量的偽造源地址的SYN連接請求, 消耗目標(biāo)主機(jī)的資源, 從而不能夠?yàn)檎S脩籼峁┓⻊?wù)。

  1.1 TCP連接建立的過程

  要掌握SYN Flood攻擊的基本原理, 必須先介紹TCP的三次握手機(jī)制。

   TCP三次握手過程如下:

   1)客戶端向服務(wù)器端發(fā)送一個(gè)SYN置位的TCP報(bào)文, 包含客戶端使用的端口號和初始序列號x;

  2)服務(wù)器端收到客戶端發(fā)送來的SYN報(bào)文后, 向客戶端發(fā)送一個(gè)SYN和ACK都置位的TCP報(bào)文, 包含確認(rèn)號為x+1和服務(wù)器的初始序列號y;

  3)TCP客戶端

客戶端端口

(1024-65535)

TCP服務(wù)器端

服務(wù)器端口

(1-1023)

SYN

SYN/ACK

ACK

  客戶端收到服務(wù)器返回的SYN+ACK報(bào)文后, 向服務(wù)器返回一個(gè)確認(rèn)號為y+1序號為x+1的ACK報(bào)文, 一個(gè)標(biāo)準(zhǔn)的TCP連接完成。 如圖1所示:

1.2 攻擊原理

  在SYN Flood攻擊中, 黑客機(jī)器向受害主機(jī)發(fā)送大量偽造源地址的TCP SYN報(bào)文, 受害主機(jī)分配必要的資源, 然后向源地址返回SYN+ACK包, 并等待源端返回ACK包, 如圖2所示。 由于源地址是偽造的, 所以源端永遠(yuǎn)都不會返回ACK報(bào)文, 受害主機(jī)繼續(xù)發(fā)送SYN+ACK包, 并將半連接放入端口的積壓隊(duì)列中, 雖然一般的主機(jī)都有超時(shí)機(jī)制和默認(rèn)的重傳次數(shù), 但是由于端口的半連接隊(duì)列的長度是有限的, 如果不斷的向受害主機(jī)發(fā)送大量的TCP SYN報(bào)文, 半連接隊(duì)列就會很快填滿, 服務(wù)器拒絕新的連接, 將導(dǎo)致該端口無法響應(yīng)其他機(jī)器進(jìn)行的連接請求, 最終使受害主機(jī)的資源耗盡。

2.2 地址狀態(tài)監(jiān)控的解決方法

  地址狀態(tài)監(jiān)控的解決方法是利用監(jiān)控工具對網(wǎng)絡(luò)中的有關(guān)TCP連接的數(shù)據(jù)包進(jìn)行監(jiān)控, 并對監(jiān)聽到的數(shù)據(jù)包進(jìn)行處理。 處理的主要依據(jù)是連接請求的源地址。

每個(gè)源地址都有一個(gè)狀態(tài)與之對應(yīng), 總共有四種狀態(tài):

初態(tài):任何源地址剛開始的狀態(tài);

NEW狀態(tài):第一次出現(xiàn)或出現(xiàn)多次也不能斷定存在的源地址的狀態(tài);

GOOD狀態(tài):斷定存在的源地址所處的狀態(tài);

BAD狀態(tài):源地址不存在或不可達(dá)時(shí)所處的狀態(tài)。

具體的動(dòng)作和狀態(tài)轉(zhuǎn)換根據(jù)TCP頭中的位碼值決定:

  1)監(jiān)聽到SYN包, 如果源地址是第一次出現(xiàn), 則置該源地址的狀態(tài)為NEW狀態(tài);如果是NEW狀態(tài)或BAD狀態(tài);則將該包的RST位置1然后重新發(fā)出去, 如果是GOOD狀態(tài)不作任何處理。

  2)監(jiān)聽到ACK或RST包, 如果源地址的狀態(tài)為NEW狀態(tài), 則轉(zhuǎn)為GOOD狀態(tài);如果是GOOD狀態(tài)則不變;如果是BAD狀態(tài)則轉(zhuǎn)為NEW狀態(tài);如果是BAD狀態(tài)則轉(zhuǎn)為NEW狀態(tài)。

  3)監(jiān)聽到從服務(wù)器來的SYN ACK報(bào)文(目的地址為addr), 表明服務(wù)器已經(jīng)為從addr發(fā)來的連接請求建立了一個(gè)半連接, 為防止建立的半連接過多, 向服務(wù)器發(fā)送一個(gè)ACK包, 建立連接, 同時(shí), 開始計(jì)時(shí), 如果超時(shí), 還未收到ACK報(bào)文, 證明addr不可達(dá), 如果此時(shí)addr的狀態(tài)為GOOD則轉(zhuǎn)為NEW狀態(tài);如果addr的狀態(tài)為NEW狀態(tài)則轉(zhuǎn)為BAD狀態(tài);如果為addr的狀態(tài)為BAD狀態(tài)則不變。

狀態(tài)的轉(zhuǎn)換圖如圖3所示:

初態(tài)

GOOD

NEW

BAD

ACK/RST

SYN

ACK/RST

ACK包確認(rèn)超時(shí)

ACK/RST

ACK包確認(rèn)超時(shí)

  下面分析一下基于地址狀態(tài)監(jiān)控的方法如何能夠防御SYN Flood攻擊。

  1)對于一個(gè)偽造源地址的SYN報(bào)文, 若源地址第一次出現(xiàn), 則源地址的狀態(tài)為NEW狀態(tài), 當(dāng)監(jiān)聽到服務(wù)器的SYN+ACK報(bào)文, 表明服務(wù)器已經(jīng)為該源地址的連接請求建立了半連接。 此時(shí), 監(jiān)控程序代源地址發(fā)送一個(gè)ACK報(bào)文完成連接。 這樣, 半連接隊(duì)列中的半連接數(shù)不是很多。 計(jì)時(shí)器開始計(jì)時(shí), 由于源地址是偽造的, 所以不會收到ACK報(bào)文, 超時(shí)后, 監(jiān)控程序發(fā)送RST數(shù)據(jù)包, 服務(wù)器釋放該連接, 該源地址的狀態(tài)轉(zhuǎn)為BAD狀態(tài)。 之后, 對于每一個(gè)來自該源地址的SYN報(bào)文, 監(jiān)控程序都會主動(dòng)發(fā)送一個(gè)RST報(bào)文。

  2)對于一個(gè)合法的SYN報(bào)文, 若源地址第一次出現(xiàn), 則源地址的狀態(tài)為NEW狀態(tài), 服務(wù)器響應(yīng)請求, 發(fā)送SYN+ACK報(bào)文, 監(jiān)控程序發(fā)送ACK報(bào)文, 連接建立完畢。 之后, 來自客戶端的ACK很快會到達(dá), 該源地址的狀態(tài)轉(zhuǎn)為GOOD狀態(tài)。 服務(wù)器可以很好的處理重復(fù)到達(dá)的ACK包。

從以上分析可以看出, 基于監(jiān)控的方法可以很好的防御SYN Flood攻擊, 而不影響正常用戶的連接。

  3 小結(jié)

  本文介紹了SYN Flood攻擊的基本原理, 然后詳細(xì)描述了兩種比較有效和方便實(shí)施的防御方法:SYN-cookie技術(shù)和基于監(jiān)控的源地址狀態(tài)技術(shù)。 SYN-cookie技術(shù)實(shí)現(xiàn)了無狀態(tài)的握手, 避免了SYN Flood的資源消耗。 基于監(jiān)控的源地址狀態(tài)技術(shù)能夠?qū)γ恳粋(gè)連接服務(wù)器的IP地址的狀態(tài)進(jìn)行監(jiān)控, 主動(dòng)采取措施避免SYN Flood攻擊的影響。 這兩種技術(shù)是目前所有的防御SYN Flood攻擊的最為成熟和可行的技術(shù)。


上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識,學(xué)習(xí)了安全知識,幾乎可以讓你免費(fèi)電腦中毒的煩擾。