ARP攻擊與防御實(shí)戰(zhàn):從緩存投毒到DHCP Snooping排查)
簡介這是一份關(guān)于局域網(wǎng)ARP攻擊及防御策略研究的畢業(yè)設(shè)計(jì)論文屬于Word格式的管理類文檔適合計(jì)算機(jī)網(wǎng)絡(luò)專業(yè)學(xué)生、網(wǎng)絡(luò)安全初學(xué)者以及正在籌備相關(guān)課題的研究者閱讀參考。文檔內(nèi)容脈絡(luò)清晰先從ARP協(xié)議的基礎(chǔ)原理講起涵蓋地址解析的作用、動(dòng)態(tài)地址解析方法、ARP標(biāo)準(zhǔn)與歷史、ARP信息格式、ARP緩存及代理ARP等基礎(chǔ)知識點(diǎn)幫助讀者建立完整的協(xié)議認(rèn)知隨后聚焦ARP欺騙深入分析欺騙原理、常見攻擊方式、攻擊檢測手段與防御思路并結(jié)合實(shí)際局域網(wǎng)中遭遇ARP病毒攻擊時(shí)的癥狀展示如何利用抓包工具截獲攻擊包并進(jìn)行前后對比分析在此基礎(chǔ)上提出針對網(wǎng)關(guān)ARP欺騙和網(wǎng)內(nèi)主機(jī)ARP欺騙的分場景防御方案同時(shí)給出防御方法的改進(jìn)建議。資源包共包含1個(gè)docx文件大小約162KB體積小巧但內(nèi)容豐富結(jié)構(gòu)完整便于下載后按目錄查閱。目前已有96人學(xué)習(xí)下載對于理解協(xié)議安全漏洞、完成網(wǎng)絡(luò)安全類課程設(shè)計(jì)或畢業(yè)設(shè)計(jì)、撰寫相關(guān)技術(shù)報(bào)告具有不錯(cuò)的參考價(jià)值。1. 局域網(wǎng)ARP攻擊卡頓和丟包背后的問題一個(gè)200臺終端的辦公網(wǎng)白天突然間歇性斷網(wǎng)核心交換機(jī)CPU不高、上聯(lián)口沒有錯(cuò)包但網(wǎng)關(guān)卻ping不通。拔掉一臺舊打印機(jī)網(wǎng)絡(luò)立刻恢復(fù)。這種“找不到原因”的故障超過一半最后都落在ARP上。ARP是局域網(wǎng)設(shè)備把IP解析成MAC的機(jī)制它從設(shè)計(jì)之初就沒有考慮終端身份認(rèn)證。任何在同一個(gè)二層域里的主機(jī)都可以聲稱自己是某個(gè)IP并讓其他主機(jī)把流量都交到它手里。這不只是卡頓而是數(shù)據(jù)被截獲、篡改、或者直接丟掉的鏈路層入口。下面的方案從協(xié)議原理起步先用最小代碼把ARP行為抓出來看再落到終端、交換機(jī)、網(wǎng)關(guān)三個(gè)層面的防御參數(shù)最后用一組Wireshark過濾器驗(yàn)證效果并定位偽造源。適合正在處理網(wǎng)絡(luò)卡頓、做安全運(yùn)維的工程師以及負(fù)責(zé)校園網(wǎng)、辦公網(wǎng)建設(shè)的管理人員。2. ARP協(xié)議原理與攻擊面緩存、免費(fèi)ARP與三層攻擊路徑2.1 請求應(yīng)答與緩存更新信任來自哪里ARPAddress Resolution Protocol地址解析協(xié)議解決的是“已知IP、如何找到MAC”的問題。主機(jī)在發(fā)包前先查本地ARP緩存緩存里沒有就發(fā)一個(gè)二層廣播目標(biāo)IP寫在報(bào)文里目標(biāo)MAC填全Fff:ff:ff:ff:ff:ff。擁有這個(gè)IP的設(shè)備收到后返回單播ARP應(yīng)答把自己的MAC填進(jìn)去。發(fā)起方收到應(yīng)答后把IP到MAC的映射寫入緩存隨后按緩存轉(zhuǎn)發(fā)。這個(gè)機(jī)制有三個(gè)關(guān)鍵細(xì)節(jié)攻擊都發(fā)生在這些細(xì)節(jié)上。第一ARP請求是廣播的同一個(gè)VLAN內(nèi)的所有設(shè)備都能收到也都能應(yīng)答第二ARP應(yīng)答不要求先有請求主動(dòng)發(fā)給別人的應(yīng)答同樣會被接受第三接收方收到任何ARP報(bào)文后都會更新緩存里的對應(yīng)條目哪怕它已有靜態(tài)條目。換句話說ARP把信任完全交給了每個(gè)終端這就是arp協(xié)議原理里最根本的弱點(diǎn)。報(bào)文源MAC目的MAC作用信任風(fēng)險(xiǎn)請求主機(jī)實(shí)際MACff:ff:ff:ff:ff:ff查詢IP對應(yīng)的MAC任何主機(jī)都能應(yīng)答應(yīng)答聲稱該IP的主機(jī)MAC發(fā)起請求的主機(jī)MAC返回IP-MAC映射收到即更新緩存免費(fèi)ARP主機(jī)實(shí)際MACff:ff:ff:ff:ff:ff通告自己的IP-MAC無需請求即可投毒2.2 免費(fèi)ARP被省略的身份校驗(yàn)免費(fèi)ARPGratuitous ARP是源IP和目的IP相同的廣播報(bào)文。設(shè)備啟動(dòng)、更換IP、DHCP獲得地址時(shí)都會發(fā)一條免費(fèi)ARP作用有兩層一是告訴整個(gè)子網(wǎng)“這個(gè)IP對應(yīng)我這張MAC”二是做IP地址沖突檢測。如果別人回了一條免費(fèi)ARP說明地址被占用。問題在于免費(fèi)ARP的接收方同樣不做來源校驗(yàn)。一臺終端可以隨便聲稱自己的IP是網(wǎng)關(guān)IP然后廣播一條免費(fèi)ARP全網(wǎng)主機(jī)的ARP緩存會在幾秒內(nèi)把網(wǎng)關(guān)MAC更新成它的MAC。抓包時(shí)會看到大量“誰擁有網(wǎng)關(guān)IP”的應(yīng)答但沒有任何機(jī)制去確認(rèn)應(yīng)答者是否有權(quán)使用這個(gè)IP。這一條就是ARP投毒最直接的入口也是后面所有防御策略要掐住的第一個(gè)點(diǎn)。2.3 用Python抓包觀察ARP行為在動(dòng)手配置防御之前先用最少代碼把ARP報(bào)文的實(shí)際行為看一遍。下面這個(gè)腳本用Scapy監(jiān)聽網(wǎng)卡上的ARP流量并把每個(gè)報(bào)文的op、源IP、源MAC打印出來from scapy.all import sniff, ARP def show_arp(pkt): if ARP in pkt: arp pkt[ARP] if arp.op 1: print(f[請求] 源IP{arp.psrc} 源MAC{arp.hwsrc} 在問 {arp.pdst} 的MAC) elif arp.op 2: note - 免費(fèi)ARP if arp.psrc arp.pdst else print(f[應(yīng)答] {arp.psrc}({arp.hwsrc}) 聲稱硬地址是 {arp.hwsrc}{note}) sniff(prnshow_arp, filterarp, store0, count50)代碼邏輯很直接sniff持續(xù)監(jiān)聽count50表示收到50個(gè)ARP報(bào)文后自動(dòng)停止filter過濾條件只保留arp。打印時(shí)判斷op字段1是請求2是應(yīng)答當(dāng)應(yīng)答報(bào)文的psrc和pdst相同時(shí)說明這是一條免費(fèi)ARP單獨(dú)加標(biāo)記。跑這個(gè)腳本要選一個(gè)業(yè)務(wù)流量小、確定沒有干擾的接入交換機(jī)端口或者直接在實(shí)驗(yàn)網(wǎng)里跑。它在觀察模式下不會主動(dòng)發(fā)包對已有網(wǎng)絡(luò)風(fēng)險(xiǎn)很小但如果接在鏡像口上且量太大注意CtrlC手動(dòng)停止避免終端刷屏。2.4 把攻擊面收攏成三類把上面觀察到的行為統(tǒng)一歸納局域網(wǎng)里的ARP攻擊面其實(shí)只有三塊緩存投毒向目標(biāo)主機(jī)主動(dòng)發(fā)應(yīng)答偽造IP-MAC綁定、免費(fèi)ARP廣播劫持用免費(fèi)ARP通告網(wǎng)關(guān)地址、廣播放大大量ARP請求形成風(fēng)暴耗盡交換機(jī)CPU。前兩類作用于數(shù)據(jù)路徑第三類作用于資源消耗。和它平行的還有無線側(cè)的deauth攻擊那是直接在鏈路層關(guān)閉目標(biāo)與AP的連接和ARP一樣都屬于“二層共模攻擊”而xss、csrf發(fā)生在應(yīng)用層ddos是流量型攻擊。處理局域網(wǎng)安全問題時(shí)要先分層三層以上的問題別拿到二層來治。3. ARP欺騙與ARP泛洪攻擊流量到底是什么樣3.1 單向欺騙、雙向欺騙與中間人先分清兩種欺騙模式。單向欺騙是攻擊者冒充網(wǎng)關(guān)讓目標(biāo)主機(jī)把數(shù)據(jù)發(fā)給攻擊者M(jìn)AC。目標(biāo)主機(jī)以為自己還在和網(wǎng)關(guān)通信實(shí)際上出網(wǎng)鏈路已經(jīng)被改變。雙向欺騙則同時(shí)欺騙目標(biāo)主機(jī)和網(wǎng)關(guān)形成“主機(jī)→攻擊者→網(wǎng)關(guān)”的完整轉(zhuǎn)發(fā)鏈流量經(jīng)過攻擊者網(wǎng)卡后再轉(zhuǎn)發(fā)出去這就是ARP中間人ARP Man-in-the-Middle。兩種模式在流量特征上的差異很大。單向欺騙會導(dǎo)致目標(biāo)主機(jī)訪問外網(wǎng)異常但訪問其他局域網(wǎng)主機(jī)有時(shí)正常雙向欺騙時(shí)業(yè)務(wù)通常不中斷但延遲變高因?yàn)樗袛?shù)據(jù)都要在攻擊者網(wǎng)卡里多過一次三層的轉(zhuǎn)發(fā)處理。用ping和tracert很難看出中間人但抓包時(shí)只要對比網(wǎng)關(guān)MAC是否穩(wěn)定就能暴露。模式欺騙對象流量走向典型后果單向欺騙目標(biāo)主機(jī)或網(wǎng)關(guān)目標(biāo)→攻擊者→網(wǎng)關(guān)單向截獲目標(biāo)部分?jǐn)嗑W(wǎng)雙向欺騙目標(biāo)主機(jī)網(wǎng)關(guān)目標(biāo)→攻擊者→網(wǎng)關(guān)→外部完整內(nèi)容被截獲、篡改ARP泛洪全網(wǎng)廣播風(fēng)暴交換機(jī)CPU升高業(yè)務(wù)時(shí)斷時(shí)續(xù)3.2 用Scapy復(fù)現(xiàn)一次最小實(shí)驗(yàn)觀察防御側(cè)反應(yīng)理解攻擊流量特征最好的方式是在自己控制的實(shí)驗(yàn)網(wǎng)里復(fù)現(xiàn)一次。下面的代碼只做最小實(shí)驗(yàn)向一臺目標(biāo)主機(jī)主動(dòng)發(fā)送偽造的ARP應(yīng)答聲稱網(wǎng)關(guān)IP對應(yīng)某張偽造MAC。這份代碼只允許跑在你自己控制的交換機(jī)下不能用在任何他人網(wǎng)絡(luò)里它的價(jià)值是讓防御側(cè)知道要在交換機(jī)抓包時(shí)找什么樣的特征。from scapy.all import Ether, ARP, sendp def poison_one(target_ip, target_mac, fake_ip, hw_fake, ifaceeth0, count3): frame ( Ether(dsttarget_mac, srchw_fake) / ARP(op2, psrcfake_ip, hwsrchw_fake, pdsttarget_ip, hwdsttarget_mac) ) sendp(frame, ifaceiface, inter1, countcount) print(f已向 {target_ip} 發(fā)送 {count} 條偽造應(yīng)答聲稱 {fake_ip} 的MAC是 {hw_fake})注意這里必須同時(shí)偽造以太網(wǎng)層的src否則交換機(jī)的MAC表會暴露攻擊者的真實(shí)接口。sendp的inter1表示間隔1秒發(fā)送一次目的是持續(xù)刷新目標(biāo)緩存防止被ARP老化定時(shí)器恢復(fù)。count3只維持三秒觀察快速恢復(fù)的過程。運(yùn)行時(shí)在網(wǎng)關(guān)或交換機(jī)上抓包你會看到同一源IP不斷換MAC或者源IP是網(wǎng)關(guān)、源MAC卻是終端網(wǎng)卡的情況。3.3 ARP泛洪與拒絕服務(wù)另一類常見攻擊是ARP泛洪。攻擊者循環(huán)廣播大量ARP請求或應(yīng)答讓交換機(jī)的CPU在處理ARP協(xié)議報(bào)文上耗盡資源同時(shí)把緩存中的合法條目不斷擠出去。在選擇“校園網(wǎng)攻擊思路”或斷網(wǎng)類故障排查時(shí)這是最常見的讓整個(gè)網(wǎng)段掉線的手法告警上看不到明顯的流量截獲但全網(wǎng)丟包嚴(yán)重交換機(jī)日志里滿是ARP input queue深度告警。這類攻擊和xss、csrf、ddos不是同一個(gè)層面的東西。xss、csrf發(fā)生在應(yīng)用層ddos主要靠流量規(guī)模壓垮鏈路ARP泛洪是二層資源耗盡。排查時(shí)的規(guī)律是應(yīng)用層攻擊看前端日志流量型攻擊看帶寬和防火墻會話數(shù)而ARP泛洪必須先看交換機(jī)的ARP報(bào)文計(jì)數(shù)和CPU利用率。4. 防御策略從終端到網(wǎng)關(guān)靜態(tài)ARP、DHCP Snooping與網(wǎng)關(guān)限速4.1 終端側(cè)靜態(tài)ARP綁定與系統(tǒng)加固命令最靠近終端的防御是靜態(tài)ARP綁定把合法網(wǎng)關(guān)或服務(wù)器的IP-MAC關(guān)系固定下來防止緩存被偽造應(yīng)答改寫。Windows下推薦用netsh命令比arp -s更穩(wěn)在多網(wǎng)卡時(shí)不至于寫錯(cuò)接口netsh interface ipv4 set neighbors 以太網(wǎng) 192.168.1.1 aa-bb-cc-dd-ee-ff arp -aLinux下用ip neigh命令nud permanent表示永久狀態(tài)不會參與老化sudo ip neigh replace 192.168.1.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff nud permanentWindows的注意點(diǎn)是接口名必須用netsh interface ipv4 show interfaces確認(rèn)“以太網(wǎng)”這個(gè)名稱在不同系統(tǒng)語言版本里可能不同。Linux的永久條目在重啟后會失效需要寫進(jìn)systemd服務(wù)或/etc/rc.local。靜態(tài)綁定的局限也很明顯終端數(shù)量一多就難維護(hù)如果網(wǎng)關(guān)以后換設(shè)備全網(wǎng)終端都要跟著改。所以它一般只用在對穩(wěn)定性要求高的服務(wù)器和網(wǎng)關(guān)之間不適用于整個(gè)辦公網(wǎng)。提示在Windows上執(zhí)行上述命令需要管理員權(quán)限。執(zhí)行成功后用arp -a查看條目類型顯示為“靜態(tài)”才算生效。4.2 交換機(jī)側(cè)DHCP Snooping、DAI與端口安全參數(shù)交換機(jī)是防御ARP的核心陣地。DHCP Snooping監(jiān)聽DHCP交互過程建立“端口?IP?MAC”的綁定表DAIDynamic ARP Inspection動(dòng)態(tài)ARP檢測利用這張表校驗(yàn)每個(gè)ARP報(bào)文不在表內(nèi)的直接丟棄。常見部署是接入層交換機(jī)對用戶VLAN同時(shí)開啟DHCP Snooping和DAI上聯(lián)口和網(wǎng)關(guān)所在端口設(shè)成trust接入終端端口不設(shè)trust。下面是一段思路級的交換機(jī)配置思科、華為、銳捷的語法略有差異但關(guān)鍵參數(shù)一致抄的時(shí)候替換為對應(yīng)廠商風(fēng)格ip dhcp snooping vlan 10 ip dhcp snooping ip arp inspection vlan 10 interface GigabitEthernet1/0/1 ip dhcp snooping trust ip arp inspection trust ! interface GigabitEthernet1/0/2 ip dhcp snooping limit rate 15 ip arp inspection limit rate 15上聯(lián)口GigabitEthernet1/0/1設(shè)成trust放行合法網(wǎng)關(guān)的ARP報(bào)文接入口GigabitEthernet1/0/2不設(shè)trustDAI會校驗(yàn)它收到的每一個(gè)ARP報(bào)文。limit rate是限速參數(shù)防止ARP洪泛把CPU打滿。接入側(cè)如果存在不使用DHCP的打印機(jī)、服務(wù)器等靜態(tài)IP設(shè)備它們不在綁定表里需要在交換機(jī)人工加靜態(tài)綁定條目。參數(shù)作用常見誤用ip dhcp snooping vlan把監(jiān)聽范圍限定到具體VLAN不寫vlan導(dǎo)致全局監(jiān)聽性能浪費(fèi)ip arp inspection limit rate限制每端口每秒ARP包數(shù)量設(shè)為0或過大等于沒限太小誤傷正常終端trust接口信任上聯(lián)和合法網(wǎng)關(guān)把接入端口也設(shè)成trustDAI直接失效DAI有一個(gè)容易被忽略的配置順序必須先開DHCP Snooping并讓它建立綁定表DAI才有數(shù)據(jù)可用。如果先開DAI后開DHCP Snooping接入側(cè)所有ARP會在綁定表為空時(shí)被丟棄表現(xiàn)為全網(wǎng)斷網(wǎng)。上聯(lián)口忘記設(shè)trust則正好相反網(wǎng)關(guān)發(fā)來的合法ARP也會被當(dāng)成偽造現(xiàn)象同樣是斷網(wǎng)。4.3 網(wǎng)關(guān)側(cè)IP-MAC綁定與ARP報(bào)文限速網(wǎng)關(guān)承擔(dān)兩層職責(zé)它是三層路由入口也是所有終端ARP查詢的對象。網(wǎng)關(guān)MAC一旦被假冒影響的是整個(gè)網(wǎng)段。因此在網(wǎng)關(guān)設(shè)備上要把合法網(wǎng)關(guān)IP和MAC做成固定綁定同時(shí)開啟防ARP掃描和泛洪限速。華為設(shè)備常見的思路級命令是這樣arp anti-attack check src-mac arp anti-attack check user第一行校驗(yàn)ARP報(bào)文的源MAC和以太網(wǎng)幀頭源MAC是否一致不一致就丟棄第二行限制單一IP地址的ARP報(bào)文速率。思科設(shè)備上對應(yīng)的做法是DAI加DAI限速的結(jié)合。啟用這些檢測之前先觀察一段時(shí)間的正常ARP表把真正會發(fā)起ARP掃描的網(wǎng)管軟件、設(shè)備流量都摸清否則誤殺率會很高。網(wǎng)關(guān)側(cè)的嘗試不能只看有沒有丟包。很多網(wǎng)絡(luò)設(shè)備默認(rèn)不打印ARP攻擊告警需要主動(dòng)開啟日志或關(guān)聯(lián)到告警平臺。在辦公網(wǎng)環(huán)境里建議把“設(shè)備掃描行為”和“流量異常增加”轉(zhuǎn)發(fā)到日志服務(wù)器這樣安全事件處置時(shí)才有據(jù)可查網(wǎng)絡(luò)流量分析與攻擊溯源才有第一手?jǐn)?shù)據(jù)。5. 驗(yàn)證與溯源用Wireshark過濾器和交換機(jī)計(jì)數(shù)釘住攻擊源5.1 一組能直接粘貼的過濾器Wireshark和tshark共用同一套過濾器語法在服務(wù)器上也能用。下面這一組表達(dá)式覆蓋了最常見的ARP異常判斷目標(biāo)表達(dá)式只看ARP流量arp找重復(fù)地址通告arp.duplicate-address-frame 1某個(gè)IP對應(yīng)的MAC變化arp.src.proto_ipv4 192.168.1.1免費(fèi)ARP調(diào)度arp.op 2 arp.pdst arp.psrc免費(fèi)ARP過濾在正常網(wǎng)絡(luò)里會周期性出現(xiàn)尤其是DHCP刷新時(shí)。如果發(fā)現(xiàn)某一臺終端的免費(fèi)ARP里通告的IP是網(wǎng)關(guān)地址或者同一IP在幾十秒內(nèi)換了三張MAC基本可以斷定正在發(fā)生ARP欺騙。5.2 三步驗(yàn)證防御是否生效第一步驗(yàn)證主機(jī)側(cè)。對抗時(shí)期用arp -a或ip neigh show看網(wǎng)關(guān)MAC是否為合法值如果靜態(tài)條目被改寫或消失說明防御還沒兜住。第二步看交換機(jī)側(cè)DAI攔截統(tǒng)計(jì)show ip arp inspection statistics重點(diǎn)看接入端口上Invalid ARP的計(jì)數(shù)是否持續(xù)增長。計(jì)數(shù)不動(dòng)說明拓?fù)湟呀?jīng)干凈計(jì)數(shù)在漲說明還有偽造報(bào)文在打這個(gè)端口需要繼續(xù)定位。第三步看網(wǎng)關(guān)上是否還有偽造源IP。網(wǎng)關(guān)設(shè)備的日志或debug能看到同一源IP不斷發(fā)送不同MAC的ARP這說明攻擊仍然存在只是被攔在了交換機(jī)外面。5.3 用端口計(jì)數(shù)釘住攻擊源攻擊源通常不在網(wǎng)關(guān)而在接入側(cè)。按三步收斂先查交換機(jī)各端口ARP報(bào)文計(jì)數(shù)增長最快的端口優(yōu)先圈定再在該端口配置鏡像用上面的免費(fèi)ARP過濾器抓包對比DHCP Snooping表看誰在冒用地址如果攻擊者持續(xù)變換MAC規(guī)避直接把端口shutdown觀察全網(wǎng)是否恢復(fù)恢復(fù)即說明攻擊源就在這個(gè)口下面再做接入層隔離和終端整改。把這一組過濾表達(dá)式和交接步驟直接丟給值班人員配合交換機(jī)的MAC地址表通常在一個(gè)小時(shí)內(nèi)就能把同一個(gè)VLAN內(nèi)的偽造源定位到具體接口再決定是隔離終端還是從網(wǎng)絡(luò)設(shè)計(jì)上收緊二層信任范圍。本文還有配套的精品資源點(diǎn)擊獲取