袁琦 田辉
摘要 分析了IPsec穿越NAT存在的兼容性问题、技术要求及对IPSec的影响,提出了IPsec穿越NAT的若干解决办法。
关键词 IPSec AH ESP IKE
一、PSec穿越NAT存在的兼容性问题
IPSec作为一种重要的安全技术得到越来越广泛的应用,但客户网络边缘大量使用的NAT地址翻译操作可能影响到IPSec的正常操作。目前,NAT和IPSec之间存在的不兼容性问题可以分为以下三类:
1.NA(P)T固有的问题
这类不兼容问题是直接由NA(P)T与IPSec协议本身不兼容造成的,因此并不是所有的NA(P)T设备都存在。NA(P)T协议固有的不兼容性包括IPSec AH和NAT不兼容、NAT与校验和不兼容、IPSec SPI选择和NAT不兼容、IKE地址标识符和NAT不兼容、固定IKE目的端口和NAPT之间不兼容、重叠(Overlap)SPD条目和NAT间不兼容、嵌套IP地址和NAT不兼容以及NA(P)T隐含的方向性问题等。
2.NA(P)T实现方面的问题
这类不兼容问题虽然不是NA(P)T协议所固有的,但却在大量的NA(P)T实现中存在。它们不是NA(P)T协议的固有问题,因此原则上在以后的NA(P)T设计实现中可以避免其产生。但由于这些问题已经广泛存在,因此在NA(P)T穿越方案中必须予以考虑。NA(P)T实现方面带来的不兼容性包括不能处理非UDP/TCP通信流、NAT映射超时、不能处理输出和输入分片等。
3.辅助功能引入的问题
这类不兼容问题出现在那些拟解决IPSecNA(P)T穿越问题的NA(P)T设备中。在这些NAT设备中,由于设计部分穿越辅助功能而产生了新的不兼容性,造成更难于解决的问题。虽然不是所有的NA(P)T设备都提供这种所谓的辅助功能,但鉴于该类问题的普遍性,在NA(P)T穿越方案中也需要考虑这类问题。在IPSec和NAT的辅助功能之间存在的不兼容问题包括ISAKMP头部检查、对端口500的特殊处理及ISAKMP载荷检查等。
二、IPSec穿越NAT的兼容性要求
1.可部署性
IPSec-NAT兼容性解决方案必须比IPv6易于部署,还应满足只需修改主机,无需改变路由器的要求。为了在短时间内实现穿越方案的部署,必须要求兼容性解决方案能与现存的路由器和NA(P)T产品协同工作。
2.协议兼容性
IPSec-NAT穿越方案不解决某些协议与NAT的兼容性问题。这些协议是指用IPSec协议不能进行安全保护且无法穿越NA(P)T的协议。因此,即使有了IPSec-NAT穿越方案,ALG仍需要支持其它协议的穿越方案。
3.方向性
NA(P)T的方向性也是一种安全功能,所以IPSec穿越方案不应允许NA(P)T后面的主机接收来自任意IP地址随意发送的IPSec或IKE通信流。一旦双向IKE和IPSec通信已经建立,则地址转换的映射即告连接。
4.远程访问
IPSec的一个重要应用是远程访问公司的内部网络。NA(P)T穿越方案必须支持通过IPSec隧道模式或者L2TPoverIPSec的NAT穿越,故要求穿越方案必须考虑远程客户端与VPN网关之间存在多个NA(P)T的情况。
5.防火墙兼容性
目前,防火墙已经广为应用,IPSec-NAT兼容性方案必须能使防火墙管理员创建简单的静态访问规则,以决定是否允许IKE及IPSec-NAT的穿越。原则上,应该避免IKE或者IPSec目的端口的动态分配。
6.可扩展性
IPSec-NAT兼容性方案应具有良好的扩展性,可部署在大规模远程访问的环境中。在大量远程接入的环境下,不可能在同一时间段内只有一个主机使用同一个给定的地址进行通信。因此,在兼容性方案中,必须解决SPD条目重叠和接收包解复用的问题。
7.模式支持
IPSec-NAT方案必须支持IPSecESP模式的穿越。例如IPSec安全网关必须支持ESP隧道模式的NA(P)T穿越,IPSec主机必须支持IPSec传输模式的NA(P)T穿越。
AH的目的是保护IP头部中不变的区域(包括地址域),而NA(P)T必须转换地址,从而使AH完整性检验失效。因此,NA(P)T和AH从根本上就是不兼容的。在IPSec-NAT兼容性方案中,没有必要支持AH传输或隧道模式。
8.后向兼容和互操作性
IPSec-NAT兼容性方案中必须能与已有的IKE/IPSec实现互操作,与不经过NA(P)T的IKE/IPSec进行通信,即IPSec-NAT穿越方案必须能后向兼容RFC2401定义的IPSec和RFC2409定义的IKE。穿越方案应该能自动检测是否存在NAT,使通信双方只在必要时才使用NA(P)T穿越支持。兼容方案应能判断通信对方的IKE实现是否支持NA(P)T穿越,以协商双方可否只进行标准的IKE会话。也就是说,虽然IKE在发起协商时,目的端口只能使用500端口,但并没有对源端口提出特殊要求,因此UDP源端口可以使用500或非500的端口。
9.安全性
IPSec-NAT兼容性解决方案的引入不得对IKE或IPSec的安全带来影响。例如,一个可行的方案必须能证明,它没有引入新的拒绝服务攻击和欺骗攻击。IKE必须允许双向方式的密钥能够重生成。
三、IPSec穿越NAT的解决方法
在IPSec中,SA的管理既可手工进行,也可通过IKE自动协商来完成。如果采用IKE方式,需要IKE协商和UDP封装两种方法配合起来使用,以完成IPSec穿越NAT。
1.IKE协商
在阶段l协商中,需要针对NAT执行两种探测。一是探测是否支持NAT穿越,二是探测在通信路径中是否存在NAT。NAT可能会改变IKEUDP的源端口,因而接收方必须能处理源端口不是500的IKE报文。
(1)通过Vendor ID载荷交换来确定远程主机是否支持NAT穿越。如果协商双方支持NAT穿越,则协商双方在阶段1的前两条消息中应加入一个Vendor ID载荷,载荷的内容是对特定字串进行MD5运算得出的散列值。该字串需标明它所支持的NAT穿越方法应遵循的要求。
(2)NAT-D(NAT Discovery)载荷不仅用于探测两个IKE实体之间是否存在NAT,也用于探测NAT所处的位置。Keepalive消息能从位于NAT后面的实体发出。为了探测出两台主机之间的NAT,需要检查IP地址和端口是否沿着传输路径发生改变。协商双方只需各自向对端发送源方和目的方的IP地址与端口的散列值,就可以检测地址和端口在传输过程中是否发生改变。如果协商双方计算出的散列值与其收到的散列值相同,则表示它们之间没有NAT。反之,则是在传输中对地址或端口进行了转换,说明所通过的IPSec报文进行了NAT穿越的处理。如果发送者不能确定自己的IP地址(比如拥有多个网络接口,并且不能确定包路由选择到哪一个接口),它可以在报文中包含多个本地IP地址的散列值。在这种情况下,仅当所有的散列值均不匹配时,才表明NAT的存在。
对IPSec进行特殊处理的NAT设备可能会导致问题的发生。NAT后有多个客户端,即使某些NAT不改变500的源端口号,也能将IKE Cookie值映射到分解的通信流,而不必使用源端口。对IKE来说,很难发现NAT是否具有上述能力。对NAT的透明性而言,这些方法均存在弊端。最好的办法是使IKE通信流简单地离开500端口,以避免对任何IPSec-awareNAT进行特殊处理。
在阶段l完成后,协商双方都已明确,在它们之间是否存在NAT。至于是否使用NAT穿越,则由快速模式协商决定。NAT穿越的使用在快速模式的SA载荷中协商,协商双方可向对端传送IPSec报文的原始地址(传输模式情况下),从而使对端有可能在NAT转换之后,对TCP/IP进行校验和修正。为了执行增量TCP校验和修正,协商双方可能需要知道对端在构造报文时所使用的原始IP地址。对于发起方,其原始发起方地址定义为发起方的IP地址,而原始响应方地址定义为当前所知道的对端的IP地址。对于响应方,原始发起方地址定义为当前所知道的对端IP地址,原始响应方地址定义为响应方的IP地址。
2.UDP封装
(1)在进行UDP封装时,要进行一些辅助处理。当使用隧道模式传送报文时,内部IP头中会包含不适合当前网络的地址。以下说明将其转换成适合当前网络地址的处理方法。根据本地策略,必须完成下列任务之一:
·如果在策略中,已为对端的封装报文定义了一个有效的源IP地址空间,则应根据策略检查在内部报文中的IP源地址是否属于有效范围。
·如果已经为远程对端分配了一个地址,则应检查内部报文中的IP源地址是否与该地址一致。对报文执行NAT转换,使其适合在本地网络中传输。
(2)当使用传输模式传送报文时,如果在传输中IP头部发生变化,TCP或UDP头部将包含错误的校验和。根据本地策略必须完成以下任务之一:
·如果在ESP头部之后的协议头部是一个TCP/UDP头,并且已经获得对端的真实源/目的IP地址,则应增量计算TCP/UDP校验和,包括:
——从校验和中减去接收包的IP源地址;
——在校验和中增加通过IKE获得的真实的IP源地址(从NAT-OA中获得);
——从校验和中减去接收包的IP目的地址;
——在校验和中增加通过IKE获得的真实的IP目的地址(从NAT-OA中获得)。
如果接收到的地址和真实地址是相同的,则取消相关操作。
·如果在ESP头后面的协议头IPv4是TCP/UDP头,则应重新计算TCP/UDP头中的校验和字段。
·如果ESP头后面的协议头是UDP头,应将UDP头中的校验和字段置O。如果在ESP头后面的协议头是TCP头,并且存在一个选项,该选项用于指示协议栈,而不用检查TCP效验和,则可以使用该选项。仅在传输模式中,对报文进行了完整性保护时,才能使用这种方法。对隧道模式的TCP校验和必须进行验证。因为校验和由发送方产生并由接收方验证,该校验和是对整个IPSec处理的报文的完整性检验。
(3)在实现中,可以对被NAT破坏的包含协议进行修正。传输模式下,ESP封装的报文格式如图1,图2所示。传输模式下ESP封装的步骤为:
![](http://www.c114.net/technic/picture/04071201.gif)
图1 应用ESP/UDP之前的报文格式
图2 应用ESP/UDP之后的报文格式
·普通的ESP封装处理。插入一个适当格式的UDP头部;编辑IP头中的总长域、协议域以及校验和字段,使之与所得报文相匹配。
·传输模式下ESP解封装的步骤为:从报文中删除UDP头;编辑IP头中的总长域、协议域以及校验和域,使之与所得的报文相匹配;应用普通的ESP解封装处理过程;应用传输模式解封装NAT处理过程。
·隧道模式下ESP封装的报文格式如图3,图4所示。隧道模式下ESP封装的步骤为:普通的ESP封装处理;插入一个适当格式的UDP头部。
![](http://www.c114.net/technic/picture/04071202.gif)
图3 应用ESP/UDP之前的报文格式
图4 应用ESP/UDP之后的报文格式
3.编辑IP头中的总长字段、协议字段以及校验和字段,使之与所得的报文相匹配
隧道模式下ESP解封装的步骤为:从报文中删除UDP头;编辑IP头中的总长字段、协议字段以及校验和字段,使之与所得的报文相匹配;应用普通的ESP解封装处理过程;应用隧道模式解封装NAT处理过程。
四、穿越NAT对IPSec的影响
1.IPSec-NAT兼容性的安全考虑
(1)IPSecAH不能穿越NAT,故只能使用空加密的ESP来替代AH。但空加密的ESP不能提供和AH完全一样的安全属性。例如,在AH中可以排除对IP源路由的安全风险,而在使用空加密的ESP中却无法杜绝。
(2)因使用任何加密变换的ESP都不提供防止源地址欺骗的保护,因此必须执行一些源IP地址的检验。在IPSec_{esp,ah}input中应完成对源IP地址的一般性防欺骗检查,以保证报文是从最初的IKE主模式和快速模式SA中所提供的相同地址发送的。当接收方主机在NAT后面时,源地址的检测对单播会话意义不大,但在隧道模式的单播会话中,这种检测可以防止欺骗攻击。
(3)举例。假定两个主机A和C在NAT设备后面,并都用IPSec隧道模式与B协商安全联盟。主机A和C可能有不同的权限。假设主机A是以职员身份访问公司内网,而C只是以承包方身份访问某个特定的Web站点。如果主机C作为源方发送一个伪造A的IP地址的隧道模式包,而作为发起方C并不具有与A相同的权限。如果接收方只执行身份验证与完整性检验,而不进行防欺骗检验(确定发起方IP地址与SPI相对应),则C可能被允许访问那些它本没有权限访问的网络资源。因此,IPSec-NAT兼容性解决方案必须提供一定程度的防欺骗保护。
2.IKE协商的安全考虑
(1)IKE探测对外暴露了协商双方是否支持NAT穿越,会否引起安全问题。
(2)一旦存在NAT,则失去基于IP地址的验证机制。对位于NAT后面的所有主机而言,如果没有组共享密钥,它们就不能在主模式中使用预共享密钥验证方式。使用组共享密钥是具有巨大安全风险的,不推荐使用组共享密钥。
(3)因为内部地址空间只有32位,所以有可能使攻击者通过所有可能的IP地址和尝试找出匹配的散列值而发现在NAT后面的内部地址。端口号通常固定为500,并且Cookie值可以从报文中分解得出,从而使散列运算的空间降至232。如果对所有地址空间进行改进,需要找出内部IP地址的散列运算空间降至224+2×(216)。
(4)在主模式和野蛮模式中NAT-D载荷和Verdor ID载荷都没有经过验证。攻击者能够删除、修改和增加这些载荷。通过删除或增加NAT-D载荷,攻击者能够发起DoS攻击。通过修改NAT-D载荷,攻击者能造成协商双方都使用UDP封装模式而不使用隧道或传输模式,从而造成带宽的浪费。
(5)在快速模式中发送原始源地址,从而向对端暴露NAT之后的内部IP地址。由于需要对对端进行身份验证,且只在传输模式中传送原始源地址,因此不存在安全问题。
(6)当攻击者可监听网络中的所有通信流,修改报文顺序,在已发现的报文之前注入新的报文时,对每个有效验证的报文更新IKESA报文和ESPUDP封装报文的IP地址和端口,则会造成DoS攻击。攻击者可从位于NAT后面的主机截取已验证的报文,修改报文的UDP源方和目的方的IP地址与端口,并在真正的报文到达之前发送给对端。如果不是在NAT后面的主机接收到伪造报文后,将根据伪造报文更新它的IP地址和端口映射,并将随后的通信流发送至错误的主机或端口。这种情况在攻击者停止攻击并接收到第一个正确报文后才能修正。实现中应该每次审计映射的改变,一般情况下它不应经常发生。
3.UDP封装的安全考虑
在一些系统中,ESPUDP可能引发DoS攻击,特别是使用普通操作系统的UDP功能。因此,建议勿打开普通的UDP端口。实现者需注意影响隧道模式使用的问题,即远程对端会协商网关中重叠的条目。在传输模式中,当同一个NAT后面有两个客户端与同一服务器建立安全会话时,也会发生类似的问题。
4.IANA考虑
IPSec穿越NAT使要使用包含两个新的IANA注册值,并将注册端口修改为4500。同时,还定义了两个新的IKE载荷类型,分别为15和16。
摘自 泰尔网
|