TCP協議資料報及攻擊分析

2022-09-06 16:15:17 字數 4501 閱讀 8179

urg: urget pointer is valid (緊急指標字段值有效)

syn: 表示建立連線

fin: 表示關閉連線

ack: 表示響應

psh: 表示有 data資料傳輸

rst: 表示連線重置。

1、++syn++:一段tcp對話開始時的資料報,收到的主機將以syn+ack回應,並進入半連線狀態,將此鏈結存入佇列,等待75s(可設定)。

//:伺服器接收到連線請求(syn= j),將此資訊加入未連線佇列,並傳送請求包給客戶(syn=k,ack=j+1),此時進入syn_recv狀態。當伺服器未收到客戶端的確認包時,重發請求包,一直到超時,才將此條目從未連線佇列刪除。

//:syn資料報本質上是將syn位設為1的tcp包。因此,如果你的防火牆丟棄所有的發往外網介面的syn包,那麼你將不 能讓外部任何主機主動建立連線。

++可能造成的攻擊方式++:syn泛洪。通過大量傳送目標不可達的、偽造的ip和埠號的syn連線包,大量消耗被攻擊主機頻寬和流量,可造成ddos攻擊

++可能的防護方式++:將首次收到的syn包丟棄,由於tcp保證到達的特性,正常訪問的使用者會重傳乙個syn,而惡意構造的則不會重傳。缺點是要維護乙個已到達的syn資料報的表,以便確定是否已經首次拋棄。

2、++ack++:tcp的報文到達確認(ack),是對接收到的資料的最高序列號的確認,並向傳送端返回乙個下次接收時期望的tcp資料報的序列號(ack number)。例如,主機a傳送的當前資料序號是400,資料長度是100,則接收端收到後會返回乙個確認號是501的確認號給主機a

//:tcp協議應當保證資料報按序到達接收方。如果接收方收到的資料報文沒有錯誤,只是未按序號,這種現象如何處理呢?tcp協議本身沒有規定,而是由tcp協議的實現者自己去確定。通常有兩種方法進行處理:一是對沒有按序號到達的報文直接丟棄,二是將未按序號到達的資料報先放於緩衝區內,等待它前面的序號包到達後,再將它交給應用程序。後一種方法將會提高系統的效率。例如,傳送方連續傳送了每個報文中100個位元組的tcp資料報,其序號分別是1,101,201,…,701。假如其它7個資料報都收到了,而201這個資料報沒有收到,則接收端應當對1和101這兩個資料報進行確認,並將資料遞交給相關的應用程序,301至701這5個資料報則應當放於緩衝區,等到201這個資料報到達後,然後按序將201至701這些資料報遞交給相關應用程序,並對701資料報進行確認,確保了應用程序級的tcp資料的按序到達。(++若惡意未傳送201資料報,而繼續傳送後續資料,緩衝區是否會溢位?++)

++可能的攻擊方式++:如上所述,是否存在緩衝區被資料填滿的情況而導致拒絕服務或者資料溢位?

3、++fin++:fin(ish)為tcp報頭的碼位字段,該位置為1的含義為傳送方位元組流結束,用於關閉連線。

當兩端交換帶有fin標誌的tcp報文段並且每一端都確認另一端傳送的fin包時,tcp連線將會關閉。fin位字面上的意思是連線一方再也沒有更多新的資料傳送。然而,那些重傳的資料會被傳送,直到接收端確認所有的資訊  

//:用於tcp四次握手斷開連線,即互相傳送ack/fin資料報,彼此ack確認。

//:ack/fin包(ack和fin標記設為1)通常被認為是fin(終結)包.然而,由於連線還沒有關閉,fin包總是打上ack標記.沒有ack標記而僅有fin標記的包不是合法的包,並且通常被認為是惡意的

++可能的攻擊方式++:由於tcp關閉連線四次握手,其中兩次伺服器傳送資料報;1:可以丟棄客戶端傳送fin之後的伺服器相應的ack/fin資料報。2:可以丟棄伺服器主動傳送的fin資料報;即:當客戶端傳送fin資料報之後,丟棄任何從伺服器傳來的資料報。會導致伺服器為結束連線同時在超時時間內重發兩份資料報

4、++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錯誤。

++可能的攻擊方式++:a和伺服器b之間建立了tcp連線,此時c偽造了乙個tcp包發給b,使b異常的斷開了與a之間的tcp連線,就是rst攻擊了.

實際上從上面rst標誌位的功能已經可以看出這種攻擊如何達到效果了。那麼偽造什麼樣的tcp包可以達成目的呢?我們至頂向下的看。1、假定c偽裝成a發過去的包,這個包如果是rst包的話,毫無疑問,b將會丟棄與a的緩衝區上所有資料,強制關掉連線。2、如果發過去的包是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位元組,算算我們的頻寬就知道這實在只需要幾秒鐘就能搞定

++1、目的不可達++: 當路由器收到乙個無法傳遞下去的ip報文時,會傳送icmp目的不可達報文(type為3)給ip報文的源傳送方。報文中的code就表示傳送失敗的原因。

code

0 = net unreachable;

1 = host unreachable;

2 = protocol unreachable;

3 = port unreachable;

4 = fragmentation needed and df set;

5 = source route failed.

++2、傳輸時間超時++:

網路傳輸ip資料報的過程中,如果ip資料報的ttl值逐漸遞減為0時,需要丟棄資料報。這時,路由器需要向源傳送方傳送icmp超時報文(type為11),code為0,表示傳輸過程中超時了。

乙個ip資料報可能會因為過大而被分片,然後在目的主機側把所有的分片重組。如果主機遲遲沒有等到所有的分片報文,就會向源傳送方傳送乙個icmp超時報文,code為1,表示分片重組超時了。

++3、引數錯誤報文++:當路由器或主機處理資料報時,發現因為報文頭的引數錯誤而不得不丟棄報文時,需要向源傳送方傳送引數錯誤報文(type為12)。當code為0時,報文中的pointer表示錯誤的位元組位置。

++4、源冷卻++:路由器在處理報文時會有乙個快取佇列。如果超過最大快取佇列,將無法處理,從而丟棄報文。並向源傳送方發乙個icmp源冷卻報文(type為4),告訴對方:「嘿,我這裡客滿了,你遲點再來。」

++5、重定向++:路由器在處理報文時會有乙個快取佇列。如果超過最大快取佇列,將無法處理,從而丟棄報文。並向源傳送方發乙個icmp源冷卻報文(type為4),告訴對方:「嘿,我這裡客滿了,你遲點再來。」

++6、請求回顯或回顯應答++:type(8)是請求回顯報文(echo);type(0)是回顯應答報文(echo reply)。

請求回顯或回顯應答報文屬於查詢報文。ping就是用這種報文進行查詢和回應

++6、時間戳報文++:時間戳報文是用來記錄收發以及傳輸時間的報文。originate timestamp記錄的是傳送方傳送報文的時刻;receive timestamp記錄的是接收方收到報文的時刻;transmit timestamp表示回顯這最後傳送報文的時刻。

++7、資訊請求或資訊響應++:這種報文是用來找出乙個主機所在的網路個數(乙個主機可能會在多個網路中)。報文的ip訊息頭的目的位址會填為全0,表示this,源位址會填為源ip所在的網路ip。

1、tcp syn flood攻擊

2、tcp 完整連線攻擊

3、tcp 連線結束半連線攻擊

4、udp 流量攻擊

5、dns 放大攻擊

TCP協議資料報頭結構

tcp頭結構 tcp序列號 序列碼,sequence number 32位的序列號由接收端計算機使用,重新分段的報文成最初形式。當syn出現,序列碼實際上是初始序列碼 isn 而第乙個資料位元組是isn 1。這個序列號 序列碼 是可以補償傳輸中的不一致。tcp應答號 acknowledgment n...

分析udp資料報 網路協議之TCP和UDP

首先強調一點,tcp ip協議是乙個協議簇。裡面包括很多協議的,udp只是其中的乙個,之所以命名為tcp ip協議,因為tcp ip協議是兩個很重要的協議,就用他兩命名了。兩個協議的區別實際使用時,只需要記住 tcp正常連線傳送資料時一般不會產生丟包 排除上下層其他因素 而udp產生丟包是很常見的事...

TCP資料報重組實現分析

參照tcp ip詳解第二卷24 29章,詳細論述了tcp協議的實現,大概總結一下tcp如何向應用層保證資料報的正確性 可靠性,即tcp如何實現對資料報文的重組。首先要設計兩個報文佇列,乙個存放正常來到的報文,乙個存放失序到來的報文。比如正常報文佇列最後乙個報文資料如下 報文資料段第一位元組的序號 資...