黃益群, 潘澤強
(江西中醫(yī)學(xué)院 計算機學(xué)院,南昌 330006)
隨著計算機網(wǎng)絡(luò)的普及,網(wǎng)絡(luò)安全日益受到人們的關(guān)注,但由于網(wǎng)絡(luò)本身的復(fù)雜性,其管理難度也越來越大,任何一個小的問題都可能影響到整個網(wǎng)絡(luò)的正常運行。如最近流行的ARP欺騙攻擊,它可以在很短的時間內(nèi)使整個網(wǎng)絡(luò)陷于癱瘓。因此,如何有效地防范ARP欺騙攻擊成為了人們研究的一項重要課題。本文主要從ARP原理、ARP欺騙過程和如何防御等三個方面進行簡單的介紹。
源主機在傳輸數(shù)據(jù)前,首先要對初始數(shù)據(jù)進行封裝,在該過程中會把目的主機的IP地址和MAC地址封裝進去。在通信的最初階段,我們能夠知道目的主機的IP地址,而MAC地址卻是未知的。這時如果目的主機和源主機在同一個網(wǎng)段內(nèi),源主機會以第二層廣播的方式發(fā)送ARP請求報文。ARP請求報文中含有源主機的IP地址和MAC地址,以及目的主機的IP地址。當(dāng)該報文通過廣播方式到達目的主機時,目的主機會響應(yīng)該請求,并返回ARP響應(yīng)報文,因而源主機可以獲取目的主機的MAC地址,同樣目的主機也能夠獲得源主機的MAC地址。如目的主機和源主機地址不在同一個網(wǎng)段內(nèi),源主機發(fā)出的IP數(shù)據(jù)包會送到交換機的默認網(wǎng)關(guān),而默認網(wǎng)關(guān)的MAC地址同樣可以通過ARP協(xié)議獲取[1]。經(jīng)過ARP協(xié)議解析IP地址之后,主機會在緩存中保存IP地址和MAC地址的映射條目,此后再進行數(shù)據(jù)交換時只要從緩存中讀取映射條目即可。ARP工作原理如圖1所示。
圖1 ARP工作原理
在Ethernet中,任何一臺主機當(dāng)收到一個ARP報文之后更新自己ARP緩沖區(qū)。但由于主機無法驗證報文的真實性,當(dāng)收到欺騙性的報文時,它也會更新本身的ARP緩沖區(qū),這樣就造成“IP—MAC”的映射錯誤,使主機之間無法通信[2]。以表1為例,假設(shè)有三臺主機A、B、C,具體信息如表1所示。
表1 三臺主機A、B、C的具體信息
B為攻擊者,A、C為被攻擊者。首先B分別向A、C發(fā)送ARP請求報文,當(dāng)A、C收到以后分別向B發(fā)送一個ARP響應(yīng)報文,B收到后更新A、C的“IP—MAC”映射,并不斷地向A、C發(fā)送ARP響應(yīng)報文,發(fā)送給A報文中的發(fā)送方的IP地址為10.30.5.4,MAC地址03-03-03-03-03-03,發(fā)送給C報文中發(fā)送方的IP地址為10.30.5.2,MAC地址03-03-03-03-03-03;當(dāng)A、C收到以后分別更新本機的ARP緩存這樣主機A、C就會誤認為B就是對方,造成了A、C之間不能通信。這種攻擊方法也稱為中間人攻擊。還有一些其他的攻擊方法,但這些攻擊都有一個共同特點就是發(fā)送一些欺騙性的ARP報文。
當(dāng)主機B想要獲取主機A對外通信的內(nèi)容時,會分別給主機A和網(wǎng)關(guān)D發(fā)送一個ARP應(yīng)答包,讓A和D都把第三方監(jiān)聽者誤認為是對方,這樣,主機A看似成功的實施了對外通信,而實際上中間夾著監(jiān)聽主機B。此時,主機B不僅可以完成監(jiān)聽,而且還可以隨意更改數(shù)據(jù)包中地某些信息,并成功完成數(shù)據(jù)包轉(zhuǎn)發(fā)。
簡單說,ARP欺騙的目的就是為了實現(xiàn)全交換環(huán)境下的數(shù)據(jù)監(jiān)聽。大部分的木馬或病毒使用ARP欺騙攻擊也是為了達到這個目的。
當(dāng)局域網(wǎng)中有ARP攻擊時,它一般不會單獨的攻擊某一臺機器,而是整個局域網(wǎng),涉及面積比較大,可以在很短的時間內(nèi)使整個網(wǎng)絡(luò)癱瘓。因此及時地發(fā)現(xiàn)ARP攻擊源是非常重要的。一般可以采用以下幾種方法:
1)使用“ARP -a”命令
如上文中提到的中間人攻擊,當(dāng)我們在主機C上輸入此命令時,顯示本機的ARP緩存:緩存中10.30.5.2所對應(yīng)的MAC地址與真正的MAC地址不符,說明攻擊源的MAC地址為22-22-22-22-22-22。另外,還有一種情況比較具有迷惑性,當(dāng)主機C除了向網(wǎng)關(guān)A沒有向其他主機發(fā)出連接,主機C的ARP緩存如下所示:
ARP緩存沒有任何異常,但主機C和網(wǎng)關(guān)A之間無法通信,這主要是由于主機B不斷的向本網(wǎng)段內(nèi)的主機發(fā)送ARP請求報文,其他主機向主機B發(fā)送一個響應(yīng),這樣主機B就可以用主機C的信息向網(wǎng)關(guān)A發(fā)送偽造的ARP報文,該報文的源MAC地址為主機C的地址,當(dāng)交換機收到該幀時,交換機把指向主機C端口改到和主機B相同。查看網(wǎng)關(guān)D的ARP緩存,會看到指向主機B和很多主機都指向了同一個端口。
2)監(jiān)聽數(shù)據(jù)報
當(dāng)有ARP攻擊的時候,攻擊源一般會向本網(wǎng)段內(nèi)的所有主機發(fā)送ARP請求報文。因此可以利用一些抓包工具,如用Sniffer等進行抓包,如發(fā)現(xiàn)有大量的ARP請求報文從某一臺機器發(fā)出,那么這臺機器極有可能就是攻擊源。
3)查看網(wǎng)關(guān)ARP緩存
ARP攻擊時最主要的攻擊對象就是網(wǎng)關(guān)。因此可以查看網(wǎng)關(guān)的ARP緩存,如果有很多個IP地址都指向同一個MAC地址,那么就說明存在A R P欺騙攻擊,這個MAC地址對應(yīng)的主機就是A R P攻擊源。
由于ARP攻擊主要利同ARP協(xié)議的漏洞,因此目前沒有徹底的方法來防御ARP攻擊。我們可以通過一些安全措施提高網(wǎng)絡(luò)的安全性。
3.2.1 在客戶端綁定網(wǎng)關(guān)和ARP服務(wù)器的真實MAC地址
在本文設(shè)計的方案中,通過在客戶端的主機上靜態(tài)綁定網(wǎng)關(guān)和ARP服務(wù)器的MAC地址,來防范第三方對源主機與網(wǎng)關(guān)和ARP服務(wù)器之間的通信進行監(jiān)視,這樣設(shè)置的結(jié)果是主機發(fā)送數(shù)據(jù)前不需要通過向所在的局域網(wǎng)廣播請求來得到網(wǎng)關(guān)的MAC地址,它會直接查詢靜態(tài)記錄以獲得的地址。攻擊者若在沒有收到ARP請求的情況下仍發(fā)送偽造的ARP應(yīng)答數(shù)據(jù)包企圖實施欺騙時,源主機將拒絕用偽造的數(shù)據(jù)更新ARP緩存表的靜態(tài)記錄[3]。即不再對ARP緩存表中對信息進行更新,這樣可以防止第三者對主機與網(wǎng)關(guān)之間的通信信息進行竊聽,也能保證定時發(fā)往ARP服務(wù)器的ARP應(yīng)答包沒有經(jīng)過第三者轉(zhuǎn)發(fā),所以通信是可靠的。可以參照下面的例子對局域網(wǎng)內(nèi)的主機進行靜態(tài)的MAC地址綁定。
例如:假設(shè)計算機所處網(wǎng)段的網(wǎng)關(guān)為10.30.5.1,本機地址為10.30.5.3,在“開始”-“程序”-“附件”菜單下調(diào)出“命令提示符”,輸入:arp-a,在計算機上運行arp -a后顯示如下信息:
其中,01-01-01-01-01-01就是網(wǎng)關(guān)10.30.5.1對應(yīng)的MAC地址,類型是動態(tài)(dynamic)的,因此是可被改變的。
手工綁定的命令為:
arp-s 10.30.5.1 00-01-02-03-04-05
綁定完后,可再用arp -a查看arp緩存::
這時,型變?yōu)殪o態(tài)(static),就不會再受攻擊影響了。但是需要說明的是,手工綁定在計算機關(guān)機重啟后就會失效,需要再次重新綁定。所以,要想永久綁定可以將上面的命令做成批處理文件,在計算機啟動時便已對網(wǎng)關(guān)和ARP服務(wù)器的MAC地址進行了綁定,編寫一個批處理文件aarp.bat,內(nèi)容如下:
保存為:aarp.bat。
運行批處理文件將這個批處理文件拖到“Windows→開始→程序→啟動”中,如果需要立即生效,請運行此文件。
通過以上的設(shè)定,能有效的阻止攻擊者對用戶和網(wǎng)關(guān)之間實施ARP欺騙,本方案在設(shè)計的時候,之所以沒有對局域網(wǎng)內(nèi)的其他主機的MAC地址沒有實行靜態(tài)綁定,是考慮到在局域網(wǎng)內(nèi)的用戶經(jīng)常會處于各種原因?qū)χ鳈C的IP地址進行修改如果每個主機都采用靜態(tài)記錄,那么當(dāng)對主機的IP地址進行正當(dāng)調(diào)整后,如果忘記重新設(shè)置該靜態(tài)記錄,局域網(wǎng)內(nèi)部就會出現(xiàn)混亂。因此不宜對局域網(wǎng)內(nèi)其他主機的MAC地址進行靜態(tài)綁定。
3.2.2 設(shè)置ARP服務(wù)器
ARP服務(wù)器的主要功能是接受局域網(wǎng)內(nèi)的所有主機定時發(fā)送的ARP應(yīng)答數(shù)據(jù)包,對各個主機的ARP請求進行應(yīng)答,然后對接收到的所有應(yīng)答包的信息進行分析判斷,看是否存在相同的IP地址對應(yīng)不同的MAC地址,如果存在,對發(fā)生矛盾的信息暫時不進行更新,然后服務(wù)器將判斷的結(jié)果再發(fā)送給網(wǎng)關(guān),網(wǎng)關(guān)通過這個MAC地址查出用來實施ARP欺騙攻擊的主機在交換機上所對應(yīng)的物理端口,從而進行控制。在服務(wù)器和網(wǎng)關(guān)之間實行聯(lián)動機制,使得ARP攻擊能及時被發(fā)現(xiàn)并被及時被清除[4]。系統(tǒng)要求網(wǎng)內(nèi)各個主機發(fā)往ARP服務(wù)器的數(shù)據(jù)要定期主動發(fā)送,即使在沒有收到ARP服務(wù)器發(fā)送的ARP請求時也要進行發(fā)送,其發(fā)送周期要盡量小,原則上不能超過服務(wù)器對ARP緩存表進行更新的周期(一般為2分鐘),這樣設(shè)置的理由是周期越小,服務(wù)器越能即使發(fā)現(xiàn)企圖實施攻擊的計算機,以便通知網(wǎng)關(guān)對其通信端口進行控制。
3.3.3 設(shè)置主機的ARP請求
當(dāng)源主機要和局域網(wǎng)內(nèi)的一臺主機進行通信時,源主機就發(fā)送一個ARP請求數(shù)據(jù)包給ARP服務(wù)器,服務(wù)器對接受到的信息進行行分析,分別發(fā)送給要通信的兩臺主機一個ARP應(yīng)答數(shù)據(jù)包,內(nèi)容就是對方的IP地址和對應(yīng)的MAC地址。由于兩臺主機對服務(wù)器的地址都進行了綁定,所以受到的信息是可靠的,兩臺主機收到這個信息后就可以進行通信了,ARP服務(wù)器設(shè)置于網(wǎng)關(guān)的前端,對客戶端來說是透明的。
上述的幾種防御措施也存在各自的局限性,一般是多種方案配合使用,可以最大限度的阻止ARP欺騙攻擊的出現(xiàn),但是還有以下問題需要繼續(xù)研究,一是如何設(shè)置主機定時向ARP服務(wù)器發(fā)送一個ARP應(yīng)答包來報告自己的IP地址和MAC地址的對應(yīng)關(guān)系,二是如何實現(xiàn)ARP服務(wù)器和網(wǎng)關(guān)之間的聯(lián)動機制,三是如何讓主機只識別來自ARP服務(wù)器的ARP應(yīng)答數(shù)據(jù)包。從根本上解決這一問題,最好的方法是重新設(shè)計一種安全的地址解析協(xié)議。在IPv6中人們已經(jīng)考慮到了這個問題,不再使用ARP和RARP協(xié)議,而采用了更安全的NDP,從而杜絕了來自底層的攻擊。
[1] 任俠,呂述望.ARP協(xié)議欺騙原理分析與抵御方法[J].計算機工程, 2003,29(9):127-128.
[2] 孟曉明.基于ARP的網(wǎng)絡(luò)欺騙的檢測與防范[J].信息技術(shù),2005,(5):41- 44.
[3] 李海鷹,程灝,呂志強等.針對ARP攻擊的網(wǎng)絡(luò)防御式設(shè)計與實現(xiàn)[J].計算機工程,2005,31(5):170- 171.
[4] 徐功文,陳曙.ARP協(xié)議攻擊原理及其防范措施[J].網(wǎng)絡(luò)與信息安全,2005,(1):4- 6.