0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RST攻擊是怎么回事

冬至子 ? 來(lái)源:CSDN ? 作者:陶輝 ? 2022-11-16 17:15 ? 次閱讀

在談RST攻擊前,必須先了解TCP:如何通過(guò)三次握手建立TCP連接、四次握手怎樣把全雙工的連接關(guān)閉掉、滑動(dòng)窗口是怎么傳輸數(shù)據(jù)的、TCP的flag標(biāo)志位里RST在哪些情況下出現(xiàn)。下面我會(huì)畫(huà)一些盡量簡(jiǎn)化的圖來(lái)表達(dá)清楚上述幾點(diǎn),之后再了解下RST攻擊是怎么回事。

1、TCP是什么?

TCP是在IP網(wǎng)絡(luò)層之上的傳輸層協(xié)議,用于提供port到port面向連接的可靠的字節(jié)流傳輸。我來(lái)用土語(yǔ)解釋下上面的幾個(gè)關(guān)鍵字:

port到port:IP層只管數(shù)據(jù)包從一個(gè)IP到另一個(gè)IP的傳輸,IP層之上的TCP層加上端口后,就是面向進(jìn)程了,每個(gè)port都可以對(duì)應(yīng)到用戶(hù)進(jìn)程。

可靠:TCP會(huì)負(fù)責(zé)維護(hù)實(shí)際上子虛烏有的連接概念,包括收包后的確認(rèn)包、丟包后的重發(fā)等來(lái)保證可靠性。由于帶寬和不同機(jī)器處理能力的不同,TCP要能控制流量。

字節(jié)流:TCP會(huì)把應(yīng)用進(jìn)程傳來(lái)的字節(jié)流數(shù)據(jù)切割成許多個(gè)數(shù)據(jù)包,在網(wǎng)絡(luò)上發(fā)送。IP包是會(huì)失去順序或者產(chǎn)生重復(fù)的,TCP協(xié)議要能還原到字節(jié)流本來(lái)面目。

圖片

從上面我用PowerPoint畫(huà)的TCP協(xié)議圖可以看到,標(biāo)志位共有六個(gè),其中RST位就在TCP異常時(shí)出現(xiàn),也是我這篇文章重點(diǎn)關(guān)注的地方。

2、通過(guò)三次握手建立連接

下面我通過(guò)A向B建立TCP連接來(lái)說(shuō)明三次握手怎么完成的。

圖片

為了能夠說(shuō)清楚下面的RST攻擊,需要結(jié)合上圖說(shuō)說(shuō):SYN標(biāo)志位、序號(hào)、滑動(dòng)窗口大小。

建立連接的請(qǐng)求中,標(biāo)志位SYN都要置為1,在這種請(qǐng)求中會(huì)告知MSS段大小,就是本機(jī)希望接收TCP包的最大大小。

發(fā)送的數(shù)據(jù)TCP包都有一個(gè)序號(hào)。它是這么得來(lái)的:最初發(fā)送SYN時(shí),有一個(gè)初始序號(hào),根據(jù)RFC的定義,各個(gè)操作系統(tǒng)的實(shí)現(xiàn)都是與系統(tǒng)時(shí)間相關(guān)的。之后,序號(hào)的值會(huì)不斷的增加,比如原來(lái)的序號(hào)是100,如果這個(gè)TCP包的數(shù)據(jù)有10個(gè)字節(jié),那么下次的TCP包序號(hào)會(huì)變成110。

滑動(dòng)窗口用于加速傳輸,比如發(fā)了一個(gè)seq=100的包,理應(yīng)收到這個(gè)包的確認(rèn)ack=101后再繼續(xù)發(fā)下一個(gè)包,但有了滑動(dòng)窗口,只要新包的seq與沒(méi)有得到確認(rèn)的最小seq之差小于滑動(dòng)窗口大小,就可以繼續(xù)發(fā)。

3、滑動(dòng)窗口

滑動(dòng)窗口毫無(wú)疑問(wèn)是用來(lái)加速數(shù)據(jù)傳輸?shù)?。TCP要保證“可靠”,就需要對(duì)一個(gè)數(shù)據(jù)包進(jìn)行ack確認(rèn)表示接收端收到。有了滑動(dòng)窗口,接收端就可以等收到許多包后只發(fā)一個(gè)ack包,確認(rèn)之前已經(jīng)收到過(guò)的多個(gè)數(shù)據(jù)包。有了滑動(dòng)窗口,發(fā)送端在發(fā)送完一個(gè)數(shù)據(jù)包后不用等待它的ack,在滑動(dòng)窗口大小內(nèi)可以繼續(xù)發(fā)送其他數(shù)據(jù)包。舉個(gè)例子來(lái)看吧。

圖片

大家看上圖,標(biāo)志位為.表示所有的flag都為0。標(biāo)志位P表示flag為PSH的TCP包,用于快速傳輸數(shù)據(jù)。

前三個(gè)包是三次握手,客戶(hù)端表示自己的滑動(dòng)窗口大小是65535(我的XP機(jī)器),服務(wù)器端表示滑動(dòng)窗口是5840(屏幕寬了,沒(méi)截出來(lái))。從第四個(gè)包開(kāi)始,客戶(hù)端向服務(wù)器發(fā)送PSH包,數(shù)據(jù)長(zhǎng)度是520字節(jié),服務(wù)器發(fā)了ack確認(rèn)包。注意此時(shí)win窗口大小發(fā)生了改變哈。以此類(lèi)推。

倒數(shù)第二、三包,服務(wù)器在滑動(dòng)窗口內(nèi)連續(xù)向客戶(hù)端發(fā)包,客戶(hù)端發(fā)送的ack 124同時(shí)確認(rèn)了之前的兩個(gè)包。這就是滑動(dòng)窗口的功能了。

如果談到TCP攻擊就需要注意,TCP的各種實(shí)現(xiàn)中,在滑動(dòng)窗口之外的seq會(huì)被扔掉!下面會(huì)講這個(gè)問(wèn)題。

4、四次握手的正常TCP連接關(guān)閉

先畫(huà)張簡(jiǎn)單的正常關(guān)閉連接狀態(tài)變遷圖。

圖片

FIN標(biāo)志位也看到了,它用來(lái)表示正常關(guān)閉連接。圖的左邊是主動(dòng)關(guān)閉連接方,右邊是被動(dòng)關(guān)閉連接方,用netstat命令可以看到標(biāo)出的連接狀態(tài)。

FIN是正常關(guān)閉,它會(huì)根據(jù)緩沖區(qū)的順序來(lái)發(fā)的,就是說(shuō)緩沖區(qū)FIN之前的包都發(fā)出去后再發(fā)FIN包,這與RST不同。

5、RST標(biāo)志位

RST表示復(fù)位,用來(lái)異常的關(guān)閉連接,在TCP的設(shè)計(jì)中它是不可或缺的。就像上面說(shuō)的一樣,發(fā)送RST包關(guān)閉連接時(shí),不必等緩沖區(qū)的包都發(fā)出去(不像上面的FIN包),直接就丟棄緩存區(qū)的包發(fā)送RST包。而接收端收到RST包后,也不必發(fā)送ACK包來(lái)確認(rèn)。

TCP處理程序會(huì)在自己認(rèn)為的異常時(shí)刻發(fā)送RST包。例如,A向B發(fā)起連接,但B之上并未監(jiān)聽(tīng)相應(yīng)的端口,這時(shí)B操作系統(tǒng)上的TCP處理程序會(huì)發(fā)RST包。

又比如,AB正常建立連接了,正在通訊時(shí),A向B發(fā)送了FIN包要求關(guān)連接,B發(fā)送ACK后,網(wǎng)斷了,A通過(guò)若干原因放棄了這個(gè)連接(例如進(jìn)程重啟)。網(wǎng)通了后,B又開(kāi)始發(fā)數(shù)據(jù)包,A收到后表示壓力很大,不知道這野連接哪來(lái)的,就發(fā)了個(gè)RST包強(qiáng)制把連接關(guān)了,B收到后會(huì)出現(xiàn)connect reset by peer錯(cuò)誤。

6、RST攻擊

A和服務(wù)器B之間建立了TCP連接,此時(shí)C偽造了一個(gè)TCP包發(fā)給B,使B異常的斷開(kāi)了與A之間的TCP連接,就是RST攻擊了。實(shí)際上從上面RST標(biāo)志位的功能已經(jīng)可以看出這種攻擊如何達(dá)到效果了。

那么偽造什么樣的TCP包可以達(dá)成目的呢?我們至頂向下的看。

假定C偽裝成A發(fā)過(guò)去的包,這個(gè)包如果是RST包的話(huà),毫無(wú)疑問(wèn),B將會(huì)丟棄與A的緩沖區(qū)上所有數(shù)據(jù),強(qiáng)制關(guān)掉連接。

如果發(fā)過(guò)去的包是SYN包,那么,B會(huì)表示A已經(jīng)發(fā)瘋了(與OS的實(shí)現(xiàn)有關(guān)),正常連接時(shí)又來(lái)建新連接,B主動(dòng)向A發(fā)個(gè)RST包,并在自己這端強(qiáng)制關(guān)掉連接。

這兩種方式都能夠達(dá)到復(fù)位攻擊的效果。似乎挺恐怖,然而關(guān)鍵是,如何能偽造成A發(fā)給B的包呢?這里有兩個(gè)關(guān)鍵因素,源端口和序列號(hào)。

一個(gè)TCP連接都是四元組,由源IP、源端口、目標(biāo)IP、目標(biāo)端口唯一確定一個(gè)連接。所以,如果C要偽造A發(fā)給B的包,要在上面提到的IP頭和TCP頭,把源IP、源端口、目標(biāo)IP、目標(biāo)端口都填對(duì)。這里B作為服務(wù)器,IP和端口是公開(kāi)的,A是我們要下手的目標(biāo),IP當(dāng)然知道,但A的源端口就不清楚了,因?yàn)檫@可能是A隨機(jī)生成的。當(dāng)然,如果能夠?qū)ΤR?jiàn)的OS如windows和linux找出生成source port規(guī)律的話(huà),還是可以搞定的。

序列號(hào)問(wèn)題是與滑動(dòng)窗口對(duì)應(yīng)的,偽造的TCP包里需要填序列號(hào),如果序列號(hào)的值不在A之前向B發(fā)送時(shí)B的滑動(dòng)窗口內(nèi),B是會(huì)主動(dòng)丟棄的。所以我們要找到能落到當(dāng)時(shí)的AB間滑動(dòng)窗口的序列號(hào)。這個(gè)可以暴力解決,因?yàn)橐粋€(gè)sequence長(zhǎng)度是32位,取值范圍0-4294967296,如果窗口大小像上圖中我抓到的windows下的65535的話(huà),只需要相除,就知道最多只需要發(fā)65537(4294967296/65535=65537)個(gè)包就能有一個(gè)序列號(hào)落到滑動(dòng)窗口內(nèi)。RST包是很小的,IP頭+TCP頭也才40字節(jié),算算我們的帶寬就知道這實(shí)在只需要幾秒鐘就能搞定。

那么,序列號(hào)不是問(wèn)題,源端口會(huì)麻煩點(diǎn),如果各個(gè)操作系統(tǒng)不能完全隨機(jī)的生成源端口,或者黑客們能通過(guò)其他方式獲取到source port,RST攻擊易如反掌,后果很?chē)?yán)重。

審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SYN
    SYN
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    8204
  • RST
    RST
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    7402
  • TCP協(xié)議
    +關(guān)注

    關(guān)注

    1

    文章

    91

    瀏覽量

    12071
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    等離子電視自發(fā)光是怎么回事

    等離子電視自發(fā)光是怎么回事     等離子電視自發(fā)光是指它的工作原理,是目前電視顯示技術(shù)中還原自然色彩最好的一種
    發(fā)表于 03-27 14:32 ?1631次閱讀

    隔天測(cè)量的結(jié)果看起來(lái)不同,怎么回事

    某天做的測(cè)量與另一天的測(cè)量看起來(lái)不同,這是怎么回事?讓我們來(lái)考察這個(gè)測(cè)量,以說(shuō)明發(fā)生了什么。
    的頭像 發(fā)表于 01-19 09:03 ?3729次閱讀
    隔天測(cè)量的結(jié)果看起來(lái)不同,<b class='flag-5'>怎么回事</b>?

    LDO過(guò)熱是怎么回事?無(wú)法「降溫」又該怎么辦?

    LDO過(guò)熱是怎么回事?無(wú)法「降溫」又該怎么辦?
    的頭像 發(fā)表于 07-02 11:40 ?1.6w次閱讀

    空調(diào)制冷不制熱是怎么回事

    空調(diào)在使用的時(shí)候制冷卻不制熱,是怎么回事呢?下面就和大家來(lái)分享一下,希望可以幫助到大家。
    的頭像 發(fā)表于 03-11 09:24 ?1.1w次閱讀

    網(wǎng)站服務(wù)器失去響應(yīng)怎么回事

    本文詳細(xì)分析了網(wǎng)站服務(wù)器失去響應(yīng)是怎么回事。
    發(fā)表于 05-07 14:34 ?4772次閱讀

    MLCC電容嘯叫是怎么回事?資料下載

    電子發(fā)燒友網(wǎng)為你提供MLCC電容嘯叫是怎么回事?資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶(hù)指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-03 08:42 ?9次下載
    MLCC電容嘯叫是<b class='flag-5'>怎么回事</b>?資料下載

    線(xiàn)性科技是怎么回事?

    線(xiàn)性科技是怎么回事?
    發(fā)表于 04-21 14:47 ?3次下載
    線(xiàn)性科技是<b class='flag-5'>怎么回事</b>?

    時(shí)控開(kāi)關(guān)只能開(kāi)不能關(guān)是怎么回事

    時(shí)控開(kāi)關(guān)只能開(kāi)不能關(guān):主要是說(shuō)時(shí)控開(kāi)關(guān)在自動(dòng)定時(shí)開(kāi)、關(guān)期間,可以到時(shí)間開(kāi),但是到了時(shí)間不關(guān),是怎么回事
    發(fā)表于 06-24 11:02 ?1.5w次閱讀

    蘋(píng)果14.2系統(tǒng)微信收不到信息怎么回事

    蘋(píng)果14.2系統(tǒng)微信收不到信息怎么回事?
    的頭像 發(fā)表于 09-09 10:58 ?9702次閱讀

    物聯(lián)網(wǎng)網(wǎng)關(guān)是什么,物聯(lián)網(wǎng)網(wǎng)關(guān)是怎么回事

    隨著科技的發(fā)展,越來(lái)越多的新詞出現(xiàn)在我們的生活中,物聯(lián)網(wǎng)網(wǎng)關(guān)你知道是怎么回事嗎?邊緣計(jì)算網(wǎng)關(guān)你了解多少?
    的頭像 發(fā)表于 03-03 17:25 ?3634次閱讀

    所有這些干擾是怎么回事

    所有這些干擾是怎么回事?
    發(fā)表于 11-04 09:52 ?2次下載
    所有這些干擾是<b class='flag-5'>怎么回事</b>?

    CNN到底是怎么回事?

    它用TensorFlow.js加載了一個(gè)10層的預(yù)訓(xùn)練模型,相當(dāng)于在你的瀏覽器上跑一個(gè)CNN模型,只需要打開(kāi)電腦,就能了解CNN究竟是怎么回事
    的頭像 發(fā)表于 06-28 14:47 ?4078次閱讀
    CNN到底是<b class='flag-5'>怎么回事</b>?

    中頻爐諧振電容小是怎么回事

    中頻爐諧振電容小是指在中頻爐系統(tǒng)中使用的一種電容器,它在中頻爐的正常運(yùn)行中扮演著重要的角色。那么,中頻爐諧振電容小是怎么回事呢?
    的頭像 發(fā)表于 11-10 15:35 ?870次閱讀
    中頻爐諧振電容小是<b class='flag-5'>怎么回事</b>?

    大帶寬服務(wù)器推流延遲怎么回事

    大帶寬服務(wù)器推流延遲怎么回事
    的頭像 發(fā)表于 09-03 14:52 ?322次閱讀

    DDoS服務(wù)器攻擊怎么回事?

    DDoS服務(wù)器攻擊是一種通過(guò)大量合法或非法的請(qǐng)求擁塞服務(wù)器資源,導(dǎo)致正常用戶(hù)無(wú)法訪(fǎng)問(wèn)服務(wù)的網(wǎng)絡(luò)攻擊方式。主機(jī)小編推薦下面將詳細(xì)探討DDoS服務(wù)器攻擊的相關(guān)內(nèi)容。
    的頭像 發(fā)表于 11-05 11:03 ?237次閱讀