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