1. 程式人生 > >ARP原理和ARP攻擊

ARP原理和ARP攻擊

ARP原理 ARP攻擊

ARP--在TCP/IP協議棧中,最不安全的協議莫過於ARP了,我們經常聽到的網絡掃描,內網滲透,流量欺騙等等,他們基本上都與ARP有關系,甚至可以說,他們的底層都是基於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攻擊