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