1. ARP 概述
地址解析協議,即 ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。 它是IPv4中網絡層必不可少的協議,不過在IPv6中已不再適用,並被鄰居發現協議(NDP)所替代。
主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機,並接收返回消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中並保留一定時間,下次請求時直接查詢ARP緩存以節約資源。地址解析協議是建立在網絡中各個主機互相信任的基礎上的,網絡上的主機可以自主發送ARP應答消息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就可以向某一主機發送偽ARP應答報文,使其發送的信息無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。ARP命令可用於查詢本機ARP緩存中IP地址和MAC地址的對應關系、添加或刪除靜態對應關系等。相關協議有RARP、代理ARP。
網絡層使用的是 IP 地址,但在實際網絡的鏈路上傳輸數據幀時,最終還必須使用該網絡的硬件地址。但 IP 地址和下面的網絡的硬件地址由於格式不同而不存在簡單的映射關系。此外,一個網絡上可能會經常會有新主機加入進來,或撤走一些主機。更換網絡適配器也會使主機的硬件地址改變。地址解析協議 ARP 解決的方法是:在主機ARP高速緩存中應存放一個從IP地址到硬件地址的映射表,並且這個映射表還經常動態更新(新增或超時刪除)。
注意:ARP是解決同一局域網中主機或者路由器的IP地址和硬件地址的映射問題,在每一台主機中都有一個ARP高速緩存(ARP cache),里面存儲本主機所知道本局域網中其他主機的IP地址與硬件地址的映射表
2. ARP 協議工作原理
當主機 A 向本局域網上的某台主機 B 發送 IP 數據報時,就先在其 ARP 高速緩存中查看有無主機 B 的 IP 地址。如有,就在 ARP 高速緩存中查出其對應的硬件地址,再把這個硬件地址寫入 MAC 幀,然后通過局域網把該 MAC 幀發往此硬件地址。
也有可能查不到主機 B 的 IP 地址。這可能主機 B 才入網,或者主機 A 剛剛加電,其高速緩存還是空的。這種情況下,主機 A 自動運行 ARP,然后按照以下步驟找出主機 B 的硬件地址。
- ARP進程在本局域網上廣播一個ARP請求分組。ARP請求報文中的發送端IP地址和發送端MAC地址為主機A的IP地址和MAC地址,目標IP地址和目標MAC地址為主機B的IP地址和全0的MAC地址。
- 本局域網所有主機運行的ARP進程收到此ARP請求分組。
- 主機B的IP與請求分組里面的IP一致,將ARP請求報文中的發送端(即主機A)的IP地址和MAC地址存入自己的ARP表中。之后向A發送ARP響應分組(單播);其他主機則不理睬
- 主機 A 收到從主機 B 發來的 ARP 響應分組時,就在其 ARP 高速緩存中寫入主機 B 的 IP 地址到硬件地址的映射。本機緩存是有生存期的,生存期結束后,將再次重復上面的過程。主機B的MAC地址一旦確定,主機A就能向主機B發送IP通信了。
如果所要找的主機和源主機不在同一個局域網,則源主機發送 ARP 請求分組,找到本局域網上的一個路由器 R1 的硬件地址。剩下的工作由 R1 完成。
3. ARP 緩存
ARP高速緩存(即ARP表)是 ARP 地址解析協議能夠高效運行的關鍵 (如果有多次ARP響應時,以最后一次響應為准)
每台主機或路由器在其內存中具有一個 ARP 表(ARP table),這張表包含 IP 地址到 MAC 地址的映射關系。該 ARP 表包含一個壽命值(TTL),它指示了從表中刪除每個映射的時間。從一個表項放置到某 ARP 表中開始,一個表項通常的過期時間是 20 分鍾。
4. ARP 報文格式
Wireshark 抓取 ARP 請求報文:
字段1:以太網目的地址(Destination)。是ARP請求的目的以太網地址,全1時代表廣播地址。
字段2:以太網源地址(Source)。發送ARP請求的以太網地址。
字段3:幀類型(Type)。以太網幀類型表示的是后面的數據類型,ARP請求和ARP應答這個值為0x0806。(常見類型:0800:IP數據報;0806:ARP請求/應答數據報;8035:RAPP請求/應答;)
字段4:硬件地址(Hardware type)。表示硬件地址的類型,硬件地址不只以太網一種,是以太網類型時此值為1。
字段5:協議類型(Protocol type)。指定協議地址類型,如0x0800表示協議地址類型為IPv4地址。該值與以太幀首部的類型字段相同。
字段6:硬件地址長度(Hardware size)。表示硬件地址的大小(單位:字節),如以太網地址為6。
字段7:協議地址長度(Protocol size)。表示協議地址的大小(單位:字節),如IPv4地址大小為4。
字段8:操作類型(Opcode)。值為1,表示進行ARP請求;值為2,表示進行ARP應答;值為3,表示進行RARP請求;值為4,表示進行RARP應答。
字段9:發送端以太網地址(Sender MAC address)。這里是以太網地址,和字段2相同。
字段10:發送端 IP 地址(Sender IP address)。
字段11:目的端硬件地址(Target MAC address)。
字段12:目的端 IP 地址(Target IP address)。
5. 抓包分析
下圖紅框中為 Wireshark 抓取的一對 ARP 請求和 ARP 應答
5.1. ARP 請求報文
5.2. ARP 應答報文
6. 免費 ARP
免費 ARP 是指主機發送 ARP 查找自己的 IP 地址。通常,發生在系統引導期間進行接口配置時。與標准 ARP 的區別就是免費 ARP 分組的目的 IP 地址字段封裝的是自己的 IP 地址,即向所在網絡請求自己的 MAC 地址。
免費 ARP 的作用:
- 一個主機可以通過它來確定另一個主機是否設置了相同的 IP 地址。
主機並不希望對此請求有一個回答。但是,如果收到一個回答,那么就會在終端日志上產生一個錯誤消息
“以太網地址: a: b:c:d:e:f 發送來重復的 IP 地址”。這樣就可以警告系統管理員,某個系統有不正確的設置。 - 更新其他主機高速緩存中舊的硬件地址信息。
如果發送免費 ARP 的主機正好改變了硬件地址(很可能是主機關機了,並換了一塊接
口卡,然后重新啟動),那么這個分組就可以使其他主機高速緩存中舊的硬件地址進行相應的更新。一個比較著名的 ARP 協議事實[Plummer 1982]是,如果主機收到某個 IP 地址的 ARP 請求,
而且它已經在接收者的高速緩存中,那么就要用 ARP 請求中的發送端硬件地址(如以太網地
址)對高速緩存中相應的內容進行更新。主機接收到任何 ARP 請求都要完成這個操作(ARP 請求是在網上廣播的,因此每次發送 ARP 請求時網絡上的所有主機都要這樣做)。
文獻[Bhide、Elnozahy和Morgan 1991]中有一個應用例子,通過發送含有備份硬件地址和
故障服務器的 IP 地址的免費 ARP 請求,使得備份文件服務器可以順利地接替故障服務器進行
工作。這使得所有目的地為故障服務器的報文都被送到備份服務器那里,客戶程序不用關心
原來的服務器是否出了故障。但《TCP/IP 詳解》作者反對這個做法,因為這取決於所有不同類型的客戶端都要有正
確的ARP協議實現。他們顯然碰到過客戶端的ARP協議實現與規范不一致的情況。 - 網關利用免費 ARP 防止 ARP 攻擊。
有些網關設備在一定的時間間隔內向網絡主動發送免費 ARP 報文,讓網絡內的其他主機更新 ARP 表項中的網關 MAC 地址信息,以達到防止或緩解 ARP 攻擊的效果。 - 利用免費 ARP 進行 ARP 攻擊。
ARP 協議並不只在發送了 ARP 請求才接收 ARP 應答,計算機只要接收到 ARP 應答數據包,就會使用應答中的 IP 和 MAC 地址對本地的 ARP 緩存進行更新。
主機可以構造虛假的免費 ARP 應答,將 ARP 的源 MAC 地址設為錯誤的 MAC 地址,並把這個虛假的免費 ARP 應答發送到網絡中,那么所有接收到這個免費 ARP 應答的主機都會更新本地 ARP 表項中相應 IP 地址對應的 MAC 地址。更新成功后,這些主機的數據報文就會被轉發到錯誤的 MAC 地址,從而實現了 ARP 欺騙的攻擊。
7. ARP 代理
如果 ARP 請求是從一個網絡的主機發往另一個網絡上的主機,那么連接這兩個網絡的路由器就可以回答該請求,這個過程稱作委托 ARP 或 ARP 代理(Proxy ARP)。 這樣可以欺騙發起 ARP 請求的發送端,使它誤以為路由器就是目的主機,而事實上目的主機是在路由器的“另一邊”。路由器的功能相當於目的主機的代理,把分組從其他主機轉發給它。
ARP 代理也稱作混合 ARP(promiscuous ARP)或ARP 出租(ARP hack)。這些名字來自於 ARP 代理的其他用途:通過兩個物理網絡之間的路由器可以互相隱藏物理網絡。在這種情況下,兩個物理網絡可以使用相同的網絡號,只要把中間的路由器設置成一個 ARP 代理,以響應一個網絡到另一個網絡主機的 ARP 請求。這種技術在過去用來隱藏一組在不同物理電纜上運行舊版 TCP/IP 的主機。分開這些舊主機有兩個共同的理由,其一是它們不能處理子網划分,其二是它們使用舊的廣播地址(所有比特值為 0 的主機號,而不是目前使用的所有比特值為 1 的主機號)。
ARP 代理的優點:
- 最主要的一個優點就是能 夠在不影響其他router的路由表的情況下在網絡上添加一個新的router,這樣使得子網的變化對主機是透明的
- ARP 代理應該使用在主機沒有配置默認網關或沒有任何路由策略的網絡上
ARP 代理的缺點:
- 增加了某一網段上ARP流量
- 主機需要更大的ARP table來處理IP地址到MAC地址的映射
- 安全問題,比如ARP欺騙(spoofing)
- 不會為不使用ARP來解析地址的網絡工作
- 不能夠概括和推廣網絡拓撲
8. ARP 攻擊
ARP 協議的基本功能就是通過目標設備的 IP 地址,查詢目標設備的 MAC 地址,以保證通信的進行。 基於 ARP 協議的這一工作特性,黑客向對方計算機不斷發送有欺詐性質的 ARP 數據包,數據包內包含有與當前設備重復的 Mac 地址,使對方在回應報文時,由於簡單的地址重復錯誤而導致不能進行正常的網絡通信。
一般情況下,受到ARP攻擊的計算機會出現兩種現象:
- 不斷彈出“本機的XXX段硬件地址與網絡中的XXX段地址沖突”的對話框。
- 計算機不能正常上網,出現網絡中斷的症狀。
因為這種攻擊是利用ARP請求報文進行“欺騙”的,所以防火牆會誤以為是正常的請求數據包,不予攔截。因此普通的防火牆很難抵擋這種攻擊。
[參考文獻]
- 百度百科 ARP
- 《計算機網絡》 謝希仁.
- 《計算機網絡自頂向下方法》
- 《TCP/IP 詳解 卷1:協議》
- ARP 詳解 https://blog.csdn.net/lm409/article/details/80299823
- ARP 地址解析協議原理 https://www.cnblogs.com/csguo/p/7542944.html
- 代理ARP(proxy ARP)的原理及其工作方式 https://www.cnblogs.com/yxmx/articles/1684944.html