風(fēng)險(xiǎn)剖析:IPv6擴(kuò)展報(bào)頭帶來的安全隱患
IPv6數(shù)據(jù)包的結(jié)構(gòu)可以讓這個(gè)下一代網(wǎng)絡(luò)協(xié)議在可預(yù)見的未來實(shí)現(xiàn)幾乎無限的可擴(kuò)展性。然而,經(jīng)驗(yàn)表明,這種靈活性是要付出代價(jià)的,這個(gè)代價(jià)就包括安全隱患。在本文中IPv6安全專家Fernando Gont探討了IPv6擴(kuò)展報(bào)頭帶來的安全風(fēng)險(xiǎn)以及降低這種風(fēng)險(xiǎn)的方法。
當(dāng)涉及到可擴(kuò)展性時(shí),IPv4數(shù)據(jù)包結(jié)構(gòu)有兩個(gè)主要的限制。
首先,IPv4有著有限的選項(xiàng)空間(至多40字節(jié)),這種數(shù)據(jù)包結(jié)構(gòu)限制了IPv4可部署的擴(kuò)展的數(shù)量和類型。其次,所有IPv4選項(xiàng)(無論是針對(duì)路由器還是主機(jī))共享相同的“容器”,這意味著轉(zhuǎn)發(fā)IPv4數(shù)據(jù)包的每個(gè)路由器都必須處理所有IPv4選項(xiàng),以防其中一個(gè)選項(xiàng)必須要由IPv4路由器處理。
相比之下,IPv6數(shù)據(jù)包結(jié)構(gòu)則明顯不同。對(duì)于可擴(kuò)展性,IPv6選項(xiàng)通過IPv6“擴(kuò)展報(bào)頭”來傳遞,而不是在強(qiáng)制IPv6報(bào)頭(具有固定大小)。IPv6擴(kuò)展報(bào)頭被插入在強(qiáng)制IPv6報(bào)頭和上層協(xié)議報(bào)頭之間,下圖顯示了IPv6數(shù)據(jù)包的結(jié)構(gòu),包括兩個(gè)擴(kuò)展報(bào)頭。
從這個(gè)圖來看,IPv6數(shù)據(jù)包遵循“菊花鏈”的結(jié)構(gòu),其中每個(gè)IPv6擴(kuò)展報(bào)頭指定了緊跟的報(bào)頭類型(通過“Next Header”字段),并且每個(gè)擴(kuò)展報(bào)頭指定了自己的長度(或者具有相關(guān)的固定長度)。因此,通過從強(qiáng)制IPv6報(bào)頭開始,并且每次跟隨一個(gè)擴(kuò)展報(bào)頭,整個(gè)IPv6報(bào)頭鏈可以傳輸?shù)缴蠈訁f(xié)議報(bào)頭。下表列出了一些最常見類型的IPv6擴(kuò)展報(bào)頭(來自IANA協(xié)議編號(hào)注冊機(jī)構(gòu))相應(yīng)的Next Header值:
基于將對(duì)選項(xiàng)進(jìn)行處理的節(jié)點(diǎn)類型,它們被傳遞在不同類型的IPv6擴(kuò)展報(bào)頭。例如,預(yù)計(jì)將由到目標(biāo)沿路徑的所有節(jié)點(diǎn)處理的選項(xiàng)會(huì)放在逐跳選項(xiàng)擴(kuò)展報(bào)頭中。而僅由目標(biāo)節(jié)點(diǎn)處理的選項(xiàng)則包含在目的選項(xiàng)擴(kuò)展報(bào)頭中。其他擴(kuò)展報(bào)頭可能有不同的用途。例如,路由報(bào)頭用來影響數(shù)據(jù)包如何轉(zhuǎn)發(fā)到目標(biāo)節(jié)點(diǎn),而分段報(bào)頭則被用于分段/重組機(jī)制。
有些擴(kuò)展報(bào)頭必須遵循特定順序。例如,如果有逐跳選項(xiàng)報(bào)頭,它必須是強(qiáng)制IPv6報(bào)頭之后的第一個(gè)擴(kuò)展報(bào)頭。這個(gè)概念很簡單;在IPv6報(bào)頭鏈中,將由到目標(biāo)沿路徑的所有節(jié)點(diǎn)處理的擴(kuò)展報(bào)頭必須先于僅由目標(biāo)節(jié)點(diǎn)處理的擴(kuò)展報(bào)頭。因此,IPv6路由器并不需要處理IPv6報(bào)頭鏈中所有報(bào)頭,而是停止在最后一個(gè)擴(kuò)展報(bào)頭--其中包含需由IPv6路由器處理的選項(xiàng)。
此外,由于逐跳選項(xiàng)報(bào)頭僅包含必須由數(shù)據(jù)包傳送路徑所有節(jié)點(diǎn)處理的選項(xiàng),路由器將不會(huì)浪費(fèi)資源來處理不必要的選項(xiàng)。
在IPv6中,所有分段相關(guān)的報(bào)頭字段已經(jīng)從強(qiáng)制IPv6報(bào)頭中刪除,并移動(dòng)到(可選)“分段報(bào)頭”。從概念上講,原始(或“未分段”)數(shù)據(jù)包總是在發(fā)送節(jié)點(diǎn)構(gòu)建,并只有在那時(shí)(如果需要)會(huì)進(jìn)行分段。下圖展示了原始IPv6數(shù)據(jù)包的概念結(jié)構(gòu):
原始數(shù)據(jù)包由“不可分段部分”和“可分段部分”組成。不可分段部分包括IPv6報(bào)頭以及必須由到目標(biāo)節(jié)點(diǎn)沿路徑所有節(jié)點(diǎn)處理的擴(kuò)展報(bào)頭,即到路由報(bào)頭的所有報(bào)頭(如果存在,也包括路由報(bào)頭),或者逐跳選項(xiàng)報(bào)頭(如果存在),或者沒有擴(kuò)展報(bào)頭。而不可分段部分則由其余數(shù)據(jù)包部分組成;即只能由最終目標(biāo)節(jié)點(diǎn)處理的所有IPv6擴(kuò)展報(bào)頭,還有上層報(bào)頭和數(shù)據(jù)。不可分段部分將存在于所有產(chǎn)生的片段中,而可分段部分將被分割為多個(gè)片段。因此,每個(gè)片段是通過“串聯(lián)”原始數(shù)據(jù)包的不可分段部分(具有一個(gè)分段報(bào)頭)和一塊可分段部分來構(gòu)建。下圖展示了基于上面描述的邏輯數(shù)據(jù)包如何分割成多個(gè)IPv6片段:
尋找上層協(xié)議信息
在IP數(shù)據(jù)包執(zhí)行簡單訪問控制列表(ACL)所需的每個(gè)路由器或中間體都必須能夠找到上層協(xié)議報(bào)頭,該報(bào)頭通常包括源和目的地端口號(hào)。IPv4的數(shù)據(jù)包結(jié)構(gòu)讓節(jié)點(diǎn)可以很容易找到上層協(xié)議報(bào)頭:通過從IPv4報(bào)頭跳過在IPv4“互聯(lián)網(wǎng)報(bào)頭長度”字段所指示的字節(jié)數(shù),處理節(jié)點(diǎn)可以簡單地“跳過”選項(xiàng)空間。
然而,在IPv6的情況下,并沒有尋找上層協(xié)議報(bào)頭的“線索”。因此,尋找上層協(xié)議報(bào)頭的唯一方法是在強(qiáng)制IPv6報(bào)頭開始,處理/緊跟IPv6報(bào)頭鏈中的每個(gè)擴(kuò)展報(bào)頭,直到發(fā)現(xiàn)最后一個(gè)報(bào)頭。
應(yīng)當(dāng)指出的是,這個(gè)過程曾經(jīng)更為復(fù)雜:IPv6報(bào)頭鏈本身可以是分段的,擴(kuò)展報(bào)頭和上層協(xié)議報(bào)頭被分成多個(gè)片段。因此,無狀態(tài)設(shè)備(即在檢查前未執(zhí)行分段重組的設(shè)備)不太可能獲取上層協(xié)議信息。例如,下面的數(shù)據(jù)包以前被認(rèn)為是有效的:
幸運(yùn)的是,2014年年初發(fā)布的RFC 7112已經(jīng)宣布這些數(shù)據(jù)包為非法,因此最新的部署并不需要擔(dān)心它們(可以丟棄它們)。#p#
IPv6擴(kuò)展報(bào)頭的安全隱患
IPv6擴(kuò)展報(bào)頭的安全隱患通常分為下面幾種:
· 安全控制規(guī)避
· 由于處理要求而創(chuàng)造拒絕服務(wù)條件
· 因?yàn)椴渴疱e(cuò)誤而創(chuàng)造拒絕服務(wù)條件
· 每個(gè)擴(kuò)展報(bào)頭特定的問題
正如上文所述,在IPv6數(shù)據(jù)包中尋找上層協(xié)議報(bào)頭被證明是一項(xiàng)艱巨的任務(wù)。更糟糕的是,有些中間體和安全設(shè)備希望上層協(xié)議報(bào)頭緊跟強(qiáng)制IPv6報(bào)頭,因此,當(dāng)使用IPv6擴(kuò)展報(bào)頭時(shí),無法找到或者識(shí)別上層協(xié)議。例如,這些安全設(shè)備或中間體無法認(rèn)識(shí)到下面的數(shù)據(jù)包是TCP端,這僅僅是因?yàn)槭褂昧四康倪x項(xiàng)擴(kuò)展報(bào)頭:
這樣的原因在于,上述設(shè)備不會(huì)處理整個(gè)IPv6報(bào)頭鏈來尋找上層報(bào)頭,而是假設(shè)強(qiáng)制IPv6報(bào)頭的“下一報(bào)頭”字段描述/指示了上層協(xié)議類型。因此,上述圖表中的數(shù)據(jù)包被認(rèn)為是“目的選項(xiàng)”數(shù)據(jù)包,而不是TCP段。
如果安全設(shè)備采用這種(存在問題的)邏輯,并且已經(jīng)被配置為執(zhí)行“默認(rèn)允許”政策(即允許所有數(shù)據(jù)包,除非它們符合指定的規(guī)則之一),它們可能將受到規(guī)避攻擊。這種攻擊的簡單變體是,數(shù)據(jù)包采用多個(gè)IPv6擴(kuò)展報(bào)頭,或者一個(gè)大的擴(kuò)展報(bào)頭來在多個(gè)部署中觸發(fā)不同的問題。有些部署會(huì)限制它們處理的擴(kuò)展報(bào)頭的數(shù)量,或者對(duì)于它們可以檢查的關(guān)于“多少字節(jié)進(jìn)入IPv6數(shù)據(jù)包”有著特定的限制。這樣的情況可以從下面的圖中反映出來:
執(zhí)行一種或兩種限制并采用“默認(rèn)允許”政策的部署也容易受到規(guī)避攻擊。而某些極端情況數(shù)據(jù)包處理的模糊性則代表著規(guī)避安全控制的另一種可能。
通過隱藏上層協(xié)議類型(正如上文所述)或者隱藏應(yīng)用數(shù)據(jù)流,IPv6分段還可以被利用來執(zhí)行規(guī)避攻擊。在過去的幾年中,我們發(fā)現(xiàn)很多部署容易受到這些規(guī)避技術(shù)的攻擊。例如,RFC 7113在RA-Guard事件中描述了這個(gè)問題,相同的技術(shù)還可以用于繞過某些IPv6防火墻。此外,有些數(shù)據(jù)包處理方式的不一致可能導(dǎo)致安全控制規(guī)避,正如思科公司的Panos Kampanakis和研究人員Antonios Atlasis所指出的。
IPv6擴(kuò)展報(bào)頭可能對(duì)設(shè)備處理產(chǎn)生負(fù)面的性能影響。雖然這可能似乎不像一個(gè)安全問題,但這也需要慎重考慮。例如,IPv6路由器部署通常處理在軟件(而不是硬件)中包含逐跳選項(xiàng)擴(kuò)展報(bào)頭的數(shù)據(jù)包,其他IPv6路由器部署則處理在軟件中部署IPv6擴(kuò)展報(bào)頭(當(dāng)它們被配置為執(zhí)行ACL時(shí))的數(shù)據(jù)包。這意味著,除非有適當(dāng)?shù)木徑獯胧?例如數(shù)據(jù)包過濾/或?qū)Σ捎脭U(kuò)展報(bào)頭的數(shù)據(jù)包的限速),攻擊者可能會(huì)通過簡單地發(fā)送大量采用IPv6擴(kuò)展報(bào)頭的IPv6流量來執(zhí)行拒絕服務(wù)(DoS)攻擊。
雖然IPv6協(xié)議本身(以及很多部署)已經(jīng)存在很多年,最近在很多部署中發(fā)現(xiàn)了IPv6擴(kuò)展報(bào)頭處理過程中的漏洞問題。發(fā)現(xiàn)這些漏洞的可能原因在于,大多數(shù)擴(kuò)展報(bào)頭并沒有真正部署在現(xiàn)實(shí)世界的流量中,從而很少使用相應(yīng)的代碼。出于這個(gè)原因,在有些部署中發(fā)現(xiàn)IPv6擴(kuò)展報(bào)頭的處理中仍然存在漏洞并不令人驚訝。
最后,除了IPv6擴(kuò)展報(bào)頭的一般安全隱患外,每個(gè)擴(kuò)展報(bào)頭類型往往都有著自己特定的安全問題。例如,安全研究人員在2007年報(bào)道如何使用路由報(bào)頭Type 0(現(xiàn)在已經(jīng)過時(shí))來執(zhí)行DoS攻擊。另一個(gè)具有安全隱患的擴(kuò)展報(bào)頭是Fragment Header,它用于IPv6的分段/重組功能。雖然分段/重組機(jī)制的很多安全隱患在IPv4領(lǐng)域已經(jīng)很有名,但現(xiàn)在很多相關(guān)問題已經(jīng)悄悄潛入IPv6部署,從DoS攻擊到信息泄露或規(guī)避攻擊(詳情請(qǐng)參與筆者最近對(duì)可預(yù)測片段標(biāo)識(shí)值的IETF草案和Antonios Atlasis在2012年歐洲黑帽大會(huì)的展示)。
結(jié)論
很多(如果不是大多數(shù))源自IPv6擴(kuò)展報(bào)頭的安全問題往往與如何部署相應(yīng)的支持有關(guān):從有漏洞的代碼,到在軟件(而不是硬件)中處理擴(kuò)展報(bào)頭的設(shè)備。有些部署可能提供緩解技術(shù),例如對(duì)采用IPv6擴(kuò)展報(bào)頭的數(shù)據(jù)包進(jìn)行限速(在創(chuàng)造DoS條件之前丟棄多余的流量)。在其他情況下,管理員可能沒有其他選擇,只能過濾相應(yīng)的流量。顯然這是值得關(guān)注的領(lǐng)域,隨著IPv6網(wǎng)絡(luò)部署工作繼續(xù)推進(jìn),企業(yè)網(wǎng)絡(luò)安全專業(yè)人士必須密切關(guān)注。