HCIE網路安全第三天
TCP協議
TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連線(連線導向)的、可靠的、 基於IP的傳輸層協議。TCP在IP報文的協議號是6。
下面來看一下TCP協議的報頭,順便詳細說明一下每個欄位的意義。
Source Port
16位元
源埠,標識哪個應用程式傳送。
Destination Port
16位元
目的埠,標識哪個應用程式接收。
Sequence Number
32位元
序號欄位。TCP連結中傳輸的資料流中每個位元組都編上一個序號。序號欄位的值指的是本報文段所傳送的資料的第一個位元組的序號。
Acknowledgment Number
確認號,是期望收到對方的下一個報文段的資料的第1個位元組的序號,即上次已成功接收到的資料位元組序號加1。只有ACK標識為1,此欄位有效。
Data Offset
4位元
資料偏移,即首部長度,指出TCP報文段的資料起始處距離TCP報文段的起始處有多遠,以32位元(4位元組)為計算單位。最多有60位元組的首部,若無選項欄位,正常為20位元組。
Reserved
6位元
保留,必須填0。
URG
1位元
緊急指標有效標識。它告訴系統此報文段中有緊急資料,應儘快傳送(相當於高優先順序的資料)。
ACK
1位元
確認序號有效標識。只有當ACK=1時確認號欄位才有效。當ACK=0時,確認號無效。
PSH
標識接收方應該儘快將這個報文段交給應用層。接收到PSH =
1的TCP報文段,應儘快的交付接收應用程序,而不再等待整個快取都填滿了後再向上交付。
RST
1位元
重建連線標識。當RST=1時,表明TCP連線中出現嚴重錯誤(如由於主機崩潰或其他原因),必須釋放連線,然後再重新建立連線。
SYN
1位元
同步序號標識,用來發起一個連線。SYN=1表示這是一個連線請求或連線接受請求。
FIN
1位元
發端完成傳送任務標識。用來釋放一個連線。FIN=1表明此報文段的傳送端的資料已經發送完畢,並要求釋放連線。
Window
16位元
視窗:TCP的流量控制,視窗起始於確認序號欄位指明的值,這個值是接收端正期望接收的位元組數。視窗最大為65535位元組。
Checksum
16位元
校驗欄位,包括TCP首部和TCP資料,是一個強制性的欄位,一定是由發端計算和儲存,並由收端進行驗證。在計算檢驗和時,要在TCP報文段的前面加上12位元組的偽首部。
Urgent Pointer
16位元
緊急指標,只有當URG標誌置1時緊急指標才有效。TCP的緊急方式是傳送端向另一端傳送緊急資料的一種方式。緊急指標指出在本報文段中緊急資料共有多少個位元組(緊急資料放在本報文段資料的最前面)。
Options
可變
選項欄位。TCP協議最初只規定了一種選項,即最長報文段長度(資料欄位加上TCP首部),又稱為MSS。MSS告訴對方TCP“我的快取所能接收的報文段的資料欄位的最大長度是MSS個位元組”。
新的RFC規定有以下幾種選型:選項表結束,無操作,最大報文段長度,視窗擴大因子,時間戳。
視窗擴大因子:3位元組,其中一個位元組表示偏移值S。新的視窗值等於TCP首部中的視窗位數增大到(16+S),相當於把視窗值向左移動S位後獲得實際的視窗大小。
時間戳:10位元組,其中最主要的欄位是時間戳值(4位元組)和時間戳回送應答欄位(4位元組)。
選項確認選項:
Padding
可變
填充欄位,用來補位,使整個首部長度是4位元組的整數倍。
data
可變
TCP的資料負載。
TCP的連線方式
三次握手機制:
TCP是面向連線的,無論哪一方向另一方傳送資料之前,都必須先在雙方之間建立一條連線。
在TCP/IP協議中,TCP 協議提供可靠的連線服務,連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號 並交換 TCP視窗大小資訊。
三次握手過程:
第一次握手:建立連線。客戶端傳送連線請求報文段,將SYN位置為1,Sequence Number為x;然後,客戶端進入SYN_SEND狀態,等待伺服器的確認;
第二次握手:伺服器收到SYN報文段。伺服器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認,設定Acknowledgment Number為x+1(Sequence Number+1);同時,自己自己還要傳送SYN請求資訊,將SYN位置為1,Sequence Number為y;伺服器端將上述所有資訊放到一個報文段(即SYN+ACK報文段)中,一併傳送給客戶端,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN+ACK報文段。然後將Acknowledgment Number設定為y+1,向伺服器傳送ACK報文段,這個報文段傳送完畢以後,客戶端和伺服器端都進入ESTABLISHED狀態,完成TCP三次握手。
四次揮手過程:
第一次分手:主機1(可以使客戶端,也可以是伺服器端),設定Sequence Number和Acknowledgment Number,向主機2傳送一個FIN報文段;此時,主機1進入FIN_WAIT_1狀態;這表示主機1沒有資料要傳送給主機2了;
第二次分手:主機2收到了主機1傳送的FIN報文段,向主機1回一個ACK報文段,Acknowledgment Number為Sequence Number加1;主機1進入FIN_WAIT_2狀態;主機2告訴主機1,我也沒有資料要傳送了,可以進行關閉連線了;
第三次分手:主機2向主機1傳送FIN報文段,請求關閉連線,同時主機2進入CLOSE_WAIT狀態;
第四次分手:主機1收到主機2傳送的FIN報文段,向主機2傳送ACK報文段,然後主機1進入TIME_WAIT狀態;主機2收到主機1的ACK報文段以後,就關閉連線;此時,主機1等待2MSL後依然沒有收到回覆,則證明Server端已正常關閉,那好,主機1也可以關閉連線了。
TCP半開攻擊
攻擊原理:
利用tcp的三次握手伺服器會分配一個資源,攻擊者利用大量的syn連線但是不回覆ack的手段,消耗握手資源,使得受害者無法給正常使用者提供握手資源導致tcp無法握手,形成DOS攻擊。
其實就是由於大量的SYN資料包請求伺服器,導致伺服器系統等待快取資源瞬間被佔滿,伺服器癱瘓,從而不能響應正常的服務請求。
實施攻擊的工具:
netwox 76號工具
sudo netwox 76 -i 192.168.66.130 -p 80
-i代表目的地址
-p代表埠號
防禦方式:
建立syscookies機制,用hash演算法提取tcp頭部的一些欄位做標記。
TCP RST重置攻擊
攻擊原理:
上面我們說過TCP報文中各個欄位的功能,而RST是重建連線標識。在 TCP 重置攻擊中,攻擊者通過向通訊的一方或雙方傳送偽造的訊息,告訴它們立即斷開連線,從而使通訊雙方連線中斷。
正常情況下發送RST報文的原因:
- 到不存在的埠的連線請求
產生復位的一種常見情況是當連線請求到達時,目的埠沒有程序正在監聽。對於UDP,當一個數據報到達目的埠時,該埠沒在使用,它將產生一個ICMP埠不可達的資訊;而TCP則使用復位。 - 異常終止一個連線
終止一個連線的正常方式是一方傳送FIN,這也稱為有序釋放,因為在所有排隊資料都已傳送之後才傳送FIN,正常情況下沒有任何資料丟失。但也有可能傳送一個復位報文段而不是FIN來中途釋放一個連線,這也稱為異常釋放。
異常終止一個連線對應用程式來說有兩個優點:
(1)丟棄任何待發資料並立即傳送復位報文段;
(2)RST的接收方會區分另一端執行的是異常關閉還是正常關閉。 - 檢測半關閉連線
如果一方已經關閉或異常終止連線而另一方卻還不知道,我們將這樣的TCP連線稱為半開啟的。任何一端的主機異常都可能導致發生這種情況。只要不打算在半開啟連線上傳輸資料,仍處於連線狀態的一方就不會檢測另一方已經出現異常。下面介紹一種建立半開啟連線的情形。在bsdi上執行Telnet客戶程式,通過它和svr4上的丟棄伺服器建立連線。接著斷開伺服器主機與乙太網的電纜,並重啟伺服器主機。這可以模擬伺服器主機出現異常(在重啟伺服器之前斷開乙太網電纜是為了防止它向開啟的連線傳送FIN,某些TCP在關機時會這麼做)。伺服器主機重啟後,我們重新接上電纜,並從客戶向伺服器傳送一行字元。由於伺服器的TCP已經重新啟動,它將丟失復位前連線的所有資訊,因此它不知道資料報文段中提到的連線。TCP處理的原則是接收方以復位作為應答。
實施攻擊的工具:
netwox 78號工具
sudo netwox 78 -i 192.168.45.22 -f “port 80 ”
-i是受害主機IP
-f是匹配流量的意思,對埠號為80的流量傳送攻擊報文
TCP劫持攻擊
攻擊思路:
1、hacker獲取client與server的tcp會話包(通過arp毒化,mac泛洪攻擊等);
2、觀察server給client主機發送的tcp報文,以獲取client將要給server傳送的下一個報文資訊;
3、hacker通過工具偽造一個tcp報文,傳送給server,其內容資訊通過步驟2中獲取的報文來確定。
1) mac地址換成hacker
2)三層的ip地址不變還是client的ip,目標也不變還是server的ip
3)tcp資訊根據觀察構造,保證他是client給server的下一個報文tcp報文
實施攻擊的工具:
netwox 40號工具
sudo netwox 40 --ip4-ttl 128 --ip4-protocol 6 --ip4-src 192.168.66.129 --ip4-dst 192.168.66.131 -tcp-src 50349 --tcp-dst 23 --tcp-seqnum 3657776184 --tcp-acknum 1813087074 --tcp-ack --tcp-psh --tcp-window 227 --tcp-data
、
命令內容包括TTL值、協議號、源IP、目的IP、源埠、目的埠、序列號、確認號、tcp的ack和psh位置為1、滑動視窗大小和資料內容,內容上述命令沒有闡述。
防禦技術:
- 不要把網路安全信任關係建立在IP基礎上或者MAC基礎上,(RARP同樣存在欺騙的問題),理想的關係應該建立在IP+MAC基礎上。
- 設定靜態的MAC—>IP對應關係表,不要讓主機重新整理設定好的轉換表。
- 停止使用ARP,將需要的ARP作為永久條目儲存在對應表中。
- 建立防火牆來連續監控網路。