吳棟淦
(福建信息職業(yè)技術(shù)學(xué)院 計算機工程系,福建 福州 350003)
ARP地址解析協(xié)議是一種以太網(wǎng)技術(shù)中非常重要的協(xié)議,該協(xié)議用于將IP地址映射為硬件MAC地址.由于ARP協(xié)議本身存在的缺陷,導(dǎo)致以太網(wǎng)絡(luò)中針對ARP協(xié)議的攻擊層出不窮.ARP協(xié)議的漏洞可被利用來進行網(wǎng)絡(luò)監(jiān)聽[1]、網(wǎng)絡(luò)欺騙,由于以太網(wǎng)協(xié)議簡單,相應(yīng)設(shè)備種類較少,要對以太網(wǎng)嚴(yán)防死守存在較大困難.近年來以太網(wǎng)技術(shù)的發(fā)展主要集中在速度的提升上,安全協(xié)議并沒有根本改善,而隨著入侵難度的不斷下降,最終導(dǎo)致了以太網(wǎng)的安全事件愈演愈烈.根據(jù)一份調(diào)查指出[2],ARP攻擊能夠在20-30秒的時間使超過200臺計算機離線,某學(xué)院也曾經(jīng)發(fā)生過幾次ARP攻擊,期間都導(dǎo)致了大量計算機無法上網(wǎng),日常工作幾乎停滯的狀態(tài).ARP欺騙[3]是ARP攻擊的主要代表技術(shù),常常被黑客用于局域網(wǎng)攻擊和數(shù)據(jù)監(jiān)聽.
ARP欺騙可以分為主動和被動兩種方式[4],攻擊者主動發(fā)送ARP請求報文,利用ARP協(xié)議的漏洞讓受害主機更新IP和硬件MAC地址映射表的方法叫做主動方式;攻擊者處于被動監(jiān)聽狀態(tài),只在必要的時候?qū)RP查詢報文進行響應(yīng)的方式叫做被動方式.按照類型來分,ARP欺騙攻擊有拒絕服務(wù)攻擊、中間人攻擊、克隆攻擊、網(wǎng)關(guān)攻擊、泛洪攻擊以及DHCP偽裝攻擊.ARP欺騙攻擊由來已久,但因為協(xié)議本身存在的缺陷導(dǎo)致難以根治,過去十幾年中,多種類型的解決方案被提出來,但都無法有效解決問題.本文在不改變網(wǎng)絡(luò)原有拓?fù)浣Y(jié)構(gòu)的前提下,提出了一種以成本低廉的Raspberry Pi作為檢測節(jié)點,檢測局域網(wǎng)ARP欺騙并通過干預(yù)恢復(fù)網(wǎng)絡(luò)的方案.
自從ARP欺騙出現(xiàn)以來,出現(xiàn)了不少解決方案,其中有代表性的有靜態(tài)ARP緩存、使用ARP服務(wù)器、網(wǎng)關(guān)廣播ARP數(shù)據(jù)包、加密ARP、內(nèi)核補丁、端口安全以及ARP檢測軟件.靜態(tài)ARP緩存是低成本方法,通過管理員手工指定ARP緩存的方式來避免ARP欺騙,但這種方式被證明低效且不易管理[5].使用專用的ARP服務(wù)器成本投入不低,并且服務(wù)器本身的安全問題也面臨挑戰(zhàn)[6].網(wǎng)關(guān)廣播ARP數(shù)據(jù)包被認(rèn)為會加重網(wǎng)絡(luò)負(fù)載[7],且網(wǎng)關(guān)本身往往也是ARP欺騙的首要目標(biāo).加密ARP就是對現(xiàn)有的ARP協(xié)議進行改進,使用加密協(xié)議對ARP數(shù)據(jù)包進行認(rèn)證,主流代表有SARP[8]和 TARP[9],但加密 ARP 與現(xiàn)有的協(xié)議無法兼容,性能開銷大.內(nèi)核補丁則是通過給操作系統(tǒng)打補丁的方式修補ARP漏洞,比如以anticap和antidote為代表的方案就是此類,兩種方案都是通過抑制更新ARP緩存[10]來達(dá)到目的,但只能適用于特定的操作系統(tǒng)內(nèi)核,并且無法與未打補丁的內(nèi)核兼容.端口安全其實是最有效的解決方案,該方案通過交換機的Port Security功能檢測ARP欺騙,可以防止未經(jīng)授權(quán)和ARP欺騙的設(shè)備接入網(wǎng)絡(luò),能有效防止MAC地址泛洪.但由于該方案需要將現(xiàn)有的交換機全部更換為帶Port Security功能的設(shè)備,代價太大,因此實際應(yīng)用起來存在困難.以ARPWatch和XARP為代表的ARP檢測軟件的實際應(yīng)用效果不理想,只能實現(xiàn)檢測功能而無法進行保護.
綜上所述,以上解決方案均無法較好解決現(xiàn)有ARP欺騙問題,因此,目前急需一種部署靈活,不影響現(xiàn)有網(wǎng)絡(luò)和應(yīng)用,成本不高,且行之有效的解決方案.文獻(xiàn)[4]中提出的ARP欺騙攻擊多層模塊探測策略是一種可行的方案,代表ARP欺騙保護的一個研究方向.
論文根據(jù)ARP欺騙疫苗[11]的思路提出了一種基于Raspberry Pi的ARP欺騙檢測保護方案,該方案拓?fù)浣Y(jié)構(gòu)如圖1所示,其中網(wǎng)段A、網(wǎng)段B和網(wǎng)段C分別通過接入層交換機連接到匯聚層交換機,匯聚層交換機是具備Port Security功能的三層交換機,控制服務(wù)器直接連接到匯聚層交換機,每個網(wǎng)段都設(shè)置一個檢測節(jié)點P1、P2和P3.
檢測節(jié)點是一種由英國開發(fā)的卡片式電腦Raspberry Pi[12],擁有電腦的基本功能,該電腦可以運行Linux,支持Python、C、Java等開發(fā)語言,具有成本低(約25美元)、體積?。ㄖ挥行庞每ù笮。?、功耗低(2W)的特點[13],已被廣泛用于各類物聯(lián)網(wǎng)應(yīng)用中.方案使用Raspberry Pi作為檢測節(jié)點,每個節(jié)點上部署ARP欺騙檢測保護軟件,負(fù)責(zé)本網(wǎng)段的ARP數(shù)據(jù)監(jiān)聽、檢測和保護.控制服務(wù)器是一臺運行CentOS Linux 7.0的主機,負(fù)責(zé)收集各網(wǎng)段檢測節(jié)點的網(wǎng)絡(luò)信息、下發(fā)ARP地址表及對三層交換機發(fā)布管理指令.為了保護控制服務(wù)器的安全性,三層交換機上做訪問控制權(quán)限,只允許指定節(jié)點訪問控制服務(wù)器,其他計算機不允許訪問.
基于Raspberry Pi的ARP欺騙檢測保護方案的工作原理如圖2所示,檢測節(jié)點啟動時通過主動和被動的方式收集本網(wǎng)段的地址信息,并將此信息上傳到控制服務(wù)器,控制服務(wù)器保存了局域網(wǎng)中所有的IP--MAC數(shù)據(jù).檢測節(jié)點隨后定期向本網(wǎng)段發(fā)布ARP疫苗,ARP疫苗是網(wǎng)絡(luò)經(jīng)過較長時間穩(wěn)定運行后的IP—MAC數(shù)據(jù),可以認(rèn)為此數(shù)據(jù)是正確的.其他主機接收到ARP疫苗后將使用其中的IP—MAC數(shù)據(jù)更新本地的ARP緩存,從而避免ARP地址表被污染.檢測節(jié)點還要通過監(jiān)聽本地網(wǎng)段的形式來發(fā)現(xiàn)ARP欺騙,重點對ARP查詢/應(yīng)答、RARP查詢/應(yīng)答以及DHCP請求/應(yīng)答進行分析,一旦發(fā)現(xiàn)ARP欺騙,則向受害主機發(fā)布正確的地址信息,同時上報數(shù)據(jù)到控制服務(wù)器.控制服務(wù)器對異常信息進行分析,一旦發(fā)現(xiàn)大規(guī)模ARP欺騙,影響到網(wǎng)絡(luò)性能和安全性,則向三層交換機發(fā)布指令停用指定端口,避免攻擊擴大化,同時向管理員發(fā)布警告.控制服務(wù)器稍后會進行延緩檢測,檢查ARP欺騙是否繼續(xù)存在,如果欺騙已經(jīng)減弱或者消失,則啟用端口正常工作.
圖1 基于Raspberry Pi的ARP欺騙檢測保護方案拓?fù)?/p>
圖2 工作原理
3.3.1 網(wǎng)絡(luò)監(jiān)聽和數(shù)據(jù)捕包
網(wǎng)絡(luò)監(jiān)聽是方案的一個關(guān)鍵技術(shù),是指捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包進行分析的一種技術(shù),常被用于網(wǎng)絡(luò)監(jiān)控和入侵檢測當(dāng)中[14].在交換環(huán)境下進行網(wǎng)絡(luò)監(jiān)聽可以通過ARP欺騙、地址泛洪等手段實現(xiàn),或者是利用交換機的端口鏡像功能.ARP欺騙和地址泛洪通常是在沒有網(wǎng)絡(luò)管理權(quán)限的情況下使用,會在一定程度上擾亂網(wǎng)絡(luò)的正常工作,降低性能和安全性.端口鏡像是在交換機或路由器上通過配置將一個或多個端口的數(shù)據(jù)流量鏡像到指定端口,從而實現(xiàn)網(wǎng)絡(luò)監(jiān)聽的目的.本方案最大化利用原有網(wǎng)絡(luò)設(shè)備,保留原有交換機的端口鏡像功能,在沒有端口鏡像交換機的網(wǎng)段中,則被動捕獲數(shù)據(jù)包進行分析(捕獲數(shù)據(jù)包的數(shù)量會減少).
Linux下比較常見的數(shù)據(jù)捕包方案有Raw Socket、libpcap[15]以及 scapy.Raw Socket是直接通過創(chuàng)建原始套接字的方式來訪問底層接口,libpcap是一個比較成熟的捕獲數(shù)據(jù)方案,scapy是一種使用Python開發(fā)的強大的網(wǎng)絡(luò)數(shù)據(jù)包處理工具[16],能快速方便地分析和構(gòu)造各種網(wǎng)絡(luò)協(xié)議數(shù)據(jù)包,本文使用scapy作為網(wǎng)絡(luò)捕包方案.
3.3.2 ARP疫苗
ARP疫苗的作用是給主機打“預(yù)防針”,從而在一定程度上預(yù)防由于ARP欺騙造成的網(wǎng)絡(luò)癱瘓,尤其是當(dāng)網(wǎng)關(guān)MAC地址被冒用的時候,ARP疫苗的作用特別明顯.ARP疫苗主要有兩個過程,分別是創(chuàng)建疫苗和發(fā)布疫苗.創(chuàng)建疫苗是檢測節(jié)點在網(wǎng)絡(luò)穩(wěn)定運行一段時候之后(比如30分鐘)生成的ARP緩存信息,這部分信息被檢測節(jié)點記錄下來,并被上傳到控制服務(wù)器數(shù)據(jù)庫中.ARP疫苗創(chuàng)建成功后將會被檢測節(jié)點周期性發(fā)布給本網(wǎng)段其他主機.發(fā)布疫苗可以通過檢測節(jié)點構(gòu)造ARP請求或應(yīng)答數(shù)據(jù)來完成.
本方案的實現(xiàn)包括Raspberry Pi節(jié)點部分和控制服務(wù)器部分,下文分別進行討論.
3.4.1 Raspberry Pi節(jié)點
Raspberry Pi節(jié)點選用了3B+基礎(chǔ)版,此版本使用Broadcom BCM2837B0芯片(1.4GHz四核),提供了1個千兆以太網(wǎng)接口、1個802.11AC無線接口和1個藍(lán)牙4.2模塊,部署的系統(tǒng)版本為raspberrypi 4.9.80,開發(fā)環(huán)境為Python 2.7.13.該節(jié)點的主要功能是監(jiān)聽數(shù)據(jù)包、ARP疫苗生成和發(fā)布、ARP欺騙發(fā)現(xiàn)和上傳數(shù)據(jù),這四個功能在ServiceEntry類中實現(xiàn),該類的關(guān)鍵代碼實現(xiàn)如下.
pkts=sniff(iface="eth0",filter=pkt_filter,prn=packet_callback)#從eth0接口捕獲數(shù)據(jù)包,設(shè)置捕獲的過濾器,并將捕獲的數(shù)據(jù)交給packet_callback回調(diào)函數(shù)處理
def vaccine_generate(self):#生成ARP疫苗
self.generateHostList(net,mask)#根據(jù)網(wǎng)段和子網(wǎng)掩碼生成本網(wǎng)段所有主機列表
3.4.2 控制服務(wù)器
控制服務(wù)器同樣使用Python實現(xiàn),主要功能包括收集ARP地址信息、開啟及關(guān)閉交換機端口以及數(shù)據(jù)分析(擬在二階段實現(xiàn)).控制服務(wù)器部署MySQL 5.5進行數(shù)據(jù)存儲,并通過比對數(shù)據(jù)庫中最近30分鐘的ARP數(shù)據(jù)發(fā)現(xiàn)攻擊,關(guān)鍵代碼如下.
控制服務(wù)器使用ssh協(xié)議連接到三層交換機,為了簡化代碼,本方案使用paramiko模塊作為ssh實現(xiàn)方案,并使用SecureConnection類進行了封裝,關(guān)鍵代碼如下.
return ssh.exec_command(com)#執(zhí)行此指令
由于本方案基于實際生產(chǎn)環(huán)境,不允許進行真實攻擊測試,因此模擬了小型網(wǎng)絡(luò)環(huán)境進行測試.ARP攻擊工具使用了arpspoof,arpspoof是一種有效的ARP欺騙工具,允許攻擊者修改網(wǎng)絡(luò)路由,以及實施中間人攻擊.模擬測試的步驟分為三步,首先測試受害主機的連通性,這主要是通過訪問網(wǎng)關(guān)來進行測試;其次在攻擊機上執(zhí)行arpspoof對受害主機進行欺騙,并觀察受害主機的連通性,此時發(fā)現(xiàn)受害主機完全處于斷網(wǎng)狀態(tài);最后啟動檢測節(jié)點上部署的檢測保護程序,發(fā)現(xiàn)ARP欺騙,并向受害主機持續(xù)發(fā)布ARP疫苗,此時觀察受害主機的網(wǎng)絡(luò)已基本恢復(fù).
為了測試ARP疫苗的有效性,對受害主機的連通性進行了采樣并求取平均值,每次采樣由受害主機向網(wǎng)關(guān)連續(xù)發(fā)送100個ICMP回應(yīng)請求,并根據(jù)返回的應(yīng)答數(shù)量記錄成功率,結(jié)果如表1所示,總共進行10次測試,并對每次測試的成功率進行了記錄,最后計算出成功率的平均值.實驗數(shù)據(jù)表明,ARP疫苗對于網(wǎng)絡(luò)恢復(fù)已經(jīng)產(chǎn)生作用.
表1 實驗測試結(jié)果
通過驗證得出,文中提出的ARP欺騙檢測保護方案是可行的.方案部署完全不影響原有網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),不需在局域網(wǎng)主機上安裝額外軟件,每個網(wǎng)段只需增加一個價格低廉的檢測節(jié)點.方案仍然還存在一些問題,比如檢測節(jié)點遭受大規(guī)模DOS攻擊將失效,控制服務(wù)器遭受到數(shù)據(jù)篡改會造成檢測節(jié)點被用作黑客的攻擊助力,這些將在今后研究中進行討論.