你的IPv6地址組件是否易受攻擊?
本文中專家Fernando Gont介紹了如何檢測你的IPv6地址組件是否易受到攻擊。
IPv6“友鄰發(fā)現(xiàn)”(ND)是IPv6協(xié)議棧的核心部分,它被用于IPv6地址解析和IPv6無狀態(tài)地址自動配置等。在本文中,探討了IPv6的不同組件將如何受到基于ND的攻擊。
在部署IPv6無狀態(tài)地址自動配置(SLAAC)時都需要IPv6節(jié)點。在SLAAC中,本地路由器將IPv6網(wǎng)絡(luò)配置信息提供給本地主機,而本地主機利用這一信息來建立起IPv6連接,這包括IPv6地址的配置等。與動態(tài)主機配置協(xié)議版本6不同,這里沒有地址“租用”。相反地,主機會自己自動配置(或“租用”)IPv6地址。SLAAC采用路由器請求和路由器通告消息來請求和傳達IPv6網(wǎng)絡(luò)及IPv6地址管理配置信息。自動配置過程的運作大致如下:
1. 主機配置鏈路本地地址;
2. 主機檢查地址是否唯一,即主機對(暫時)地址執(zhí)行重復(fù)地址檢測(DAD);
3. 主機發(fā)送路由器請求消息;
4. 在接收路由器通告(RA)后,主機為接收的路由器通告中的每個前綴配置一個或多個暫時IPv6地址;
5. 主機檢查地址是否唯一,即對暫時地址執(zhí)行DAD;
6. 如果地址是唯一的,它通常會成為“首選”地址,可以積極用于網(wǎng)絡(luò)通信。
在本質(zhì)上,這意味著一個節(jié)點首先配置一個鏈路本地IPv6地址,然后基于RA消息中的前綴信息配置一個或多個全局IPv6地址。RA消息可能獲取其他網(wǎng)絡(luò)配置信息,例如到特定網(wǎng)絡(luò)的IPv6路徑、遞歸域名系統(tǒng)服務(wù)器的IPv6地址以及采用的最大傳輸單元(即最大數(shù)據(jù)包大小)。
有些IPv6部署未能對RA消息中的信息執(zhí)行驗證檢查,或者未能執(zhí)行對相應(yīng)數(shù)據(jù)結(jié)構(gòu)的大小限制。
例如,有些部署會對RA消息中的每個前綴配置一個地址,而不會對它們配置的IPv6地址的最大數(shù)量進行任何限制。因此,攻擊者可以對具有多個RA消息(包含多個自動配置前綴)的受害者采用洪水式攻擊,受害者將自動配置很多IPv6地址,最終將會崩潰或停止響應(yīng)。
為了幫助了解這種攻擊的基礎(chǔ),IT管理員可以利用SI6 Networks的IPv6工具包中的ra6工具來執(zhí)行這種攻擊,如下:
ra6 -i eth0 --flood-prefixes 10 -d ff02::1 -l -z 1 -v
這個命令將會向所有本地節(jié)點發(fā)送一個RA消息,每秒包含10個(隨機)前綴。這將導(dǎo)致每個節(jié)點為每個隨機前綴配置一個IPv6地址。
在Unix系統(tǒng)中,ifconfig命令可以部署在任何受害者的節(jié)點來檢查已經(jīng)自動配置的IPv6地址。
圖1 ifconfig命令可以用來探測自動配置的地址
當然,在現(xiàn)實世界攻擊中,RA消息將以更高的速率發(fā)送,例如每秒至少100。然而,由于這種攻擊可能讓所有本地節(jié)點崩潰,本例中采用了更保守的數(shù)據(jù)包速率來執(zhí)行攻擊。
所有RA消息包含路由器壽命值,這表明路由器發(fā)送消息多久后可以作為默認路由器。本地主機從RA消息獲取這個數(shù)值,并通過本地定時器來追蹤它。本地路由器通過定期發(fā)送(未請求的)RA消息來試圖“更新”本地主機的相關(guān)定時器。因此,在正常情況下,路由器的壽命永遠不會到期。然而,攻擊者可以利用這個定時器或參數(shù)來用于拒絕服務(wù)(DoS)目的。如果攻擊者能夠模擬本地路由器,并發(fā)送路由器壽命值為0(或其他小數(shù)值)的RA消息,受害者節(jié)點將從默認路由器列表中刪除假冒路由器,從而發(fā)生拒絕服務(wù)的情況。
假設(shè)特定子網(wǎng)的合法本地路由器是fe80::1,攻擊者會按如下命令利用ra6來向所有本地節(jié)點來執(zhí)行DoS攻擊:
ra6 -i eth0 -s fe80::1 -d ff02::1 -t 0
“-i eth0”表明發(fā)動攻擊所使用的網(wǎng)絡(luò)接口;“-s fe80::1”表明攻擊數(shù)據(jù)包的源地址(合法本地路由器被假冒);“-d ff02::1”表示攻擊數(shù)據(jù)包被發(fā)送到“所有節(jié)點鏈路本地多播地址”,而“-t 0”設(shè)置“路由器壽命值”為0。
Netstat命令可以用來檢查受害者節(jié)點的路由表,并確認指向fe80::1節(jié)點的默認路徑已被刪除。
重復(fù)地址檢測
在IPv6地址被用于網(wǎng)絡(luò)通信之前,該地址需要檢查唯一性—這通常被稱為重復(fù)地址檢測。DAD的工作原理大致如下:
· 愿意使用IPv6地址的節(jié)點將為上述地址發(fā)送一個鄰居請求(NS)消息
· 如果在響應(yīng)中收到鄰居通告(NA),該地址被認為是重復(fù)的,那么DAD失敗。
· 如果沒有收到該地址的NA消息(可能是在一系列NS消息重發(fā)后),該地址被認為是唯一,DAD成功。
DAD相應(yīng)的NS消息被發(fā)送,其中包含設(shè)置為未指定地址(::)的源地址,因此這很容易區(qū)別于用于地址解析(而不是重復(fù)地址檢測)的NS消息。
攻擊者可以通過如下命令利用na6工具來輕松地執(zhí)行針對本地節(jié)點的DoS攻擊:
na6 -i eth0 -b :: -L -v
這個命令指示na6監(jiān)聽(“-L”)網(wǎng)絡(luò)接口eth0中包含源地址設(shè)置為未指定地址(“-b::”)的NS消息,當收到這種消息時響應(yīng)NA。因此,當節(jié)點被引導(dǎo)并嘗試自動配置IPv6地址時,它試圖配置的每個地址都會被認為是重復(fù)地址,則SLAAC會失敗。
Ifconfig命令可以用來檢查受害者網(wǎng)絡(luò)接口卡的配置,如下:
圖2 檢查網(wǎng)絡(luò)接口卡的配置
從上面的截圖中來,至少要注意兩件事情。首先,鏈路本地地址被標記為“重復(fù)”。其次,這個接口沒有配置全局IPv6地址,原因在于,當暫時鏈路本地地址的DAD失敗時,SLAAC被終止。因此,DoS攻擊會發(fā)生。
網(wǎng)絡(luò)不可達檢測(NUD)是IPv6的另一個組件,包括測試到相鄰節(jié)點的路徑,如果當前路徑失效還可以允許選擇替代路徑。最重要的是,攻擊者為感染NUD唯一能做的事情是讓該協(xié)議來相信失敗路徑可以正常工作。
與其他基于ND的攻擊相比,這個漏洞并不是那么吸引攻擊者,因此,大家并不需要過多擔(dān)心這個攻擊方法。