袁琦 田輝
摘要 分析了IPsec穿越NAT存在的兼容性問(wèn)題、技術(shù)要求及對(duì)IPSec的影響,提出了IPsec穿越NAT的若干解決辦法。
關(guān)鍵詞 IPSec AH ESP IKE
一、PSec穿越NAT存在的兼容性問(wèn)題
IPSec作為一種重要的安全技術(shù)得到越來(lái)越廣泛的應(yīng)用,但客戶網(wǎng)絡(luò)邊緣大量使用的NAT地址翻譯操作可能影響到IPSec的正常操作。目前,NAT和IPSec之間存在的不兼容性問(wèn)題可以分為以下三類:
1.NA(P)T固有的問(wèn)題
這類不兼容問(wèn)題是直接由NA(P)T與IPSec協(xié)議本身不兼容造成的,因此并不是所有的NA(P)T設(shè)備都存在。NA(P)T協(xié)議固有的不兼容性包括IPSec AH和NAT不兼容、NAT與校驗(yàn)和不兼容、IPSec SPI選擇和NAT不兼容、IKE地址標(biāo)識(shí)符和NAT不兼容、固定IKE目的端口和NAPT之間不兼容、重疊(Overlap)SPD條目和NAT間不兼容、嵌套IP地址和NAT不兼容以及NA(P)T隱含的方向性問(wèn)題等。
2.NA(P)T實(shí)現(xiàn)方面的問(wèn)題
這類不兼容問(wèn)題雖然不是NA(P)T協(xié)議所固有的,但卻在大量的NA(P)T實(shí)現(xiàn)中存在。它們不是NA(P)T協(xié)議的固有問(wèn)題,因此原則上在以后的NA(P)T設(shè)計(jì)實(shí)現(xiàn)中可以避免其產(chǎn)生。但由于這些問(wèn)題已經(jīng)廣泛存在,因此在NA(P)T穿越方案中必須予以考慮。NA(P)T實(shí)現(xiàn)方面帶來(lái)的不兼容性包括不能處理非UDP/TCP通信流、NAT映射超時(shí)、不能處理輸出和輸入分片等。
3.輔助功能引入的問(wèn)題
這類不兼容問(wèn)題出現(xiàn)在那些擬解決IPSecNA(P)T穿越問(wèn)題的NA(P)T設(shè)備中。在這些NAT設(shè)備中,由于設(shè)計(jì)部分穿越輔助功能而產(chǎn)生了新的不兼容性,造成更難于解決的問(wèn)題。雖然不是所有的NA(P)T設(shè)備都提供這種所謂的輔助功能,但鑒于該類問(wèn)題的普遍性,在NA(P)T穿越方案中也需要考慮這類問(wèn)題。在IPSec和NAT的輔助功能之間存在的不兼容問(wèn)題包括ISAKMP頭部檢查、對(duì)端口500的特殊處理及ISAKMP載荷檢查等。
二、IPSec穿越NAT的兼容性要求
1.可部署性
IPSec-NAT兼容性解決方案必須比IPv6易于部署,還應(yīng)滿足只需修改主機(jī),無(wú)需改變路由器的要求。為了在短時(shí)間內(nèi)實(shí)現(xiàn)穿越方案的部署,必須要求兼容性解決方案能與現(xiàn)存的路由器和NA(P)T產(chǎn)品協(xié)同工作。
2.協(xié)議兼容性
IPSec-NAT穿越方案不解決某些協(xié)議與NAT的兼容性問(wèn)題。這些協(xié)議是指用IPSec協(xié)議不能進(jìn)行安全保護(hù)且無(wú)法穿越NA(P)T的協(xié)議。因此,即使有了IPSec-NAT穿越方案,ALG仍需要支持其它協(xié)議的穿越方案。
3.方向性
NA(P)T的方向性也是一種安全功能,所以IPSec穿越方案不應(yīng)允許NA(P)T后面的主機(jī)接收來(lái)自任意IP地址隨意發(fā)送的IPSec或IKE通信流。一旦雙向IKE和IPSec通信已經(jīng)建立,則地址轉(zhuǎn)換的映射即告連接。
4.遠(yuǎn)程訪問(wèn)
IPSec的一個(gè)重要應(yīng)用是遠(yuǎn)程訪問(wèn)公司的內(nèi)部網(wǎng)絡(luò)。NA(P)T穿越方案必須支持通過(guò)IPSec隧道模式或者L2TPoverIPSec的NAT穿越,故要求穿越方案必須考慮遠(yuǎn)程客戶端與VPN網(wǎng)關(guān)之間存在多個(gè)NA(P)T的情況。
5.防火墻兼容性
目前,防火墻已經(jīng)廣為應(yīng)用,IPSec-NAT兼容性方案必須能使防火墻管理員創(chuàng)建簡(jiǎn)單的靜態(tài)訪問(wèn)規(guī)則,以決定是否允許IKE及IPSec-NAT的穿越。原則上,應(yīng)該避免IKE或者IPSec目的端口的動(dòng)態(tài)分配。
6.可擴(kuò)展性
IPSec-NAT兼容性方案應(yīng)具有良好的擴(kuò)展性,可部署在大規(guī)模遠(yuǎn)程訪問(wèn)的環(huán)境中。在大量遠(yuǎn)程接入的環(huán)境下,不可能在同一時(shí)間段內(nèi)只有一個(gè)主機(jī)使用同一個(gè)給定的地址進(jìn)行通信。因此,在兼容性方案中,必須解決SPD條目重疊和接收包解復(fù)用的問(wèn)題。
7.模式支持
IPSec-NAT方案必須支持IPSecESP模式的穿越。例如IPSec安全網(wǎng)關(guān)必須支持ESP隧道模式的NA(P)T穿越,IPSec主機(jī)必須支持IPSec傳輸模式的NA(P)T穿越。
AH的目的是保護(hù)IP頭部中不變的區(qū)域(包括地址域),而NA(P)T必須轉(zhuǎn)換地址,從而使AH完整性檢驗(yàn)失效。因此,NA(P)T和AH從根本上就是不兼容的。在IPSec-NAT兼容性方案中,沒(méi)有必要支持AH傳輸或隧道模式。
8.后向兼容和互操作性
IPSec-NAT兼容性方案中必須能與已有的IKE/IPSec實(shí)現(xiàn)互操作,與不經(jīng)過(guò)NA(P)T的IKE/IPSec進(jìn)行通信,即IPSec-NAT穿越方案必須能后向兼容RFC2401定義的IPSec和RFC2409定義的IKE。穿越方案應(yīng)該能自動(dòng)檢測(cè)是否存在NAT,使通信雙方只在必要時(shí)才使用NA(P)T穿越支持。兼容方案應(yīng)能判斷通信對(duì)方的IKE實(shí)現(xiàn)是否支持NA(P)T穿越,以協(xié)商雙方可否只進(jìn)行標(biāo)準(zhǔn)的IKE會(huì)話。也就是說(shuō),雖然IKE在發(fā)起協(xié)商時(shí),目的端口只能使用500端口,但并沒(méi)有對(duì)源端口提出特殊要求,因此UDP源端口可以使用500或非500的端口。
9.安全性
IPSec-NAT兼容性解決方案的引入不得對(duì)IKE或IPSec的安全帶來(lái)影響。例如,一個(gè)可行的方案必須能證明,它沒(méi)有引入新的拒絕服務(wù)攻擊和欺騙攻擊。IKE必須允許雙向方式的密鑰能夠重生成。
三、IPSec穿越NAT的解決方法
在IPSec中,SA的管理既可手工進(jìn)行,也可通過(guò)IKE自動(dòng)協(xié)商來(lái)完成。如果采用IKE方式,需要IKE協(xié)商和UDP封裝兩種方法配合起來(lái)使用,以完成IPSec穿越NAT。
1.IKE協(xié)商
在階段l協(xié)商中,需要針對(duì)NAT執(zhí)行兩種探測(cè)。一是探測(cè)是否支持NAT穿越,二是探測(cè)在通信路徑中是否存在NAT。NAT可能會(huì)改變IKEUDP的源端口,因而接收方必須能處理源端口不是500的IKE報(bào)文。
(1)通過(guò)Vendor ID載荷交換來(lái)確定遠(yuǎn)程主機(jī)是否支持NAT穿越。如果協(xié)商雙方支持NAT穿越,則協(xié)商雙方在階段1的前兩條消息中應(yīng)加入一個(gè)Vendor ID載荷,載荷的內(nèi)容是對(duì)特定字串進(jìn)行MD5運(yùn)算得出的散列值。該字串需標(biāo)明它所支持的NAT穿越方法應(yīng)遵循的要求。
(2)NAT-D(NAT Discovery)載荷不僅用于探測(cè)兩個(gè)IKE實(shí)體之間是否存在NAT,也用于探測(cè)NAT所處的位置。Keepalive消息能從位于NAT后面的實(shí)體發(fā)出。為了探測(cè)出兩臺(tái)主機(jī)之間的NAT,需要檢查IP地址和端口是否沿著傳輸路徑發(fā)生改變。協(xié)商雙方只需各自向?qū)Χ税l(fā)送源方和目的方的IP地址與端口的散列值,就可以檢測(cè)地址和端口在傳輸過(guò)程中是否發(fā)生改變。如果協(xié)商雙方計(jì)算出的散列值與其收到的散列值相同,則表示它們之間沒(méi)有NAT。反之,則是在傳輸中對(duì)地址或端口進(jìn)行了轉(zhuǎn)換,說(shuō)明所通過(guò)的IPSec報(bào)文進(jìn)行了NAT穿越的處理。如果發(fā)送者不能確定自己的IP地址(比如擁有多個(gè)網(wǎng)絡(luò)接口,并且不能確定包路由選擇到哪一個(gè)接口),它可以在報(bào)文中包含多個(gè)本地IP地址的散列值。在這種情況下,僅當(dāng)所有的散列值均不匹配時(shí),才表明NAT的存在。
對(duì)IPSec進(jìn)行特殊處理的NAT設(shè)備可能會(huì)導(dǎo)致問(wèn)題的發(fā)生。NAT后有多個(gè)客戶端,即使某些NAT不改變500的源端口號(hào),也能將IKE Cookie值映射到分解的通信流,而不必使用源端口。對(duì)IKE來(lái)說(shuō),很難發(fā)現(xiàn)NAT是否具有上述能力。對(duì)NAT的透明性而言,這些方法均存在弊端。最好的辦法是使IKE通信流簡(jiǎn)單地離開(kāi)500端口,以避免對(duì)任何IPSec-awareNAT進(jìn)行特殊處理。
在階段l完成后,協(xié)商雙方都已明確,在它們之間是否存在NAT。至于是否使用NAT穿越,則由快速模式協(xié)商決定。NAT穿越的使用在快速模式的SA載荷中協(xié)商,協(xié)商雙方可向?qū)Χ藗魉虸PSec報(bào)文的原始地址(傳輸模式情況下),從而使對(duì)端有可能在NAT轉(zhuǎn)換之后,對(duì)TCP/IP進(jìn)行校驗(yàn)和修正。為了執(zhí)行增量TCP校驗(yàn)和修正,協(xié)商雙方可能需要知道對(duì)端在構(gòu)造報(bào)文時(shí)所使用的原始IP地址。對(duì)于發(fā)起方,其原始發(fā)起方地址定義為發(fā)起方的IP地址,而原始響應(yīng)方地址定義為當(dāng)前所知道的對(duì)端的IP地址。對(duì)于響應(yīng)方,原始發(fā)起方地址定義為當(dāng)前所知道的對(duì)端IP地址,原始響應(yīng)方地址定義為響應(yīng)方的IP地址。
2.UDP封裝
(1)在進(jìn)行UDP封裝時(shí),要進(jìn)行一些輔助處理。當(dāng)使用隧道模式傳送報(bào)文時(shí),內(nèi)部IP頭中會(huì)包含不適合當(dāng)前網(wǎng)絡(luò)的地址。以下說(shuō)明將其轉(zhuǎn)換成適合當(dāng)前網(wǎng)絡(luò)地址的處理方法。根據(jù)本地策略,必須完成下列任務(wù)之一:
·如果在策略中,已為對(duì)端的封裝報(bào)文定義了一個(gè)有效的源IP地址空間,則應(yīng)根據(jù)策略檢查在內(nèi)部報(bào)文中的IP源地址是否屬于有效范圍。
·如果已經(jīng)為遠(yuǎn)程對(duì)端分配了一個(gè)地址,則應(yīng)檢查內(nèi)部報(bào)文中的IP源地址是否與該地址一致。對(duì)報(bào)文執(zhí)行NAT轉(zhuǎn)換,使其適合在本地網(wǎng)絡(luò)中傳輸。
(2)當(dāng)使用傳輸模式傳送報(bào)文時(shí),如果在傳輸中IP頭部發(fā)生變化,TCP或UDP頭部將包含錯(cuò)誤的校驗(yàn)和。根據(jù)本地策略必須完成以下任務(wù)之一:
·如果在ESP頭部之后的協(xié)議頭部是一個(gè)TCP/UDP頭,并且已經(jīng)獲得對(duì)端的真實(shí)源/目的IP地址,則應(yīng)增量計(jì)算TCP/UDP校驗(yàn)和,包括:
——從校驗(yàn)和中減去接收包的IP源地址;
——在校驗(yàn)和中增加通過(guò)IKE獲得的真實(shí)的IP源地址(從NAT-OA中獲得);
——從校驗(yàn)和中減去接收包的IP目的地址;
——在校驗(yàn)和中增加通過(guò)IKE獲得的真實(shí)的IP目的地址(從NAT-OA中獲得)。
如果接收到的地址和真實(shí)地址是相同的,則取消相關(guān)操作。
·如果在ESP頭后面的協(xié)議頭IPv4是TCP/UDP頭,則應(yīng)重新計(jì)算TCP/UDP頭中的校驗(yàn)和字段。
·如果ESP頭后面的協(xié)議頭是UDP頭,應(yīng)將UDP頭中的校驗(yàn)和字段置O。如果在ESP頭后面的協(xié)議頭是TCP頭,并且存在一個(gè)選項(xiàng),該選項(xiàng)用于指示協(xié)議棧,而不用檢查TCP效驗(yàn)和,則可以使用該選項(xiàng)。僅在傳輸模式中,對(duì)報(bào)文進(jìn)行了完整性保護(hù)時(shí),才能使用這種方法。對(duì)隧道模式的TCP校驗(yàn)和必須進(jìn)行驗(yàn)證。因?yàn)樾r?yàn)和由發(fā)送方產(chǎn)生并由接收方驗(yàn)證,該校驗(yàn)和是對(duì)整個(gè)IPSec處理的報(bào)文的完整性檢驗(yàn)。
(3)在實(shí)現(xiàn)中,可以對(duì)被NAT破壞的包含協(xié)議進(jìn)行修正。傳輸模式下,ESP封裝的報(bào)文格式如圖1,圖2所示。傳輸模式下ESP封裝的步驟為:
圖1 應(yīng)用ESP/UDP之前的報(bào)文格式
圖2 應(yīng)用ESP/UDP之后的報(bào)文格式
·普通的ESP封裝處理。插入一個(gè)適當(dāng)格式的UDP頭部;編輯IP頭中的總長(zhǎng)域、協(xié)議域以及校驗(yàn)和字段,使之與所得報(bào)文相匹配。
·傳輸模式下ESP解封裝的步驟為:從報(bào)文中刪除UDP頭;編輯IP頭中的總長(zhǎng)域、協(xié)議域以及校驗(yàn)和域,使之與所得的報(bào)文相匹配;應(yīng)用普通的ESP解封裝處理過(guò)程;應(yīng)用傳輸模式解封裝NAT處理過(guò)程。
·隧道模式下ESP封裝的報(bào)文格式如圖3,圖4所示。隧道模式下ESP封裝的步驟為:普通的ESP封裝處理;插入一個(gè)適當(dāng)格式的UDP頭部。
圖3 應(yīng)用ESP/UDP之前的報(bào)文格式
圖4 應(yīng)用ESP/UDP之后的報(bào)文格式
3.編輯IP頭中的總長(zhǎng)字段、協(xié)議字段以及校驗(yàn)和字段,使之與所得的報(bào)文相匹配
隧道模式下ESP解封裝的步驟為:從報(bào)文中刪除UDP頭;編輯IP頭中的總長(zhǎng)字段、協(xié)議字段以及校驗(yàn)和字段,使之與所得的報(bào)文相匹配;應(yīng)用普通的ESP解封裝處理過(guò)程;應(yīng)用隧道模式解封裝NAT處理過(guò)程。
四、穿越NAT對(duì)IPSec的影響
1.IPSec-NAT兼容性的安全考慮
(1)IPSecAH不能穿越NAT,故只能使用空加密的ESP來(lái)替代AH。但空加密的ESP不能提供和AH完全一樣的安全屬性。例如,在AH中可以排除對(duì)IP源路由的安全風(fēng)險(xiǎn),而在使用空加密的ESP中卻無(wú)法杜絕。
(2)因使用任何加密變換的ESP都不提供防止源地址欺騙的保護(hù),因此必須執(zhí)行一些源IP地址的檢驗(yàn)。在IPSec_{esp,ah}input中應(yīng)完成對(duì)源IP地址的一般性防欺騙檢查,以保證報(bào)文是從最初的IKE主模式和快速模式SA中所提供的相同地址發(fā)送的。當(dāng)接收方主機(jī)在NAT后面時(shí),源地址的檢測(cè)對(duì)單播會(huì)話意義不大,但在隧道模式的單播會(huì)話中,這種檢測(cè)可以防止欺騙攻擊。
(3)舉例。假定兩個(gè)主機(jī)A和C在NAT設(shè)備后面,并都用IPSec隧道模式與B協(xié)商安全聯(lián)盟。主機(jī)A和C可能有不同的權(quán)限。假設(shè)主機(jī)A是以職員身份訪問(wèn)公司內(nèi)網(wǎng),而C只是以承包方身份訪問(wèn)某個(gè)特定的Web站點(diǎn)。如果主機(jī)C作為源方發(fā)送一個(gè)偽造A的IP地址的隧道模式包,而作為發(fā)起方C并不具有與A相同的權(quán)限。如果接收方只執(zhí)行身份驗(yàn)證與完整性檢驗(yàn),而不進(jìn)行防欺騙檢驗(yàn)(確定發(fā)起方IP地址與SPI相對(duì)應(yīng)),則C可能被允許訪問(wèn)那些它本沒(méi)有權(quán)限訪問(wèn)的網(wǎng)絡(luò)資源。因此,IPSec-NAT兼容性解決方案必須提供一定程度的防欺騙保護(hù)。
2.IKE協(xié)商的安全考慮
(1)IKE探測(cè)對(duì)外暴露了協(xié)商雙方是否支持NAT穿越,會(huì)否引起安全問(wèn)題。
(2)一旦存在NAT,則失去基于IP地址的驗(yàn)證機(jī)制。對(duì)位于NAT后面的所有主機(jī)而言,如果沒(méi)有組共享密鑰,它們就不能在主模式中使用預(yù)共享密鑰驗(yàn)證方式。使用組共享密鑰是具有巨大安全風(fēng)險(xiǎn)的,不推薦使用組共享密鑰。
(3)因?yàn)閮?nèi)部地址空間只有32位,所以有可能使攻擊者通過(guò)所有可能的IP地址和嘗試找出匹配的散列值而發(fā)現(xiàn)在NAT后面的內(nèi)部地址。端口號(hào)通常固定為500,并且Cookie值可以從報(bào)文中分解得出,從而使散列運(yùn)算的空間降至232。如果對(duì)所有地址空間進(jìn)行改進(jìn),需要找出內(nèi)部IP地址的散列運(yùn)算空間降至224+2×(216)。
(4)在主模式和野蠻模式中NAT-D載荷和Verdor ID載荷都沒(méi)有經(jīng)過(guò)驗(yàn)證。攻擊者能夠刪除、修改和增加這些載荷。通過(guò)刪除或增加NAT-D載荷,攻擊者能夠發(fā)起DoS攻擊。通過(guò)修改NAT-D載荷,攻擊者能造成協(xié)商雙方都使用UDP封裝模式而不使用隧道或傳輸模式,從而造成帶寬的浪費(fèi)。
(5)在快速模式中發(fā)送原始源地址,從而向?qū)Χ吮┞禢AT之后的內(nèi)部IP地址。由于需要對(duì)對(duì)端進(jìn)行身份驗(yàn)證,且只在傳輸模式中傳送原始源地址,因此不存在安全問(wèn)題。
(6)當(dāng)攻擊者可監(jiān)聽(tīng)網(wǎng)絡(luò)中的所有通信流,修改報(bào)文順序,在已發(fā)現(xiàn)的報(bào)文之前注入新的報(bào)文時(shí),對(duì)每個(gè)有效驗(yàn)證的報(bào)文更新IKESA報(bào)文和ESPUDP封裝報(bào)文的IP地址和端口,則會(huì)造成DoS攻擊。攻擊者可從位于NAT后面的主機(jī)截取已驗(yàn)證的報(bào)文,修改報(bào)文的UDP源方和目的方的IP地址與端口,并在真正的報(bào)文到達(dá)之前發(fā)送給對(duì)端。如果不是在NAT后面的主機(jī)接收到偽造報(bào)文后,將根據(jù)偽造報(bào)文更新它的IP地址和端口映射,并將隨后的通信流發(fā)送至錯(cuò)誤的主機(jī)或端口。這種情況在攻擊者停止攻擊并接收到第一個(gè)正確報(bào)文后才能修正。實(shí)現(xiàn)中應(yīng)該每次審計(jì)映射的改變,一般情況下它不應(yīng)經(jīng)常發(fā)生。
3.UDP封裝的安全考慮
在一些系統(tǒng)中,ESPUDP可能引發(fā)DoS攻擊,特別是使用普通操作系統(tǒng)的UDP功能。因此,建議勿打開(kāi)普通的UDP端口。實(shí)現(xiàn)者需注意影響隧道模式使用的問(wèn)題,即遠(yuǎn)程對(duì)端會(huì)協(xié)商網(wǎng)關(guān)中重疊的條目。在傳輸模式中,當(dāng)同一個(gè)NAT后面有兩個(gè)客戶端與同一服務(wù)器建立安全會(huì)話時(shí),也會(huì)發(fā)生類似的問(wèn)題。
4.IANA考慮
IPSec穿越NAT使要使用包含兩個(gè)新的IANA注冊(cè)值,并將注冊(cè)端口修改為4500。同時(shí),還定義了兩個(gè)新的IKE載荷類型,分別為15和16。
摘自 泰爾網(wǎng)