1. 程式人生 > >關於ARP、MAC、IP欺騙以及TCP劫持

關於ARP、MAC、IP欺騙以及TCP劫持

三個多月沒更新部落格,期間也有在學習和總結一些東西,只是或多或少都涉及到公司相關的資訊(業務,JVM,WebServer)所以不便寫出來,有時候寫到一半發現又不太合適然後刪除,很鬱悶。之前一直比較關注web安全層面,如SQL注入XSSCSRF等等 ,然後HTTP協議層面,如HTTP Slowloris ,逐漸接觸應用層以下(OSI七層模型)的東西,比如TCP SYN Flood相關。最近在學習ARP、MAC、IP欺騙,交換網路sniff以及TCP劫持相關的東西,查閱的都是01-03年左右的文件(越是底層的技術越是持久哈),總算不涉及公司相關資訊,拿出來充充數。
注:本文只供研究參考之用,如作其他用途,概與本人無關。飄零的程式碼 http://piao2010.com

簡單描述下實驗場景:同一區域網內,閘道器A,攻擊者B,受害者C。
arp
涉及到工具:主要是hunt-1.5dsniff工具包(dsniff安裝過程比較艱辛,主要是軟體依賴的庫太舊了,好在有同學給出了各依賴庫的包http://blog.netonline.me/2010/09/lansecurity-dsniff.html/ 最後一步安裝dsniff的時候注意指定這些庫的路徑./configure –help 可以查到)
工具使用相關說明在README裡都比較詳細了,另外需要知道TCP/IP協議相關的基礎知識(請參考《TCP/IP詳解》或者RFC)。

首先說下ARP欺騙,主要參考http://www.rootsecure.net/content/downloads/pdf/arp_spoofing_slides.pdf 和 http://www.ibm.com/developerworks/cn/linux/l-arp/

ARP欺騙是攻擊者B主動傳送ARP響應來欺騙受害者C對ARP快取表中閘道器A的IP和MAC對映進行更新,使閘道器的IP對應B的MAC,如此一來受害者C對閘道器A傳送的資料就全部走到了攻擊者B這裡,那麼B很容易就可以對資料進行sniff甚至篡改,最後再把資料轉發給真正的閘道器A(B事先開啟ip_forward功能)。
同樣地攻擊者B主動傳送ARP響應來欺閘道器A對ARP快取表中受害者C的IP和MAC對映進行更新,使受害者C的IP對應B的MAC,如此一來閘道器A對受害者C傳送的資料就全部走到了攻擊者B這裡,那麼B很容易就可以對資料進行sniff甚至篡改,最後再把資料轉發給真正的受害者C(同樣B事先開啟ip_forward

功能)。
現在看起來B已經順利對A和C之間的通訊進行了監控甚至篡改。ARP欺騙是基於MAC與IP對映關係的欺騙,對於網路層以上是透明的,所以也就達到了TCP劫持的目的,甚至是基於ssh v1的MITM(dsniff工具包裡的sshmitm可以實現)。另外一些基於源IP地址信任的策略也輕鬆突破了(攻擊者B不用開啟ip_forward),就是實現了IP的欺騙(注意場景:區域網內哈)。還有就是《ARP協議揭密》一文中利用ICMP重定向報文進行跨網段的ARP欺騙因為條件有限我未做測試,實踐過的同學請告知。
ARP欺騙的防禦:網路中任意兩節點之間雙向IP+MAC靜態繫結是最好的辦法,當然維護成本也是比較高的。對於不能靜態繫結的環境,可以參考http://www.xfocus.net/articles/200711/960.html 一文,正好我也安裝了某ARP防火牆,發現文中的思路應該已經被採用,畢竟是07年的文章了。

再說下公網的IP欺騙,當然我說的是TCP連線(ICMP UDP這些隨便你怎麼玩),實現起來會很費勁,傳說中凱文米特尼克做過。ip_spoof從理論上看:攻擊者B首先要對受信任者C進行Flood以免它對目標A的TCP產生RST迴應而影響效果(這步不算難),然後攻擊者B偽裝C的IP對目標A發起SYN,目標A會向受信任者C迴應SYN+ACK,所以C這個時候必須無響應,作為攻擊者B收不到A給C的SYN+ACK,所以我們必須對A的TCP ISN進行預測(這個是難點,相關技術自行Google之),然後以正確的ACK值(A的ISN+1)和我們要傳送的資料回覆給目標A完成一次攻擊。當然只是理論,我沒有測試過。

最後說下MAC欺騙,主要參考http://www.cnblogs.com/wuxdotnet/archive/2010/04/07/1706654.html 和 http://huaidan.org/archives/2199.html
鑑於前面提到ARP欺騙的危害如此之大,所以一些網路環境裡主機(閘道器)之間採用雙向IP+MAC靜態繫結來防禦ARP欺騙。如此一來我們似乎沒法在這種環境裡面進行sniff(親,場景是交換網路,不是共享網路哈),有一種比較暴力的方法就是泛洪交換機的MAC地址(dsniff工具包裡的macof可以實現),這樣確實會使交換機以廣播模式工作(變成HUB工作方式)從而達到嗅探的目的,但是會造成交換機負載過大,網路緩慢和丟包甚至癱瘓。這個時候MAC欺騙就派上用場了,ARP欺騙是欺騙了IP/MAC的應關係,而MAC欺騙則是欺騙了MAC/PORT(交換機的埠)的對應關係。還是以攻擊者B劫持受害者C作為例子(da為目的MAC,sa為源MAC):
首先攻擊者B傳送任意da=閘道器A.mac、sa=受害者C.mac的資料包到閘道器,這樣就表明C.mac 對應的是port.B,在一段時間內,交換機會把發往C.mac的資料幀全部發到攻擊者B。這個時間一直持續到C主機發送一個數據包,或者另外一個da=閘道器A.mac、sa=C.mac的資料包產生前。
然後攻擊者B收到閘道器A發給受害者C的資料,記錄或修改之後要轉發給C,在轉發前要傳送一個ARP請求C.MAC的廣播,這個包是正常的,MAC資訊為:da=FF:FF:FF:FF:FF:FF、sa=B.mac。這個資料幀表明了B.mac對應port.B,同時會激發C主機響應一個應答ARP包 MAC資訊為:da=B.mac、sa=C.mac,這個資料幀表明了 C.mac對應port.C。至此,對應關係已經恢復,攻擊者B將劫持到的資料可順利轉發至受害者C。這樣就完成了一次劫持,MAC欺騙攻擊隱蔽性強,可以在ARP防火牆和雙向繫結的環境中工作。攻擊具有時間分段特性,所以受害者C的流量越大,劫持頻率也越低,網路越穩定。
MAC欺騙的防禦:高階的交換機可以採用ip+mac+port 繫結,控制CAM表的自動學習,當然維護成本也會很高,除非網路節點比較穩定,很少增減節點。

參考資料:
http://www.rootsecure.net/content/downloads/pdf/arp_spoofing_slides.pdf http://www.ibm.com/developerworks/cn/linux/l-arp/
http://www.xfocus.net/articles/200711/960.html
http://www.cnblogs.com/wuxdotnet/archive/2010/04/07/1706654.html
http://huaidan.org/archives/2199.html
http://blog.netonline.me/2010/09/lansecurity-dsniff.html/
《TCP/IP詳解》