王 禹,焦颯鑭,周 鑒
(1.河南工程學(xué)院 軟件學(xué)院,河南 鄭州 451191;2.中國移動通信集團(tuán)鄭州分公司 網(wǎng)絡(luò)部,河南 鄭州 450000;3.中原動力智能機(jī)器人有限公司 信息技術(shù)部,河南 鄭州 450000)
隨著物聯(lián)網(wǎng)、云計算和人工智能的飛速發(fā)展,IPv6作為下一代互聯(lián)網(wǎng)應(yīng)用解決方案,已經(jīng)得到快速普及[1-2]。據(jù)2020年CNNIC發(fā)布的《中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計報告》[3],截至2019年12月,我國IPv6地址數(shù)量為50 877塊/32,和2018年同期相比增長了15.7%,相對的IPv4地址僅增長了0.4%。從全球視角來看,2019年上半年IPv6地址分配數(shù)量為17 865塊/32,已分配地址總數(shù)為282 222塊/32。
在實(shí)際應(yīng)用中,IPv6通過網(wǎng)絡(luò)運(yùn)營商實(shí)施分配和管理,以保持網(wǎng)絡(luò)正常通信。由于其天然具有海量空間,不同情況下IPv6的配置模式不盡相同。發(fā)展至今,IPv6配置模式主要包括人工配置模式、有狀態(tài)地址自動配置模式、無狀態(tài)地址自動配置模式及其子模式(出自RFC 4941[4]、RFC 4862[5]和RFC 7217[6]等的定義)。吳伊杰等[7]對IPv6地址配置策略進(jìn)行分析并設(shè)計了識別算法,但未提及隱私擴(kuò)展模式地址的處理方法。Foremski等[8]基于聚類算法和信息熵對IPv6地址結(jié)構(gòu)特征進(jìn)行分析研究,對于隨機(jī)化地址分類識別給出了較好的方法,然而并未涵蓋所有的IPv6地址分配模式。
針對IPv6地址進(jìn)行分類識別,能夠有效挖掘IPv6地址的配置策略和部署規(guī)律,為后續(xù)地址探測和網(wǎng)絡(luò)監(jiān)管等打下基礎(chǔ)。本研究分析了已有下一代互聯(lián)網(wǎng)地址分配/生成規(guī)范,提出了一種融合多種特征的IPv6地址分類識別方法,并基于真實(shí)的活躍地址數(shù)據(jù)集驗證了該方法的有效性。
IPv6地址空間巨大,根據(jù)互聯(lián)網(wǎng)數(shù)字分配機(jī)構(gòu)(the internet assigned numbers authority,IANA)的規(guī)劃方案,可分為以下幾類,具體情況如表1所示。其中,2000::/3為全球單播地址空間,其他地址段可用于保留地址、組播、鏈路內(nèi)單播等。
表1 IANA指定的IPv6地址范圍Tab.1 IPv6 address allocation range designated by IANA
圖1展示了全球單播IPv6地址的結(jié)構(gòu),其中全球路由前綴占據(jù)n比特,為IPv6地址的最高序位部分;隨后的子網(wǎng)ID即子網(wǎng)前綴,占據(jù)m比特,用于判定子網(wǎng)地址;最后的接口標(biāo)識符(Interface ID),簡稱接口ID或IID,占據(jù)最后的部分(128-n-m比特)。
圖1 全球單播IPv6地址Fig.1 Global unicast IPv6 address
默認(rèn)情況下,每個互聯(lián)網(wǎng)服務(wù)供應(yīng)商(internet service provider, ISP)能夠?qū)嶋H利用的地址塊至少包含約296個地址,負(fù)責(zé)分配IPv6地址,然而分配策略的差異導(dǎo)致不同ISP生成的IPv6地址結(jié)構(gòu)較為復(fù)雜。
IPv6地址中的全球路由前綴可通過請求相鄰路由器獲得,用來識別某個站點(diǎn)的地址范圍;子網(wǎng)ID用以識別站點(diǎn)中的某個鏈路;接口標(biāo)識符部分,用來定位該鏈路上唯一的網(wǎng)絡(luò)節(jié)點(diǎn)。IPv6地址的生成,可以分為手動地址配置和自動地址配置。前者適用于少量地址的單獨(dú)配置,然而難以廣泛實(shí)施;后者可分為有狀態(tài)地址自動配置(以DHCPv6為代表)和無狀態(tài)地址自動配置(stateless address auto-configuration,SLAAC)。
有狀態(tài)地址自動配置模式下,主要采用動態(tài)主機(jī)配置協(xié)議(Stateful DHCPv6)。由DHCPv6服務(wù)器負(fù)責(zé)統(tǒng)一管理,節(jié)點(diǎn)通過Client/Server方式從DHCPv6服務(wù)器地址池中得到地址,并給節(jié)點(diǎn)提供了DNS服務(wù)器地址、域名等信息。利用DHCPv6,網(wǎng)絡(luò)管理員能夠知道網(wǎng)絡(luò)上連接著哪些節(jié)點(diǎn)設(shè)備及其地址等信息,從而實(shí)施精確管理。
無狀態(tài)地址自動配置模式下,主機(jī)通過接收鄰接路由器宣告的全球路由前綴,結(jié)合接口標(biāo)識符,從而生成一個全球單播地址。無狀態(tài)地址自動配置方式在IPv6客戶端上實(shí)現(xiàn),方法是偵聽這些本地路由器通告(router advertisement,RA),然后將通告的前綴形成可在網(wǎng)絡(luò)上使用的唯一地址。為此,路由器宣告的網(wǎng)絡(luò)前綴必須公布明確的前綴長度(如64位);之后,SLAAC將動態(tài)地形成一個長度為64位的接口標(biāo)識符,并且在宣告的前綴末尾予以添加以形成一個IPv6地址。
最初,在無狀態(tài)地址自動配置模式下,接口標(biāo)識符是使用EUI-64規(guī)則形成的(與形成鏈路本地地址的規(guī)則相同),當(dāng)前部分IPv6設(shè)備仍使用此方法。目前EUI-64方法已被逐步棄用,這是因為MAC地址會暴露節(jié)點(diǎn)隱私,存在一定的安全隱患。當(dāng)前很多操作系統(tǒng),例如Microsoft等都已不再使用EUI-64方法,而是主要利用RFC 4941等定義的額外隱私擴(kuò)展方法。
若按照EUI-64規(guī)范流程,主機(jī)(以H1命名為例)將按以下方式生成EUI-64接口地址:
首先,前綴信息2000:1234:5678::/64將從所在鏈路上的路由器R1的RA消息中學(xué)習(xí),并成為初始前綴。然后,客戶端標(biāo)識符將從分配給H1的MAC地址中創(chuàng)建,此處假定MAC為0200:5555:7777。EUI-64轉(zhuǎn)換的第一步是將MAC地址分成兩半,并在中間放置FF:FE,結(jié)果為0200:55FF:FE55:7777。然后,第7位將被翻轉(zhuǎn),在這種情況下,前8位是00000010(0x02)。接下來,第7位被翻轉(zhuǎn)并且該位變?yōu)?,導(dǎo)致00000000(即0x00),得出0000:55FF:FE55:7777的最終主機(jī)標(biāo)識符。將前綴和主機(jī)標(biāo)識符放在一起時,獲得H1的IPv6地址為2000:1234:5678:0000:0000:55FF:FE55:7777,可以將其縮短為2000:1234:5678::55FF:FE55:7777。由此可知,根據(jù)EUI-64生成的IID(以16進(jìn)制表示)特征較為明顯,即IID[6:10]部分為“FF FE”。
RFC 7217 IPv6更新指定了算法來生成IPv6接口標(biāo)識符及IPv6地址,在相同網(wǎng)絡(luò)內(nèi)保持穩(wěn)定,但會隨著節(jié)點(diǎn)從一個網(wǎng)絡(luò)移動到另一個網(wǎng)絡(luò)。該算法可用表達(dá)式IPv6_IID=Hash(Net_Prefix, Net_ID, Net_Iface_ID, Secret_Key)來總結(jié)和體現(xiàn)。其中:Hash()為加密安全哈希函數(shù);Net_Prefix為本地路由器發(fā)布的IPv6前綴;Net_ID為可選網(wǎng)絡(luò)標(biāo)識符,例如Wi-Fi網(wǎng)絡(luò)的服務(wù)集標(biāo)識符;Net_Iface_ID為底層網(wǎng)絡(luò)接口的標(biāo)識符(例如網(wǎng)絡(luò)接口名稱);Secret_Key為秘密鍵值,通常在系統(tǒng)安裝期間作為隨機(jī)值初始化,并在重新啟動時保持不變。
由此可知,這種情況下IPv6接口標(biāo)識符是通過對多個參數(shù)連接計算安全散列獲得的,最常見的是本地路由器(Net_Prefix)和密鑰(Secret_Key)公布的網(wǎng)絡(luò)前綴。只要節(jié)點(diǎn)保持在相同網(wǎng)絡(luò),它將維護(hù)和配置相同的IPv6地址,這是因為散列函數(shù)的所有參數(shù)保持不變。另外,由于網(wǎng)絡(luò)前綴會改變,所以一旦節(jié)點(diǎn)連接到不同的網(wǎng)絡(luò),IPv6接口標(biāo)識符就會改變。同時,如果節(jié)點(diǎn)返回之前的鏈路,它將配置與之前相同的IPv6地址,因為用于計算該IPv6接口標(biāo)識符的所有參數(shù)都與原來相同。
針對當(dāng)前主要存在的人工分配、EUI-64、隱私擴(kuò)展和有狀態(tài)DHCPv6等地址生成模式的差異,提出了融合多特征的IPv6地址分類識別方法。
幻數(shù)(magic numbers)屬于特征標(biāo)識,通常存在于計算機(jī)處理器、操作系統(tǒng)、調(diào)試器和文件中,一般用來標(biāo)記文件或者協(xié)議的格式。截至目前,計算機(jī)網(wǎng)絡(luò)領(lǐng)域的幻數(shù)已有很多,例如0x8BADF00D,意義為“bad food”,在iOS系統(tǒng)中用來標(biāo)識某個應(yīng)用長時間未響應(yīng);0xB16B00B5,標(biāo)識“big boobs”,微軟Hyper-V需要Linux客戶將其作為“客戶簽名”;0xBAADF00D,即“bad food”,是LocalAlloc函數(shù)用來指示未初始化分配的堆內(nèi)存;0xBADDCAFE,代指“bad cafe”,是動態(tài)鏈接庫Libumem用來指出未被初始化的內(nèi)存區(qū)域;0xDEADBEEF,即“dead beef”,通常表示軟件崩潰或嵌入式系統(tǒng)陷入死循環(huán)。
IPv6地址應(yīng)用16進(jìn)制表示法時,包含32個16進(jìn)制字符,故在語義表達(dá)上具有相當(dāng)明顯的優(yōu)勢。根據(jù)對幻數(shù)的統(tǒng)計歸納與特征識別,對于IPv6人工分配的地址能夠有效予以篩選。
雖然當(dāng)前操作系統(tǒng)所采用的隱私擴(kuò)展方式不盡相同,但其本質(zhì)仍以散列計算方法為核心。依據(jù)散列算法的特性,對于大量輸入,其計算結(jié)果符合均勻分布,生成的散列值具備良好的隨機(jī)性。
熵用以衡量系統(tǒng)的混亂程度或紊亂程度。Shannon[9]借鑒熵的概念,將排除冗余之后的平均信息量定義為信息熵,用以表征一個信源的不確定性、分散性、無序性和變異性等,即涵蓋信息量的多少,公式如下:
(1)
式中:X代表信源的n種不同取值x1,x2,…,xi,…,xn,對應(yīng)的概率為p(x1),p(x2), …,p(xi), …,p(xn)。由式(1)可知,若信源樣本差異較大,則信息熵的值相應(yīng)較大。換言之,變量的不確定性越大,則信息熵值越大。據(jù)此,利用信息熵的特性,IPv6地址的隨機(jī)程度和無序程度能夠通過信息熵的計算得以體現(xiàn)。
由于人工分配、EUI-64、隱私擴(kuò)展和DHCPv6方法在生成模式上有相對顯著的差異,故IPv6地址的生成階段擬采用融合多種特征的識別方法對活躍IPv6地址進(jìn)行分類。
按照難度遞增的規(guī)則,首先,EUI-64方法中針對接口識別符中的“FFFE”設(shè)置較為明確,所以可以率先篩出;然后,通過統(tǒng)計和編制幻數(shù)表,將IPv6地址與計算機(jī)網(wǎng)絡(luò)領(lǐng)域典型的幻數(shù)進(jìn)行比對,如果IPv6地址中存在幻數(shù)則應(yīng)歸類為人工配置地址;最后,針對接口標(biāo)識符空間進(jìn)行信息熵的計算,根據(jù)熵值大小予以判定。
需要指出,有狀態(tài)DHCPv6目前包含順序生成模式和隨機(jī)生成模式,順序生成模式往往相對固定,通常從低位到高位依次賦予地址;而隨機(jī)生成模式針對整個IID空間進(jìn)行計算,結(jié)果呈現(xiàn)類似隱私擴(kuò)展的無規(guī)則。因此,無狀態(tài)地址自動分配中隱私擴(kuò)展模式與DHCPv6隨機(jī)模式的計算結(jié)果,符合相對理想的隨機(jī)性和無序性,此種情況下其信息熵值一般相對較大。
IPv6地址分類流程見圖2。本研究從IPv6地址生成的原理出發(fā),融合上述特征模式對活躍IPv6地址進(jìn)行分類。其中,利用信息熵實(shí)施判斷時,其判定閾值需要根據(jù)已有的地址數(shù)據(jù)集進(jìn)行迭代測算,從而獲得有效閾值。
圖2 IPv6地址分類流程Fig.2 IPv6 address classification process
為了測試方法的有效性,本研究利用真實(shí)活躍的IPv6數(shù)據(jù)集[10]予以驗證,該數(shù)據(jù)集包含的IPv6地址數(shù)為2 510 209。依照本研究設(shè)計的分類識別方法,驗證流程如下:
第一步,人工抽取樣本,對基于EUI-64的IPv6地址數(shù)據(jù)集(稱為A類)和基于幻數(shù)的IPv6地址數(shù)據(jù)集(稱為B類)進(jìn)行標(biāo)注。其中,利用“FF FE”字段匹配EUI-64地址生成特征,而后通過自建常用幻數(shù)集,篩選出含有幻數(shù)字符串的IPv6地址。
第二步,識別SLAAC隱私擴(kuò)展類型與DHCPv6類型地址。考慮到有狀態(tài)DHCPv6包含順序生成和隨機(jī)生成兩種模式,而DHCPv6隨機(jī)生成的IPv6地址與隱私擴(kuò)展的生成地址特征相似,故將二者作為同類(稱為C類)進(jìn)行處理。與之對應(yīng),DHCPv6順序生成的IPv6地址(稱為D類),其有序性較為顯著。
計算接口標(biāo)識符部分的信息熵可知,C類地址與D類地址的熵值存在部分交叉。故此,通過逐步縮短步長的方式發(fā)掘最優(yōu)閾值。分析顯示當(dāng)熵值逼近2.65時,對上述兩類地址的區(qū)分效果最佳,所以將接口標(biāo)識符熵值大于2.65的部分地址歸為C類地址、小于2.65的歸為D類地址。需要指出,根據(jù)前期實(shí)驗,針對不同的IPv6地址集,建議在[2.63,2.65]尋找最優(yōu)熵值。除此之外,考慮到服務(wù)器節(jié)點(diǎn)或路由節(jié)點(diǎn)的重要影響,也存在部分人工配置地址同樣符合此種情況的信息熵判定結(jié)果。
真實(shí)IPv6地址數(shù)據(jù)集分類占比情況如圖3所示。由于基于幻數(shù)的數(shù)據(jù)集(B類)占比僅有0.01%,故在圖3中近似于不可見。比例最高的地址分類為有狀態(tài)DHCPv6順序分配(D類),其次為SLAAC隱私擴(kuò)展/DHCPv6隨機(jī)化類型(C類)。基于EUI-64的地址分類占比為13.18%(A類),然而考慮到內(nèi)嵌MAC地址存在信息泄露的問題,可以預(yù)見未來A類地址的生成數(shù)量會越來越少。
圖3 IPv6地址分類占比Fig.3 Proportions of IPv6 address classification
將分類結(jié)果同手動構(gòu)建的數(shù)據(jù)標(biāo)注集進(jìn)行正確率統(tǒng)計,具體如圖4所示。B類地址最終的分類正確率為98.76%,其原因為在自建的幻數(shù)集之外仍發(fā)現(xiàn)了新的字符串,使得正確率低于預(yù)期,故需要不斷挖掘并擴(kuò)充幻數(shù)集合。將新的幻數(shù)增補(bǔ)至集合之后,能夠完全予以識別。C類和D類地址在當(dāng)前熵值為2.65的情況下,存在少量的誤分類,其分類正確率分別為99.48%和98.63%。
圖4 IPv6地址的分類正確率Fig.4 Accuracy statistics of IPv6 address classification
作為下一代互聯(lián)網(wǎng)通信解決方案,基于IPv6的網(wǎng)絡(luò)部署與應(yīng)用已在迅速落地實(shí)施。鑒于地址生成方式的多樣性,開展對IPv6地址分類識別的研究有助于未來的網(wǎng)絡(luò)監(jiān)管、安全評測等。本研究從地址生成模式入手,設(shè)計并實(shí)現(xiàn)了融合多特征的IPv6地址分類識別方法,并通過真實(shí)活躍的IPv6數(shù)據(jù)集證明了其有效性。