陳軍 孫義博 岳婷
摘 要:ARP協(xié)議,即地址解析協(xié)議,由于協(xié)議存在的漏洞導(dǎo)致ARP欺騙幾乎無法避免。為探討如何解決這一問題,通過理論研究和實(shí)證,論文從主動和被動兩個(gè)模塊提出了ARP檢測與防御的方法。主要思路是利用基于Linux的開源路由器系統(tǒng)OpenWRT定制路由器,對網(wǎng)絡(luò)流量進(jìn)行監(jiān)測,一旦主機(jī)網(wǎng)絡(luò)流量達(dá)到一定閾值時(shí),通過對其進(jìn)行檢查來判斷源主機(jī)是否遭受ARP欺騙,以維護(hù)局域網(wǎng)的安全運(yùn)行。
關(guān)鍵詞:ARP檢測與防御;主動檢測;被動檢測與防御;Netfilter;OpenWRT
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A
ARP detection and defense system based on Linux
Abstract: ARP, the Address resolution protocol, owing to the loopholes of the protocol, leads to ARP spoofing almost impossible to avoid. In order to explore how to solve this problem, through theoretical research and empirical analysis, this paper puts forward ARP detection and defense methods from two modules of active and passive. The main idea is to use the open source router system customized OpenWRT router based on Linux, monitoring the network traffic.Once the host network traffic reaches a certain threshold,,we will examine and determine whether the host is deceived, to maintain the safe operation of LAN.
Key words: ARP detection and defense; active detection; passive detection and defense; netfilter; openWRT
1 引言
在局域網(wǎng)中,每臺計(jì)算機(jī)都擁有兩個(gè)地址,即IP地址和MAC地址。實(shí)際應(yīng)用時(shí),若想根據(jù)一臺機(jī)器(主機(jī)或路由器)的IP地址找出該臺機(jī)器相應(yīng)的硬件地址(MAC地址),則需要使用地址解析協(xié)議ARP。對于每臺裝有TCP/IP協(xié)議的計(jì)算機(jī),均存在一個(gè)ARP緩存表,表里存放著對應(yīng)的IP地址和MAC地址。同時(shí),計(jì)算機(jī)中的ARP緩存表是動態(tài)變化的,會根據(jù)所收到的ARP應(yīng)答不斷地進(jìn)行更新,以保存最近的IP地址和MAC地址。然而,對于大多數(shù)操作系統(tǒng),它不會去判斷自己是否發(fā)送了ARP請求,而會根據(jù)所有接收到的ARP應(yīng)答對ARP緩存進(jìn)行更新,這便對計(jì)算機(jī)造成了潛在的安全威脅。攻擊者利用這一漏洞,并偽造IP和MAC進(jìn)行ARP欺騙,對攻擊目標(biāo)(受害方)實(shí)施惡意攻擊,截獲通信過程傳輸?shù)男畔?。因此,為了更好地保障網(wǎng)絡(luò)的安全,需要在攻擊者對源主機(jī)成功實(shí)施ARP欺騙之前,檢測到ARP欺騙并采取防御措施。
2 ARP欺騙
2.1 ARP欺騙原理
數(shù)據(jù)包在以太網(wǎng)中傳輸,尋址依據(jù)是計(jì)算機(jī)的物理地址(MAC地址)。ARP協(xié)議就是通過目的主機(jī)的IP地址查詢其MAC地址,動態(tài)生成ARP緩存表,從而使通信順利進(jìn)行。因此,若想要得到目的主機(jī)的MAC地址,首先,需要知道其IP地址。而ARP協(xié)議是一種無狀態(tài)協(xié)議,源主機(jī)收到ARP應(yīng)答包之后,不會主動驗(yàn)證它的真實(shí)性,而是直接將其中的MAC地址更新到ARP緩存表中。因此,攻擊者可以通過發(fā)送大量的ARP欺騙報(bào)文來淹沒正常的ARP報(bào)文,使得源主機(jī)在接收ARP應(yīng)答包后,將欺騙報(bào)文中的MAC地址更新到源主機(jī)ARP緩存表中,以達(dá)到后續(xù)實(shí)現(xiàn)ARP欺騙的目的。
2.2 ARP欺騙實(shí)現(xiàn)
假設(shè)主機(jī)C已經(jīng)知道主機(jī)B的IP地址,則主機(jī)C可通過偽造成主機(jī)B的IP對主機(jī)A發(fā)起ARP欺騙。假設(shè)當(dāng)前情況下,主機(jī)A的ARP緩存記錄中沒有主機(jī)B的記錄,則主機(jī)A將在局域網(wǎng)中廣播包含主機(jī)B IP的ARP請求,此時(shí)事先將自己的IP偽造成主機(jī)B的IP的主機(jī)C也能接收到ARP請求包,并對主機(jī)A做出應(yīng)答,主機(jī)A在接收到來自于主機(jī)C的ARP響應(yīng)報(bào)文時(shí),不會對該報(bào)文的正確性進(jìn)行核實(shí),而會直接將ARP應(yīng)答包里的MAC地址更新到自己的ARP緩存表中。此后,主機(jī)C便可監(jiān)聽主機(jī)A和主機(jī)B之間的通信,甚至阻斷主機(jī)A和主機(jī)B之間的通信。
3 ARP檢測與防御
按照檢測ARP欺騙的方式,將檢測系統(tǒng)分為兩個(gè)模塊,即主動模塊和被動模塊。
3.1 ARP檢測
3.1.1 主動檢測
程序從計(jì)算機(jī)中將ARP項(xiàng)導(dǎo)入內(nèi)存,根據(jù)ARP項(xiàng)中的IP地址向局域網(wǎng)發(fā)送ARP 請求包,然后通過Windump、Snifferpro等抓包軟件,抓取 ARP 的Reply包,通過分析ARP應(yīng)答包里的信息行來判斷源主機(jī)是否遭受ARP欺騙。如果最后的MAC地址并非網(wǎng)關(guān)的真實(shí)MAC地址,則說明存在ARP欺騙,而且進(jìn)行ARP欺騙的主機(jī)的MAC地址即為ARP應(yīng)答包里的MAC地址。這種主動檢測源主機(jī)是否遭受ARP欺騙的方法簡單有效,但必須在局域網(wǎng)內(nèi)部聽包,而且人的工作量也較大。
3.1.2 被動檢測
斷網(wǎng)時(shí),刪除主機(jī)已經(jīng)存儲的ARP緩存,減少主機(jī)遭受ARP攻擊的概率。程序在計(jì)算機(jī)聯(lián)網(wǎng)的瞬間獲取新的網(wǎng)關(guān)IP地址和MAC地址映射對,將其存儲在文件中并且對其進(jìn)行加密,之后不停地抓取來自網(wǎng)絡(luò)的ARP請求包。
對于主機(jī)端,一定時(shí)間內(nèi),若出現(xiàn)包含同一源IP地址或者同一源MAC地址的ARP請求包超過某一特定閾值或者出現(xiàn)大量包含不同IP和MAC的ARP請求包的情況,則系統(tǒng)將發(fā)出警示,觸發(fā)內(nèi)核層過濾驅(qū)動,對ARP請求包實(shí)施攔截;若發(fā)現(xiàn)與網(wǎng)關(guān)的IP地址相同但是MAC地址不同,則使用存儲在文件中的ARP項(xiàng)對被污染的ARP項(xiàng)進(jìn)行覆蓋,保證ARP項(xiàng)的正確性。
對于路由器端,通過對ARP請求包的流量監(jiān)測來判斷源主機(jī)是否遭受ARP欺騙。若來自同一IP地址或MAC地址的ARP請求包或者應(yīng)答包,以及去往同一IP地址或MAC地址的ARP請求包或者應(yīng)答包的數(shù)量劇增,則意味著可能存在ARP欺騙。
3.2 ARP防御
3.2.1主動防御
最常見的方法是對IP和MAC做靜態(tài)綁定。
在源主機(jī)的ARP中設(shè)置靜態(tài)地址映射記錄,這個(gè)記錄是永不過期的,因此源主機(jī)在向目的主機(jī)發(fā)送數(shù)據(jù)前不再需要通過廣播ARP請求,可直接通過查詢ARP靜態(tài)記錄來獲得目的主機(jī)的MAC 地址。若此時(shí)攻擊者仍用偽造的MAC地址對源主機(jī)做出應(yīng)答,源主機(jī)將不會更新ARP 緩存的靜態(tài)記錄。顯然,靜態(tài)綁定的方法存在局限性,這種方法要求目的主機(jī)的IP地址永遠(yuǎn)不變,這對絕大多數(shù)計(jì)算機(jī)來說是無法實(shí)現(xiàn)的。一旦IP地址出現(xiàn)變動,就需要及時(shí)更新,工作量大而且繁瑣,這對很多人來說都是一件不可行的事情。
3.2.2 主機(jī)端的被動防御
主機(jī)端的被動防御依靠使用Netfilter鉤子函數(shù)進(jìn)行實(shí)現(xiàn)驅(qū)動過濾。
Netfilter所提供的Hook函數(shù)管理機(jī)制,可以實(shí)現(xiàn)數(shù)據(jù)包過濾和基于協(xié)議類型的連接跟蹤等功能。在ARP的處理過程中有三個(gè)hook,分別是NF_ARP_IN,NF_ARP_OUT,NF_ARP_FORWARD。這三個(gè)Hook允許用戶注冊鉤子函數(shù),然后實(shí)現(xiàn)自己的功能。若要過濾或者攔截ARP數(shù)據(jù)包,必須要從arp_rcv函數(shù)進(jìn)入,才會走這三個(gè)Hook的鉤子函數(shù)。
當(dāng)收到應(yīng)用層傳來的通知時(shí),用所注冊的鉤子函數(shù)對ARP包進(jìn)行判斷,并與規(guī)則比對后,接收符合規(guī)則的ARP包,其余的一律丟棄,從而完成包的過濾。
3.2.3 路由器端的被動防御
OpenWRT是Linux的嵌入式發(fā)行版本。OpenWRT支持多種處理器架構(gòu),且有多達(dá)3000多種軟件包,從工具鏈(Toolchain),到內(nèi)核(Linux Kernel),到軟件包(Packages),再到根文件系統(tǒng)(Rootfs)。一個(gè)簡單的make命令就可以方便、快速地定制出一個(gè)具有特定功能的嵌入式系統(tǒng),用于制作固件,極其方便。
無線路由器是無線局域網(wǎng)的中樞,所以無線路由器必須在系統(tǒng)的控制范圍之下,只有這樣系統(tǒng)的安全才能保證。無線路由器承擔(dān)著給局域網(wǎng)中主機(jī)分配IP的職能,相當(dāng)于DHCP服務(wù)器,自然會有局域網(wǎng)中每一臺主機(jī)的IP、MAC地址映射,因此,可以據(jù)此過濾ARP包。由于頻繁檢測會降低轉(zhuǎn)發(fā)效率,所以應(yīng)該在主機(jī)網(wǎng)絡(luò)流量達(dá)到一定閾值時(shí),對其進(jìn)行檢測。
(1)針對同一IP或同一MAC地址,是否大多數(shù)數(shù)據(jù)包都是ARP請求包或者應(yīng)答包。若是,拒絕轉(zhuǎn)發(fā)數(shù)據(jù)包。
(2)ARP請求包的源ARP項(xiàng)是否與其在路由器中留下的信息相同。若不同,將其丟棄。
在此基礎(chǔ)上,可以基于OpenWRT定制過濾ARP包的功能模塊。將過濾函數(shù)及過濾規(guī)則編寫進(jìn)入OpenWRT的內(nèi)核文件,編譯之后將其移植到路由器上。
4 算法實(shí)現(xiàn)
目前,系統(tǒng)已經(jīng)實(shí)現(xiàn)了主動檢測模塊。被動檢測和被動防御模塊的結(jié)構(gòu)已經(jīng)明確,正在著手解決。其中主動檢測部分使用Libpcap庫,進(jìn)行網(wǎng)絡(luò)流量分析。主機(jī)端被動檢測模塊則寫成守護(hù)進(jìn)程的形式,從計(jì)算機(jī)一開機(jī),就開始運(yùn)行(同時(shí)由于只抓ARP包,所以平時(shí)根本不會擔(dān)心占用系統(tǒng)太多資源),不用耗用人力資源,減少成本。被動防御由主機(jī)端和路由器端的雙重防御組成,主機(jī)端被動防御使用Netfilter框架,使得代碼量減小,同時(shí)更加貼合系統(tǒng)底層,路由器端被動防御模塊是基于OpenWRT的開發(fā)的,這使得對路由器硬件本身的要求并不嚴(yán)格,減少了系統(tǒng)的布置成本,也是模塊定制更加自由。
為了更清晰地現(xiàn)實(shí)系統(tǒng)對規(guī)則的使用邏輯,給出如下偽代碼:
//主機(jī)網(wǎng)絡(luò)流量被動檢測和防御模塊
ger_gateway(); //獲取網(wǎng)關(guān)ip、mac地址映射并進(jìn)行存儲
capture_packet(); //開啟抓包線程,抓包并存儲check();
//開啟檢測線程,檢查所抓包
//的存儲若有過期的,進(jìn)行清理
//若發(fā)現(xiàn)網(wǎng)絡(luò)異常,則報(bào)警,
//通知內(nèi)核層進(jìn)行過濾,并且使用
//getgateway()獲得的ip、mac
//地址映射與arp緩存進(jìn)行比對,
//若出現(xiàn)差異,使用其進(jìn)行覆蓋
//路由器網(wǎng)絡(luò)流量被動檢測模塊
if(size_measure_max() == true) //流量檢測,如果流量較大,則檢測是
filter() //否符合過濾規(guī)則,若符合,則對其ARP包進(jìn)行過濾。
5 結(jié)束語
本文通過對ARP包的定性分析和定量分析,檢測局域網(wǎng)中是否存在ARP欺騙,并提出了相應(yīng)的防御方案。一方面,以主機(jī)端和網(wǎng)絡(luò)轉(zhuǎn)發(fā)端結(jié)合的方式對ARP包進(jìn)行過濾,減輕了主機(jī)端單獨(dú)過濾ARP包的壓力。另一方面,以路由器為出發(fā)點(diǎn),基于OpenWRT定制過濾ARP包的功能模塊,當(dāng)攻擊者以洪泛的方式進(jìn)行ARP攻擊時(shí),路由器將拒絕對擁有相同源ARP項(xiàng)、相同目的ARP項(xiàng)或者相同目的IP地址的絕大多數(shù)數(shù)據(jù)包的轉(zhuǎn)發(fā)。
互聯(lián)網(wǎng)在滿足人們信息需求的同時(shí),也引起了很多網(wǎng)絡(luò)安全上的問題。一些組織或者個(gè)人出于某種特殊目的,故意侵犯他人的隱私甚至國家機(jī)密,對網(wǎng)絡(luò)空間進(jìn)行惡意攻擊和破壞。因此,需要不斷地去研究更好的防御手段,來維護(hù)網(wǎng)絡(luò)空間的安全。
參考文獻(xiàn)
[1] 史雋彬,秦科.ARP攻擊現(xiàn)狀分析及一種應(yīng)對ARP攻擊的方法[J].陜西理工學(xué)院學(xué)報(bào)(自然科學(xué)版),2013,29(02):45-49.
[2] 朱錢廣.基于深度包過濾的網(wǎng)絡(luò)入侵檢測系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].東華大學(xué),2010.
[3] 徐亮,梁華慶.Netfilter防火墻抗ARP攻擊的防御特性設(shè)計(jì)[J].科學(xué)技術(shù)與工程,2009,9(13):3889-3892+3900.
[4] 孫名松,劉鑫,耿姝.基于Linux的ARP防火墻的研究與實(shí)現(xiàn)[J]. 自動化技術(shù)與應(yīng)用,2008,(12):63-66.
[5] 林宏剛,陳麟,王標(biāo),吳彥偉.一種主動檢測和防范ARP攻擊的算法研究[J].四川大學(xué)學(xué)報(bào)(工程科學(xué)版),2008,(03):143-149.
[6] 王燕,張新剛.基于ARP協(xié)議的攻擊及其防御方法分析[J].微計(jì)算機(jī)信息,2007,(36):72-74.
[7] 邱浩.帶入侵檢測的Linux個(gè)人防火墻的研究與實(shí)現(xiàn)[D].貴州大學(xué),2006.
[8] 方山. 網(wǎng)絡(luò)防火墻狀態(tài)檢測技術(shù)的研究與實(shí)現(xiàn)[D].暨南大學(xué),2003.
[9] 邢金閣,劉揚(yáng). ARP欺騙攻擊的檢測及防御技術(shù)研究[J].東北農(nóng)業(yè)大學(xué)學(xué)報(bào),2012,43(08):74-77.
[10] 李筱楠,劉洋,李德雄.ARP攻擊防御與檢測[J].石家莊鐵路職業(yè)技術(shù)學(xué)院學(xué)報(bào),2008,(01):56-59.
[11] 鄧婉婷.校園網(wǎng)ARP攻擊檢測系統(tǒng)設(shè)計(jì)與開發(fā)[D].電子科技大學(xué),2011.
[12] 李啟南.基于FARIMA的ARP欺騙入侵檢測[J].計(jì)算機(jī)工程,2011,37(02):139-140+142.
[13]陸炯.一種OpenWrt物聯(lián)網(wǎng)家庭網(wǎng)關(guān)服務(wù)質(zhì)量的研究與設(shè)計(jì)[D].西安電子科技大學(xué),2014.