昨天講到了 L2 升級為 L3 所用的 DHCP協議
今天我們則要來講講 L3 降級為 L2 通訊的另一個協議
昨天說到 DHCP 是用來配發 IP 的層級升級用協議
而在一台終端設備擁有了 IP 後,基本上都是以 IP 作為高層級溝通的依據
在大部分作業系統實做的 syscall 中也是使用 IP 來作為參數
而單單只有 IP 是無法溝通的
我們還需要被傳輸設備的 MAC 位置
才能將 IP 封包傳輸到目的地
而這時候 ARP 就扮演了一個將 IP 轉換為硬體位置的角色
所以常常也被說是 OSI 2.5 層的協議
這裡我們從一個範例來講解,會比較好理解
今天有 PC A 與 PC B 兩台電腦
MAC Address 分別為 AA:AA:AA:AA:AA:AA 與 BB:BB:BB:BB:BB:BB
而 IP 分別為 10.10.10.1 與 10.10.10.2
當今天 PC A (10.10.10.1) 想要發送給 10.10.10.2
但因為封包被轉送到哪台設備上主要是依據 MAC 位置
所以只有 IP 位置是不行的
這時候 PC A 就會發出一個 ARP 請求 問說 10.10.10.2 的 IP 是誰的
這個請求會被廣播給大家,如下圖
這時候 PC A 就知道 10.10.10.2 對應到的 MAC
所以這時候 PC A 就能把 L2 的表頭填入對應的值
如下圖所示
OSI Layer | Src | Dst |
---|---|---|
L2 | AA:AA:AA:AA:AA:AA | BB:BB:BB:BB:BB:BB |
L3 | 10.10.10.1 | 10.10.10.2 |
這樣這個封包就能經由 Switch 被轉發到 PC B
上面也說到了終端設備上的應用基本上都是使用 IP 來作為發送與接收的依據
因為不可能每傳送一次 IP 封包都需要發送一次 ARP 封包
來解析 MAC Address,這樣會造成數倍的流量
所以終端設備都會自己維護一張表,來暫存這些獲得的 ARP Response
這張表基本上是一張 Key-Value 的表
所以整個流程大概如下圖
我們可以使用 arp -a
來觀測電腦上目前暫存的位置對應表
由於 ARP 請求是廣播發送的,所以當攻擊者接收到請求封包後
可以偽造一個惡意的回復,將 L3 的 IP 綁定到攻擊者的電腦上
這樣在受害者電腦中的 ARP Table 中,就會覆蓋掉舊的位置,讓後續的 IP 封包傳送到攻擊者電腦上
同理,如果攻擊者也對通訊的另一端發送惡意 ARP 回復,即能監聽雙向流量
或者是攻擊者主動傳送 ARP 回復給大家,就算沒有客戶端發送 ARP 請求
如下圖所示
像是這個就是跟區域網路中每一台設備說其他設備的 IP 都在攻擊者的設備上
這樣 IP 流量就會都被導向到攻擊者電腦上
在這個範例中有三台電腦,分別為 PC A、PC B、Attacker
IP 與 MAC 如下表所示
電腦 | MAC | IP |
---|---|---|
PC A | AA:AA:AA:AA:AA:AA | 10.10.10.1 |
PC B | BB:BB:BB:BB:BB:BB | 10.10.10.2 |
Attacker | CC:CC:CC:CC:CC:CC | 10.10.10.3 |
底下為攻擊者激進式的攻擊
這樣就在不知不覺中達成了雙向的封包攔截
基本上如上面 Wireshark 的截圖所示,攻擊者如果採用激進式的攻擊方式
會產生大量的 ARP 封包,我們可以透過監看交換器所收到的 ARP 封包來偵測,也可以追蹤到是哪個實體連接孔傳送過來的
首先,我們可以禁用 ARP 的動態暫存機制
可以使用 Static ARP 這種設定方式,手動將 MAC 與 IP 位置綁定,就可以將上面 ARP Spoofing 的攻擊無效化,但稍稍有些麻煩
有些交換器也有提供 Dynamic ARP Inspection (DAI) 的防護方式,會主動偵測這種攻擊,在攻擊成功前就先將其阻斷
現在也有許多端點防護的方法,主動監控電腦上的 ARP Table,如有發生異常的改變(例如說所有 IP 都指向同一個 MAC)
今天我們介紹了一種蠻常見的區域網路攻擊
雖然原理簡單,但暴力有效
我小學時候看的書都會介紹 NetCut 之類的工具
也就是透過 ARP Spoofing 來實作的一個工具
說明這種攻擊已經行之有年了(我現在大三)
但這種攻擊雖然已經很老了,但還是常常被網路管理者所忽略
或者有些網管新手根本不知道有這種安全問題存在
所以在這邊再介紹給大家認識
修的課 曾寫過 XD
那時候 用python 的套件 分數被打好低QQ
https://github.com/goish135/AN_hws/blob/master/hw3/arp.py