亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么從TCP協議的原理來談談rst復位攻擊

發布時間:2021-12-03 16:14:51 來源:億速云 閱讀:138 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關怎么從TCP協議的原理來談談rst復位攻擊,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

在談RST攻擊前,必須先了解TCP:如何通過三次握手建立TCP連接、四次握手怎樣把全雙工的連接關閉掉、滑動窗口是怎么傳輸數據的、TCP的flag標志位里RST在哪些情況下出現。下面我會畫一些盡量簡化的圖來表達清楚上述幾點,之后再了解下RST攻擊是怎么回事。

1、TCP是什么?

TCP是在IP網絡層之上的傳輸層協議,用于提供port到port面向連接的可靠的字節流傳輸。我來用土語解釋下上面的幾個關鍵字:

port到port:IP層只管數據包從一個IP到另一個IP的傳輸,IP層之上的TCP層加上端口后,就是面向進程了,每個port都可以對應到用戶進程。

可靠:TCP會負責維護實際上子虛烏有的連接概念,包括收包后的確認包、丟包后的重發等來保證可靠性。由于帶寬和不同機器處理能力的不同,TCP要能控制流量。

字節流:TCP會把應用進程傳來的字節流數據切割成許多個數據包,在網絡上發送。IP包是會失去順序或者產生重復的,TCP協議要能還原到字節流本來面目。

怎么從TCP協議的原理來談談rst復位攻擊

從上面我用PowerPoint畫的TCP協議圖可以看到,標志位共有六個,其中RST位就在TCP異常時出現,也是我這篇文章重點關注的地方。

2、通過三次握手建立連接

下面我通過A向B建立TCP連接來說明三次握手怎么完成的。

怎么從TCP協議的原理來談談rst復位攻擊

為了能夠說清楚下面的RST攻擊,需要結合上圖說說:SYN標志位序號滑動窗口大小

       建立連接的請求中,標志位SYN都要置為1,在這種請求中會告知MSS段大小,就是本機希望接收TCP包的最大大小。

發送的數據TCP包都有一個序號。它是這么得來的:最初發送SYN時,有一個初始序號,根據RFC的定義,各個操作系統的實現都是與系統時間相關的。之后,序號的值會不斷的增加,比如原來的序號是100,如果這個TCP包的數據有10個字節,那么下次的TCP包序號會變成110。

滑動窗口用于加速傳輸,比如發了一個seq=100的包,理應收到這個包的確認ack=101后再繼續發下一個包,但有了滑動窗口,只要新包的seq與沒有得到確認的最小seq之差小于滑動窗口大小,就可以繼續發。

3、滑動窗口

滑動窗口毫無疑問是用來加速數據傳輸的。TCP要保證“可靠”,就需要對一個數據包進行ack確認表示接收端收到。有了滑動窗口,接收端就可以等收到許多包后只發一個ack包,確認之前已經收到過的多個數據包。有了滑動窗口,發送端在發送完一個數據包后不用等待它的ack,在滑動窗口大小內可以繼續發送其他數據包。舉個例子來看吧。

怎么從TCP協議的原理來談談rst復位攻擊

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

      前三個包是三次握手,客戶端表示自己的滑動窗口大小是65535(我的XP機器),服務器端表示滑動窗口是5840(屏幕寬了,沒截出來)。從第四個包開始,客戶端向服務器發送PSH包,數據長度是520字節,服務器發了ack確認包。注意此時win窗口大小發生了改變哈。以此類推。

       倒數第二、三包,服務器在滑動窗口內連續向客戶端發包,客戶端發送的ack 124同時確認了之前的兩個包。這就是滑動窗口的功能了。

如果談到TCP攻擊就需要注意,TCP的各種實現中,在滑動窗口之外的seq會被扔掉!下面會講這個問題。

4、四次握手的正常TCP連接關閉

先畫張簡單的正常關閉連接狀態變遷圖。

怎么從TCP協議的原理來談談rst復位攻擊

FIN標志位也看到了,它用來表示正常關閉連接。圖的左邊是主動關閉連接方,右邊是被動關閉連接方,用netstat命令可以看到標出的連接狀態。

FIN是正常關閉,它會根據緩沖區的順序來發的,就是說緩沖區FIN之前的包都發出去后再發FIN包,這與RST不同。

5、RST標志位

       RST表示復位,用來異常的關閉連接,在TCP的設計中它是不可或缺的。就像上面說的一樣,發送RST包關閉連接時,不必等緩沖區的包都發出去(不像上面的FIN包),直接就丟棄緩存區的包發送RST包。而接收端收到RST包后,也不必發送ACK包來確認。

TCP處理程序會在自己認為的異常時刻發送RST包。例如,A向B發起連接,但B之上并未監聽相應的端口,這時B操作系統上的TCP處理程序會發RST包。

又比如,AB正常建立連接了,正在通訊時,A向B發送了FIN包要求關連接,B發送ACK后,網斷了,A通過若干原因放棄了這個連接(例如進程重啟)。網通了后,B又開始發數據包,A收到后表示壓力很大,不知道這野連接哪來的,就發了個RST包強制把連接關了,B收到后會出現connect reset by peer錯誤。

6、RST攻擊

A和服務器B之間建立了TCP連接,此時C偽造了一個TCP包發給B,使B異常的斷開了與A之間的TCP連接,就是RST攻擊了。實際上從上面RST標志位的功能已經可以看出這種攻擊如何達到效果了。

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

假定C偽裝成A發過去的包,這個包如果是RST包的話,毫無疑問,B將會丟棄與A的緩沖區上所有數據,強制關掉連接。

如果發過去的包是SYN包,那么,B會表示A已經發瘋了(與OS的實現有關),正常連接時又來建新連接,B主動向A發個RST包,并在自己這端強制關掉連接。

這兩種方式都能夠達到復位攻擊的效果。似乎挺恐怖,然而關鍵是,如何能偽造成A發給B的包呢?這里有兩個關鍵因素,源端口和序列號。

一個TCP連接都是四元組,由源IP、源端口、目標IP、目標端口唯一確定一個連接。所以,如果C要偽造A發給B的包,要在上面提到的IP頭和TCP頭,把源IP、源端口、目標IP、目標端口都填對。這里B作為服務器,IP和端口是公開的,A是我們要下手的目標,IP當然知道,但A的源端口就不清楚了,因為這可能是A隨機生成的。當然,如果能夠對常見的OS如windows和linux找出生成source port規律的話,還是可以搞定的。

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

那么,序列號不是問題,源端口會麻煩點,如果各個操作系統不能完全隨機的生成源端口,或者黑客們能通過其他方式獲取到source port,RST攻擊易如反掌,后果很嚴重。

關于怎么從TCP協議的原理來談談rst復位攻擊就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克山县| 鄄城县| 新野县| 图木舒克市| 什邡市| 通城县| 哈尔滨市| 宣化县| 渭南市| 白玉县| 三门峡市| 徐汇区| 阿拉善左旗| 大庆市| 乡城县| 卢龙县| 云安县| 石柱| 淮北市| 义马市| 松江区| 徐闻县| 兰州市| 额济纳旗| 安溪县| 集安市| 东台市| 虎林市| 桦川县| 麻阳| 怀集县| 淮北市| 襄汾县| 尼勒克县| 晋宁县| 商河县| 辛集市| 绵竹市| 集安市| 武城县| 务川|