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