應(yīng)用

技術(shù)

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

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

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

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

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

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

2、IPv6協(xié)議

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

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

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

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

Source/Destination Address:128位bit的地址空間,號稱地球上每個沙子都能分配到獨立的IP地址。

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

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

2.2、看懂IPv6地址

和IPv4不同,IPv6采用16進(jìn)制來表示,將整個地址分為8個段,每段之間用冒號隔開,每段的長度為16位,表示如下: XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/X,并且IPv6有地址簡化的寫法,通過下圖可以了解簡化寫法。


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

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

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

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

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

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

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

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

3.1、NDP是什么

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

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

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

路由器重定向:與IPv4一樣

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

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

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

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

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

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

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

3.2.2、無感知的IP地址自動配置

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

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

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

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

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

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

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

4、IPv6過渡技術(shù)

目前IPv6仍處于發(fā)展階段,雖然運營商、互聯(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)了幾種過渡解決方法,分別是:

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

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

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

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

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

4.1、6to4隧道

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

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

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

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

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

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

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

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

注:單獨的雙棧主機(jī)也可以與其他6to4路由器建立隧道。

4.2、ISATAP隧道

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

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


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

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

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

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

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

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

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

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

4.3、NAT64與DNS64技術(shù)

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

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

DNS64:DNS64服務(wù)器本身也是是雙棧主機(jī),當(dāng)IPv6主機(jī)向DNS64服務(wù)器查詢域名時,如果所查詢的域名沒有AAAA記錄,則DNS64會將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域名解析請求(主機(jī)配置的DNS地址是DNS64),解析域名為www.abc.com;

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

若能查詢到則返回域名對應(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,因此這個數(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è)計之初就引入了安全的設(shè)計理念,如認(rèn)證、加密擴(kuò)展頭部,結(jié)構(gòu)化的地址規(guī)劃等。但是IPv6本身設(shè)計上也不斷進(jìn)行更新,不同時期的實現(xiàn)都有所差異。如下圖,類似NDP就有過幾次變化。

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

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

5.1、鏈路安全

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

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

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

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

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

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

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

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

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

拒絕服務(wù)

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

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

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

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

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

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

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

2.啟動一個DAD攻擊,如下圖:

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

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

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


防護(hù)措施

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

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

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

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

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

RA Trust、DHCP Trust屬于信任端口技術(shù):通過將連接DHCP服務(wù)器、網(wǎng)關(guān)路由器的端口配置信任端口,交換機(jī)將只轉(zhuǎn)發(fā)來自信任端口的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é)點必須從IPv6報頭開始,處理/緊跟IPv6報頭鏈中的每個擴(kuò)展報頭,直到發(fā)現(xiàn)最后一個報頭,以此來對上層協(xié)議的內(nèi)容進(jìn)行檢測。如下圖:


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



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

5.2.1、Smurf Attacks

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


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

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

5.2.2、分片安全

概述

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

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

Next Header:標(biāo)識下一個擴(kuò)展頭的類型。

Fragment Offset:分片的偏移量。

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

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

一個分片的示例如下:

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

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

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

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

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

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

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

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

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

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

繞過安全特性:例如RA Guard。

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

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

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

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

Atomic Fragments

Tiny Fragments

Packet Too Big messages

Predictable Fragment IDs

Fragmentation Overlapping

下面的截圖來自:(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等工具可以測試IPv6實現(xiàn)和分片支持情況,另外scapy也可以用于靈活的構(gòu)建數(shù)據(jù)包。

防護(hù)措施

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

配置分片的最長等待時間。

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

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

5.2.3、秘密通道

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

5.2.4、其他

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

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

5.3、過渡階段安全

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

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

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

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

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

5.3.2、自動隧道安全

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


(截圖來源: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)路攻擊場景:


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

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

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

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

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

5.3.3、防護(hù)措施

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

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

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

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

5.4、結(jié)尾

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

中國移動-ipv6安全白皮書