打破NATs是安全的假象  

Bhaskar Puranik

Infosys Technologies Limited, Electronics City, Hosur Road

Bangalore 561229 INDIA

Email: bhaskarp@infy.com

 

摘要:

為了獲得更高的彈性和更多的IPv4位址空間以組織內部網路,全球大部分公司使用Network Address Translator(NATs) 。然而NATs僅僅提供必要的隱私性(privacy),卻沒有提供足夠的網路安全機制。本篇文章,用外行人的說法就是嘗試去消除,在私有網路網域是安全的這樣的誤解。文章特別提到有關NATs的安全議題,最後,再進一步討論IPv6可以更安全的達到NATs所提供的功能,因為IPv6有足夠的位址空間。

 

 

前言:

遞減的IPv4 位址空間,意味著只有少數的公司可以有大量的位址,所以目前許多的公司被迫使用"網路位址轉譯機 Network Address Translator"(NATs),和私有網路位址,以便於更佳的組織他們的網路。NATs的確提供一個可以在私有網路放置更多節點(node)的方式,卻也建立了一個安全的假象。即使到今天,對於許多公司,使用NATs和私有網路位址似乎比使用公開的IPv6位址更安全些,但這實在是一個典型的錯誤觀念,像這樣類似的錯誤觀念使得IPv6無法順利的推廣。

 

NATs如何運作:

在圖一,當私有網路的節點A,想要存取Internet上的一個網站的資料,則該站的伺服器,或說是主機-W,此時節點A就和一般的狀況一樣,傳送http要求,在圖中私有網路邊緣的NATs會判斷這個要求需要被送到Internet,NATs對IP封包的頭端來源位址(source address)作變動,使其包含該私有網路的公用位址,並將封包傳送出去。伺服器W收到http要求之後,以私有網路的公用地址為目的地位址,傳送回覆給NATs,NATs收到回覆封包後,判定這是要給節點A的回應,所以NATs將封包目的地的位址改成節點A的私有網路位址。

 

圖一

在私有網路的內部,若節點A要和節點B作溝通,A只需要把B的私有網路位址當作目的地即可,這樣的情況下不需要作任何的位址轉換。

 

NATs和安全性

 

為何NAT是不安全的:

繼續看圖一就可以很清楚的顯示為何NATs是不安全的,讓我們假設有一個懷有惡意的節點M,位於Internet上,設法要闖入私有網路,它只需要假扮成伺服器W,當NAT將節點A的要求傳送到Internet上,節點M會攔截該封包,並用偽造的內容和修改來源位址為W的位址,送出回覆封包,NATs接到這些偽造的封包,會判別成回覆給節點A的封包,之後的動作就和先前提到的一樣,NAT對封包頭端作適當的變動,然後傳送給A。因為NATs只是簡單的位址翻譯器,所以它無法防範像這樣的冒名封包。

 

NATs也缺少點對點的安全性:

NATs最大的缺點也許是它無法提供可靠的點對點安全性,事實上,因為NATs的基本行為,許多已經存在的安全協定並不適用於NATs。為了要從私有網路連到Internet上,NATs必須改變IP位址,這意味著任何依靠檢查IP位址完整性的安全機制將不可行,這顯然是因為NATs的行為中包括更動IP位址的動作。像IPSec,和TCP MD5 Signature Option都不能使用,從更高層的協定來看,例如Secure Shell (SSH),和Source Socket Layer (SSL),同樣的,無法保證點對點的安全性。即使一個安全的連結(connection)可以在NATs和伺服器W之間被建立,但NATs與私有網路節點之間的連線,仍然容易遭受路內部的惡意節點攻擊。此外,像SSH這樣的協定,會將使用者的IP位址作為認證使用,當NATs被當作SSH的一端的時候,所有在私有網路內的的使用者都可以存取遠端的伺服器,遠端的伺服伺因為無法區別私有網路內的使用者而容易遭受到攻擊,所以,實際上,當NATs被使用的情況下,我們無法確保點對點的安全性。

唯一可以確保安全性的做法是:對於從NATs兩邊來的每個封包,在繼續傳送(forwarding)之前都做認證,這樣所要付出的代價會使網路的效能惡化。

然而,在私有網路內部兩點之間的溝通,仍然可以是安全的,因為內部再傳

送封包時並無任的的位址轉換。

 

IPv6:一個比NATs更好的解決辦法?

 

IPv6的隱私性

IPv6帶來了:對於同一個介面(interface)有global IPv6 位址,site-local 位址,和link-local位址的觀念,也就是說,任一個介面可以有一個global的IPv6位址,site-local位址,和一個link-local位址,IPv6中的Site-local位址,和IPv4環境中的私有網路位址是同等的。site-local位址有一個開頭(prefix):FEC0::/10,可以被企業用來分配自己的網路位址,舉例來說,在圖一,節點A可以有一個global位址:3B::A,site-local位址:FEC0::A,和一個linl-local位址:FE80::A,這裡"A"是指節點A的介面識別(interface id)。

 

使用IPv6作溝通:

視溝通對象(communication parties)的不同,不同的IPv6位址可以被使用,舉例來說,在圖一,若節點A與同一個私有網路的節點B作溝通,它可以使用site-local位址FEC0::B當作目的地位址,若節點A和B在同一個區段(link),那麼linl-local位址像是FE80::B也可以當作目的地IP位址。

現在,如果我們要在節點A和伺服器W之間作溝通,我們可以使用global IPv6位址﹔任何從節點A傳送到伺服器W的封包,都會有目的地IP位址w和來源位址3B::A,沒有任何的位址轉換,溝通仍然可行

 

IPv6的安全性:

使用IPv6的位址模式,就不需要任何的位址轉換,視溝通範圍(communication scope)不同,不同的位址模式(addressing schemes)可以使用在相同的介面(interface)上,因為IP封包並沒有被更動,任何點對點的安全協定,像是IPSec,SSH,SSL,等等都可以有效的被使用。IPv6本身也內建支援IPSec協定,確保非常安全的連線。

 

結論:

我們已經了解NATs的使用和工作方式,以及它無法提供安全點對點傳輸缺點,NATs所提供的隱私性也無法轉成必要的安全性,相比較之下,IPv6位址模式不只提供隱私性,還支援安全的點對點連線。

如果還要把IPv6的其他優點也列入考慮,例如:auto-configuration,支援peer-to-peer連線等等,很明顯的IPv4位址模式的NATs是相差很多的第二選擇。對目前和未來的網路而言,與NATs比較,IPv6是更有彈性更安全的解決方式。

 

 

參考資料:

[1]  RFC 2373 IP Version 6 Address Architecture. R. Hinden, S. Deering.

[2]  RFC 3027 Protocol Complication with the IP Network Address Translator

M. Holdrege, P. Srisuresh