TCP/IP網絡協議攻擊的原理和實踐
0.總體結構
本次作業屬於哪個課程 | 網絡攻防實踐 |
---|---|
這個作業要求在哪里 | TCP/IP網絡協議攻擊 |
我在這個課程的目標是 | 學習網絡攻防相關技術和原理 |
這個作業在哪個具體方面幫助我實現目標 | TCP/IP網絡協議攻擊的原理和實踐 |
1.實踐內容
第五章的內容整體比較多,但是系統性和完整性都比較好,主要講了網絡層和傳輸層的協議攻擊。關於攻擊的原理,本章的書本內容十分詳細,所以本次作業的原理篇幅稍多。主要分成以下幾個部分先進行理論知識的梳理,再進行課后的實踐。
- 網絡協議攻擊及其基本概念
- 網絡層協議攻擊及防范措施
- 傳輸層協議攻擊及防范措施
網絡協議攻擊及其基本概念
學習網絡安全、信息安全首先應當銘記心中的是五大安全屬性:機密性,完整性,可用性、真實性和不可抵賴性。我們所有的攻擊或者防守都是圍繞這五大安全屬性來展開的。那么作為攻擊方來說,通常有以下幾種攻擊模式:
- 截獲:以嗅探與監聽技術為基礎的被動攻擊模式,獲取網絡通信雙方的通信信息內容。
- 中斷:以拒絕服務技術為基礎的主動攻擊模式,使網絡通信和會話無法進行。
- 偽造:以欺騙為基礎的主動攻擊模式,假冒網絡通信方的身份,欺騙通信對方達到惡意目的。
- 篡改:包括數據包篡改,中間人攻等技術的擊主動攻擊模式,網絡通信工程的信息內容進行篡改,使得通信一方或雙方接收到虛假消息。
但是作為一個攻擊者,我們還缺少了安全缺陷,有了安全缺陷,我們才可以實施攻擊。下面簡要介紹一些TCP/IP網絡協議棧安全缺陷與攻擊技術,主要技術內容在下一節講解。
- 網絡接口層:以太網協議,當網絡接口處於混雜模式可以直接嗅探並截獲數據包,同時缺乏對MAC地址源的身份驗證機制,實現MAC地址欺騙。
- 互聯層:IP協議只根據目的地址進行轉發,不檢查源IP地址是否真實有效,即缺乏IP地址身份認證機制,容易遭到IP地址欺騙。同時還包括源路由濫用、IP分片攻擊,以及ARP欺騙、ICMP重定向、Smurf攻擊等。
- 傳輸層:TCP建立會話之后的連接過程中,非常容易遭受偽造和欺騙攻擊,攻擊者可以進行TCP RST攻擊直接中斷會話過程。同時TCP的三次握手過程存在設計缺陷,攻擊者可以進行SYN泛洪攻擊。
- 應用層:一些流行的應用層協議HTTP、FTP、POP3/SMTP、 DNS等均缺乏安全設計。
上述協議棧攻擊技術中,最為重要或者流行的就是欺騙技術了,欺騙技術即攻擊者偽造出特制的網絡數據報文,發送給目標主機,使其在接受處理這些偽造報文時遭受攻擊。Netwox是一個開源工具包,可以創建任意的TCP/UDP/IP數據報文,支持命令行方式構造及發送偽造包,可以通過腳本編程實現自動化處理。
網絡層協議攻擊及防范措施
1.IP源地址欺騙攻擊
- 原理:只使用數據包中的目標地址進行路由轉發,而不對源地址進行真實性的驗證。
- 攻擊步驟(參考下圖與文字內容結合):
- 對受信任的主機進行拒絕服務攻擊
- 對目標主機的TCP初始序列號(ISN)進行取樣和猜測
- 偽造源地址為受信任的主機IP的SYN數據包發送給主機
- 等待目標主機將SYN/ACK包發給已經癱瘓的受信任的主機
- 再次偽裝成被信任的目標主機發送ACK包、建立連接。
- 應用場景:拒絕服務攻擊、網絡掃描(nmap -D)
- 工具:Netwox、wireshark、nmap
- 防范措施:
- 使用隨機化的初試序列號
- 使用網絡層安全傳輸協議
- 避免采用基於IP地址的信任策略
- 在路由器和網關上實施包過濾
2.ARP欺騙攻擊
- 定義:ARP欺騙也稱為ARP下毒,是指攻擊者在有線或以太網上發送偽造的ARP信息,對特定IP所對應的的MAC地址進行假冒欺騙,從而達到惡意目的的攻擊技術。
- 原理:ARP協議在設計時認為局域網內部的所有用戶都是可信的,但是局域網內可以存在內部攻擊者,或者已經滲透進局域網的外部攻擊者或惡意代碼。這使得ARP緩存非常容易被注入偽造的IP地址到MAC地址的映射關系。
- 攻擊步驟(參考下圖與文字內容結合):
- 源節點A發送數據包給目的節點B時,會通過ARP協議在局域網段廣播ARP請求包,詢問節點B的IP地址所映射的MAC地址。
- 攻擊節點C說IP目標IP地址所映射的MAC地址是他自己,並不斷地向源節點發送ARP響應包。
- 由於攻擊節點C不斷地發送響應包,這樣源節點上會強制以C發送響應包中的信息來更新ARP緩存。
- 當源節點A要再次發送數據包到節點B時,直接將數據包發送到C對應的MAC地址,即攻擊節點C,這樣C就通過欺騙假冒了目的節點B。
- 如果ARP欺騙攻擊的是網關節點,將導致整個局域網所有節點經過網關出入的數據包都會首先通過攻擊節點,可能被嗅探、監聽和惡意修改。
- 應用場景:交換式網絡、構造中間人攻擊、惡意代碼。
- 工具:DSniff中的Arpspoof、arpison、Ettercap、Netwox。
- 防范措施:
- 靜態綁定關鍵主機的IP地址和MAC地址映射關系
- 使用相應的ARP防范工具
- 使用虛擬子網細分網絡拓撲
- 加密傳輸
3.ICMP路由重定向攻擊
- 定義:攻擊者偽裝成路由器發送虛假的ICMP路由路徑控制報文,使得受害主機選擇攻擊者指定的路由路徑,從而進行嗅探或假冒攻擊的一種技術。ICMP報文分為兩種類型:差錯報告類(目的站不可達、數據報超時、數據包參數錯誤)、控制類報文(請求/應答類和通知類)。
- 原理:利用ICMP路由重定向報文改變主機路由表,向目標主機發送重定向消息,偽裝成路由器,使得目標機器的數據報文發送至攻擊機從而加強監聽。
- 攻擊步驟:
- 攻擊節點利用IP源地址欺騙技術,冒充網關IP地址,向被攻擊節點發送ICMP重定向報文,並將指定的新路由器IP地址設置為攻擊節點。
- 被攻擊節點收到報文后,進行限制條件檢查,由於該報文並不違背限制條件,因此將被接收,被攻擊節點選擇攻擊節點作為其新的路由器。
- 攻擊節點可以可以開啟路由轉發,充當中間人,對被攻擊節點的通信進行全程嗅探監聽,達到ARP欺騙類似的攻擊效果。
- 在轉發過程中,根據ICMP路由重定向機制的設計原理,攻擊節點協議棧可能會向攻擊節點發送一個ICMP重定向報文,指定原先網關為新路由器,將欺騙路由路徑還原至原先狀態。
- 工具:Netwox
- 防范措施:
- 根據類型過濾一些ICMP數據包
- 設置防火牆過濾
- 對ICMP重定向報文判斷是不是來自本地路由器的
傳輸層協議攻擊及防范措施
1.TCP RST攻擊
- 定義:TCP RST攻擊也被稱為偽造TCP重置報文攻擊,是指一種假冒干擾TCP通信連接的技術方法。
- 原理:TCP協議頭有一個
reset
,該標志位置為1,接收該數據包的主機即將斷開這個TCP會話連接。tcp重置報文就是直接關閉掉一個TCP會話連接。 - 攻擊步驟:
- 攻擊主機C可以通過嗅探方式監視通信雙方A、B之間的TCP連接。
- 在獲得源、目標IP地址及端口、序列號之后,接可以結合IP源地址欺騙技術偽裝成通信一方,發送TCP重置報文給通信另一方。
- 在確保端口號一致及序列號落入TCP造成通信雙方正常網絡通信的中斷,達到拒絕服務的效果。
- 工具:Netwox
2.TCP會話劫持攻擊
- 原理:TCP會話劫持是劫持通信雙方已經建立的TCP會話連接,假冒其中一方的身份,與另一方進行進一步通信。其中最核心的就是通過TCP對會話通信方的驗證。
- 攻擊步驟:
- victim主機與telnet服務器進行連接,並通過身份認證建立起會話。
- telnet服務器將會向victim發送響應包,並包含服務器當前序列號(
SVR_SEQ
)以及期望客戶端發送的下一個序列號(SVR_ACK
)。 - 攻擊者通過ARP欺騙實施中間人攻擊,可以嗅探獲得victim和telnet服務器間的通信內容,然后假冒victim的IP地址及身份,向talent服務器發送數據包,聲稱自己是victim。
- 攻擊者發送數據包中的序列號必須滿足條件:
SVR_ACK<=CLT_SEQ<=SVR_ACK+SVR_WND
。 - victim仍然會繼續持續talent服務器之間的連接會話,但是由於與telnet服務器之間的ACK值互相不匹配出現AC風暴。
- 防范措施:
- 禁用主機上的源路由
- 采用靜態綁定IP-MAC映射表以及避免ARP欺騙
- 引用和過濾ICMP重定向報文
3.TCP SYN Flood拒絕服務攻擊
- 原理:基於TCP三次握手的缺陷,向目標主機發送大量的偽造源地址的SYN連接請求,消耗目標主機的連接隊列資源,從而無法正常服務。
- 攻擊步驟:
- 在TCP SYN Flood攻擊中,攻擊主機向受害主機發送大量偽造源地址的TCP SYN報文。
- 受害主機分配必要的資源,然后向源地址返回SYN/ACK包,並等待源端返回ACK包。
- 如果偽造的源地址主機活躍,將會返回一個RST包直接關閉連接,但大部分偽造源地址是非活躍的,永遠不會返回ACK報文,受害主機繼續發送SYN+ACK包,當半開連接報文填滿,服務器也就拒絕新的連接。
- 防范措施:
- SYN-Cookie技術(在連接信息未完全到達前不進行資源的分配)。
- 防火牆地址狀態監控技術(將到目標服務器的TCP連接狀態分為NEW、GOOD、BAD)。
4.UDP Flood拒絕服務攻擊
- 原理:通過向目標主機和網絡發送大量UDP數據包,造成目標主機顯著的計算負載提升,或者通過網絡擁塞,從而使得目標主機和網絡陷入不可用的狀態,造成拒絕服務攻擊。
- 防范措施:
- 禁用或過濾監控及響應服務。
- 禁用或過濾其他UDP服務。
2.實踐過程
任務:在網絡攻防實驗環境中完成TCP/IP協議棧重點協議的攻擊實驗,包括ARP緩存欺騙攻擊、ICMP重定向攻擊、SYN Flood攻擊、TCP RST攻擊、TCP會話劫持攻擊。
ARP緩存欺騙攻擊
Solution
首先這里需要三台機器,我選擇的是Kali作為攻擊機,其他兩台機器作為正常通信的機器(Linux MetaSploitable和SEED Ubuntu)。
注意:三台機器必須在局域網內,你現在應該讓三台機器直接橋接外網即可。給出三台電腦的IP和MAC地址如下(用ifconfig
指令查看即可,請牢牢記住,后面所有的實踐都是用這個環境)。
機器 | IP地址 | MAC地址 |
---|---|---|
Kali Linux | 192.168.3.19 |
00:0c:29:5d:8c:d9 |
Linux MetaSploitable | 192.168.3.21 |
00:0c:29:8d:3c:c0 |
SEED Ubuntu | 192.168.3.20 |
00:0c:29:82:d2:95 |
1. 用SEED Ubuntu ping
MetaSploitable,得到arp緩存表,並用arp -a
查看arp緩存表,如圖所示,MetaSploitable的IP地址和MAC地址是對應的。
2. 在Kali上執行指令netwox 80 -e 00:0c:29:5d:8c:d9 -i 192.168.3.21
。解釋一下這條指令,80
是指netwox的80號工具(建議用80而不是33,因為33一次執行,很容易arp緩存表就回去了),第一個為攻擊機Kali放入MAC地址,第二個為MetaSploitable的IP地址,執行后就在局域網內廣播這條命令。更多的netwox指令參考netwox入門教程。(沒有輸出請放心,是一直在廣播的)
3. 現在其實實驗已經完成了,下面我們做個驗證(驗證坑了我)。我們驗證的目的是Kali能夠監聽SEED Ubuntu和MetaSploitable的通信,那么一定要記住:SEED Ubuntu和MetaSploitable關於對方的arp緩存表都要改!並且都改成Kali的MAC地址,這個時候你才能捕獲數據包,不然要么是ping不通,要么是arp緩存表回去了。這個時候我們在Kali上用wireshark應該能抓到來自SEED Ubuntu和MetaSploitable通信的數據包。如下圖所示。
4. 最后,別忘了執行sudo arp -d 192.168.3.21
來刪除arp緩存(其實你取消netwox指令再ping一下應該就回去了)。
ICMP重定向攻擊
Solution
環境還是上面的環境,這里就不再說明了。我們首先這里我們主要改SEED Ubuntu的路由表,可以把MetaSploitable放在一邊了。
1. 首先在SEED Ubuntu上打開Wireshark來查看數據流量,並在終端ping baidu.com
,我們發現SEED Ubuntu橋接之后直接訪問外網
2. 在Kali主機上執行命令netwox 86 -f "host 192.168.3.20" -g 192.168.3.19 -i 192.168.3.1
即嗅探到192.168.3.20
(SEED Ubuntu)的數據包時,以192.168.3.1
的名義發送ICMP重定向報文,使192.168.3.19
(Kali)成為其默認路由,然后觀察Wireshark數據包的情況。
3. 觀察wireshark的數據包和ping
的過程,我們發現其訪問百度的數據包已經被重定向到192.168.3.19
(下一跳是192.168.3.19
)。
SYN Flood攻擊
這里選擇利用SEED Ubuntu向靶機MetaSploitable發起telnet服務訪問,用Kali攻擊機攻擊靶機的telnet服務端口,並用Wireshark查看。
1. 使用SEED Ubuntu向MetaSploitable發起登陸telnet 192.168.3.21
,輸入用戶名密碼(MetaSploitable登陸的用戶名密碼)。
2. 在Kali上利用netwox的76
號工具對靶機的23
號端口進行SYN Flood攻擊netwox 76 -i 192.168.3.21 -p 23
。
3. 打開Wireshark查看,可以看到攻擊機向靶機發送了大量的虛假ip發出的SYN
連接請求,這些虛假的連接請求沒有MAC地址,無法溯源攻擊者的真實身份。同時我們在SEED Ubuntu上進行訪問也發現無法訪問了。(這個時候你應該發現你主機的風扇轉的更厲害了)
TCP RST攻擊
這里我們同樣選擇利用SEED Ubuntu向靶機MetaSploitable發起telnet服務訪問,用Kali攻擊機對靶機發起TCP RST攻擊。
1. 使用SEED Ubuntu向MetaSploitable發起登陸telnet 192.168.3.21
,輸入用戶名密碼(MetaSploitable登陸的用戶名密碼)。
2. 在Kali上利用netwox的78
號工具對靶機進行TCP RST攻擊netwox 78 -i 192.168.3.21
。
3. 回到我們剛才SEED Ubuntu的登陸界面,我們現在連接已經被強制關閉了。當然你也可以用Wireshark查看發送的數據包。
TCP會話劫持攻擊
說明:這個實踐應該是最麻煩的一個實踐內容,主要還是書上提供的hunt會話劫持工具總是出現no connection available
的問題。而且網絡上很少有關於這個的問題,所以這個工具的使用也是無疾而終。(可能是端口的設置問題?日后再慢慢了解吧)然后,我開始了下一輪搜素之旅,找到了這個博客TCP會話劫持原理和利用。所以本文還是主要按照這個博客的內容開展我們的實踐內容(手動和自動操作)。
1. 和上述的很多內容一樣,首先我們將SEED Ubuntu利用telnet 192.168.3.21
登陸MetaSploitable。
2. 在Kali上打開Wireshark設置過濾條件tcp.port == 23
,然后在SEED Ubuntu中輸入ls
,回到Kali的Wireshark中查看,會發現有l
和s
的數據包。
3. 如果你沒有發其他指令,那么這個指令應該就是最后一個包,打開TransmissionControl Protocol
查看以下幾個值,源端口、目的端口、Next Seq Num和ACK值。
4. 我們要偽造發下一個包,所以把Next Seq Num作為下一個包的ACK,采用ACK作為下一個包的Seq。獲取到信息之后,攻擊機使用netwox工具偽造SEED Ubuntu給MetaSploitable發一個tcp
包。發送成功后,原來的SEED Ubuntu就會失去連接,同時MetaSploitable會把Kali當作訪問者 ,如此實現了會話劫持。
5. 使用指令
netwox 40 --ip4-dontfrag --ip4-offsetfrag 0 --ip4-ttl 64 --ip4-protocol 6 --ip4-src 192.168.3.20 --ip4-dst 192.168.3.21 --tcp-src 40924 --tcp-dst 23 --tcp-seqnum 2 --tcp-acknum 2 --tcp-ack --tcp-psh --tcp-window 64 --tcp-data "68656C6C6F776F726C64"
指令有點長,第一個40是netwox的40號工具,在ip4-src
后輸入你的SEED Ubuntu地址,在ip4-dst
后輸入你的MetaSploitable地址,tcp-src
表示原端口號(這個是變化的),tcp-seqnum
和tcp-acknum
輸入剛才講解的值,tcp-data
是你要發的數據的16進制值,這里的是helloworld
的16進制。同樣的可以在Wireshark中觀察到發送的值。
6. 如果你在wireshark上也發現了很多Tcp Dup
和Tcp Retransmission
,那么你的劫持就是成功的。TCP Dup ACK XXX#X
即
重復應答#前的表示報文到哪個序號丟失,#后面的是表示第幾次丟失,TCP Retransmission
是超時引發的數據重傳。也就是書上說的ACK風暴。
說明二:通過上面的實驗我們基本手動實現了TCP會話劫持的實踐,但是還是太過復雜,那個博客說明了一個自動工具,去GitHub上找到了,給大家GitHub地址Shijack。下面的操作就比較容易了。
1. 使用指令./shijack-lnx eth0 192.168.3.20 40922 192.168.3.21 23
,參數為網卡名,源地址,源端口,目的地址,目的端口(注意源端口通過Wireshark查看,是變的)。
2. 同時你也會會和上述相似的情況,SEED Ubuntu和MetaSploitable之間是無法通信的(出現了ACK風暴,甚至SEED Ubuntu直接卡住)。
3. 這個時候我們利用Kali和MetaSploitable通信(輸入指令ls
),並利用Wireshark截取數據包,我們發現Kali和MetaSploitable之間是正常通信的。
至此,TCP會話劫持實踐結束!
2.學習中遇到的問題及解決
- 問題一:在ARP欺騙的時候用ping來驗證發現找不到攻擊機
- 問題一解決方案:應該兩個的arp緩沖表都要改,在實踐中說明了。
- 問題二:TCP會話劫持實踐的hunt無法使用
- 問題二解決方案:尋找的其他的博客參考,手動實現,當然GitHub上還有很多其他的工具。
3.學習感悟、思考
- 學習有同學討論真的很好,可以很快發現自己的錯誤,不用自己埋頭找很久。
- 善於尋找資源也是非常重要的技能。