馬鉞 中國人民解放軍陸軍工程大學(xué) 楊旭 大連理工大學(xué)
隨著計算機(jī)互聯(lián)網(wǎng)應(yīng)用的飛速發(fā)展,人們對網(wǎng)絡(luò)越來越依賴,而網(wǎng)絡(luò)信息安全也隨之成為當(dāng)今社會關(guān)注的熱點(diǎn)問題。深刻了解網(wǎng)絡(luò)攻擊原理,并針對攻擊手段來做好網(wǎng)絡(luò)安全防護(hù),就顯得非常重要。
常見的網(wǎng)絡(luò)攻擊手段包括網(wǎng)絡(luò)掃描、口令攻擊、緩沖區(qū)溢出攻擊、網(wǎng)絡(luò)監(jiān)聽、網(wǎng)絡(luò)協(xié)議攻擊、拒絕服務(wù)攻擊、木馬攻擊等。其中,利用網(wǎng)絡(luò)協(xié)議的缺陷或漏洞進(jìn)行攻擊是很常見的一種手段。ARP是局域網(wǎng)中必不可少的基礎(chǔ)協(xié)議,但因自身存在的明顯缺陷,也成為了黑客實(shí)施網(wǎng)絡(luò)攻擊的重點(diǎn)目標(biāo)。
ARP是地址解析協(xié)議(Address Resolution Protocol)的英文縮寫,它是一個鏈路層協(xié)議,用于在局域網(wǎng)中根據(jù)IP地址獲取物理地址。
在局域網(wǎng)中,當(dāng)主機(jī)或其它網(wǎng)絡(luò)設(shè)備有數(shù)據(jù)要發(fā)送給另一個主機(jī)或設(shè)備時,它不僅需要知道對方的IP地址,還必須知道對方的以太網(wǎng)MAC地址。因?yàn)槎拥囊蕴W(wǎng)交換設(shè)備并不能識別32位的IP地址,它們是以48位以太網(wǎng)MAC地址來識別對方的。必須將網(wǎng)絡(luò)層的IP數(shù)據(jù)報文填上源和目的的MAC地址,封裝成以太網(wǎng)數(shù)據(jù)幀才能在鏈路層傳輸,因此主機(jī)要知道目標(biāo)IP地址與MAC地址的映射關(guān)系。
ARP協(xié)議就是用于根據(jù)IP獲取到MAC地址,來完成IP到MAC地址映射的協(xié)議。主機(jī)可以通過發(fā)送和接收ARP報文來詢問和獲取目的MAC地址,并將這種映射關(guān)系保存在本地ARP緩存中,以便下回使用。
ARP協(xié)議報文分為ARP請求和ARP應(yīng)答報文,報文格式如圖1所示。
圖1 ARP報文格式
(1)硬件類型:表示硬件地址的類型。它的值為1表示以太網(wǎng)地址;
(2)協(xié)議類型:表示要映射的協(xié)議地址類型。它的值為0x0800即表示IP地址;
(3)硬件地址長度和協(xié)議地址長度分別指出硬件地址和協(xié)議地址的長度,以字節(jié)為單位。對于以太網(wǎng)上IP地址的ARP請求或應(yīng)答來說,它們的值分別為6和4;
(4)OP(操作類型):1表示ARP請求,2表示ARP應(yīng)答;
(5)發(fā)送端MAC地址:發(fā)送方設(shè)備的硬件地址;
(6)發(fā)送端IP地址:發(fā)送方設(shè)備的IP地址;
(7)目標(biāo)MAC地址:接收方設(shè)備的硬件地址;
(8)目標(biāo)IP地址:接收方設(shè)備的IP地址。
假設(shè)局域網(wǎng)中的主機(jī)A要向主機(jī)B發(fā)送信息,根據(jù) A與B是否在同一網(wǎng)段,可分為兩種情況。
如果A(192.168.1.1)與B(192.168.1.2)在同一網(wǎng)段,ARP地址解析過程如下:
(1)主機(jī)A首先查看自己的ARP緩存,確定其中是否包含有主機(jī)B對應(yīng)的ARP緩存項(xiàng)。如果找到了對應(yīng)的MAC地址,則主機(jī)A直接利用ARP緩存中的MAC地址,對IP數(shù)據(jù)包進(jìn)行幀封裝,并將數(shù)據(jù)包發(fā)送給主機(jī)B。
(2)如果主機(jī)A在ARP緩存中找不到對應(yīng)的MAC地址,則將緩存該數(shù)據(jù)報文,然后以廣播方式發(fā)送一個ARP請求報文。ARP請求報文中的發(fā)送端IP地址和發(fā)送端MAC地址為主機(jī)A的IP地址和MAC地址,目標(biāo)IP地址和目標(biāo)MAC地址為主機(jī)B的IP地址和全0的MAC地址。由于ARP請求報文以廣播方式發(fā)送,該網(wǎng)段上的所有主機(jī)都可以接收到該請求,但是并不是所有的主機(jī)都會回復(fù)這個ARP請求包,只有當(dāng)接收者的IP地址與ARP請求包中的Target IP address中標(biāo)識的目的IP地址一致時才會進(jìn)行回復(fù)。其他主機(jī)收到該請求報文后,發(fā)現(xiàn)自己的IP地址和ARP請求報文中的目標(biāo)IP地址不相同,則丟棄該報文,不予響應(yīng)。
(3)主機(jī)B發(fā)現(xiàn)自己的IP地址和ARP請求報文中的目標(biāo)IP地址相同,則將ARP請求報文中的發(fā)送端(即主機(jī)A)的IP地址和MAC地址存入自己的ARP緩存中。之后以單播方式發(fā)送ARP響應(yīng)報文給主機(jī)A,其中包含了自己的MAC地址。
(4)主機(jī)A收到ARP響應(yīng)報文后,將主機(jī)B的MAC地址加入到自己的ARP緩存中以用于后續(xù)報文的轉(zhuǎn)發(fā),同時將IP數(shù)據(jù)包進(jìn)行封裝后發(fā)送出去。
圖2 同網(wǎng)段主機(jī)ARP地址解析過程
如果主機(jī)A和主機(jī)B不在同一網(wǎng)段時,主機(jī)A就會先向網(wǎng)關(guān)發(fā)出ARP請求,ARP請求報文中的目標(biāo)IP地址為網(wǎng)關(guān)的IP地址。當(dāng)主機(jī)A從收到的響應(yīng)報文中獲得網(wǎng)關(guān)的MAC地址后,將報文封裝并發(fā)給網(wǎng)關(guān)。如果網(wǎng)關(guān)沒有主機(jī)B的MAC地址,網(wǎng)關(guān)會廣播ARP請求,目標(biāo)IP地址為主機(jī)B的IP地址,當(dāng)網(wǎng)關(guān)從收到的響應(yīng)報文中獲得主機(jī)B的MAC地址后,就可以將報文發(fā)給主機(jī)B;如果網(wǎng)關(guān)已經(jīng)有主機(jī)B的MAC地址,網(wǎng)關(guān)直接把報文發(fā)給主機(jī)B。
可以看出,在局域網(wǎng)通信中,ARP協(xié)議扮演著不可缺少的角色。
為了避免每次通信都進(jìn)行ARP廣播,主機(jī)使用一個ARP高速緩存,存放最新的IP地址到MAC硬件地址之間的映射記錄。主機(jī)獲取到目的MAC地址后,將會在自己的ARP緩存中增加一條目的主機(jī)IP和MAC地址的映射表項(xiàng),以用于后續(xù)到同一目的地報文的轉(zhuǎn)發(fā)。
ARP緩存中的表項(xiàng)分為動態(tài)ARP表項(xiàng)和靜態(tài)ARP表項(xiàng)。動態(tài)ARP表項(xiàng)由ARP協(xié)議通過ARP報文自動生成和維護(hù),定期老化,當(dāng)?shù)竭_(dá)系統(tǒng)預(yù)設(shè)的老化時間時,相應(yīng)的動態(tài)ARP表項(xiàng)會被刪除。動態(tài)表項(xiàng)也可以被新收到的ARP報文更新,遵循“后到優(yōu)先”的更新原則。當(dāng)主機(jī)收到來自某IP的ARP報文時,就會更新現(xiàn)有ARP表項(xiàng)中已經(jīng)存在該IP對應(yīng)的ARP表項(xiàng)。
靜態(tài)ARP表項(xiàng)通過手工配置和維護(hù),不會老化和更新。
ARP協(xié)議有一個明顯的安全缺陷,即默認(rèn)通信雙方都是絕對安全可信的,只要主機(jī)接收到一個ARP報文,即使該報文不是該主機(jī)所請求的對方主機(jī)發(fā)出的應(yīng)答報文,該主機(jī)也會將ARP報文中的發(fā)送者的MAC地址和IP地址加入或更新到ARP緩存中。更甚至,許多操作系統(tǒng)在自己沒有發(fā)出任何ARP請求時,仍然接受來自其他設(shè)備的ARP響應(yīng)報文,并更新ARP緩存。這種不做任何驗(yàn)證和判斷的緩存更新機(jī)制,使得ARP攻擊成為局域網(wǎng)中一種常見又危害巨大的攻擊手段。
攻擊者可以在ARP報文中填入不正確或虛假的MAC地址,并在局域網(wǎng)中主動大量發(fā)送偽造的ARP報文,促使網(wǎng)內(nèi)其他主機(jī)或網(wǎng)關(guān)更新ARP緩存,記錄錯誤的IP和MAC映射關(guān)系,從而不能將數(shù)據(jù)發(fā)往正確的目標(biāo)。這稱為ARP緩存投毒。
利用ARP緩存投毒,攻擊者可以發(fā)起很多類型的攻擊,包括ARP泛洪、ARP欺騙和中間人攻擊等。這些攻擊可以干擾局域網(wǎng)內(nèi)的正常通信,導(dǎo)致用戶流量受限,直至斷網(wǎng),也可以竊取通信數(shù)據(jù),非法獲取用戶帳號和密碼,造成經(jīng)濟(jì)上的重大損失。
ARP泛洪:網(wǎng)絡(luò)設(shè)備在處理ARP報文時需要占用系統(tǒng)資源,同時因?yàn)橄到y(tǒng)內(nèi)存限制和查找ARP緩存效率的要求,一般網(wǎng)絡(luò)設(shè)備會限制ARP緩存的大小。攻擊者就利用這一點(diǎn),通過偽造大量源IP地址變化的ARP報文,使設(shè)備ARP緩存不斷刷新,直至溢出,正常主機(jī)的ARP報文不能生成有效的ARP表項(xiàng),導(dǎo)致正常通信中斷。
ARP欺騙:攻擊者偽造一個ARP響應(yīng)報文,在源IP地址位置填入真實(shí)網(wǎng)關(guān)的IP,偽造一個錯誤或是不存在的MAC地址填入源MAC地址,將受害者的IP地址和MAC地址填入目的地址,并在局域網(wǎng)中大量發(fā)送該報文。當(dāng)受害主機(jī)接收到這些偽造的ARP報文時,就會更新自己的ARP緩存中網(wǎng)關(guān)IP所映射的MAC地址,從而將本應(yīng)該發(fā)給網(wǎng)關(guān)的數(shù)據(jù)發(fā)向了一個錯誤或不存在的MAC地址,導(dǎo)致主機(jī)無法訪問其他網(wǎng)段的主機(jī)或網(wǎng)絡(luò)服務(wù)。(見圖3)
圖3 仿冒網(wǎng)關(guān)ARP欺騙
中間人攻擊:如果攻擊者在ARP響應(yīng)報文的源MAC中填入自己的MAC地址,就可以將自己偽裝成其他IP的主機(jī)或網(wǎng)關(guān),從而截取到其他主機(jī)發(fā)來的數(shù)據(jù)包。如果既對受害者主機(jī)偽裝成網(wǎng)關(guān),同時又對網(wǎng)關(guān)偽裝成受害者,那么攻擊者就可以變成受害主機(jī)和網(wǎng)關(guān)之間通信的“中間人”,可以竊聽獲取、甚至修改偽造正常通信數(shù)據(jù)。
演示環(huán)境:
主機(jī)角色 IP 網(wǎng)關(guān) 操作系統(tǒng)攻擊者 192.168.75.131 192.168.75.1 Kali Linux A受害者 192.168.75.135 192.168.75.1 Windows XP B
攻擊步驟:
在主機(jī)A上尋找目標(biāo)主機(jī)B,可以使用fping命令探嗅本地局域網(wǎng)內(nèi)部機(jī)器IP,而后選擇對該主機(jī)實(shí)施ARP欺騙。
在主機(jī)A上對主機(jī)B實(shí)施網(wǎng)關(guān)ARP欺騙。使用命令
arpspoof -i eth0 -t 192.168.75.135 192.168.75.1
arpspoof是一個可用于ARP欺騙的開源工具。該命令作用是對主機(jī)B發(fā)送ARP報文,其中源IP為網(wǎng)關(guān)192.168.75.1,源MAC地址為網(wǎng)絡(luò)接口eth0的MAC地址。
主機(jī)B收到大量來自A的ARP報文,B的ARP緩存表中網(wǎng)關(guān)192.168.75.1對應(yīng)的MAC地址被刷新成了A的MAC地址,B發(fā)往網(wǎng)關(guān)的數(shù)據(jù)包將被錯誤地發(fā)往A。
由于主機(jī)A默認(rèn)未開啟IP數(shù)據(jù)包轉(zhuǎn)發(fā)功能,B發(fā)往網(wǎng)關(guān)的數(shù)據(jù)包被錯誤的發(fā)往A,達(dá)到不了真正的網(wǎng)關(guān),此時可以看到主機(jī)B無法正常連接網(wǎng)絡(luò)。
圖4 ARP欺騙成功,目標(biāo)機(jī)器無法連接網(wǎng)絡(luò)
(1)在主機(jī)A上對網(wǎng)關(guān)實(shí)施主機(jī)ARP欺騙。使用命令arpspoof -i eth0 -t 192.168.75.1 192.168.75.135
該命令將對網(wǎng)關(guān)發(fā)送ARP報文,其中源IP為主機(jī)B的192.168.75.135,源MAC地址為網(wǎng)絡(luò)接口eth0的MAC地址。網(wǎng)關(guān)發(fā)往B的數(shù)據(jù)將被發(fā)往A。
(2)在主機(jī)A上開啟端口轉(zhuǎn)發(fā),允許主機(jī)A像路由器那樣轉(zhuǎn)發(fā)數(shù)據(jù)包。
echo 1 > /proc/sys/net/ipv4/ip_forward
(3)由于A開啟了IP數(shù)據(jù)包轉(zhuǎn)發(fā),主機(jī)B和網(wǎng)關(guān)之間傳輸?shù)臄?shù)據(jù)包可經(jīng)由A的轉(zhuǎn)發(fā)到達(dá)對方。此時A成為B與網(wǎng)關(guān)之間通信的中間人。
(4)在A上另外打開一個終端,鍵入命令
driftnet -i eth0
driftnet是一款圖片捕獲工具,可以在網(wǎng)絡(luò)數(shù)據(jù)包中抓取圖片。由于此時B和網(wǎng)關(guān)之間的數(shù)據(jù)包都經(jīng)由A轉(zhuǎn)發(fā),A即可截取B網(wǎng)絡(luò)應(yīng)用中的圖片,A通過ARP欺騙成功獲取目標(biāo)B的信息。(見圖5和圖6)
圖5 被攻擊機(jī)器瀏覽網(wǎng)頁
圖6 欺騙成功(左側(cè)終端進(jìn)行欺騙,右側(cè)終端讀取圖片信息)
ARP攻擊是局域網(wǎng)中很容易實(shí)施的攻擊。在了解攻擊原理之后,可以在終端主機(jī)和網(wǎng)絡(luò)交換設(shè)備上部署一些針對性的防范措施。
在終端主機(jī)上,防護(hù)重點(diǎn)是保護(hù)本地ARP緩存,可配置的防護(hù)手段包括:
配置靜態(tài)ARP緩存表項(xiàng)。將網(wǎng)關(guān)和常用的通信主機(jī)的IP和MAC地址綁定為靜態(tài)表項(xiàng),不允許ARP解析更新。
安裝ARP防火墻。其工作原理一般有兩種:第一種是定期廣播ARP報文,宣告正確的本地IP地址和MAC地址,以保持其他設(shè)備中正確的ARP緩存表項(xiàng)。第二種是防止惡意攻擊篡改本機(jī)的ARP緩存表項(xiàng),尤其是網(wǎng)關(guān)的MAC地址。
網(wǎng)絡(luò)交換和路由設(shè)備上的防范主要從兩個方面考慮:建立正確的ARP映射關(guān)系、檢測并過濾偽造的ARP報文,保證經(jīng)過其轉(zhuǎn)發(fā)的ARP報文正確合法;抑制短時間內(nèi)大量ARP報文的沖擊。在交換機(jī)上可配置的一些安全策略包括:
ARP報文有效性檢查。設(shè)備收到ARP報文時,對以太報文頭中的源、目的MAC地址和ARP報文數(shù)據(jù)區(qū)中的源、目的MAC地址進(jìn)行一致性檢查。如果以太報文頭中的源、目的MAC地址和ARP報文數(shù)據(jù)區(qū)中的源、目的MAC地址不一致,則直接丟棄該ARP報文。否則允許該ARP報文通過。
禁止接口學(xué)習(xí)ARP表項(xiàng)的功能。在設(shè)備上禁止指定接口學(xué)習(xí)ARP表項(xiàng)的功能,可以有效應(yīng)對ARP泛洪攻擊,防止ARP表項(xiàng)溢出。
ARP表項(xiàng)嚴(yán)格學(xué)習(xí)。設(shè)備僅學(xué)習(xí)自己發(fā)送的ARP請求報文的應(yīng)答報文,并不學(xué)習(xí)其它設(shè)備向路由器發(fā)送的ARP請求報文,即可以拒絕掉大部分的ARP請求報文攻擊。
ARP表項(xiàng)限制。設(shè)備基于接口限制學(xué)習(xí)ARP表項(xiàng)的總數(shù)目,可以有效的防止ARP表項(xiàng)溢出。
ARP報文限速。設(shè)備對ARP報文進(jìn)行數(shù)量統(tǒng)計,在一定時間內(nèi),如果ARP報文數(shù)量超出了配置的閾值,超出部分的ARP報文將被忽略,設(shè)備不作任何處理,有效防止ARP表項(xiàng)溢出。
當(dāng)在局域網(wǎng)中部署了如上較完整的安全策略之后,基本可以防范絕大部分的ARP攻擊。
由于ARP協(xié)議自身存在明顯的安全缺陷,在局域網(wǎng)中很容易實(shí)施ARP攻擊,會對網(wǎng)絡(luò)信息安全造成很大的影響。在了解了ARP攻擊的原理后,只要在終端主機(jī)和網(wǎng)絡(luò)交換設(shè)備上部署相應(yīng)的安全策略,就基本可以防范絕大部分的ARP攻擊。
[1] 凱文R.福爾(Kevin R. Fall).TCP/IP詳解卷1:協(xié)議[M].機(jī)械工業(yè)出版社出版,2016-07-01
[2]郭會茹,楊斌,牛立全. ARP攻擊原理分析及其安全防范措施[J]. 網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2015年,06期
[3]顧靜.局域網(wǎng)環(huán)境下的ARP攻擊行為與防御措施[J].信息系統(tǒng)工程,2016年,10期
[4]靳燕.ARP攻擊實(shí)驗(yàn)仿真及防范技術(shù)分析[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2016年,07期