ARP--在TCP/IP協(xié)議棧中,最不安全的協(xié)議莫過于ARP了,我們經(jīng)常聽到的網(wǎng)絡(luò)掃描,內(nèi)網(wǎng)滲透,流量欺騙等等,他們基本上都與ARP有關(guān)系,甚至可以說,他們的底層都是基于ARP實現(xiàn)的。但是ARP的是實現(xiàn)僅需一問一答的兩個包即可,實現(xiàn)上很簡單。 目錄
一、ARP協(xié)議 ARP(Address Resolution Protocol)地址解析協(xié)議,目的是實現(xiàn)IP地址到MAC地址的轉(zhuǎn)換。 在計算機間通信的時候,計算機要知道目的計算機是誰(就像我們?nèi)私涣饕粯樱缹Ψ绞钦l),這中間需要涉及到MAC地址,而MAC是真正的電腦的唯一標識符。 為什么需要ARP協(xié)議呢?因為在OSI七層模型中,對數(shù)據(jù)從上到下進行封裝發(fā)送出去,然后對數(shù)據(jù)從下到上解包接收,但是上層(網(wǎng)絡(luò)層)關(guān)心的IP地址,下層關(guān)心的是MAC地址,這個時候就需要映射IP和MAC。 ARP之簡單請求應(yīng)答 當(dāng)兩臺計算機在同一個局域網(wǎng)通信,我們以ping命令為例,該命令使用的ICMP協(xié)議 PC1依據(jù)OSI模型①依次從上至下對數(shù)據(jù)進行封裝,包括對ICMP Date加IP包頭的封裝,但是到了封裝MAC地址的時候,②PC1首先查詢自己的ARP緩存表,發(fā)現(xiàn)沒有IP2和他的MAC地址的映射,這個時候MAC數(shù)據(jù)幀封裝失敗。我們使用ping命令的時候,是指定PC2的IP2的,計算機是知道目的主機的IP地址,能夠完成網(wǎng)絡(luò)層的數(shù)據(jù)封裝,因為設(shè)備通信還需要對方的MAC地址,但是PC1的緩存表里沒有,所以在MAC封裝的時候填入不了目的MAC地址。 那么PC1為了獲取PC2的MAC地址,③PC1要發(fā)送詢問信息,詢問PC2的MAC地址,詢問信息包括PC1的IP和MAC地址、PC2的IP地址,這里我們想到一個問題,即使是詢問信息,也是需要進行MAC數(shù)據(jù)幀的封裝,那這個詢問信息的目的MAC地址填什么呢,規(guī)定當(dāng)目的MAC地址為ff-ff-ff-ff-ff-ff時,就代表這是一個詢問信息,也即使后面我要說的廣播。 PC2收到這個詢問信息后,將這里面的IP1和MAC1(PC1的IP和MAC)添加到本地的ARP緩存表中,然后④PC2發(fā)送應(yīng)答信息,對數(shù)據(jù)進行IP和MAC的封裝,發(fā)送給PC1,因為緩存表里已經(jīng)有PC1的IP和MAC的映射了呢。這個應(yīng)答信息包含PC2的IP2和MAC2。PC1收到這個應(yīng)答信息,理所應(yīng)當(dāng)?shù)木瞳@取了PC2的MAC地址,并添加到自己的緩存表中。 經(jīng)過這樣交互式的一問一答,PC1和PC2都獲得了對方的MAC地址,值得注意的是,目的主機先完成ARP緩存,然后才是源主機完成ARP緩存。之后PC1和PC2就可以真正交流了。 ARP之廣播請求單播回應(yīng) 上圖面的圖解是不完全的ARP協(xié)議,因為在局域網(wǎng)里邊不會只有兩臺主機,這里就要考慮如何在局域網(wǎng)眾多主機里獲得目的主機的MAC。 和上面的一樣,剛開始PC1并不知道PC2的MAC地址,同樣需要發(fā)送ARP請求,但是這個局域網(wǎng)里主機很多,怎么唯獨獲取PC2的MAC呢,①我們想到和一群陌生人交流一樣,可以挨著詢問一遍,這就是我們要說的廣播,首先PC1廣播發(fā)送詢問信息(信息和上一張圖介紹的一樣),在這個普通交換機上連接的設(shè)備都會受到這個PC1發(fā)送的詢問信息。 接下來②需要做的是,所有在這個交換機上的設(shè)備需要判斷此詢問信息,如果各自的IP和要詢問的IP不一致,則丟棄,如圖PC3、Route均丟棄該詢問信息,而對于PC2判斷該詢問信息發(fā)現(xiàn)滿足一致的要求,則接受,同樣的寫入PC1的IP和MAC到自己的ARP映射表中。 最后,③PC2單播發(fā)送應(yīng)答信息給PC1,告訴PC1自己的IP和MAC地址。 二、ARP數(shù)據(jù)包信息 ARP數(shù)據(jù)的詳細信息列表如下
ARP請求包 ARP應(yīng)答包 內(nèi)容格式和上圖相似,不過會有目的地址對應(yīng)的MAC地址,ARP數(shù)據(jù)包類型字段為2。 三、ARP攻擊 我們知道,當(dāng)PC1對PC2正常通信的時候(先別管攻擊者PC3),PC2、PC1會先后建立對方的IP和MAC地址的映射(即建立ARP緩存表),同時對于交換機而言,它也具有記憶功能,會基于源MAC地址建立一個CAM緩存表(記錄MAC對應(yīng)接口的信息),理解為當(dāng)PC1發(fā)送消息至交換機的Port1時,交換機會把源MAC(也就是MAC1)記錄下來,添加一條MAC1和Port1的映射,之后交換機可以根據(jù)MAC幀的目的MAC進行端口轉(zhuǎn)發(fā),這個時候PC3只是處于監(jiān)聽狀態(tài),會把PC1的廣播丟棄。 正常的PC3會把廣播包丟棄,同樣的PC3可以抓住這一環(huán)節(jié)的漏洞,把不屬于自己的廣播包接收,同時回應(yīng)一個虛假的回應(yīng)包,告訴PC1我就是PC2 (IP2-MAC3),這樣PC1會收到兩個回應(yīng)包(一個正確的IP2-MAC2,一個虛假的IP2-MAC3),但是PC1并不知道到底哪個是真的,所以PC1會做出判斷,并且判斷后到達的為真,那么怎么讓虛假的回應(yīng)包后到達呢,PC3可以連續(xù)不斷的發(fā)送這樣的回應(yīng)包,總會把哪個正確的回應(yīng)包覆蓋掉。 而后PC1會建立IP2-MAC3這樣一條ARP緩存條目,以后當(dāng)PC1給PC2發(fā)送信息的時候,PC1依據(jù)OSI模型從上至下在網(wǎng)絡(luò)層給數(shù)據(jù)封裝目的IP為IP2的包頭,在鏈路層通過查詢ARP緩存表封裝目的MAC為MAC3的數(shù)據(jù)幀,送至交換機,根據(jù)查詢CAM表,發(fā)現(xiàn)MAC3對應(yīng)的接口為Port3,就這樣把信息交付到了PC3,完成了一次ARP攻擊。 如果ARP攻擊嚴重話,會導(dǎo)致同一個局域網(wǎng)(也是同一個廣播域)的所有主機的ARP緩存表中都存放著錯誤的IP和MAC的映射,如上圖,每臺主機的ARP緩存表中,不論哪個IP,都會映射到攻擊者的MAC地址MAC1上,這樣該局域網(wǎng)內(nèi)的所有主機的消息都發(fā)送到Hacker的主機上。 |
|