當前位置:
首頁 > 最新 > 宋崟川:RFC 4864《IPv6 的本地網路保護》

宋崟川:RFC 4864《IPv6 的本地網路保護》

前言:

最近有朋友問老趙,國家推動電子政務外網支持IPv6升級改造,那麼電子政務內網如何升級IPv6?

正好前不久 宋崟川 先生寫了一篇文章,介紹IPv6的內網保護,經過申請,宋先生授權 「IPv6頭跳」公眾號轉發這篇文章。

名詞解釋

無狀態地址自動配置 (SLAAC)

無狀態地址自動配置 (SLAAC)是採用IPv6協議的主機自己配置網路地址的一種方式。主機自己配置IP地址,可以減少網路管理者的管理負擔。這與IPv4網路環境中使用的DHCP方式有所改變。

使用SLAAC的問題在於,不論主機是否連接子網,它的地址或介面ID(IID)都是相同的。而默認的地址體系也就是64位擴展唯一標識 (EUI64)是採用MAC地址作為ID的。這樣做的結果就是,攻擊者擁有了子網列表以及主機的MAC地址,就可以從世界任何位置對該主機展開攻擊。

ULA地址

唯一的本地IPv6單播地址(ULA,Unique Local IPv6 Unicast Address)

在RFC4193中標準化了一種用來在本地通信中取代單播站點本地地址的地址。ULA擁有固定前綴FD00::/8,後面跟一個被稱為全局ID的40bit隨機標識符。


RFC 4864

《IPv6 的本地網路保護》導讀

宋崟川

一句話總結本 RFC:NAT 不是安全措施!

IPv4 + NAT 給你帶來的好處,IPv6 環境下不僅能實現,而且效果更好更安全。

註:本導讀可能跟原始 RFC 文檔的表述有出入,為了方便讀者理解,為了進一步推廣此 RFC 的重要意義,所以我更換了一些表述,精簡了一些眾所周知的事實和理解本文需要的基礎知識。

本 RFC 在 2007 年 5 月發布,距今已有 11 年,然而其中的重要觀點一直沒有在我國互聯網界達成廣泛共識。直到今天還有很多人認為部署了 NAT 能夠帶來安全性,由於 IPv6 沒有類似 IPv4 的地址轉換+埠復用 NAT 技術,所以 IPv6 的網路安全(三層和四層)他們就認為是不可能或者很困難的了。

章節大綱

前言

分析了 NAT 帶來的幾點「好處」,並指出了這些好處的本質以及其對 IPv4 環境的影響。

介紹了 IPv6 特有的幾個安全屬性,隱私地址、本地唯一地址、DHCPv6 前綴下發、不可跟蹤的 IPv6 地址

闡述了使用 IPv6 下的技術實現 NAT 所提供「好處」的方法,與第二章的內容一一對應。

案例分析

列舉了幾個 IPv6 環境下還需要努力解決的問題

安全考量

結論

致謝

參考資料

1 前言

本文研究了 NAT 的部署帶來的一些網路特性,這些特性並不是 NAT 的本意——即擴大可用的地址空間,但是長期的部署中,很多人非常依賴 NAT 帶來的這些「好處」,對其根本的劣勢視而不見,甚至將這些好處作為阻撓 IPv6 部署的理由。

本 RFC 就對這些好處的本質做了分析,打破了 NAT 帶來的「安全特性」傳說,實事求是地剖析這些好處。

NAT 的下列特性,的確為網路提供了一些價值:

任何從外部到達內部的數據,都需要先建立狀態

當狀態隨著數據流的結束而過期後,停止接收任何數據包

使節點看起來像是連接在網路邊緣的能力

擁有一批不可公開路由的地址(主要改變了跟蹤狀態的位置,也是第一條的規模要求)。

如果把 IPv6 的本地網路保護 LNP (Local Network Protection)實施起來,能夠在不需要地址轉換的前提下實現上述「安全特性」。

的確簡單,誰都能用,內部想用什麼地址都可以。但是受限於客戶機/伺服器模型的應用程序。對於點對點、多方協作、伺服器在 NAT 內部,就複雜了


一來有經驗的黑客對 NAT 很熟悉,可以越過 NAT 邊界,二來很多靜態 NAT 配置直接映射到單個機器上更是一點保護都沒有。

NAT 所謂的安全來自缺少預設的或是永久的映射狀態,這種比沒有強一點的保護能得到廣泛使用,也只是因為它不需要複雜的管理,就能過濾掉不必要的流量。

用戶/NAT管理員為了允許外部訪問內部的應用程序所做的配置,更是增加的管理複雜度,多個設備共享埠更是不可能的。


需要周期性的去查詢 NAT 狀態表才能知道內網裡的誰正在訪問互聯網上的資源,查這個資料庫並不容易,需要 IPv4 地址和用戶的映射,或者跟時間相關的地址/埠映射


拓撲隱藏的目的就是不讓外界通過地址了解內網的結構,這點 NAT 做到了。但是對於不通過 IP 地址的跟蹤,NAT 無能為力,只是能防止外部對具體系統的跟蹤和刺探。

很多網管為了防止外部對內部網路拓撲的研究來避免漏洞掃描,屏蔽了 traceroute 等等。

對 IPv4 來說地址掃描的確是個問題,因為一旦拓撲已知,子網很小很快掃完,找到所有主機然後掃埠。


大家都用 RFC 1918 的地址,挺夠用的。要更換運營商也很簡單,就更改 NAT 公網一側的配置即可。但是兩個組織要合併,在合併的時候有重合的地址段也是個麻煩事。


雖然 IPv4 + NAT 的組合降低了可能的消耗率,但是還是沒地址了。很多運營商就開始給用戶分配 RFC 1918 的地址,上 NAT,但是地址還是不夠用,多層次 NAT 也出來了,路由就出現很多歧義。有些運營商甚至把先前沒有宣告的公網地址段給用戶分配,然後發現這些地址段已經分配了也宣告了,他們的用戶就沒法訪問這些已經註冊的網路了。

總而言之,全球 IPv4 地址已經告罄。


雖然多網路接入和更換全部地址是兩回事,但是它們合在一起經常作為使用 NAT 的理由。因為接入多個網路通常是為了更換網路地址的中間狀態。

企業的話需要接入多個運營商,也需要有換運營商的能力,這就要求站點要麼支持多個地址前綴,要麼樂意更換前綴,IPv4 的設計中沒考慮處理這些問題。但是如果站點通過 NAT 接入它的運營商,那只有 NAT 設備本身要處理多線接入和更改地址的問題了。

另外如果兩個網路需要合併但是都使用了相同的 RFC 1918 地址段,一般就在兩個網路之間安裝 NAT,避免了全部更換地址。這樣既省錢又有更多時間去更換地址。只是添加一個 NAT 可能還比較簡單,但是如果要合併的網路已經用了地址轉換,那就非常麻煩和複雜了。


本章介紹了 IPv6 的一些特性,這些特性可以用作本地網路保護的一部分,用來替代 IPv4 NAT 帶來的保護。


由於 SLAAC 獲得的地址中嵌入了設備的 MAC 地址,這樣網站就可以隨著設備在網路中移動,還一直跟蹤這個特定設備,RFC 3041 定義了一個 SLAAC 的擴展,能夠隨著時間變化生成不同的介面標示(地址)。隱私地址較短的生命周期也降低了攻擊這個設備的可能性。但是有 DHCP 服務存在的話,隱私地址的生成就要靠 DHCP 伺服器,這有可能給出一個相對永久的地址。


前面提到的 NAT 的諸多「好處」之一就是內網的自治性,在保證本地網路和應用程序的穩定性的同時,可以在多個運營商之間切換。因為 IPv6 支持多個前綴同時使用,本地唯一地址 ULA(Unique Local Address)前綴就被留作本地通訊。ULA 不是為了在互聯網上可路由的,否則會對全球路由聚合產生負面影響。

ULA 的特性:

是個全球唯一的前綴

網路間可以組合或者互聯而不產生地址衝突或者重新分配地址

即使泄漏到網路之外,也不太可能跟其他地址衝突

運營商無關地址,即使在沒有互聯網連接的時候也可以在內部使用。

可以在網路邊界很容易地過濾,因為他們有眾所周知的前綴

實際應用中,應用程序可能把這些地址看作是全局地址,但是地址選擇演算法可能需要識別這兩種前綴以保證穩定性。系統都要遵照 RFC 3484《IPv6 默認地址的選擇》的規定。

ULA 本身沒有安全特性,最有用的特點就是路由的範圍局限在一個管理邊界內。


一個簡單網關的重要功能就是管理本地使用的地址範圍,DHCP-PD 提供了自動 IPv6 前綴下發的機制。分發前綴的路由器/DHCPv6 伺服器不需要了解獲得這個前綴的網路的結構。


目的是使得外部試圖確定內部網路拓撲變得極其困難甚至不可能,子網的結構可能從地址中都看不出來。


一個基本功能的 IPv6 路由器對內可以宣告隨機生成的 ULA 前綴,連接外網時從運營商處利用 DHCP 前綴下發獲得一個可路由的前綴。內部系統受 RFC 3484 的制約將總是使用獲得的全局 IPv6 地址。一條默認路由在簡單的情況下就夠了。


把一個 IPv6 主機和 IPv4 主機直接連接互聯網的風險是一樣的,要想在邊界上提供保護,需要使用防火牆和入侵檢測系統。代理伺服器也可以,但是就打破了端到端的透明性。

在 IPv6 環境下,存在以下保護措施,不需要 NAT,同時可以保證端到端的連通性:

較短生命周期的隱私擴展地址後綴。

受限於基礎設施,IPsec 並不是一直可用。在 IPv4 環境中 IPsec 還需要支持 NAT,往往局限在網路邊緣之間的 VPN 應用,由於沒了 NAT 端到端的 IPsec 在 IPv6 環境中可能性就更高了。

因為 IPv6 一個一般的子網就有 64 位,如果把一個子網的地址隨機分布的話,外部的 ping sweep 式子網掃描就失效了。但這僅限於攻擊者對特定子網沒有直接的訪問,只是遠程掃描。如果有本地訪問的話,使用鄰居發現協議(ND)和 ping6 到鏈路的 ff02::1 地址就可以發現本地的鄰居,然後加上全局前綴就可以簡化掃描了。當然 IPv4 環境下本地攻擊者也有很多掃描的選項。

拓撲探測的目的要探測一個企業內可用的主機,一般就是 ping 掃描。由於 IPv6 的子網就有 64 位,攻擊者就需要發送不現實的個數的 ping 才能了解網路映射。全速全雙工的 40Gbps 鏈路,需要 5000 年才能掃描完單個 64 位的子網。

IPv4 NAT 不是作為一個安全措施發明的,儘管宣傳上有所不同,但它真的不是安全措施。由於很多人因為用了 NAT 就認為他們的網路是安全的,這樣的想法帶來很多安全漏洞。

IPv6 的安全最佳實踐會避免這類虛幻的安全,但是也得要網路邊緣上有正確配置的防火牆和入侵檢測系統才能應對跟 IPv4 相同的威脅。

必須指出的是即使是防火牆也無法讓一個網路完全安全,很多攻擊來自內部或者防火牆所能保護的層次之上。在最終的分析中,每個系統都要為自己的安全負責,系統的每個進程都要足夠健壯以應對諸如堆棧溢出等等挑戰。防火牆所做的,只是阻止網路攜帶未授權流量,從而降低了跨越網路邊界的特定類型攻擊的可能性。

要實現 IPv6 的簡單安全,路由器/網關設備必須要提供有狀態防火牆的功能,就是入站流量只能是來自出站流量的應答,這有時也叫做反射會話狀態。同時也應該有一個簡單的用戶界面,使得用戶可以為特殊的需求創建允許的入站策略。

IPv6 簡單防火牆的管理員和配置界面的設計者需要為特定的配置規則作出安全警示,讓用戶覺察到風險。最終目的是在使 IPv6 互聯網更安全的同時,不給用戶增加複雜度。


IPv6 使得數據流信息收集成為可能,因為所有的用於互聯網和內網/外網的通訊地址都是唯一的,企業和 ISP 可以了解到兩點之間詳細的通訊信息。

同時這種跟蹤是基於每個地址的,如果是為了定位到用戶,還需要額外的信息把地址和用戶關聯起來。使用隱私地址的情況下,為了收集這種信息還需要二層媒介地址。


由於偽隨機隱私地址,主機可以達到一定程度的隱私性,一個會話只能被反向跟蹤到發起端的子網,但是到不了實際的主機,IPv4 NAT 則只能跟蹤到最外圍的公網 NAT 介面。

因為 IPv6 的地址空間太大,如果隨機分布子網和介面標示,一般的嗅探者無法推斷網路拓撲。從單個地址中得到的信息非常有限。大部分時候這個概念對於地址隱私和拓撲保護是足夠的,當然也需要更為複雜的內部路由配置。

網路管理員可以完全把內部 IPv6 網路隔離,內部流量全部使用本地唯一地址。對於需要訪問外界的主機則可以分配多個 IPv6 前綴,根據 RFC 3484 的規則,訪問內部地址時本地唯一地址有更高優先順序。

對於極端的情況,比如網路管理員想要完全隱藏內部 IPv6 的拓撲,就是讓這些拓撲隱藏的主機從外面看起來都在網路邊界,就像 NAT 做到的那樣。有以下三種方法可以做到

讓主機加入內部路由協議,把真實的訪問節點注入 IGP(內部路由協議)。這種方法有嚴重的擴展問題,需要主機秘密加入 IGP,防火牆屏蔽來自外部的 traceroute。主機還需要從 IGP 獲得的信息判斷重複地址。

另一種隱藏內部拓撲的方法是使用隧道機制,移動 IPv6(Mobile IPv6)就是一種。這種情況下其實就是 Mobile IPv6 的 Home Agent 取代了 NAT 在網路邊界上的功能。(由於我對 Mobile IPv6 一無所知,此處就不詳細展開。而且 Mobile IPv6 用得較少,這樣複雜的結構大部分網路不值得去實現。)

還有一種方法(如果二層拓撲允許的話),使用 VLAN 把設備連接到邊界路由器。這種方法會使得節點認為他們實際上在共享一個公共的網段。缺點是內部的流量都會途徑邊界路由器,這就跟管理一個分散式 VLAN 一樣複雜了。

除了 VLAN 以外的兩種方法都會使得子網範圍內的多播無法工作。所以要部署需要有限範圍多播的應用時要注意和拓撲隱藏的協同。


IPv6 通過 ULA(本地唯一地址) 的使用,為本地(內網)的地址分配提供了自主權。同時 IPv6 簡化了每個介面上多個地址的配置,由於節點訪問互聯網時會使用全局地址,所以 ULA 的 IPv6 NAT 也是不需要的。

另外由於 IPv6 的子網都是 /64 的前綴,不用像 IPv4 那樣去優化每個子網的地址使用率,大大減小了操作和配置的成本。


IPv6 是基於子網而不是主機分配地址的,像 IPv4 那樣省吃儉用分配地址是不必要的。RFC 3177 提供了分配 IPv6 地址的推薦方式。

一個顯著的不同就是很多 IPv6 部署場景是一個設備多個 IPv6 地址,而不是 IPv4 那種模式多個主機被迫需要通過 NAT 共享一個地址。


IPv6 設計上就支持站點和主機同時擁有數個前綴,和多個 ISP 互聯。在 IPv4 中支持多地址的根本困難在 IPv6 中不適用。IPv6 站點對活動前綴的添加、刪除和重新分配都在 RFC 4192 和 draft-chown-v6ops-renumber-thinkabout-05 里記錄了相關文檔。然而考慮到跨越多個運營商的會話連續性問題時,IPv6 的多線接入和地址重新分配也是極具挑戰性的。ISP 分配的 IPv6 地址空間仍然依賴所連接的運營商。

更換 ISP 或是 ISP 調整地址池時,DHCP-PD 處理外部連接,ULA 前綴處理內部連接,這樣的組合基本就不需要修改配置了。

通過適當管理 IPv6 地址的生命周期和多個外部前綴的重疊期,可以實現平滑的先合後換過渡。因為只要舊前綴保持有效,已有連接將繼續使用舊前綴,而任何新連接將使用新前綴。

5 案例分析


大部分企業、教育、科研、政府部門的網路都屬於這個類型。一般有一個或數個互聯網出口。

對它們來說使用 NAT 的好處主要有這麼幾個:獨立於運營商的地址分配,拓撲隱藏和隱私保護。

為大中型企業分配的 IPv6 網路足夠大,現在通常是 /48,可以劃分為 65536 個 /64 的子網前綴。

要保護此類型網路用戶的身份,就需要使用 IPv6 隱私擴展,但這並不能隱藏企業內部網的結構。

要對外隱藏內部網路結構,需要使用某種形式的「不可跟蹤」地址。這可以通過使用主機向內部路由協議注入 /128 的主機路由,但是 IGP 一般不是為了處理數千個 IPv6 前綴的,一個企業內可能有數千個要訪問互聯網的機器(2018 年了,肯定不止這個數)

要麼就使用 Mobile IPv6 隧道,移動和非移動設備都要用。

比較欠靈活的方案是在鏈路或子網上配置基於時間的 IPv6 前綴。這能大大減少 IGP 上的路由數量,但是這種拓撲隱藏的方法有時間和子網兩個變數,讓審計變得很困難。

站點使用永久 ULA 地址有一個好處,就是換運營商的時候,只有需要連接到站點之外的設備才需要重新分配 IP 地址。內部的伺服器不需要更改他們的 IPv6 ULA 地址,這樣即使在全局地址更換的時候,也能持續服務。


一般這種網路有幾個路由器和一個互聯網出口,它們的特點有:

通過撥號或者寬頻訪問連接

沒有單獨的網路操作中心 NOC

使用 NAT 作為最廉價的連接性和地址管理方案

大部分情況下,用戶獲得的全球 IPv4 前綴不是固定的,而且很長,經常是 /32 的,沒法分配給私有網路里的設備。有些運營商甚至分配 RFC 1918 中的私有地址給用戶。

這種網路作為互聯網數據接受者的能力受限,即使用戶有足夠知識管理 NAT,提供對外伺服器訪問,一個協議/埠只能映射到一個機器,而且這個地址還要是在互聯網上可達的。如果 ISP 提供的是私有地址段,可能還需要跟 ISP 協商來獲得一個入站的映射。

部署 IPv6 本地網路保護時,有兩種方案分配 IPv6 地址:

DHCPv6 前綴下發

ISP 提供靜態的 IPv6 地址段

對於 DHCPv6 前綴下發,可以讓 ISP 把 IPv6 前綴自動推送到私有網路上,並且讓所有小型私有網路的介面上獲得一個 IPv6 前綴。

靜態配置的話,跟大中型企業的機制一樣。一般用戶對拓撲隱藏沒有很強烈的需求,使用 IPv6 隱私擴展就足夠了。

單個設備為了隱藏身份或者降低攻擊面,需要啟用 IPv6 隱私擴展。

反過來說,這就要求最小分配一個 /64 前綴而不是單個地址。


給單個用戶通常就分配一個 IPv4 地址,運營商對這個地址 NAT,讓用戶能訪問互聯網。這就限制了這個設備作為互聯網數據接受者的能力。由於 NAT 的有狀態特性,這個設備無法成為全球可訪問的互聯網上的伺服器。

使用 IPv6 本地網路保護時,一個用戶一個 IPv6 地址。如果用戶想要隱藏它的身份,可以啟用 IPv6 隱私擴展。


運營商需要支持三組 IP 域:

本身作為大中型私有網路

骨幹網和其他網路設備

給客戶分配的地址

第一類網路可以參考 5.1 節

第二類網路可以使用 ULA 或者穩定的獨立於運營商的 IPv6 地址。只要部署合適的邊界過濾器,外界訪問不了封閉環境。

第三類通常分配一個前綴長度正好是 IPv6 地址位邊界上的地址,跟 DNS PTR 記錄一致。

對於移動運營商,最好是 IPv6 和 IPv4 + NAT 的組合。


由於理論和現實的差距,本地網路保護在很多場景下不能立即部署,而且產品的實現也落後於標準化進程。所以我們列出了下列額外的工作來應對沒考慮到的場景。


防火牆上動態「打洞」(允許外界流量進入)還需要更多研究,例如語音呼叫根據既定規則在防火牆上動態添加允許的訪問控制條目。

沒有理由相信,一個有狀態 IPv6 防火牆產品不能自帶比今天 IPv4/NAT (防火牆)產品更好的默認配置。


功能上其實不缺,難的是可擴展性和性能以及實現的統一性。

小型環境就跟內部路由結合的主機路由即可。

大規模的部署上需要邊界上部署 Mobile IP Home Agent,最好內部流量使用 ULA。

IETF 對這種優化的權衡還需要進一步研究。


隱私地址可以用於限制外部數據流返回特定主機的方式,但是由於缺乏拓撲隱藏,依然可以得到子網地址位。對於完全的隱私,最好有個最佳實踐文檔,描述隱私地址和拓撲隱藏的結合。(就是還沒做好,2018 年了也沒有可靠的解決方案)


這個複雜的問題對於 IPv4 來說從來沒有完全解決,這就是為什麼 NAT 是一個不完全的解決方案。

對 IPv6,有這篇草稿 draft-ietf-shim6-arch-00。(十幾年沒更新了,說明解決起來也不容易,我個人考慮使用 NPTv6 作為過渡方案)


儘管通篇都在討論安全相關的問題,但本文的方法不會引入任何新的安全問題。IPv4 NAT 的賣點是一種安全工具,儘管 RFC 2663 和 RFC 2993 已經討論了 NAT 對安全真正的影響,供應商還一直在其防火牆中提供地址轉換功能。

本文定義了一些 IPv6 的方法,去實現網路管理員的管理目標,但是不會對應用程序和(NAT 副作用帶來的)安全造成負面影響。第六節提到了一些額外的優化工作,提高了網路管理員審計和訪問控制的能力,進而控制了本地資源的總體攻擊風險,他們也就會採取措施來改善本地網路安全。


本文介紹了一些可以在 IPv6 站點上組合使用的技術,以保護其網路架構的完整性。這些技術統稱為本地網路保護,保留專用網路「內部」和「外部」之間明確界限的概念,並使得防火牆過濾,拓撲隱藏和隱私成為可能。

但因為它們可以在必需時保持地址透明性,所以這些方法避免了地址轉換的缺點同時實現了這些目標。

因此,IPv6 中的本地網路保護可以提供 IPv4 網路地址轉換的好處而沒有相應的缺點。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IPv6頭跳 的精彩文章:

TAG:IPv6頭跳 |