不管你有沒有意識到,網絡嗅探需要經過幾個階段:ARP 欺騙 -> 資料包截取 -> 資料包分析 -> 記錄和/或顯示感興趣的資訊。如果我們想真實地體會一下這個過程,那麼建議用最原始的方法,手工執行上述過程:用 ARP 欺騙軟體,比如 arp-tools 發送 ARP 欺騙包,讓其它兩台機器之間的資料流通過我們的機器。注意,需要開啟我們機器的路由功能;接下來,用抓包工具抓取那兩台機器之間的資料包;然後用我們的眼睛檢視(分析)抓取到的資料包;最後,如果看到了我們感興趣的資訊,記錄下來。當然,手工的過程很麻煩,我們一般選擇用嗅探軟體,比如 Windows 平台下的 Cain,Linux 平台下的 Ettercap 等。然而,即使用嗅探軟體,那麼仍然需要經曆這個過程,仍然需要做這些工作,隻不過嗅探軟體幫我們做了這些工作而已。
在本系列文章的第一部分,我們來探讨 ARP 欺騙,主要探讨三個問題:
1)為什麼要進行 ARP 欺騙?
2)為什麼能夠進行 ARP 欺騙?
3)怎樣進行 ARP 欺騙?
一. 為什麼要進行 ARP 欺騙?
所謂網絡嗅探,其實就是對大量網絡資料流進行分析,從中分離出我們感興趣的東西并記錄下來和/或顯示出來。既然要對網絡資料流進行分析,那麼當然需要讓這些網絡資料流流經我們的機器,我們才有機會對其進行分析。接下來的問題當然就是:怎樣才能讓網絡資料流流經我們的電腦呢?哪些技術可以幫我們達到這個目的呢?記得我曾經在《我談網絡掃描之三》講過,SPAN 和 RSPAN 可以讓特定交換機特定端口的網絡資料流到達我們的入侵檢測系統,那麼這種技術能不能用來實作讓網絡資料流流經我們進行嗅探的電腦的目的呢?答案是肯定的。問題是,SPAN 和 RSPAN 需要在交換機上配置,需要我們首先搞定人家的交換機,不容易呀。而且,即使有幸搞定了人家的交換機,别忘了 SPAN 和 RSPAN 很容易導緻網絡流量異常,隻要人家配置了流量監控,比如配置了 Cacti,就很容易被發現了。是以,這種技術雖然可行,但是實作難度太大,風險太高,我們不用。那麼,可行而又友善的技術有沒有呢?答案同樣是肯定的,那就是“臭名昭著”的 ARP 欺騙。ARP 欺騙實作起來很容易,因為一般的網絡嗅探軟體都會根據我們機器的IP位址和網關設定,自動向外發送 ARP 欺騙包,進行 ARP 欺騙。而且,ARP 欺騙不容易被發現,隐蔽性較好。
二. 為什麼能夠進行 ARP 欺騙?
TCP/IP 協定族有比較多的“瑕疵”,作為 TCP/IP 協定族的成員之一,ARP 協定也不例外。ARP 欺騙正是利用了 ARP 協定的“瑕疵”,來達到目的。我們都知道,一台機器要想把資料包準确發送給自己期望的目标機器,必須保證發出去的資料包的目标 IP 位址正确,封裝這些資料包的資料幀的目标 MAC 位址正确。保證發出去的資料包的目标 IP 位址正确并不困難,因為這個位址通常由我們手工指定的(如果指定 DNS 域名的話,就可能被 DNS 欺騙,導緻使用錯誤的IP 位址),隻要我們指定正确的 IP 位址即可。但是,要保證封裝這些資料包的資料幀的目标 MAC 位址正确,就不是那麼容易的事情了。因為 MAC 位址不是我們手工指定,而是我們的機器自動通過 ARP 協定獲得的,并且,我們的機器并不能保證自己通過 ARP 協定獲得準确的 MAC 位址。是以,一旦獲得了錯誤的 MAC 位址(被 ARP 欺騙了,呵呵),那麼就會導緻發出去的資料幀的目标 MAC 位址不正确。最終,資料幀就會被發送到其它的機器,而不是我們期望的目标機器。當我們的機器需要使用目标機器的 MAC 位址來封裝資料幀時,它會發送 ARP 廣播,請求目标機器告訴自己其 MAC 位址。既然是廣播,那麼同一個 VLAN 裡的所有機器都能夠收到,目标主機可以發送 ARP 響應,告訴我們的機器其 MAC 位址,其它機器也可以發送惡意 ARP 響應,告訴我們的機器目标主機的 MAC 位址是它的 MAC 位址,并且,我們機器的 ARP 協定“很傻很天真”,沒有任何方法來辨識真僞,進而就有可能導緻我們的機器使用錯誤的 MAC 位址。更進一步說,即使我們的機器根本有沒有向外發送 ARP 請求,惡意機器也可以發送虛假的 ARP 響應或 ARP 請求(Gratuitous ARP)給我們的機器,并且,我們機器的 ARP 協定仍然“很傻很天真”,信以為真,把這些錯誤的資訊儲存起來,供以後使用。正是 ARP 協定的這種傻和天真,ARP 欺騙才得以橫行霸道。
三. 怎樣進行 ARP 欺騙?
ARP 欺騙的過程比較簡單,假如我們想嗅探 A 機跟 B 機之間的資料流,我們同時向 A 機和 B 機發送虛假的 ARP 響應或請求(Gratuitous ARP),讓 A 機認為 B 機的 MAC 位址是我們機器的 MAC 位址,進而使它用我們機器的 MAC 位址來填充發給 B 機的資料幀,于是,這些資料幀就理所當然地發給了我們的機器。同樣地,讓 B 機把它本來想發送給 A 機的資料幀發送給我們的機器。另外,我們将自己機器的網卡置于雜湊模式,并且開啟路由中轉(一般的網絡嗅探軟體都能夠路由和中轉資料包,是以不一定需要開啟 OS 的路由功能),以便接收并轉發這些資料包。這樣,我們就可以靜悄悄地隐藏在角落,嗅探 A 機跟 B 機之間的資料通信了。下面以圖形表示 ARP 欺騙:
本文轉自zkjian517 51CTO部落格,原文連結:http://blog.51cto.com/zoukejian/62628