ARP (Address Resolution Protocol) 是區域網路中IP 位址映射到 MAC 位址的核心協議。理解其運作機制、快取特性、固有弱點,是防禦 ARP 欺騙/中間人攻擊的前提。本文從協議規範、通訊流程、快取行為、Linux 核心防護機制四個維度深度解析。
協議基礎
- ARP: Address Resolution Protocol,RFC 826。將 32-bit IPv4 位址動態映射到 48-bit MAC 位址 (以太網/Token Ring)
- RARP: Reverse ARP,無盤工作站/X 終端透過 MAC 反查 IP,需管理員手工配置,已被 BOOTP/DHCP 取代
- 核心矛盾: IP 協議基於邏輯位址路由,資料鏈路層基於物理位址傳遞。驅動程式不檢查 IP 封包內的目的 IP,只認 MAC。ARP 橋接這兩個世界。
ARP 通訊流程:請求-應答機制
- ARP Request (廣播): 主機 A (192.168.0.12) 欲訪問 B (192.168.0.11)。發送乙太網廣播幀 (FF:FF:FF:FF:FF:FF),攜帶目的 IP:「誰擁有此 IP?請回覆你的 MAC」
- ARP Reply (單播): 目標主機 B 識別出詢問自己的 IP,單播回覆 ARP Reply,攜帶 IP + MAC 映射關係
- 快取更新: 主機 A 收到 Reply,更新本地 ARP 快取表 (IP↔MAC 映射,含 TTL)。後續 IP 封包直接封裝目的 MAC 發送
驗證:CMD 執行 arp -a 查看本機 ARP 快取內容。
ARP 協議固有弱點:不可靠、無連線、無驗證
- 無認證機制: 任何主機可發送偽造 ARP Reply/Request
- 免費更新特性: 多數 TCP/IP 實現即使未發送 Request,收到 Reply 也會更新快取 (Gratuitous ARP)。這是 ARP 欺騙/投毒的根本原因
- 無狀態: 無法區分合法更新與惡意投毒
Linux 核心 2.4+ 的 ARP 防欺騙機制
Linux 2.4.x 核心引入防護邏輯:
- 拒絕未請求的 ARP Reply (Unsolicited ARP Reply): 直接發送 ARP Reply 給 Linux 2.4+ 主機,不會更新其快取
- 但接受 ARP Request 並更新快取: 收到 ARP Request 時,Linux 會學習發送者的 IP-MAC 映射並更新快取
- 攻擊繞過技巧: 攻擊者改發ARP Request (Sender IP=閘道 IP, Sender MAC=攻擊者 MAC, Target IP=受害者 IP),受害者 Linux 會更新快取將閘道 IP 映射到攻擊者 MAC
這揭示了:單純依賴核心層防護不足,需多層次防禦 (DAI、靜態綁定、主機端防火牆、流量分析)。
ARP 攻擊與防禦總結表
| 攻擊類型 | 手法 | 防禦關鍵 |
| ARP 投毒/欺騙 | 發送偽造 ARP Reply/Request 竄改受害者快取 | DAI、靜態 ARP、主機端 ARP 防火牆 |
| 中間人攻擊 (MITM) | 雙向投毒(受害者↔閘道),流量經攻擊機轉發 | 加密通訊(HTTPS/SSH/VPN)、憑證驗證、DAI |
| DoS (斷網) | 投毒導致流量黑洞、或 Flood 癱瘓 | Port Security、流量清洗、快速故障定位 |
| 會話劫持 | 竊取 Session Cookie/認證憑證 | 全站 HTTPS、HttpOnly/Secure Cookie、HSTS |
核心結論:ARP 協議設計於信任的局域網時代,缺乏安全基因。現代網路必須假設「鏈路層不可信」,採用加密傳輸 (L2/L3/L7) + 主動防禦 (DAI/靜態綁定/主機防火牆) + 持續監控的纵深防禦體系,而非依賴單一協議機制。