◆肖舉 諸葛建偉
(1.數(shù)字工程與先進(jìn)計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室 河南 450012;2.清華大學(xué)網(wǎng)絡(luò)科學(xué)與網(wǎng)絡(luò)空間研究院 北京 100084)
IPv6憑借“一粒沙子一個(gè)地址”及內(nèi)嵌安全能力等技術(shù)優(yōu)勢(shì),天生匹配萬(wàn)物互聯(lián)[1]。與IPv4相比,IPv6在安全性方面進(jìn)行了預(yù)先設(shè)計(jì)和充分考慮,但仍存在一些難以解決的安全風(fēng)險(xiǎn)。首先,128位的地址規(guī)模及臨時(shí)地址機(jī)制,使得基于IPv6的攻擊在追蹤溯源、信息處理等存在著處理時(shí)效上的困難。其次,由于IPv6的報(bào)文結(jié)構(gòu)與IPv4不一致,現(xiàn)有網(wǎng)絡(luò)安全工具不能兼容IPv6,使得IPv6具有攻擊媒介檢測(cè)上的難點(diǎn)。再次,IPv6/IPv4過(guò)渡機(jī)制及IPv6協(xié)議新特性使得IPv6具有新部署協(xié)議風(fēng)險(xiǎn)規(guī)避上的難題。文獻(xiàn)[2]分析了IPv6部署過(guò)程和使用過(guò)程中存在的信息泄露、拒絕服務(wù)、網(wǎng)絡(luò)欺騙等安全威脅。文獻(xiàn)[3]和文獻(xiàn)[4]靈活運(yùn)用了THC-IPv6[5]攻擊套件對(duì)IPv6協(xié)議進(jìn)行了詳細(xì)的測(cè)試研究,實(shí)驗(yàn)證實(shí)了當(dāng)前主流操作系統(tǒng)如Windows、Linux中大量關(guān)于IPv6協(xié)議本身存在的重定向、泛洪等漏洞。文獻(xiàn)[6]和文獻(xiàn)[7]提出了雙棧機(jī)制下將會(huì)無(wú)形增加安全暴露面,漏洞攻擊的方式和載荷將會(huì)更加多樣。本文通過(guò)對(duì)多款智能家庭網(wǎng)關(guān)、家用Wi-Fi路由器進(jìn)行實(shí)驗(yàn)測(cè)試,發(fā)現(xiàn)當(dāng)前設(shè)備普遍存在IPv6鄰居表資源耗盡安全問(wèn)題,并基于Scapy編寫(xiě)了相關(guān)腳本,探討了有關(guān)攻擊的報(bào)文類(lèi)型,并給出了該類(lèi)攻擊的有效防范措施。
IPv6鄰居表在二三層流量轉(zhuǎn)發(fā)中扮演重要角色。然而,通過(guò)發(fā)送惡意流量操作能夠使得被攻擊子網(wǎng)絡(luò)由器每秒僅能解析有限數(shù)量的IPv6和MAC地址,導(dǎo)致鄰居表表項(xiàng)處理功能處于超時(shí)狀態(tài),從而無(wú)法為其他正常報(bào)文提供服務(wù)。該拒絕服務(wù)有兩個(gè)引發(fā)路徑,分為本地IPv6鄰居表資源耗盡和遠(yuǎn)程IPv6鄰表資源耗盡。
一個(gè)IPv6節(jié)點(diǎn)的鄰居表包含與之通信過(guò)的IPv6節(jié)點(diǎn),并顯示其IPv6地址、MAC地址、主機(jī)名(如果已知)及其接口。與IPv4的ARP表類(lèi)似,在本地鏈路上傳送數(shù)據(jù)時(shí),也是根據(jù)MAC地址尋找目的主機(jī)。
如圖1所示,在同一IPv6子網(wǎng)中,攻擊節(jié)點(diǎn)如果使用該子網(wǎng)前綴下的任一地址(可能不存在)并不斷向這一地址發(fā)送IPv6數(shù)據(jù)包,能夠?qū)е戮芙^服務(wù)攻擊。攻擊原理如圖2,攻擊者發(fā)送的IPv6數(shù)據(jù)包的目的地址及其MAC地址并不在攻擊者和子網(wǎng)IPv6路由器的鄰居表中,該子網(wǎng)IPv6路由器有義務(wù)通過(guò)發(fā)送鄰居請(qǐng)求包來(lái)解析這個(gè)目的地址。當(dāng)攻擊者發(fā)送大量源地址隨機(jī)的IPv6數(shù)據(jù)包時(shí),子網(wǎng)IPv6路由器忙于處理攻擊者所發(fā)報(bào)文,導(dǎo)致鄰居表表項(xiàng)處理功能處于超時(shí)狀態(tài),使得試圖加入子網(wǎng)的合法IPv6節(jié)點(diǎn)將無(wú)法從IPv6路由器獲得鄰居發(fā)現(xiàn)服務(wù),從而阻止該合法節(jié)點(diǎn)獲得IPv6網(wǎng)絡(luò)連接。
圖1 本地IPv6鄰居表資源耗盡攻擊
與本地IPv6鄰居表資源耗盡異曲同工,如圖3所示,當(dāng)遠(yuǎn)程攻擊者向受害IPv6子網(wǎng)下任一地址(可能不存在)不斷發(fā)送IPv6數(shù)據(jù)包時(shí),能夠?qū)е戮芙^服務(wù)攻擊。
圖3 遠(yuǎn)程IPv6鄰居表資源耗盡攻擊
數(shù)據(jù)包要想到達(dá)該IPv6地址,需要IPv6路由器的指引與轉(zhuǎn)發(fā)。如圖4所示,當(dāng)攻擊者發(fā)送攻擊數(shù)據(jù)包后,由于IPv6目的地址及其MAC地址同樣不在攻擊者和各IPv6路由器的鄰居表中,因此,需要首先找到目的地址所在IPv6子網(wǎng)絡(luò)由器,進(jìn)行數(shù)據(jù)包重定向,然后由該IPv6子網(wǎng)絡(luò)由器發(fā)送鄰居請(qǐng)求包來(lái)解析這個(gè)目的地址。當(dāng)攻擊者發(fā)送大量源地址隨機(jī)的IPv6數(shù)據(jù)包時(shí),子網(wǎng)IPv6路由器忙于處理攻擊者所發(fā)報(bào)文,導(dǎo)致鄰居表表項(xiàng)處理功能處于超時(shí)狀態(tài),使得試圖加入子網(wǎng)的合法IPv6節(jié)點(diǎn)將無(wú)法從IPv6路由器獲得鄰居發(fā)現(xiàn)服務(wù),從而阻止該合法節(jié)點(diǎn)獲得IPv6網(wǎng)絡(luò)連接。
圖4 遠(yuǎn)程IPv6鄰居表資源耗盡原理
(1)本地鏈路攻擊
ICMPv6報(bào)文是攻擊報(bào)文首選,因其種類(lèi)多,同時(shí)也是保證IPv6協(xié)議運(yùn)行的重要基礎(chǔ)協(xié)議。如圖5所示,ICMPv6報(bào)頭中的Type字段表示該ICMPv6報(bào)文具體的消息類(lèi)型,0至127表示差錯(cuò)報(bào)文,128至255表示消息報(bào)文;Code字段則是基于Type字段區(qū)分一個(gè)粒度更小的ICMPv6報(bào)文。當(dāng)前正在使用的ICMPv6報(bào)文類(lèi)型共有38個(gè),其中使用最多的是類(lèi)型1至4的錯(cuò)誤消息,128、129的請(qǐng)求與應(yīng)答消息,以及133至137的鄰居發(fā)現(xiàn)協(xié)議消息。
圖5 ICMPv6攻擊報(bào)文
(2)遠(yuǎn)程子網(wǎng)攻擊
ICMPv6報(bào)文大多是基于本地鏈路的,除了類(lèi)型為128、129的請(qǐng)求與應(yīng)答消息(IPv6的ping),其他都不能穿透路由,只能在子網(wǎng)內(nèi)部傳輸。因此,進(jìn)行遠(yuǎn)程IPv6子網(wǎng)攻擊的數(shù)據(jù)包必須是使用IPv6全球單播地址的上層數(shù)據(jù)包,基于TCP或者UDP等,只要能夠進(jìn)行路由轉(zhuǎn)發(fā)即可,該報(bào)文也同樣適用本地鏈路攻擊。
與IPv4的ARP泛洪類(lèi)似,IPv6系統(tǒng)同樣維持著一個(gè)IPv6地址和MAC地址匹配的鄰居緩存表。在本文攻擊中,當(dāng)IPv6泛洪還沒(méi)填充完全I(xiàn)Pv6表時(shí),就因?yàn)镮Pv6鄰居表表項(xiàng)處理超時(shí)而導(dǎo)致了拒絕服務(wù)的攻擊效果。
當(dāng)然,理論上,當(dāng)一個(gè)IPv6節(jié)點(diǎn)與IPv6路由器建立連接開(kāi)始通信時(shí),路由器將會(huì)添加該IPv6節(jié)點(diǎn)至IPv6鄰居表,通過(guò)發(fā)送帶有/64前綴范圍內(nèi)的隨機(jī)IPv6地址的相關(guān)報(bào)文到路由器,一方面,路由器將一直處理IPv6鄰居表?xiàng)l目,從而導(dǎo)致路由器流量擁擠,并不能承受住264個(gè)條目的處理壓力;另一方面,IPv6鄰居表也面臨與IPv4一樣的ARP表項(xiàng)被占滿的情況。
然而,IPv6的攻擊報(bào)文與IPv4的相比在數(shù)量與類(lèi)型上有明顯優(yōu)勢(shì)。一是IPv4主要包括ARP、RARP的請(qǐng)求與應(yīng)答報(bào)文,遠(yuǎn)遠(yuǎn)少于IPv6的攻擊報(bào)文類(lèi)型。二是IPv6子網(wǎng)劃分往往是/64,數(shù)量級(jí)遠(yuǎn)遠(yuǎn)高于IPv4的/24子網(wǎng)。在數(shù)量與類(lèi)型的雙重疊加下,防火墻等防御手段在計(jì)算能力上往往無(wú)法防范此類(lèi)惡意流量。IPv6鄰居表資源耗盡與IPv4 ARP泛洪的異同如表1所示:
表1 與IPv4 ARP泛洪的區(qū)別
在THC-IPv6攻擊套件已有該類(lèi)攻擊相關(guān)腳本,但是該腳本基于Linux編寫(xiě),讀取Linux的MAC緩存,不能良好測(cè)試其他系統(tǒng)的IPv6協(xié)議實(shí)現(xiàn)。本文的漏洞攻擊利用腳本通過(guò)Scapy[8]來(lái)實(shí)現(xiàn)。Scapy是一個(gè)Python程序庫(kù),允許用戶專(zhuān)注于構(gòu)造指定字段的數(shù)據(jù)包,其余部分由程序庫(kù)自動(dòng)完成。
在本地鏈路攻擊中,選擇發(fā)送ICMPv6協(xié)議類(lèi)型為4的意味著
參數(shù)問(wèn)題的攻擊數(shù)據(jù)包,關(guān)鍵代碼如下:
在遠(yuǎn)程子網(wǎng)攻擊中,選擇發(fā)送基于TCP連接的IPv6攻擊數(shù)據(jù)包,關(guān)鍵代碼如下:
在實(shí)際環(huán)境中,實(shí)施IPv6鄰居表資源耗盡攻擊的可能是非法接入的主機(jī)、被濫用的應(yīng)用程序或遠(yuǎn)程入侵的黑客等,甚至拿一根網(wǎng)線直接連接網(wǎng)絡(luò)即可進(jìn)行此類(lèi)操作。本文構(gòu)建一個(gè)模擬實(shí)驗(yàn)環(huán)境進(jìn)行對(duì)家用路由器設(shè)備進(jìn)行安全測(cè)試,如圖6所示,使用家庭智能網(wǎng)關(guān)為上層ISP路由器,其LAN口作為Internet輸入接入家用路由器的WAN口,形成一個(gè)二層路由的實(shí)驗(yàn)網(wǎng)絡(luò)。其中,ISP路由器和家用路由器能夠分發(fā)全球IPv6單播地址,相互之間能夠正常通信。
圖6 攻擊實(shí)驗(yàn)網(wǎng)絡(luò)分布
實(shí)行本地鏈路攻擊時(shí),本地攻擊者位于家用路由器的網(wǎng)絡(luò)中,然后任選該IPv6子網(wǎng)中的某一地址作為目的地址,利用Scapy的循環(huán)發(fā)送函數(shù)sendp()或者sendfast()進(jìn)行惡意數(shù)據(jù)包發(fā)送。此時(shí),嘗試ping該路由器時(shí),發(fā)現(xiàn)該路由器已經(jīng)處于UNREACHABLE狀態(tài)。
實(shí)行遠(yuǎn)程子網(wǎng)攻擊時(shí),遠(yuǎn)程攻擊者位于ISP路由器網(wǎng)絡(luò)中,與家用路由器處于平行狀態(tài),然后任選家用路由器子網(wǎng)中的某一地址作為目的地址,利用Scapy的循環(huán)發(fā)送函數(shù)sendp()或者sendfast()進(jìn)行惡意數(shù)據(jù)包發(fā)送。此時(shí),嘗試ping該路由器時(shí),發(fā)現(xiàn)該路由器也已經(jīng)處于UNREACHABLE狀態(tài)。
在搭建的實(shí)驗(yàn)環(huán)境中,本文的實(shí)驗(yàn)測(cè)試對(duì)象包括基于Linux的ASUS、D-Link、TP-Link、TOTOLINK等廠商的多款家用路由器,以及基于eCos的Tenda AC8路由器,測(cè)試對(duì)象均存在被IPv6鄰居表資源耗盡攻擊拒絕服務(wù)的漏洞,相關(guān)設(shè)備漏洞已申報(bào)CNVD國(guó)家信息安全漏洞共享平臺(tái),如表2所示。
表2 家用路由器IPv6鄰居表資源耗盡漏洞編號(hào)
與IPv6協(xié)議的路由欺騙、鄰居欺騙等拒絕服務(wù)攻擊不同,如采用源地址驗(yàn)證協(xié)議SAVI、安全鄰居發(fā)現(xiàn)SEND等安全措施,其本身的計(jì)算量已經(jīng)可觀,而在需要檢測(cè)大量的攻擊報(bào)文時(shí)將直接導(dǎo)致拒絕服務(wù)。如果改變子網(wǎng)劃分由/64調(diào)整為/120,將會(huì)違背無(wú)狀態(tài)地址自動(dòng)配置SLAAC的標(biāo)準(zhǔn)。如果對(duì)IPv6報(bào)文進(jìn)行數(shù)量統(tǒng)計(jì),在一定時(shí)間內(nèi)數(shù)量超出了預(yù)定閾值,超出部分路由器將不作任何處理,既能滿足鄰居表動(dòng)態(tài)學(xué)習(xí)需求,也能避免源地址驗(yàn)證帶來(lái)的資源損耗。因此,限制IPv6報(bào)文速率將是一個(gè)較好的防御措施選擇。
本文基于Scapy編寫(xiě)了IPv6鄰居表資源耗盡導(dǎo)致拒絕服務(wù)攻擊的腳本,對(duì)多款家用路由器進(jìn)行了測(cè)試,發(fā)現(xiàn)均存在本地及遠(yuǎn)程IPv6鄰居表資源耗盡的安全問(wèn)題。而該類(lèi)問(wèn)題由于惡意報(bào)文類(lèi)型更加復(fù)雜多元,IPv6地址空間也更龐大,容易被忽視,需引起家用路由器廠商的重視以進(jìn)行有效防范。
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2022年8期