摘 要:中間人攻擊是網(wǎng)絡(luò)攻擊的重要手段之一,而利用ARP欺騙是比較容易實施此類攻擊的。文章對基于ARP欺騙的中間人攻擊進(jìn)行了分析,根據(jù)ARP本身的缺陷,即完全相信所有消息,對消息不加以任何認(rèn)證的特點,提出了一種利用非對稱加密來抵御中間人攻擊的方法,并重點描述了消息認(rèn)證的過程和密鑰的生成及管理。
關(guān)鍵詞:ARP協(xié)議;ARP欺騙;中間人攻擊;非對稱加密
0 引言
中間人攻擊m在網(wǎng)絡(luò)安全領(lǐng)域是一個比較典型的主動攻擊方式。在網(wǎng)絡(luò)交易逐漸增多的時代,中間人攻擊越來越受到更多的關(guān)注。在中間人攻擊中,攻擊者相當(dāng)于會話雙方之間—個透明的代理,能改變正常的通訊流,從而得到一切想知道的信息。
1 基于ARP欺騙技術(shù)的中間人攻擊
1.1 ARP工作原理
ARP(Address Resolution Protocol,即地址解析協(xié)議)是常用的TCP/IP底層協(xié)議,用來實現(xiàn)IP地址與本地網(wǎng)絡(luò)認(rèn)知的物理地址(以太網(wǎng)MAC地址)之間的映射。以太網(wǎng)中的ARP報文格式如表1所示:
表1 ARP報文格式
在—個TCP/IP網(wǎng)絡(luò)中,從一臺主機(jī)A發(fā)送數(shù)據(jù)給另一臺主機(jī)B時,必須把信息分割、封裝成包,并附上目的主機(jī)B的IP地址與MAC地址。然而,當(dāng)這兩臺主機(jī)第一次通信時,源主機(jī)A不一定知道目的主機(jī)B的MAC地址,根據(jù)ARP協(xié)議,A就要發(fā)送一個ARP請求,以尋找IP地址到實際MAC地址的映射。而B在收到這個包含其IP地址的請求后,就會返回A一個ARP響應(yīng),告知A其MAC地址。最后,協(xié)議棧將IP包封裝到以太網(wǎng)幀中進(jìn)行傳送。
為了避免不必要的ARP報文查詢,每臺主機(jī)的操作系統(tǒng)都維護(hù)著一個ARP高速緩存ARP Cache,記錄著同一鏈路上其它主機(jī)的IP地址到MAC地址的映射關(guān)系。ARP高速緩存通常是動態(tài)的,由系統(tǒng)在一定的時間間隔后進(jìn)行刷新,并可以手工添加靜態(tài)條目。為節(jié)省ARP緩沖區(qū)的內(nèi)存,被解析過的ARP條目的壽命都是有限的,如果一段時間內(nèi)該條目沒有被引用過,則條目被自動刪除。一般,在工作站PC的Windows環(huán)境中,ARP條目的壽命是2分鐘;在大部分Cisco交換機(jī)中,該值是5分鐘。
1.2 ARP欺騙原理
ARP協(xié)議雖然是一個高效的數(shù)據(jù)鏈路層協(xié)議,但同時也是一個“無狀態(tài)”協(xié)議,存在著以下一些缺陷:ARP協(xié)議沒有連接的概念,任意主機(jī)即使在沒有ARP請求的時候也可以做出應(yīng)答,這就導(dǎo)致了任何主機(jī)都可以向被攻擊者發(fā)送假冒的ARP應(yīng)答包;ARP協(xié)議沒有認(rèn)證機(jī)制,對數(shù)據(jù)的發(fā)送及接收方都不做任何認(rèn)證,只要接收到的協(xié)議包是有效的,主機(jī)就無條件地根據(jù)協(xié)議包的內(nèi)容刷新本機(jī)APE緩存。因此攻擊者可以隨時發(fā)送虛假ARP包更新被攻擊主機(jī)上的AR.P緩存,進(jìn)行地址欺騙或拒絕服務(wù)攻擊。
ARP欺騙的核心就是向被攻擊者發(fā)送偽造的IP—MAC映射。假設(shè)主機(jī)c為實施ARP欺騙的攻擊者,其目的是截獲主機(jī)B和主機(jī)A之間的通信數(shù)據(jù),且主機(jī)C在實施ARP欺騙前已知道A和B的IP地址。這時c先發(fā)送ARP包獲得主機(jī)B的MAC地址,然后向B發(fā)送ARP應(yīng)答包,其中源IP地址為A的IP地址,但是源MAC地址卻是主機(jī)c的MAC地址。主機(jī)B收到該ARP應(yīng)答后,將根據(jù)新的IP地址與MAC映射對更新ARP緩存。這以后當(dāng)B給A發(fā)送數(shù)據(jù)包時,目標(biāo)MAC地址將使用C的MAC地址,因此交換機(jī)根據(jù)C的MAC地址就將數(shù)據(jù)包轉(zhuǎn)發(fā)到攻擊者c所在的端口。同理,攻擊者C發(fā)送ARP應(yīng)答使主機(jī)A確信主機(jī)B的MAC地址為c的MAC地址。在間歇的發(fā)送虛假ARP應(yīng)答的同時,攻擊者c打開本地主機(jī)的路由功能,將被劫持的數(shù)據(jù)包轉(zhuǎn)發(fā)到正確的目的主機(jī),這時攻擊者對主機(jī)A和B來說是完全透明的,通信不會出現(xiàn)異常,但實際上數(shù)據(jù)包卻被C非法截獲,攻擊者C成為了“中間人”。
1.3現(xiàn)有的解決方法及分析
目前,針對ARP欺騙的抵御可以采用靜態(tài)ARP表,即在目標(biāo)主機(jī)的ARP緩存中設(shè)置靜態(tài)地址映射記錄。這些記錄不會被動態(tài)更新,只能由管理員手工更改,但其缺點是若改變了網(wǎng)內(nèi)主機(jī)的IP,就需要重新設(shè)置ARP緩存,因此需要管理員付出大量的工作來維持記錄的及時更新,所以應(yīng)用不廣。另外,對于Windows操作系統(tǒng),即使設(shè)置了ARP靜態(tài)緩存,在收到ARP應(yīng)答時,系統(tǒng)也會更新緩存。
可以對網(wǎng)絡(luò)中的ARP報文進(jìn)行被動檢測或主動發(fā)送ARP查詢報文,當(dāng)發(fā)現(xiàn)一個IP地址對應(yīng)兩個MAC地址時,就存在欺騙攻擊的可能性。但是,這種檢測方式檢測出的異常情況很多時候是非惡意的操作失誤,如用戶錯配了IP地址。
2 采用非對稱加密抵御基于ARP欺騙的中間人攻擊
產(chǎn)生ARP欺騙的主要原因是ARP是建立在一個可信的網(wǎng)絡(luò)基礎(chǔ)之上的,接收方對ARP應(yīng)答的內(nèi)容總是無條件地信任。因此我們可以采用非對稱加密來驗證ARP應(yīng)答的真實性和完整性,以抵御ARP欺騙。
2.1 方法概述
利用非對稱加密來驗證ARP應(yīng)答消息的真實性和完整性,就必須要求每臺主機(jī)有自己的一個公鑰/私鑰對。同時,因為在一個網(wǎng)絡(luò)中,每臺機(jī)器的IP地址是惟一的,因此可用IP地址來惟一標(biāo)識網(wǎng)絡(luò)中的每臺主機(jī)。另外,在每個子網(wǎng)中,有一臺可信任的主機(jī)來存儲該網(wǎng)絡(luò)中所有主機(jī)的IP地址、MAC地址和公鑰/私鑰對。在解析地址的過程中,每臺主機(jī)所發(fā)送的reply應(yīng)答包都由主機(jī)的私鑰加密,接收方收到應(yīng)答包后,再用發(fā)送方的公鑰解密,以保證信息不被攻擊者惡意利用。
為了避免重放攻擊,可信任主機(jī)上還會發(fā)布時間值,要求網(wǎng)絡(luò)內(nèi)的所有主機(jī)保持同步。若沒有時間戳,攻擊者在截獲一個Reply,得到被攻擊者的IP和MAC后,會等待到被冒充主機(jī)離線以后再向被攻擊者重放所存儲的Reply包。在主機(jī)不能完全同步的情況下,管理員可以根據(jù)本地網(wǎng)絡(luò)的情況設(shè)置一個時間差,以避免重放攻擊。
2.2密鑰的生成與管理
上述方法中,主機(jī)密鑰是和IP地址綁定的,而且,主機(jī)密鑰的分發(fā)和管理均由可信任主機(jī)來實施。姑且稱這臺可信任主機(jī)為密鑰分發(fā)主機(jī)KA(Key Administrator)。我們所要做的第一步就是選擇一臺主機(jī)作為KA,并通過安全的渠道將KA的公鑰和MAC地址發(fā)布給子網(wǎng)中的每一臺主機(jī)。為保證信息發(fā)布的安全性,這些操作可能需要手工執(zhí)行。當(dāng)一臺主機(jī)H要加入到一個網(wǎng)絡(luò)中時,管理員首先手工給這臺主機(jī)分發(fā)KA的公鑰以及MAC地址。這些操作只在主機(jī)第一次加入的時候需要。
當(dāng)主機(jī)H擁有了KA的公鑰以及MAC地址后,H利用非對稱加密算法,如DSA等,生成自身的公鑰,并將其公鑰以及l(fā)P地址經(jīng)KA的公鑰簽名后發(fā)送給KA。然后,由管理員來確認(rèn)信息的可靠性,一旦確認(rèn),便將H的公鑰與IP地址存放到KA的庫中。這樣,KA便擁有了H的公鑰,因此,以后H與KA的通信可以用H自身的私鑰來加密。
如果主機(jī)H要更新自己的密鑰,它可以用舊的私鑰加密包含新的密鑰信息的消息,并將消息發(fā)送給KA。KA確認(rèn)后,自動更新本地數(shù)據(jù)庫中的密鑰信息。
2.3應(yīng)答消息的認(rèn)證過程
消息的認(rèn)證過程如圖1所示:
當(dāng)兩臺主機(jī)進(jìn)行通信時,所發(fā)送的Reply應(yīng)答包都是用自身的私鑰加密的。當(dāng)一臺主機(jī)H1收到主機(jī)H2發(fā)送的一個Reply應(yīng)答時,因為H1已知發(fā)送方H2的IP地址,就會查看本地是否保存有與此IP地址相對應(yīng)的公鑰。這些IP/Public Key對都是先前由主機(jī)向KA請求得到的。若在本地找到了與之對應(yīng)的公鑰,則用公鑰解密Reply;若未找到,主機(jī)Hl則向KA發(fā)送請求,請求主機(jī)H2的公鑰。同樣,如果本地保存的公鑰錯誤或過期而不能解密Reply時,也向KA發(fā)送請求。KA收到請求以后,將包含有H2的公鑰的消息用自身的公鑰加密發(fā)送給H1,一起發(fā)送的還有KA本地的時間值。H1收到KA發(fā)送的加密數(shù)據(jù)包后,會用KA的公鑰解密,得到H2的公鑰,用H2的公鑰解密Reply包,并將H2的公鑰存儲在本地。若H1接收的公鑰仍然無法解密Reply包,則在規(guī)定的時間間隔內(nèi),H1不斷地向KA發(fā)送請求,直至超時,或者解密成功。若請求最終超時,該Reply包將被丟棄。
圖1消息認(rèn)證的過程
2.4方法的缺陷
所述方法存在的主要缺陷就是整個網(wǎng)絡(luò)的安全都依賴于可信任主機(jī)的安全,一旦可信任主機(jī)被攻擊,攻擊者獲得了整個網(wǎng)絡(luò)中所有主機(jī)的IP和公鑰,就可以隨意地實施攻擊。因此如何保障可信任主機(jī)的安全是這個方法的關(guān)鍵,還有待考慮。
另外,在消息傳輸?shù)倪^程中,要進(jìn)行加密解密操作,必然會導(dǎo)致網(wǎng)絡(luò)的傳輸有一定的延時,因此合理選擇加解密算法也是該方法的關(guān)鍵。
3 結(jié)束語
在IP網(wǎng)絡(luò)中,ARP實現(xiàn)了IP地址到MAC地址的轉(zhuǎn)換,是不可缺少的一個網(wǎng)絡(luò)協(xié)議。但是ARP本身的缺陷,如缺少消息的認(rèn)證,導(dǎo)致一個網(wǎng)絡(luò)內(nèi)的任意一臺主機(jī)都可以發(fā)送偽造的消息而去冒充其它的主機(jī),從而引發(fā)了一系列的安全問題,如中間人攻擊,拒絕服務(wù)攻擊DoS等。本文提出了一種基于非對稱加密的方法,可以有效地抵御基于ARP欺騙的中間人攻擊。在這種方法下,就算主機(jī)間的通話被偷聽或者劫持,但攻擊者無法對通話進(jìn)行解密,也就無法實施中間人攻擊。
當(dāng)然利用ARP欺騙也可以很好地服務(wù)于網(wǎng)絡(luò)的管理,如利用網(wǎng)絡(luò)上未用的IP來誘騙攻擊者等。
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文。