應(yīng)用

技術(shù)

物聯(lián)網(wǎng)世界 >> 物聯(lián)網(wǎng)新聞 >> 物聯(lián)網(wǎng)熱點(diǎn)新聞
企業(yè)注冊(cè)個(gè)人注冊(cè)登錄

IPv6協(xié)議及安全淺談

2019-04-04 09:02 沉思的路人

導(dǎo)讀:在我國(guó),IPv6一直在穩(wěn)步發(fā)展,早已不是多年前只在實(shí)驗(yàn)環(huán)境中存在的場(chǎng)景了,很多互聯(lián)網(wǎng)大廠、高校都用上了IPv6,部分地址寬帶用戶也使用了IPv6。

在我國(guó),IPv6一直在穩(wěn)步發(fā)展,早已不是多年前只在實(shí)驗(yàn)環(huán)境中存在的場(chǎng)景了,很多互聯(lián)網(wǎng)大廠、高校都用上了IPv6,部分地址寬帶用戶也使用了IPv6。就在前些日子,安全研究員Dirk-jan Mollema發(fā)表基于委派攻擊并結(jié)合NTLM Relaying,實(shí)現(xiàn)對(duì)同網(wǎng)段的在域主機(jī)進(jìn)行攻擊文章詳情,其中就使用了基于IPv6的mitm6工具,通過(guò)IPv6網(wǎng)絡(luò)實(shí)現(xiàn)攻擊。

盡管IPv6發(fā)展了很多年,但相對(duì)很多人而言,它還是一個(gè)陌生的對(duì)象,需要我們逐步去了解和認(rèn)識(shí),以備后續(xù)的工作和生活需要。IPv6內(nèi)容很多,由于篇幅有限,無(wú)法詳細(xì)描述,本文僅介紹IPv6相對(duì)關(guān)鍵的組成部分及其相關(guān)安全性。

2、IPv6協(xié)議

2.1、從一個(gè)包結(jié)構(gòu)認(rèn)識(shí)IPv6

(圖片來(lái)源:https://pcedu.pconline.com.cn/1038/10387664.html)

IPv6在RFC2460中描述,相比IPv4,IPv6具有以下特征:

固定的報(bào)文結(jié)構(gòu),更高效的封裝和性能。

Source/Destination Address:128位bit的地址空間,號(hào)稱地球上每個(gè)沙子都能分配到獨(dú)立的IP地址。

Flow Label:流標(biāo)簽?zāi)芰?,?shí)現(xiàn)流量標(biāo)記區(qū)分。

可擴(kuò)展頭部:在固定頭部后面,可以鏈?zhǔn)礁郊釉S多擴(kuò)展頭部,實(shí)現(xiàn)更多功能支持。

2.2、看懂IPv6地址

和IPv4不同,IPv6采用16進(jìn)制來(lái)表示,將整個(gè)地址分為8個(gè)段,每段之間用冒號(hào)隔開(kāi),每段的長(zhǎng)度為16位,表示如下: XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/X,并且IPv6有地址簡(jiǎn)化的寫(xiě)法,通過(guò)下圖可以了解簡(jiǎn)化寫(xiě)法。


(圖片來(lái)源:https://baijiahao.baidu.com/s?id=1611121709439510290&wfr=spider&for=pc)

2.3、不同地址作用大不相同

在RFC2373定義了IPv6的地址類(lèi)型,我們需要了解的主要類(lèi)型如下:

全局單播地址:IPv6公網(wǎng)地址,所有以2或3開(kāi)頭的地址屬于該類(lèi)地址,掩碼是64位。

鏈路本地地址:鏈路本地地址非常重要,用于鄰居發(fā)現(xiàn)、地址配置、路由協(xié)議的協(xié)商等。顧名思義,它僅用于本地鏈路通訊,在本地鏈路有效,無(wú)法跨下一跳。所有以 FE80開(kāi)頭的地址屬于該類(lèi)地址。通常情況下,啟用IPv6協(xié)議的接口會(huì)根據(jù)MAC地址,自動(dòng)生成一個(gè)鏈路本地地址,這個(gè)機(jī)制稱為EUI-64。

站點(diǎn)本地地址:站點(diǎn)本地地址類(lèi)似IPv4中的私網(wǎng)地址,這些地址無(wú)法在互聯(lián)網(wǎng)上進(jìn)行路由。所有以 FEC0開(kāi)頭的地址屬于該類(lèi)地址。

組播地址:組播地址用來(lái)表示一組設(shè)備或接口,所有以 FF開(kāi)頭的地址屬于該類(lèi)地址。其中 FF02::1表示本地鏈路上的所有主機(jī), FF02::2表示本地鏈路上的所有路由器。

3、鄰居發(fā)現(xiàn)協(xié)議(NDP)

3.1、NDP是什么

在IPv6網(wǎng)絡(luò)中,采用NDP協(xié)議取代ARP來(lái)學(xué)習(xí)MAC地址,NDP的數(shù)據(jù)封裝在ICMP v6包中,它主要實(shí)現(xiàn)了以下功能:

鏈路地址管理:維護(hù)一個(gè)IP地址和MAC的關(guān)系狀態(tài)表

無(wú)狀態(tài)地址自動(dòng)配置(SLAAC):能夠在沒(méi)有DHCP服務(wù)器的情況下實(shí)現(xiàn)主機(jī)自動(dòng)學(xué)習(xí)配置IPv6地址

路由器重定向:與IPv4一樣

3.2.1、主機(jī)之間如何通信

鏈路地址管理既然是替代ARP的功能,它所實(shí)現(xiàn)的就是幫助主機(jī)找到目標(biāo)IP的MAC地址,并且維護(hù)這些IP地址和MAC的對(duì)應(yīng)關(guān)系,在必要的時(shí)候進(jìn)行刪除和更新。在IPv6網(wǎng)絡(luò)中,為了學(xué)習(xí)一個(gè)MAC地址,一個(gè)簡(jiǎn)單的NDP交互過(guò)程大致如下:

(圖片來(lái)源:https://blog.csdn.net/qq_38265137/article/details/80466128)

當(dāng)一個(gè)主機(jī)第一次與對(duì)方通信時(shí),它會(huì)在網(wǎng)絡(luò)中發(fā)送一個(gè)鄰居請(qǐng)求(NS)包,這個(gè)NS包攜帶了發(fā)送者的IP和MAC地址,以及發(fā)送者需要請(qǐng)求MAC地址的目標(biāo)IP,這個(gè)NS包被發(fā)送到一個(gè)“被請(qǐng)求節(jié)點(diǎn)多播地址”;

擁有目標(biāo)IP的主機(jī)會(huì)偵聽(tīng)“被請(qǐng)求節(jié)點(diǎn)多播地址”,當(dāng)它收到這個(gè)NS數(shù)據(jù)包后,就知道誰(shuí)要找它,然后這個(gè)主機(jī)會(huì)用一個(gè)鄰居通告(NA)單播回應(yīng)NS請(qǐng)求,告訴對(duì)方自己的MAC地址信息。

通過(guò)這樣一個(gè)簡(jiǎn)單的過(guò)程,雙方就能夠?qū)W習(xí)并創(chuàng)建一條IP-MAC對(duì)應(yīng)記錄。NDP有復(fù)雜的狀態(tài)機(jī)制,這里不做詳細(xì)介紹。想了解的可查看H3C IPv6鄰居發(fā)現(xiàn)經(jīng)典講義。

這里需要解釋一個(gè)名詞,那就是“被請(qǐng)求節(jié)點(diǎn)組播地址”,這是一種特殊的組播地址,每一個(gè)主機(jī)配置好單播IPv6地址后,都會(huì)根據(jù)這個(gè)IP地址自動(dòng)生成一個(gè)對(duì)應(yīng)的“被請(qǐng)求節(jié)點(diǎn)組播地址”,這個(gè)“被請(qǐng)求節(jié)點(diǎn)組播地址”只在本地鏈路上有效,且在鏈路上唯一。這個(gè)“被請(qǐng)求節(jié)點(diǎn)組播地址”的前綴是:FF02::1:FFxx:xxxx/104,后24位是接口IPv6地址的后24位。

3.2.2、無(wú)感知的IP地址自動(dòng)配置

在IPv6網(wǎng)絡(luò)中,我們可以不需要DHCP實(shí)現(xiàn)主機(jī)自動(dòng)獲取網(wǎng)絡(luò)的前綴信息、鏈路環(huán)境信息、并檢測(cè)地址沖突等,完成節(jié)點(diǎn)無(wú)感知接入網(wǎng)絡(luò)。一個(gè)簡(jiǎn)單的地址配置交互過(guò)程如下:

(圖片來(lái)源:https://blog.csdn.net/qq_38265137/article/details/80466128)

在IPv6網(wǎng)絡(luò)中,網(wǎng)關(guān)會(huì)周期性發(fā)送RA數(shù)據(jù)包到多播地址 fe02::1以宣布自己的存在。這個(gè)時(shí)候,網(wǎng)絡(luò)上的主機(jī)會(huì)接收到RA包,通過(guò)RA包攜帶的信息,主機(jī)可以學(xué)習(xí)到接入網(wǎng)絡(luò)所需要配置的地址信息,從而自動(dòng)進(jìn)行IP地址的配置。

反過(guò)來(lái),當(dāng)主機(jī)接入到一個(gè)IPv6網(wǎng)絡(luò)中時(shí),主機(jī)會(huì)自動(dòng)發(fā)起一個(gè)RS包請(qǐng)求地址配置,目的地址為標(biāo)識(shí)所有路由器的多播地址( fe02::2)。路由器收到RS包后,需要馬上發(fā)送一個(gè)RA包以回應(yīng)該主機(jī),以便主機(jī)進(jìn)行地址配置。

3.2.3、DAD-地址沖突檢測(cè)機(jī)制

主機(jī)獲取到IPv6地址后,并非馬上就能使用該地址進(jìn)行通信,需要做一個(gè)重復(fù)地址的檢測(cè),確保網(wǎng)絡(luò)上沒(méi)有相同地址的主機(jī)存在。為了檢測(cè)地址沖突,主機(jī)會(huì)在網(wǎng)絡(luò)上發(fā)送一個(gè)該IP生成的被請(qǐng)求組播地址,源地址為::,如果有節(jié)點(diǎn)應(yīng)答,即收到一個(gè)鄰居通告(NA)包,說(shuō)明該地址已被使用,如果在重傳時(shí)間內(nèi)未檢測(cè)出重復(fù)地址,則認(rèn)為地址可以使用。

(圖片來(lái)源:https://blog.csdn.net/qq_38265137/article/details/80466128)

4、IPv6過(guò)渡技術(shù)

目前IPv6仍處于發(fā)展階段,雖然運(yùn)營(yíng)商、互聯(lián)網(wǎng)公司及高校都在逐步建設(shè),但是互聯(lián)網(wǎng)基礎(chǔ)設(shè)施和應(yīng)用大部分還在使用IPv4。由于IPv4和IPv6本身的不兼容性,為了適應(yīng)這種情況,把各自的網(wǎng)絡(luò)孤島進(jìn)行連接,出現(xiàn)了幾種過(guò)渡解決方法,分別是:

雙棧技術(shù):在網(wǎng)絡(luò)節(jié)點(diǎn)中同時(shí)啟用IPv4和IPv6兩種協(xié)議,使得網(wǎng)絡(luò)可以同時(shí)支持兩種協(xié)議。

隧道技術(shù):采用數(shù)據(jù)包封裝技術(shù),將IPv6數(shù)據(jù)封裝到IPv4數(shù)據(jù)包中,利用IPv4的網(wǎng)絡(luò)中進(jìn)行通信。

翻譯技術(shù):采用類(lèi)似NAT的方式進(jìn)行的轉(zhuǎn)換。

雙棧技術(shù)相對(duì)比較好理解,節(jié)點(diǎn)主要根據(jù)應(yīng)用的通訊的地址,選擇相應(yīng)的網(wǎng)絡(luò)進(jìn)行傳輸即可。

而關(guān)于IPv6隧道技術(shù),本質(zhì)上是數(shù)據(jù)包的二次封裝,借助IPv4網(wǎng)絡(luò),來(lái)實(shí)現(xiàn)IPv6節(jié)點(diǎn)的互聯(lián)。隧道技術(shù)有多種實(shí)現(xiàn),如ipv6 in ipv4、6to4、GRE、ISATAP、Teredo隧道等。

4.1、6to4隧道

當(dāng)孤立IPv6站點(diǎn)之間需要通信時(shí),通過(guò)在IPv4網(wǎng)絡(luò)中創(chuàng)建隧道,實(shí)現(xiàn)兩個(gè)孤立站點(diǎn)之間的互聯(lián)。6to4隧道將IPv6數(shù)據(jù)包封裝在IPv4數(shù)據(jù)包中,通過(guò)IPv4網(wǎng)絡(luò)進(jìn)行通信。6to4借助特殊的配置和條件,實(shí)現(xiàn)了隧道自動(dòng)建立。如下圖:

(圖片來(lái)源:http://blog.sina.com.cn/s/blog_5ec353710101e45y.html)

隧道的建立是由雙棧主機(jī)觸發(fā),IPv6 6to4隧道具有以下特點(diǎn):

自動(dòng)隧道建立:路由器通過(guò)提取ipv6數(shù)據(jù)包目標(biāo)地址后32位來(lái)作為隧道封裝的目的地址,以此來(lái)自動(dòng)建立隧道。

自動(dòng)前綴分配:使用6to4隧道互聯(lián)的IPv6網(wǎng)絡(luò),其前綴都必須基于IANA分配的2002::/16地址空間,每個(gè)6to4站點(diǎn)必須在6to4路由器上配置固定的公網(wǎng)IPv4地址,這個(gè)IPv4結(jié)合IANA前綴,最終形成本站點(diǎn)的IPv6前綴(2002:ipv4-address::/48)。以此,6to4路由器的IPv4地址決定了整個(gè)IPv6站點(diǎn)的地址前綴,如果后期6to4路由器的IPv4地址做了變更,對(duì)整個(gè)站點(diǎn)的影響是全局的。

6to4中繼 :為了幫助那些6to4站點(diǎn)與非6to4的IPv6網(wǎng)絡(luò)進(jìn)行通信,6to4隧道技術(shù)定義了6to4中繼路由器,這些中繼路由器一方面能和6to4路由器建立隧道,同時(shí)也接入了IPv6骨干網(wǎng),通過(guò)這些中繼路由器,6to4站點(diǎn)就能訪問(wèn)IPv6互聯(lián)網(wǎng)了。如下圖:

(圖片來(lái)源:http://blog.sina.com.cn/s/blog_5ec353710101e45y.html)

RFC 3068中為中繼路由器定義了一個(gè)任意播前綴,這樣6to4站點(diǎn)路由器就能找到離自己最近的中繼。另外,IANA為中繼分配了一個(gè)任意播前綴192.88.99.0/24,轉(zhuǎn)換為IPv6前綴就是: 2002:c058:6301::/48,6to4邊界路由器配置一個(gè)默認(rèn)路由到這個(gè)地址就可以。

注:?jiǎn)为?dú)的雙棧主機(jī)也可以與其他6to4路由器建立隧道。

4.2、ISATAP隧道

站內(nèi)自動(dòng)隧道尋址協(xié)議(ISATAP: IntraSite Automatic Tunnel Addressing Protocol) 采用了雙棧和隧道技術(shù),能實(shí)現(xiàn)主機(jī)與主機(jī)、主機(jī)與路由器之間的通信。ISATAP隧道不僅能實(shí)現(xiàn)隧道功能,還可以通過(guò)IPv4網(wǎng)絡(luò)承載IPv6網(wǎng)絡(luò)的ND協(xié)議,從而使跨IPv4網(wǎng)絡(luò)的設(shè)備仍然可以進(jìn)行IPv6設(shè)備的自動(dòng)配置。

在內(nèi)部網(wǎng)絡(luò)中,一個(gè)簡(jiǎn)單的ISATAP隧道示例如下:


(圖片來(lái)源:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc781672(v=ws.10)#isatap)

雙棧主機(jī)自動(dòng)使用特殊的地址格式配置本地鏈路地址, FE80::0:5efe:a.b.c.d ,其中后64比特中5efe為固定,a.b.c.d為接口的IPv4地址。

當(dāng)兩個(gè)主機(jī)通信時(shí),自動(dòng)抽取出IPv4地址建立隧道,只要彼此間IPv4網(wǎng)絡(luò)保持通暢即可實(shí)現(xiàn)。

一般情況下,使用私有IPv4地址的主機(jī)只能在本地網(wǎng)絡(luò)中與其他雙棧主機(jī)建隧道,如果想訪問(wèn)其他外部的IPv6網(wǎng)絡(luò),則需要借助ISATAP路由器,通過(guò)ISATAP路由器,獲取公網(wǎng)IPv6前綴,實(shí)現(xiàn)外部路由。

(圖片來(lái)源:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc781672(v=ws.10)#isatap-router)

ISATAP路由器通過(guò)發(fā)送RA,為內(nèi)網(wǎng)的雙棧主機(jī)分配IPv6前綴

內(nèi)網(wǎng)的雙棧主機(jī)根據(jù)RA,自動(dòng)配置IPv6地址,并將ISATAP路由器作為默認(rèn)網(wǎng)關(guān)

借助ISATAP路由器,與外部的IPv6節(jié)點(diǎn)建立隧道,轉(zhuǎn)發(fā)數(shù)據(jù)。

4.3、NAT64與DNS64技術(shù)

在IPv4網(wǎng)絡(luò)中,NAT有無(wú)可取代的作用,通過(guò)NAT技術(shù),內(nèi)網(wǎng)主機(jī)實(shí)現(xiàn)了互聯(lián)網(wǎng)訪問(wèn)的需求。在IPv6過(guò)渡技術(shù)中,NAT技術(shù)也有一席之地。NAT64一般與DNS64協(xié)同工作,不需要在IPv6客戶端或IPv4服務(wù)器端做任何修改,實(shí)現(xiàn)不同網(wǎng)絡(luò)之間互訪。

NAT64:如名字所示,NAT64是一種網(wǎng)絡(luò)地址與協(xié)議轉(zhuǎn)換技術(shù),通過(guò)地址翻譯,實(shí)現(xiàn)IPv6節(jié)點(diǎn)訪問(wèn)IPv4網(wǎng)絡(luò)。與NAT一樣,NAT64也支持靜態(tài)映射,實(shí)現(xiàn)IPv4網(wǎng)絡(luò)主動(dòng)發(fā)起連接訪問(wèn)IPv6網(wǎng)絡(luò)。NAT64可實(shí)現(xiàn)TCP、UDP、ICMP協(xié)議下的IPv6與IPv4網(wǎng)絡(luò)地址和協(xié)議轉(zhuǎn)換。

DNS64:DNS64服務(wù)器本身也是是雙棧主機(jī),當(dāng)IPv6主機(jī)向DNS64服務(wù)器查詢域名時(shí),如果所查詢的域名沒(méi)有AAAA記錄,則DNS64會(huì)將A記錄(IPv4地址)合成到AAAA記錄(IPv6地址)中,然后返回合成的AAAA記錄用戶給IPv6側(cè)用戶。

注:以下內(nèi)容引用:http://bbs.ruijie.com.cn/thread-33426-1-1.html

NAT64和DNS64的流程如下:

IPv6主機(jī)發(fā)起到DNS64 server的IPv6域名解析請(qǐng)求(主機(jī)配置的DNS地址是DNS64),解析域名為www.abc.com;

DNS64觸發(fā)到DNS server中查詢IPv6地址;

若能查詢到則返回域名對(duì)應(yīng)的IPv6地址,若查詢不到,則返回空;

DNS64再次觸發(fā)到DNS server中查詢IPv4地址;

DNS server返回www.abc.com的IPv4記錄(192.168.1.1);

DNS64合成IPv6地址(64::FF9B::192.168.1.1),并返回給IPv6主機(jī);

IPv6主機(jī)發(fā)起目的地址為64::FF9B::192.168.1.1的IPv6數(shù)據(jù)包;由于NAT64在IPv6域內(nèi)通告配置的IPv6 Prefix,因此這個(gè)數(shù)據(jù)包轉(zhuǎn)發(fā)到NAT64設(shè)備上;

NAT64執(zhí)行地址轉(zhuǎn)換和協(xié)議轉(zhuǎn)換,目的地址轉(zhuǎn)換為192.168.1.1,源地址根據(jù)地址狀態(tài)轉(zhuǎn)換(3ffe:100:200:1::1)->(172.16.1.1);在IPv4域內(nèi)路由到IPv4 server;

IPv4數(shù)據(jù)包返回,目的地址為172.16.1.1;

NAT64根據(jù)已有記錄進(jìn)行轉(zhuǎn)換,目的地址轉(zhuǎn)換為3ffe:100:200:1::1,源地址為加了IPv6前綴的IPv4 server地址64::FF9B::192.168.1.1,發(fā)送到IPv6主機(jī),流程結(jié)束。

5、IPv6 安全

就IPv6安全性而已,盡管在設(shè)計(jì)之初就引入了安全的設(shè)計(jì)理念,如認(rèn)證、加密擴(kuò)展頭部,結(jié)構(gòu)化的地址規(guī)劃等。但是IPv6本身設(shè)計(jì)上也不斷進(jìn)行更新,不同時(shí)期的實(shí)現(xiàn)都有所差異。如下圖,類(lèi)似NDP就有過(guò)幾次變化。

(圖片來(lái)源:https://www.blackhat.com/docs/sp-14/materials/arsenal/sp-14-Schaefer-Workshop-Slides.pdf)

針對(duì)IPv6協(xié)議、IPv6應(yīng)用、過(guò)渡階段使用的技術(shù)等方面,安全研究人員不斷發(fā)現(xiàn)了相關(guān)的安全脆弱。目前在 CVE 漏洞庫(kù)中已有 300 余個(gè)與 IPv6 相關(guān)的安全漏洞被發(fā)布,也有專(zhuān)門(mén)針對(duì)IPv6安全的工具套件,如: thc-ipv6 SI6 Networks' IPv6 Toolkit Chiron scapy6 ip6sic ERNWfuzzing toolkit LOKI 下面參考學(xué)習(xí)網(wǎng)上各類(lèi)大神研究成果,為大家做一下分享。

5.1、鏈路安全

IPv6使用NDP維護(hù)鏈路信息,本質(zhì)和ARP一樣,在局域網(wǎng)中通過(guò)沒(méi)有認(rèn)證的的交互過(guò)程,學(xué)習(xí)相關(guān)的鏈路信息。因此和ARP一樣,面臨著網(wǎng)絡(luò)欺騙、DoS攻擊等安全威脅。來(lái)自thc-ipv6的工具套件可針對(duì)NDP實(shí)現(xiàn)多種攻擊。

網(wǎng)絡(luò)欺騙

針對(duì)前面NDP協(xié)議所介紹的NS、NA、RS、RA,包括DHCP等過(guò)程,均是沒(méi)有認(rèn)證來(lái)源,意味著攻擊者可以在網(wǎng)絡(luò)中實(shí)施欺騙,從而將流量引導(dǎo)到攻擊主機(jī)中。

通過(guò)偽造DHCP服務(wù)器,可以分發(fā)攻擊者自己DNS服務(wù)器,讓主機(jī)的應(yīng)用訪問(wèn)解析到攻擊者服務(wù)器。

發(fā)送虛假重定向,引導(dǎo)流量到攻擊者主機(jī)。

下面使用thc-ipv6工具,模擬一個(gè)RA通告欺騙,讓內(nèi)網(wǎng)主機(jī)自動(dòng)配置我們虛假的IPv6前綴:

1.在kali中啟用RA欺騙,如下圖:

2.同網(wǎng)段的windows 2008,一開(kāi)始只有本地鏈路ipv6地址,后面自動(dòng)獲取了2001開(kāi)頭的IPv6地址,如下圖:

在thc-ipv6中,用于鏈路層欺騙的工具非常多,有NS、NA、DHCP等,通過(guò)了解前面介紹的NDP協(xié)議,大家可以自己進(jìn)行測(cè)試。

拒絕服務(wù)

攻擊者可在DAD過(guò)程不斷響應(yīng)NA包,讓主機(jī)認(rèn)為地址有沖突,一直獲取不到地址,讓主機(jī)無(wú)法接入網(wǎng)絡(luò)。

攻擊者通過(guò)偽造大量的NS/RS報(bào)文,發(fā)送給網(wǎng)關(guān),填充虛假記錄導(dǎo)致網(wǎng)關(guān)的表項(xiàng)溢出,造成網(wǎng)關(guān)無(wú)法提供正常的服務(wù),進(jìn)而導(dǎo)致DoS。

攻擊者可以模擬大量用戶發(fā)送DHCPv6請(qǐng)求報(bào)文,占用服務(wù)器大量的地址資源,導(dǎo)致合法終端沒(méi)有地址資源可以分配。

通過(guò)偽造DHCP請(qǐng)求報(bào)文,消耗網(wǎng)絡(luò)地址,使其他終端無(wú)法獲得地址。

CVE-2010-4669:在windows xp、2003、vista、2008和7中,由于IPv6實(shí)現(xiàn)的問(wèn)題,發(fā)送大量的不同源地址的RA消息(可使atk6-flood_router6),會(huì)導(dǎo)致系統(tǒng)CPU飆升(此項(xiàng)未測(cè)試)

下面模擬DAD拒絕服務(wù)攻擊:

1.啟動(dòng)一個(gè)RA前綴分配,讓同網(wǎng)段的主機(jī)可以獲取地址前綴自動(dòng)配置;

2.啟動(dòng)一個(gè)DAD攻擊,如下圖:

3.禁用并啟用windows 2008的網(wǎng)卡,報(bào)地址沖突:

4.在攻擊主機(jī)上,可以看到相應(yīng)的輸出:

其他flood類(lèi)型的攻擊,在thc-ipv6工具中都有相關(guān)的支持,大家可自行測(cè)試驗(yàn)證:


防護(hù)措施

設(shè)備防護(hù)

網(wǎng)絡(luò)欺騙的本質(zhì)上是沒(méi)有對(duì)來(lái)源進(jìn)行驗(yàn)證,IPv4網(wǎng)絡(luò)中,針對(duì)ARP欺騙、DHCP欺騙等攻擊,在接入設(shè)備上都有相關(guān)的安全特性,如Port Security、DHCP Snooping、IP Source Guard、信任端口等。

在IPv6中,也可采用同樣的防護(hù)手段。目前主流廠商的交換機(jī)都能同樣支持類(lèi)似的安全防護(hù)特性。這類(lèi)防護(hù)的本質(zhì)是在接入層交換機(jī)上建立的一張IP、MAC、Port的可信表項(xiàng),獲取用戶IP地址與MAC地址的對(duì)應(yīng)關(guān)系。在建立了綁定表項(xiàng)之后,能夠保證一個(gè)已經(jīng)獲取了IP地址的用戶只能使用已獲取的地址進(jìn)行通信,過(guò)濾掉所有的不在綁定表項(xiàng)中的IPv6的非法用戶發(fā)送的報(bào)文。

另外一種防御手段是通過(guò)在端口配置數(shù)據(jù)包偵聽(tīng),一旦收到某些類(lèi)似的數(shù)據(jù)包,則將端口關(guān)閉,例如cisco的RA Guard或root Guard之類(lèi)。 相關(guān)的防護(hù)技術(shù)匯總:ND snooping、DHCP snooping、RA Trust、DHCP Trust、RA Guard、DHCPv6 Guard。

其中ND snooping、DHCP snooping是一種動(dòng)態(tài)獲取用戶IP、MAC、Port對(duì)應(yīng)關(guān)系的技術(shù),由接入交換機(jī)實(shí)現(xiàn)。通過(guò)已經(jīng)建立的綁定表項(xiàng),交換機(jī)偵聽(tīng)網(wǎng)絡(luò)上的NDP報(bào)文,比較已經(jīng)獲取到的可信表項(xiàng)中的IP與MAC地址,對(duì)ND報(bào)文進(jìn)行過(guò)濾,丟棄異常的報(bào)文。

RA Trust、DHCP Trust屬于信任端口技術(shù):通過(guò)將連接DHCP服務(wù)器、網(wǎng)關(guān)路由器的端口配置信任端口,交換機(jī)將只轉(zhuǎn)發(fā)來(lái)自信任端口的DHCP通告包以及RA包,從而防御DHCP服務(wù)器和RA偽造。

RA Guard、DHCPv6 Guard屬于非信任端口技術(shù),一旦收到RA或DHCP通告數(shù)據(jù)包,則將端口關(guān)閉。 另外還有限速技術(shù),能有效限制端口收發(fā)數(shù)據(jù)包的速率。

主機(jī)防護(hù)

采用靜態(tài)IP配置

關(guān)閉RA功能:

windows: netsh intipv6 setint[index]routerdiscovery=disabled

Linux: sysctl -w net.ipv6.conf.eth1.accept_ra=0Free

BSD: sysctl net.inet6.ip6.accept_rtadv=0

5.2、擴(kuò)展頭安全

在IPv6中,節(jié)點(diǎn)必須從IPv6報(bào)頭開(kāi)始,處理/緊跟IPv6報(bào)頭鏈中的每個(gè)擴(kuò)展報(bào)頭,直到發(fā)現(xiàn)最后一個(gè)報(bào)頭,以此來(lái)對(duì)上層協(xié)議的內(nèi)容進(jìn)行檢測(cè)。如下圖:


由于IPv6擴(kuò)展頭具有可變性,除了逐跳選項(xiàng)外,并沒(méi)有嚴(yán)格限制順序。某些安全設(shè)備或者無(wú)法識(shí)別多個(gè)擴(kuò)展頭,因此無(wú)法檢查應(yīng)用層內(nèi)容,導(dǎo)致安全策略繞過(guò),甚至拒絕服務(wù)。例如:



另外,針對(duì)IPv6不同的擴(kuò)展頭部,具體的功能選項(xiàng)由頭部中相關(guān)的字段和內(nèi)容決定,攻擊者通過(guò)構(gòu)建特殊的包頭數(shù)據(jù),可以針對(duì)不同擴(kuò)展頭實(shí)現(xiàn)不同的攻擊方式。

5.2.1、Smurf Attacks

Smurf Attacks發(fā)生在“目標(biāo)選項(xiàng)”擴(kuò)展頭中,如下圖,目標(biāo)選項(xiàng)擴(kuò)展頭中,Option Type里面8個(gè)bit中,前2個(gè)bit的值決定了節(jié)點(diǎn)対于該數(shù)據(jù)包的回復(fù)動(dòng)作。當(dāng)值設(shè)置為10時(shí),收到該數(shù)據(jù)包的節(jié)點(diǎn)會(huì)丟棄該數(shù)據(jù)包,并且返回一個(gè)ICMP消息包。


看到這里,大家應(yīng)該已經(jīng)知道這個(gè)攻擊的思路,如下:

采用受害者地址作為源IP,構(gòu)造以10開(kāi)頭的Option Type值,將數(shù)據(jù)包發(fā)送到標(biāo)識(shí)所有主機(jī)的組播地址: FF02::1,收到數(shù)據(jù)包的主機(jī),都會(huì)回送一個(gè)icmp給到受害者。

5.2.2、分片安全

概述

在IPv6網(wǎng)絡(luò)中,只有發(fā)起者可以進(jìn)行IP分片,節(jié)點(diǎn)會(huì)根據(jù)鏈路MTU的大小自動(dòng)進(jìn)行分片,IPv6支持的鏈路層最小MTU是1280字節(jié)。針對(duì)分片包,中間節(jié)點(diǎn)只會(huì)簡(jiǎn)單進(jìn)行傳遞,只有接收節(jié)點(diǎn)才進(jìn)行分片重組,因?yàn)槁酚善鞑荒軐?duì)數(shù)據(jù)報(bào)進(jìn)行分片,當(dāng)要傳遞一個(gè)過(guò)大的數(shù)據(jù)報(bào)時(shí)就只能將其丟棄,并返回一個(gè) ICMPv6 Packet Too Big 信息。 一個(gè)分片擴(kuò)展包頭如下:

需要關(guān)注的字段如下:

Next Header:標(biāo)識(shí)下一個(gè)擴(kuò)展頭的類(lèi)型。

Fragment Offset:分片的偏移量。

M:1表示還有分片,0表示當(dāng)前是最后一個(gè)分片。

Identification:定義屬于同一數(shù)據(jù)包的分片,同屬1個(gè)數(shù)據(jù)包的分片該標(biāo)識(shí)內(nèi)容一致。

一個(gè)分片的示例如下:

從上圖可以看到,IPv6 數(shù)據(jù)包分為兩部分

不可分段部分 (Unfragmentable Part):主報(bào)頭和某些指定擴(kuò)展頭,如Hop-By-Hop Options, Destination Options、Routing。

可分段部分 (Fragmentable Part):數(shù)據(jù)包的數(shù)據(jù)部分和其他擴(kuò)展頭,如AH、ESP 、Destination Options等。

另外,關(guān)于分片還有以下規(guī)定:

如果在接收第一個(gè)到達(dá)的分片后的60秒內(nèi)沒(méi)有接收到其他的分片,則必須放棄此數(shù)據(jù)包的重新組裝,并且必須丟棄接收到的該數(shù)據(jù)包的所有片段并返回一個(gè)ICMP包。[RFC 2460, 1998]

除了最后一個(gè)分片,每個(gè)分片必須都是8字節(jié)的整數(shù)倍,否則目標(biāo)節(jié)點(diǎn)將會(huì)丟棄該數(shù)據(jù)包并返回一個(gè)ICMP包。[RFC 2460, 1998]

如果組裝后的數(shù)據(jù)包長(zhǎng)度超過(guò)65535個(gè)字節(jié),則必須丟棄該數(shù)據(jù)包并返回一個(gè)ICMP包。[RFC 2460, 1998]

當(dāng)重新組裝IPv6數(shù)據(jù)報(bào)時(shí),如果確定其一個(gè)或多個(gè)組成分片存在重疊的部分,那么整個(gè)數(shù)據(jù)報(bào)(以及任何組成片段,包括那些尚未接收到的片段)必須被靜靜地丟棄。[RFC 5722, 2009]

IPv6分片的安全問(wèn)題主要來(lái)源于以上這些規(guī)定,通過(guò)構(gòu)造不符合上述規(guī)定的數(shù)據(jù)包,可能導(dǎo)致以下問(wèn)題:

繞過(guò)安全設(shè)備:有些安全設(shè)備無(wú)法進(jìn)行分片包重組或有效識(shí)別,將攻擊payload拆分為分片,可以繞過(guò)安全設(shè)備的檢查。

繞過(guò)安全特性:例如RA Guard。

拒絕服務(wù):通過(guò)發(fā)送大量的分片包,來(lái)消耗目標(biāo)節(jié)點(diǎn)的性能,有些節(jié)點(diǎn)不能很好的處理分片,也可能導(dǎo)致拒絕服務(wù)。

根據(jù)不同的響應(yīng)信息,檢測(cè)目標(biāo)機(jī)器的指紋信息。

遠(yuǎn)程代碼執(zhí)行。

根據(jù)上面的介紹,針對(duì)IPv6分片主要攻擊方式如下:

Atomic Fragments

Tiny Fragments

Packet Too Big messages

Predictable Fragment IDs

Fragmentation Overlapping

下面的截圖來(lái)自:(https://kb.juniper.net/InfoCenter/index?page=content&id=JSA10780&pmv=print&actp=&searchid=&type=currentpaging),廠商已經(jīng)修復(fù)。

在kali的thc-ipv6工具中,atk6-firewall6 、atk6-fragmentation6 、atk6-implementation6等工具可以測(cè)試IPv6實(shí)現(xiàn)和分片支持情況,另外scapy也可以用于靈活的構(gòu)建數(shù)據(jù)包。

防護(hù)措施

在安全設(shè)備選型上,要測(cè)試設(shè)備是否能檢測(cè)分片包并對(duì)分片包進(jìn)行重組及識(shí)別,一般情況下,通過(guò)IPv6 Ready Phase-2認(rèn)證的產(chǎn)品應(yīng)該沒(méi)問(wèn)題。

配置分片的最長(zhǎng)等待時(shí)間。

如果網(wǎng)絡(luò)中MTU滿足情況,可以配置策略直接丟棄分片包。

安全設(shè)備配置默認(rèn)禁止的策略。

5.2.3、秘密通道

IPv6擴(kuò)展包頭,大的負(fù)載能力,默認(rèn)啟用的協(xié)議棧,過(guò)渡期間的各自自動(dòng)化隧道等能力特別合適構(gòu)建傳輸通道,通過(guò)在合適的包頭位置填充數(shù)據(jù),就能利用IPv6構(gòu)建通道,傳輸數(shù)據(jù)。 來(lái)自thc-ipv6的工具就帶了類(lèi)似的支持:

5.2.4、其他

類(lèi)似的擴(kuò)展頭安全問(wèn)題還有”IPv6路由頭部“,這個(gè)擴(kuò)展頭部為發(fā)送方提供了一種IPv6數(shù)據(jù)包路徑控制機(jī)制,以控制數(shù)據(jù)包通過(guò)網(wǎng)絡(luò)的路徑。路由擴(kuò)展頭部有兩個(gè)不同版本,分別稱為類(lèi)型0(RH0)和類(lèi)型2(RH2)。正是RH0會(huì)出現(xiàn)DoS的安全隱患。出于安全方面的考慮已被否決[RFC5095], RH2被定義為與移動(dòng)IP共同使用。RH0本質(zhì)是因?yàn)樗梢栽跀U(kuò)展頭中攜帶多個(gè)數(shù)據(jù)包經(jīng)過(guò)的路由器節(jié)點(diǎn)列表,攻擊者可以多次指定相鄰兩個(gè)路由器,在兩個(gè)路由器之間形成路由環(huán)路。 其他擴(kuò)展頭部安全問(wèn)題,主要是利用構(gòu)造畸形的數(shù)據(jù)包,導(dǎo)致處理設(shè)備出錯(cuò)或者消耗性能等。在kali的thc-ipv6工具中,有專(zhuān)門(mén)針對(duì)擴(kuò)展頭的構(gòu)造攻擊工具,如下圖:

另外,針對(duì)擴(kuò)展頭還有一個(gè)很強(qiáng)大的工具:chiron

5.3、過(guò)渡階段安全

5.3.1、雙棧機(jī)制安全風(fēng)險(xiǎn)

1.過(guò)渡期間雙棧部署的網(wǎng)絡(luò)中同時(shí)運(yùn)行著IPv4、IPv6兩套網(wǎng)絡(luò),增加了設(shè)備/系統(tǒng)的暴露面,也意味著防火墻、安全網(wǎng)關(guān)等防護(hù)設(shè)備需同時(shí)配置雙棧策略,導(dǎo)致策略管理復(fù)雜度加倍,防護(hù)被穿透的機(jī)會(huì)加倍。在windows中,啟用了防火墻的系統(tǒng),IPv6也能得到防護(hù);在linux系統(tǒng)中,IPv6采用ip6tables,可能存在沒(méi)有任何防護(hù)策略的情況。

2.在IPv4網(wǎng)絡(luò)中,多數(shù)設(shè)備缺省啟動(dòng)了IPv6協(xié)議,并且自動(dòng)配置了鏈路本地地址,使得IPv4網(wǎng)絡(luò)中存在隱蔽的 IPv6 通道,由于該 IPv6 通道并沒(méi)有進(jìn)行防護(hù)配置,攻擊者可以利用IPv6通道實(shí)施攻擊。例如前言部分介紹的MITM6案例,就是利用了IPv6網(wǎng)絡(luò)攻擊IPv4。

3.雙棧系統(tǒng)的復(fù)雜性也會(huì)增加網(wǎng)絡(luò)節(jié)點(diǎn)的數(shù)據(jù)轉(zhuǎn)發(fā)負(fù)擔(dān),導(dǎo)致網(wǎng)絡(luò)節(jié)點(diǎn)的故障率增加。

建議在沒(méi)有使用IPv6的情況下,關(guān)閉該協(xié)議棧。

5.3.2、自動(dòng)隧道安全

1.利用IPv6隧道機(jī)制,可作為攻擊者外聯(lián)通道。目前很多設(shè)備默認(rèn)開(kāi)啟了IPv6協(xié)議,并且邊界安全設(shè)備可能沒(méi)有配置完善IPv6檢測(cè)策略,另外自動(dòng)化隧道機(jī)制可以非常簡(jiǎn)單的啟用一個(gè)外聯(lián)通道。早在2003年,來(lái)自blackhat的資料,就已經(jīng)講述了IPv6控制通道的情況。如下圖:


(截圖來(lái)源:https://www.blackhat.com/presentations/bh-federal-03/bh-federal-03-warfield/bh-fed-03-paper-warfield.doc)

2.構(gòu)造欺騙數(shù)據(jù)包,形成路由環(huán)路,造成拒絕服務(wù)。下面引用(https://www.usenix.org/legacy/events/woot09/tech/slides/nakibly.pdf))的示例,介紹基于隧道的路由環(huán)路攻擊場(chǎng)景:


(示例來(lái)源:https://www.usenix.org/legacy/events/woot09/tech/slides/nakibly.pdf)

攻擊者在ISATAP內(nèi)部,發(fā)送一個(gè)構(gòu)造的隧道數(shù)據(jù)包,源地址是2002::*,目標(biāo)地址是::0200:5EFE:。

ISATAP路由器收到該數(shù)據(jù)包后,從目的地址取出IPb,作為隧道的目標(biāo)地址,將IPv6數(shù)據(jù)包封裝進(jìn)去,通過(guò)IPv4網(wǎng)絡(luò)發(fā)給IPb。

6to4路由器接收到該數(shù)據(jù)包,解封后發(fā)現(xiàn)目標(biāo)IP是::0200:5EFE:,通過(guò)查找路由表,將數(shù)據(jù)包通過(guò)IPv6網(wǎng)絡(luò)發(fā)回ISATAP路由器。

ISATAP路由器收到該數(shù)據(jù)包后,繼續(xù)該過(guò)程,形成環(huán)路。

5.3.3、防護(hù)措施

要盡可能采用靜態(tài)配置隧道,以降低動(dòng)態(tài)隧道的偽造和非法接入威脅。

防火墻要設(shè)置對(duì)非授權(quán)隧道報(bào)文的過(guò)濾,同時(shí)識(shí)別各種隧道協(xié)議(一般是協(xié)議號(hào)41),能夠?qū)λ淼缊?bào)文的內(nèi)嵌封裝報(bào)文做訪問(wèn)控制。

在防火墻設(shè)備上實(shí)現(xiàn)出站過(guò)濾,只允許授權(quán)隧道端點(diǎn),避免惡意外聯(lián)隧道。

不使用IPv6的情況下,關(guān)閉主機(jī)的IPv6協(xié)議棧。

5.4、結(jié)尾

我們無(wú)法去論斷IPv6在什么時(shí)候會(huì)真正普及起來(lái),但不可否認(rèn)的是,它已經(jīng)進(jìn)入了我們生活。提前籌備,未雨綢繆,總歸是對(duì)的。 本文內(nèi)容源于網(wǎng)上相關(guān)文章資料的學(xué)習(xí)和參考,如有不正之處或侵權(quán),請(qǐng)及時(shí)聯(lián)系修正,謝謝。

參考資料

《TCP/IP詳解-卷一:協(xié)議》W.Richard Stevens

RFC3587

RFC2460

RFC2373

RFC1981

RFC2461

IPv6 Attack & Defense Strategies

SeND (RFC 3971, March 2005)

RA-Guard, PACL (RFC 6105, February 2011)

A Complete Guide on IPv6 Attack and Defense

Security challenges in IPv6 from the campus perspective

IPv6的接入層安全技術(shù) IPv6系列安全篇——SAVI技術(shù)解析

淺談IPv6協(xié)議安全及攻擊

Attacking IPv6 Implementation Using Fragmentation

中國(guó)移動(dòng)-ipv6安全白皮書(shū)