你已經把閘道裝置設好、能擷取並修改流量,一切看似運作正常,卻卡在一個問題上:你沒辦法輕易改動「想擷取的那台裝置」的網路組態,也難以更動它所連接網路的組態。這時你需要某種方法,重新設定或誘騙發送端把流量改送過你的閘道。可行的切入點,是在本地網路上詐騙 DHCP 或位址解析協定(Address Resolution Protocol, ARP)的封包。
DHCP 詐騙#
DHCP 的用途是在 IP 網路上自動把網路組態資訊派發給各節點。因此,只要能詐騙 DHCP 流量,就能遠端改變某節點的網路組態。DHCP 推送的組態可包含 IP 位址、預設閘道、路由表、預設 DNS 伺服器,甚至額外的自訂參數。若你要測試的裝置是以 DHCP 設定網路介面,這份彈性讓你能輕易塞給它一組利於擷取的自訂組態。
DHCP 走 UDP,協商網路組態時會送出四種封包:
- Discover:送給 IP 網路上所有節點,用以發現 DHCP 伺服器。
- Offer:DHCP 伺服器回給發出探索封包的節點,提供一組網路組態。
- Request:原節點送出,確認接受該組態。
- Acknowledgment:伺服器送出,確認組態完成。
DHCP 有趣(也危險)之處在於它用的是未經驗證、無連線的協定來做設定。因此即使網路上已存在合法的 DHCP 伺服器,你仍可能搶先詐騙整個組態流程,把節點的網路組態——包含預設閘道——改成由你掌控的位址。這就是 DHCP 詐騙。
本書用 Ettercap 這套多數作業系統上皆可取得的免費工具來施行 DHCP 詐騙(Windows 未受官方支援)。
Ettercap 會自動把所選介面上設定的 IP 位址當成 DHCP 的預設閘道送出。務必確認該擷取介面的網路組態正確,否則會造成衝突。IP Pool 的網段與 Netmask 也要與該介面相符。
以 Ettercap 施行 DHCP 詐騙的步驟
在 Linux 上以 root 啟動圖形模式:
ettercap -G
圖表 4-4:Ettercap 的主介面
設定嗅探模式:選 Sniff ▸ Unified Sniffing。
在跳出的對話框選擇你要嗅探、也就是要施行 DHCP 詐騙的網路介面。

圖表 4-5:選擇嗅探介面
選 Mitm ▸ Dhcp spoofing 啟用 DHCP 詐騙,會出現組態對話框。

圖表 4-6:設定 DHCP 詐騙
IP Pool 欄設定要派發的位址範圍,例如
10.0.0.10-50表示 10.0.0.10 到 10.0.0.50(含)。Netmask 設成與介面相符以避免衝突,並指定一個你選定的 DNS 伺服器 IP。選 Start ▸ Start sniffing 開始嗅探。若詐騙成功,Ettercap 記錄視窗會出現關鍵的一行:Ettercap 對 DHCP request 回應的
fake ACK。
圖表 4-7:成功的 DHCP 詐騙
ARP 毒化#
ARP 對跑在乙太網路上的 IP 網路至關重要,因為它負責替某個 IP 位址找出對應的乙太網路位址。運作方式如下:當同一乙太網段上的某節點要與另一節點通訊,它必須把目標 IP 對應到乙太網路 MAC 位址。它會產生一個 ARP 請求封包,內含自己的 6-byte MAC 位址、目前的 IP 位址,以及目標節點的 IP 位址,並以廣播位址 ff:ff:ff:ff:ff:ff 為目的 MAC 送出。乙太網路裝置通常只處理目的位址與自己相符的封包,但收到目的 MAC 為廣播位址的封包時也會一併處理。

圖表 4-8:ARP 請求封包範例
若廣播的收件者中有一台被指派了那個目標 IP,它就回一個 ARP 回應——內容與請求幾乎相同,只是來源與目標欄位對調。由於回應中的來源 IP 正是原先請求的目標 IP,原請求者便能取出對方的 MAC 位址並記下來,日後通訊就不必再重送 ARP 請求。

圖表 4-9:ARP 回應範例
ARP 與 DHCP 一樣沒有任何驗證,而且封包本就刻意送給網段上所有節點。因此你可以送出偽造的 ARP 封包,宣稱某個 IP 位址屬於你,藉此毒化目標節點的 ARP 快取,讓它把流量轉送到你的惡意閘道。用 Ettercap 就能偽造這些封包,把用戶端與路由器雙方快取的 ARP 項目都改指向你的代理。
要同時對用戶端與路由器施行 ARP 毒化,才能取得雙向的通訊。當然,如果你只想要單一方向,只需毒化其中一端即可。

圖表 4-10:ARP 毒化
以 Ettercap 施行 ARP 毒化的步驟
啟動 Ettercap,如同 DHCP 詐騙那樣進入 Unified Sniffing 模式。
選擇要毒化的網路介面(連往目標節點所在網路的那個)。
建立要毒化的主機清單。最簡單的方式是讓 Ettercap 掃描:選 Hosts ▸ Scan For Hosts,完成後選 Hosts ▸ Host List 檢視。清單會列出找到的主機與其 IP/MAC,通常你已知各裝置的 IP,便可分辨哪台是本機、哪台是遠端。

圖表 4-11:掃描到的主機清單
選定目標:把其中一台 Add to Target 1、另一台 Add to Target 2(用以區分用戶端與閘道)。這會啟用單向 ARP 毒化,只重導向 Target 1 送往 Target 2 的資料。
選 Mitm ▸ ARP poisoning,接受預設值後按 OK。因為 ARP 快取需要時間刷新,毒化未必立即生效。成功後,被毒化那端項目的 MAC 會變成代理的 MAC;此後由用戶端送往路由器的流量都會改送到代理,代理擷取或修改後再轉送到正確目的地。

圖表 4-12:成功的 ARP 毒化
ARP 毒化相較 DHCP 詐騙的一項優勢:即使目的地就在本地網路上,你也能把本地節點重導向到你的閘道;而且如果你不需要,ARP 毒化不必去動節點與外部閘道之間的連線。
結語#
本章介紹了幾種在用戶端與伺服器之間擷取、修改流量的進階方法。起點是把作業系統設定成 IP 閘道——一旦能讓流量流經你自己的閘道,後續就有多種手法可用。當然,要讓裝置乖乖把流量送到你的擷取裝置並不總是容易,因此 DHCP 詐騙與 ARP 毒化這類技術就很重要,確保流量送到你這裡而非直接上網際網路。而如你所見,這些都不需要特製工具:所需的一切要嘛已內建於作業系統(尤以 Linux 為甚),要嘛可輕易下載取得。