ARP原理和ARP攻擊
一、ARP協議
ARP(Address Resolution Protocol)地址解析協議,目的是實現IP地址到MAC地址的轉換。
在計算機間通信的時候,計算機要知道目的計算機是誰(就像我們人交流一樣,要知道對方是誰),這中間需要涉及到MAC地址,而MAC是真正的電腦的唯一標識符。
為什麽需要ARP協議呢?因為在OSI七層模型中,對數據從上到下進行封裝發送出去,然後對數據從下到上解包接收,但是上層(網絡層)關心的IP地址,下層關心的是MAC地址,這個時候就需要映射IP和MAC。
ARP之簡單請求應答
當兩臺計算機在同一個局域網通信,我們以ping命令為例,該命令使用的ICMP協議
PC1依據OSI模型①依次從上至下對數據進行封裝,包括對ICMP Date加IP包頭的封裝,但是到了封裝MAC地址的時候,②PC1首先查詢自己的ARP緩存表,發現沒有IP2和他的MAC地址的映射,這個時候MAC數據幀封裝失敗。我們使用ping命令的時候,是指定PC2的IP2的,計算機是知道目的主機的IP地址,能夠完成網絡層的數據封裝,因為設備通信還需要對方的MAC地址,但是PC1的緩存表裏沒有,所以在MAC封裝的時候填入不了目的MAC地址。
那麽PC1為了獲取PC2的MAC地址,③PC1要發送詢問信息,詢問PC2的MAC地址,詢問信息包括PC1的IP和MAC地址、PC2的IP地址,這裏我們想到一個問題,即使是詢問信息,也是需要進行MAC數據幀的封裝,那這個詢問信息的目的MAC地址填什麽呢,規定當目的MAC地址為ff-ff-ff-ff-ff-ff時,就代表這是一個詢問信息,也即使後面我要說的廣播。
PC2收到這個詢問信息後,將這裏面的IP1和MAC1(PC1的IP和MAC)添加到本地的ARP緩存表中,然後④PC2發送應答信息,對數據進行IP和MAC的封裝,發送給PC2,因為緩存表裏已經有PC1的IP和MAC的映射了呢。這個應答信息包含PC2的IP2和MAC2。PC1收到這個應答信息,理所應當的就獲取了PC2的MAC地址,並添加到自己的緩存表中。
經過這樣交互式的一問一答,PC1和PC2都獲得了對方的MAC地址,值得註意的是,目的主機先完成ARP緩存,然後才是源主機完成ARP緩存。之後PC1和PC2就可以真正交流了。
ARP之廣播請求單播回應
上圖面的圖解是不完全的ARP協議,因為在局域網裏邊不會只有兩臺主機,這裏就要考慮如何在局域網眾多主機裏獲得目的主機的MAC。
和上面的一樣,剛開始PC1並不知道PC2的MAC地址,同樣需要發送ARP請求,但是這個局域網裏主機很多,怎麽唯獨獲取PC2的MAC呢,①我們想到和一群陌生人交流一樣,可以挨著詢問一遍,這就是我們要說的廣播,首先PC1廣播發送詢問信息(信息和上一張圖介紹的一樣),在這個普通交換機上連接的設備都會受到這個PC1發送的詢問信息。
接下來②需要做的是,所有在這個交換機上的設備需要判斷此詢問信息,如果各自的IP和要詢問的IP不一致,則丟棄,如圖PC3、Route均丟棄該詢問信息,而對於PC2判斷該詢問信息發現滿足一致的要求,則接受,同樣的寫入PC1的IP和MAC到自己的ARP映射表中。
最後,③PC2單播發送應答信息給PC1,告訴PC1自己的IP和MAC地址。
二、ARP數據包信息
ARP數據的詳細信息列表如下
Hardware type | 硬件類型,標識鏈路層協議 |
Protocol type | 協議類型,標識網絡層協議 |
Hardware size | 硬件地址大小,標識MAC地址長度,這裏是6個字節(48bti) |
Protocol size | 協議地址大小,標識IP地址長度,這裏是4個字節(32bit) |
Opcode | 操作代碼,標識ARP數據包類型,1表示請求,2表示回應 |
Sender MAC address | 發送者MAC |
Sender IP address | 發送者IP |
Target MAC address | 目標MAC,此處全0表示在請求 |
Target IP address | 目標IP |
ARP請求包
ARP應答包
內容格式和上圖相似,不過會有目的地址對應的MAC地址,ARP數據包類型字段為2。
三、ARP攻擊
我們知道,當PC1對PC2正常通信的時候(先別管攻擊者PC3),PC2、PC1會先後建立對方的IP和MAC地址的映射(即建立ARP緩存表),同時對於交換機而言,它也具有記憶功能,會基於源MAC地址建立一個CAM緩存表(記錄MAC對應接口的信息),理解為當PC1發送消息至交換機的Port1時,交換機會把源MAC(也就是MAC1)記錄下來,添加一條MAC1和Port1的映射,之後交換機可以根據MAC幀的目的MAC進行端口轉發,這個時候PC3只是處於監聽狀態,會把PC1的廣播丟棄。
正常的PC3會把廣播包丟棄,同樣的PC3可以抓住這一環節的漏洞,把不屬於自己的廣播包接收,同時回應一個虛假的回應包,告訴PC1我就是PC2
(IP2-MAC3),這樣PC1會收到兩個回應包(一個正確的IP2-MAC2,一個虛假的IP2-MAC3),但是PC1並不知道到底哪個是真的,所以PC1會做出判斷,並且判斷後到達的為真,那麽怎麽讓虛假的回應包後到達呢,PC3可以連續不斷的發送這樣的回應包,總會把哪個正確的回應包覆蓋掉。
而後PC1會建立IP2-MAC3這樣一條ARP緩存條目,以後當PC1給PC2發送信息的時候,PC1依據OSI模型從上至下在網絡層給數據封裝目的IP為IP2的包頭,在鏈路層通過查詢ARP緩存表封裝目的MAC為MAC3的數據幀,送至交換機,根據查詢CAM表,發現MAC3對應的接口為Port3,就這樣把信息交付到了PC3,完成了一次ARP攻擊。
如果ARP攻擊嚴重話,會導致同一個局域網(也是同一個廣播域)的所有主機的ARP緩存表中都存放著錯誤的IP和MAC的映射,如上圖,每臺主機的ARP緩存表中,不論哪個IP,都會映射到攻擊者的MAC地址MAC1上,這樣該局域網內的所有主機的消息都發送到Hacker的主機上。
ARP原理和ARP攻擊