ARP 攻擊是什麼:原理、危害與機房裡的典型表現
ARP 攻擊是利用 ARP 協議沒有認證這一點,在同一個二層網段裡傳送偽造的 ARP 報文,讓其他主機把閘道器或某台伺服器的 IP 記成攻擊者的 MAC。後果從整段斷網、IP 衝突到流量被劫持、IP 和頻寬被盜用;在機房裡,源頭通常是同一 VLAN 內一台被入侵的託管伺服器。
ARP 協議為什麼能被攻擊
ARP 攻擊是什麼,要從 ARP 本身說起。ARP(Address Resolution Protocol,位址解析協議)負責把 IPv4 位址翻譯成乙太網 MAC 位址。主機 103.45.12.10 要發包給閘道器 103.45.12.1 時,先向全網段廣播一個請求:“誰是 103.45.12.1?請告訴 103.45.12.10”;閘道器單播回覆:“103.45.12.1 在 00:aa:bb:cc:dd:ee”。主機把這條對應關係寫進 ARP 快取,之後發往閘道器的 IP 報文都封裝成乙太網幀發給這個 MAC。
這套機制在 1982 年的 RFC 826 裡定下來,設計前提是同一個區域網內的主機彼此可信,因此留下了三個被利用的缺口:
| 缺口 | 協議行為 | 攻擊者怎麼利用 |
|---|---|---|
| 應答不驗證 | 主機收到 ARP 應答時不檢查自己是否發過請求,也無法核實應答者身份 | 不等請求,直接向目標傳送偽造應答 |
| 後到的覆蓋先到的 | 快取裡已有的表項會被新收到的報文更新 | 持續高頻傳送,確保自己的 MAC 始終“壓”在正確表項之上 |
| 請求也能寫快取 | 許多協議棧收到 ARP 請求時,會重新整理或新建請求者的 IP-MAC 表項(具體規則因系統而異) | 用廣播請求同時毒化整個網段的快取,一條報文影響所有主機 |
所以 ARP 欺騙不需要利用任何漏洞,一台普通 Linux 伺服器用 arpspoof、ettercap 之類的工具,或者幾行發原始報文的指令碼就能做到。它需要的只是目標網段內一台能發包的機器和 root 許可權,而被入侵的伺服器恰好同時滿足這兩點。
兩種形式:冒充閘道器與冒充主機
ARP 攻擊原理相同,按偽造的目標分成兩種,機房裡兩種都常見。
冒充閘道器(閘道器欺騙)。攻擊機向網段內廣播“103.45.12.1 在攻擊機的 MAC 上”。所有客戶機的出向流量都發到攻擊機:攻擊機不轉發,整段斷網;攻擊機開啟 IP 轉發再交給真閘道器,流量照常通,但全部經過它,這就是中間人。
冒充主機(主機欺騙)。攻擊機向閘道器單播“103.45.12.20 在攻擊機的 MAC 上”,閘道器把發往這台客戶伺服器的回程流量交給攻擊機,客戶伺服器表現為“能發不能收”。如果攻擊機同時用這個 IP 對外發包,就是典型的 IP 盜用。
| 冒充閘道器 | 冒充主機 | |
|---|---|---|
| 被毒化的快取 | 網段內所有主機 | 閘道器(有時還包括同段其他主機) |
| 偽造的報文 | 廣播:閘道器 IP → 攻擊機 MAC | 單播給閘道器:受害者 IP → 攻擊機 MAC |
| 影響範圍 | 整個 VLAN | 單台或少數幾台伺服器 |
| 典型目的 | 斷網、嗅探、劫持 | 盜用 IP、製造衝突、繞過按 IP 做的存取控制 |
| 攻擊機的負擔 | 要吞下整段的出向流量,網口很容易打滿 | 很小 |
兩種同時做,即對受害者假裝閘道器、對閘道器假裝受害者,攻擊機就處在雙向流量中間,可以完整看到並改寫這台伺服器的所有明文通訊。
ARP 攻擊有什麼危害
| 危害 | 怎麼發生 | 使用者看到什麼 |
|---|---|---|
| 斷網、時通時斷 | 流量被引到攻擊機後被丟棄;或者攻擊機與真閘道器的應答交替到達,快取來回翻轉 | ping 閘道器大量丟包、延遲忽高忽低;攻擊停止後自行恢復 |
| IP 位址衝突 | 攻擊機宣告了別人正在用的 IP | Windows 彈出 IP 衝突提示;Linux 上同一 IP 對應的 MAC 反覆變化 |
| 流量劫持與嗅探 | 中間人轉發,HTTP、FTP、Telnet、未加密的資料庫連線內容全部可見 | 幾乎無感知;HTTPS 若被替換證書則瀏覽器告警 |
| 內容篡改 | 在轉發的 HTTP 回應裡插入指令碼或跳轉 | 網站被“掛馬”,但伺服器上找不到被改的檔案 |
| DNS 劫持 | 改寫經過的 DNS 應答 | 域名解析到錯誤位址 |
| IP 與頻寬盜用 | 攻擊機用別人的 IP 對外發包 | 被盜用方的 IP 產生陌生流量、收到濫用投訴或被封禁 |
| 裝置資源耗盡 | 高速傳送隨機 IP-MAC 的 ARP 報文 | 交換器 CPU 飆高、閘道器 ARP 表被塞滿,正常主機學不到表項 |
早年辦公網裡的“ARP 病毒”主要造成斷網和網頁掛馬;在 IDC,危害的重點落在後三行:客戶的業務流量被同機房的另一台機器看到,客戶的 IP 被別人拿去發垃圾流量,以及整個網段的可用性被一台機器拖垮。
一台被入侵的託管伺服器怎麼拖垮整個網段
把場景放到一個典型的託管 VLAN 裡:一個公網 /24,閘道器在三層交換器上,接入交換器下掛著幾十個客戶的伺服器,各自配靜態公網 IP,彼此之間沒有做連接埠隔離。
- 某客戶的伺服器用的是弱密碼,被掃到後植入了木馬。木馬的功能之一就是在所在網段做 ARP 欺騙,目的是嗅探其他主機的帳號密碼,或者給經過的網頁插廣告。
- 木馬每秒向網段廣播幾十條“閘道器在我這裡”的應答。幾秒內,網段裡所有主機的 ARP 快取都被改寫。
- 幾十台伺服器的出向流量全部湧向這台被入侵機器的千兆網口。它既要轉發又要嗅探,網口和 CPU 很快滿載,開始大量丟包。
- 客戶感受到的是:延遲從 2 ms 跳到幾百 ms,SSH 卡頓,網站打不開,但自己伺服器上的程序和配置都正常。
- 工單集中到來,而且全部來自同一個網段,這是最明顯的特徵。
- 木馬間歇性執行,或者真閘道器的免費 ARP 偶爾重新整理了部分主機的快取,於是故障表現為“時好時壞”,很難用單次 ping 復現。
這個鏈條裡,被入侵的客戶並沒有“故意攻擊”,但影響的是同一網段裡所有付費客戶。這也是為什麼機房要把 ARP 問題當作安全事件而不是普通故障來處理:根源在一台機器,損失卻是整段客戶的服務品質。
另一類場景更隱蔽:某客戶的伺服器悄悄把網路卡配上了相鄰客戶沒在用的公網 IP,或者用指令碼輪換源 IP 發包。這是主機欺騙的變體,常常是為了多拿幾個 IP 不付費,或者讓攻擊流量的來源看起來是別人。它不會造成大面積斷網,只會在被盜用方上線使用那個 IP 時表現為衝突,或者在收到濫用投訴時才被發現。
維運從哪些現象能察覺
ARP 攻擊沒有特定的“報錯”,但下面這些訊號組合出現時,基本可以判定:
| 現象 | 怎麼確認 |
|---|---|
| 同一網段多個客戶同時報障,其他網段正常 | 工單按 IP 段歸類 |
| 客戶機上記錄的閘道器 MAC 不是閘道器的 MAC | 對比閘道器裝置 VLAN 介面的真實 MAC |
| 交換器 MAC 表裡,閘道器 MAC 出現在某個接入口上 | 閘道器 MAC 只應出現在上聯口 |
| 交換器日誌出現 MAC 漂移告警 | 同一 MAC 在上聯口與某接入口之間來回 |
| 某個接入口的 ARP 報文速率異常 | 正常伺服器每秒幾條,攻擊機每秒幾十到幾百條 |
| 閘道器 ARP 表裡某客戶 IP 的 MAC 變了 | 與台帳登記的 MAC 比對 |
| 客戶反饋 HTTPS 證書錯誤、網頁被插廣告 | 中間人篡改的典型表現 |
在受影響的客戶機或任意一台同段主機上,先看它眼裡的閘道器是誰:
# Linux:閘道器 IP 對應的 MAC 與狀態
ip neigh show 103.45.12.1
# Windows
arp -a 103.45.12.1
然後抓 ARP 報文,看誰在宣告閘道器位址。-e 讓 tcpdump 列印乙太網幀頭,arp[6:2] == 2 只保留 ARP 應答:
tcpdump -nei eth0 'arp and arp[6:2] == 2 and arp src host 103.45.12.1'
正常情況下,輸出裡“103.45.12.1 is-at”後面只會出現一個 MAC,且頻率很低;如果短時間內出現兩個不同的 MAC,或者同一個 MAC 以每秒幾十條的速度不停宣告,就是欺騙。注意看幀頭裡的源 MAC 與 ARP 報文體裡的傳送方 MAC 是否一致:攻擊工具可以偽造報文體,但交換器學習 MAC 看的是幀頭,定位連接埠時以幀頭為準。
拿到可疑 MAC 之後,到交換器上查它接在哪個連接埠:
# 華為 / H3C
display mac-address 0011-2233-4455
display arp | include 103.45.12.1
# 思科 IOS
show mac address-table address 0011.2233.4455
show ip arp 103.45.12.1
思科交換器在 MAC 漂移時會列印類似 %SW_MATM-4-MACFLAP_NOTIF: Host 0011.2233.4455 in vlan 100 is flapping between port Gi1/0/5 and port Gi1/0/48 的日誌,直接給出了兩個連接埠;華為、H3C 的交換器也有對應的 MAC 漂移檢測與告警,具體日誌格式以裝置文件為準。查到接入口後,對照台帳就知道是哪台伺服器、哪個客戶。
ARP 攻擊、IP 衝突和閘道器故障怎麼區分
三者的表象都可能是“整段或部分客戶上不了網”,但處理路徑完全不同:
| 判斷點 | ARP 攻擊 | 普通 IP 衝突 | 閘道器故障 |
|---|---|---|---|
| 受影響範圍 | 整個 VLAN(冒充閘道器)或單台(冒充主機) | 只有衝突的那個 IP | 整個 VLAN |
| 閘道器 IP 對應的 MAC | 變成某台接入口裝置的 MAC | 不變 | 不變,或 ARP 請求根本沒有應答 |
| ARP 報文頻率 | 某個 MAC 高頻宣告 | 兩個 MAC 偶發交替應答 | 沒有閘道器的應答 |
| 衝突的 IP | 往往是閘道器,或多個客戶 IP 同時異常 | 通常只有一個 | 無 |
| 停掉可疑連接埠後 | 幾十秒內恢復 | 衝突消失 | 無變化 |
普通 IP 衝突多半是配置失誤,找到配錯的一方改回來即可;閘道器故障看三層裝置;只有 ARP 攻擊需要按安全事件處理:隔離連接埠、通知客戶清理系統,再補上交換器側的防護。
在管理系統裡怎麼落地
察覺 ARP 攻擊的難點不在命令,而在“這個 MAC 是誰的”:幾百台伺服器、幾千個 IP 的台帳如果靠表格維護,查一次要翻好幾處。Toplink DCIM 的 IP 位址管理按段登記每個 IP 的歸屬伺服器、客戶和所在 VLAN,伺服器列表直接顯示它接在哪台交換器的哪個連接埠,拿到可疑 MAC 或 IP 後對照一下就能定位到機櫃和客戶。定位之後,交換器管理頁面可以直接關閉該連接埠止損;長期防護則靠同一頁面的 ARP 繫結與源位址校驗,把 IP、MAC 與連接埠鎖定,偽造來源的報文在接入口就被丟棄。
常見問題
ARP 攻擊會影響其他 VLAN 嗎?
不會直接影響。ARP 報文是二層廣播,不能跨 VLAN 傳播,欺騙只在攻擊機所在的 VLAN 內生效。但如果閘道器被冒充,其他 VLAN 發往這個 VLAN 的流量到閘道器後仍會被送錯,表現為其他網段存取這個網段也不正常。
IPv6 有 ARP 攻擊嗎?
IPv6 不用 ARP,用 NDP(鄰居發現協議)解析位址,但 NDP 同樣預設沒有認證,存在性質相同的鄰居欺騙和偽造 RA 攻擊。對應的防護是交換器上的 RA Guard 和 ND Snooping。
ARP 攻擊一定是有人故意發起的嗎?
不一定。被植入木馬的伺服器會自動發起欺騙,機主往往不知情;某些虛擬化、負載均衡軟體的代答 ARP 配置錯誤,或者兩台機器誤配了同一個 IP,也會出現和攻擊類似的表項翻轉。排查時看偽造報文的頻率和來源是否集中。
換了閘道器裝置後客戶機上的閘道器 MAC 變了,是攻擊嗎?
不一定。更換閘道器裝置會讓閘道器 MAC 變化;主備切換時如果沒有使用虛擬 MAC,MAC 也會變。新閘道器通常會發免費 ARP 重新整理大家的快取。區別在於新 MAC 應當出現在交換器的上聯口而不是接入口,並且能與變更記錄對上。