【转自】http://www.h3c.com/cn/d_200907/642189_30004_0.htm
IPv6解决方案ND防攻击技术白皮书
关键词:ND,ARP,ND攻击,ARP攻击,交换机,IPV6
摘 要:本文介绍了在IPv6网络中的ND攻击及防攻击的技术思路以及H3C公司的ND防攻击方案部署的典型方案以及技术特点。
缩略语清单:
缩略语 |
英文全名 |
中文解释 |
NDP |
Neighbor Discover Protocol |
邻居发现协议 |
ARP |
Address Resolution Protocol |
地址解析协议 |
IPv6 |
Internet Protocol Version 6 |
因特网协议第六版 |
目 录
1 ND攻击概述....................................................................................................... 2
2 ND协议介绍....................................................................................................... 3
2.1 ND报文类型............................................................................................ 3
1.1 邻居通告报文NA Neighbor AdvertisementMessage.................................. 6
2.2 ND协议主要功能介绍.............................................................................. 8
1.2 地址解析 Addressresolution................................................................... 9
1.3 重复地址检测DAD Duplicate AddressDetection..................................... 10
3 ND常见攻击介绍.............................................................................................. 10
3.1 ND常见攻击类型................................................................................... 10
4 H3C 的ND防攻击解决方案............................................................................... 13
4.1 信任表项与NDDetection........................................................................ 13
4.2 RATrust与DHCPTrust........................................................................... 14
5 总结................................................................................................................. 14
1 ND攻击概述
邻居发现协议(Neighbor Discovery Protocol,以下称ND协议)是IPv6的一个关键协议,可以说,ND协议是IPv4某些协议在IPv6中综合起来的升级和改进,如ARP、ICMP路由器发现和ICMP重定向等协议。当然,作为IPv6的基础性协议,ND还提供了其他功能,如前缀发现、邻居不可达检测、重复地址检测、地址自动配置等。
在IPv4网络中,ARP攻击问题已经为广大的网络管理者,设备厂商所认识,ARP攻击能够造成大面积网络不能正常访问外网,使得正常用户深受其害。针对ARP攻击,大部分的网络设备厂商都推出了自己的ARP防攻击解决方案,在很大程度上解决了ARP攻击的问题。而伴随着IPv6网络的建设,在IPv6协议族中的NDP协议越来越被重视,而在ND协议的设计与ARP协议一样并未提供认证机制,导致网络中的主机是不可信的,从而使得针对ND协议的攻击非常容易。
2 ND协议介绍
2.1 ND报文类型
ND协议定义的报文使用ICMP承载,其类型包括:路由器请求报文、路由器通告报文、邻居请求报文、邻居通告报文和重定向报文。
由于ND报文中的可选字段及代码类型较多,下面描述的ND报文中的各个字段并不完全,主要描述了涉及到ND防攻击技术的选项。
2.1.1 路由器请求报文RS Router Solicitation Message
主机启动后,通过RS消息向路由器发出请求,期望路由器立即发送RA消息响应。RS报文格式如图1。
图1 路由器请求报文
l Type 类型字段,值133
l Code 代码字段,值0
l Options 选项字段
ü 源链路层地址选项 仅用于已编址的链路层
可用于RS报文的只有源链路层地址选项,表明该报文发送者的链路层地址。如果IPv6头的源地址为未指定地址,则不能包括该选项。
同时,IPv6报文头中的字段要求如下:
l Hop Limit 值255,保证是本地链路上的报文
l SourceAddress 发送接口的本地链路地址或未指定地址
l DestinationAddress 本地链路中所有路由器的组播地址FF02::2
2.1.2 路由器通告报文RA Router Advertisement Message
路由器周期性的发布RA消息,其中包括前缀和一些标志位的信息,或者以RA报文响应路由器请求报文RS。RA的报文格式如图2。
图2 路由器通告报文
l Type 类型字段,值134
l Code 代码字段,值0
l M 管理地址配置标识(Managed address configuration)
0-无状态地址分配,客户端通过无状态协议(如ND)获得IPv6地址;
1-有状态地址分配,客户端通过有状态协议(如DHCPv6)获得IPv6地址。
l O 其它有状态配置标识(Other stateful configuration)
0-客户端通过无状态协议(如ND)获取除地址外的其他配置信息;
1-客户端通过有状态协议(如DHCPv6)获取除地址外的其他配置信息,如DNS、SIP服务器信息。
协议规定,若M标记置为1,则O标记也应置为1,否则无意义。
l RouterLifetime 缺省路由器的生命周期(单位:秒)
表示发送该RA报文的路由器作为缺省路由器的生命周期。Router Lifetime最长9000秒小时,缺省值30分钟。如果该字段为0时,表示该路由器不能作为缺省路由器,但RA报文的其他信息仍然有效。
l ReachableTime 可达时间(单位:毫秒)
发送NS报文后,在得到邻居可达性确认后,认为邻居可达的时间,0表示不指定。
路由器在接口上通过发送RA报文,让同一链路上的所有节点都使用相同的可达时间。若Reachable Time为0,表示路由器不指定该字段参数。该值可配置,RA报文中缺省值为0。
l RetransTimer 重传定时器(单位:毫秒)
重传NS报文的时间间隔,用于邻居不可达检测和地址解析。若该值为0,表示路由器不指定该字段参数。该值可配置,RA报文缺省值为0。
l Options 选项字段
ü 源链路层地址选项 仅用于已编址的链路层。当路由器正在多个链路层地址上进行负荷分担时,要忽略该选项。
ü MTU选项 链路的可变MTU
ü 前缀信息选项 用于地址自动配置的前缀信息,可包含多个
ü 路由信息选项 用于主机生成缺省路由,表明前缀通过该路由器是可达的
同时,IPv6报文头中的字段要求如下:
l SourceAddress 必须是发送接口的本地链路地址
l DestinationAddress 组播地址FF02::1,或发送RS请求报文的主机的单播地址
2.1.3 邻居请求报文NS Neighbor Solicitation Message
主机通过NS消息可以得到邻居的链路层地址、检查邻居是否可达、重复地址检测等。
图3 邻居请求报文
l Type 类型字段,值135
l Code 代码字段,值0
l TargetAddress 目标地址,16bytes
请求目标的IP地址,不能是组播地址,可以是本地链路、本地站点、全局地址。
l Options 选项字段
ü 源链路层地址选项
和RS报文的选项相同,可用于NS报文的只有源链路层地址选项。源链路层选项仅用于已编址的链路层,如果IPv6头的源地址为未指定地址,则不能包括该选项。
同时,IPv6报文头中字段要求如下:
l SourceAddress 发送接口的地址或未指定地址(DAD检测)
l DestinationAddress 目的节点单播地址或目的节点地址对应的请求节点组播地址
需要说明,如果源地址为未指定地址,则目的地址应为被请求节点的组播地址,并且没有源链路层地址选项。
2.1.4 邻居通告报文NA Neighbor Advertisement Message
NA报文是主机对NS的响应报文,同时主机在链路层地址变化时也可以主动发送NA消息,以通知相邻节点自己的链路层地址或者角色发生改变。
图4 邻居通告报文
l Type 类型字段,值136
l Code 代码字段,值0
l R 路由器标记(Router Flag)
表示NA报文发送者的角色。置位表示发送者是路由器,复位表示发送者为主机。
l S 请求标记(Solicited Flag)
置位表示为响应单播NS发送的NA报文。在NUD探测中,S标记作为邻居可达性确认标记;在组播通告或非请求单播通告中,S标记必须清零,如DAD检测中NS报文用的是被请求节点的组播地址,当地址冲突时,回应的NA报文的S标记需要清零。
l O 重载标记(Override Flag)
1-表示需要用目标链路层地址选项中的链路层地址,来更新邻居缓存表。
0-只有在链路层地址未知时,才能用目标链路层地址选项来更新邻居缓存表。
l TargetAddress 目标地址,16bytes
如果是针对NS而发送NA,该字段直接拷贝NS报文目标地址;如果不是针对NS发送的NA,该地址是链路层地址发生改变的网络节点的IP地址。目标地址不能是组播地址。
l Options 选项字段,只能是目的链路层地址选项,通告发送者的链路层地址。
同时,IPv6报文头中字段要求如下:
l SourceAddress 必须是发送接口的单播地址
l DestinationAddress 单播地址或者所有节点的组播地址(FF02::1)
2.1.5 重定向报文 Redirect Message
路由器通过重定向报文通知主机到目的地有更好的下一跳地址,或者通知主机目的地址为本网段邻居。
图5 重定向报文
l Type 类型字段,值137
l Code 代码字段,值0
l TargetAddress 目标地址,16bytes
到达目的地址的下一跳地址。如果目标为路由器(本地链路外的报文),必须使用路由器的本地链路地址;如果是主机(本地链路报文),目标地址和目的地址必须一致。
l DestinationAddress 目的地址,即IPv6头部的目的地址,16bytes
l Options 选项字段
ü 目标链路层地址选项:新下一跳的链路层地址。
ü 重定向头选项:触发报文尽可能多的部分,但不应使重定向报文超过1280bytes。
同时,IPv6报文头中字段要求如下:
l SourceAddress 发送接口的本地链路地址
l DestinationAddress 触发重定向的数据报文的单播地址
2.2 ND协议主要功能介绍
2.2.1 路由器发现 Router Discovery
路由器发现是指主机怎样定位本地链路上路由器和确定其配置信息的过程,主要包含以下三方面的内容:
Ø 路由器发现 Router Discovery
路由器发现是主机定位邻居路由器以及选择哪一个路由器作为缺省网关的过程。
Ø 前缀发现 Prefix Discovery
主机发现本地链路上的一组IPv6前缀的过程,用于主机的地址自动配置。
Ø 参数发现 ParameterDiscovery
主机发现相关操作参数的过程,如链路最大传输单元(MTU)、输出报文的缺省跳数限制(Hop Limit)、地址配置方式等信息。
在路由器通告报文RA中承载着路由器的相关信息,ND协议通过RS和RA的报文交互完成路由器发现、前缀发现和参数发现三大功能。协议交互主要有两种情况:主机请求触发路由器通告和路由器定期发送路由器通告。
(1) 主机请求触发路由器通告
当主机启动时,主机会向本地链路范围内所有的路由器发送RS报文,触发邻接路由器响应RA报文。主机发现本地链路上的路由器后,自动配置缺省路由器,建立缺省路由表、前缀列表和设置其它的配置参数。
(2) 路由器定期发送路由器通告
路由器周期性的发送RA报文,使主机发现本地链路上的路由器及其配置信息,主机根据这些内容来维护缺省路由表、前缀列表和配置其它参数。
2.3 地址解析 Address resolution
地址解析是指某节点在知道目的节点IP地址的情况下,确定目的链路层地址的过程。
当一个节点需要得到同一本地链路上另外一个节点的链路层地址时,需要进行地址解析,该机制类似于IPv4中的ARP。 ND协议用NS和NA报文完成IPv6地址到链路层地址的解析,解析后的链路层地址和IP地址等信息用来建立节点的一个邻居缓存表项。
当一个节点A要传送数据包到另一个节点B时,如果不知道B的链路层地址,则需要完成以下协议交互过程:
① A发送一个NS报文到网络上,目的地址为Node B对应的被请求节点组播地址,选项字段中带上Node A的链路层地址。
② B侦听到该NS报文后,由于报文的目的地址属于自己被请求节点的组播地址,处理该报文;发送一个NA报文应答NS,同时在消息的目标链路层地址选项中带上自己的链路层地址。
③ A接收到NA报文后,获悉了B的链路层地址,创建一个目标节点的邻居缓存表项。
这样通过交互后, A和B就知道了对方的链路层地址,建立其对方的邻居缓存表项(类似于IPv4的ARP表),可以相互通信了。
此外,一个节点的链路层地址发生改变时,可以用所有节点的组播地址FF02::1发送NA报文,通知本地链路上的其他节点,使这些节点可以刷新自己的邻居缓存表。
2.2.2 邻居不可达检测NUD Neighbor Unreachability Detection
邻居不可达检测是节点怎样确定邻居不可达状态的过程。
ND协议用NS和NA报文来验证邻居节点的可达性。节点在确定邻居的链路层地址后,跟踪邻居缓存表的状态,定时发送NS报文,如果邻居在规定的可达时间内(缺省值为30秒)不能接收或者发送返回的报文,则删除此邻居缓存表项。
邻居的可达性并不能说明端到端的可达性。因为相邻节点可能是主机或者路由器,所以相邻节点并不一定就是数据包的最终目标。NUD检测仅仅验证了到目标路径上第一跳的可达性状态。
2.4 重复地址检测DAD Duplicate Address Detection
重复地址检测是节点确定即将使用的地址是否被另一节点使用的过程。
在节点自动配置某个接口的IPv6单播地址之前,必须在本地链路范围内验证要使用的临时地址是唯一的,并且未被其他节点使用过。
只要NS报文发送到本地链路上(缺省发送一次NS报文),如果在规定时间内没有NA报文进行应答,则认为这个临时单播地址在本地链路上是唯一的,可以分配给接口;反之,这个临时地址是重复的,不能使用此地址。
3 ND常见攻击介绍
3.1 ND常见攻击类型
3.1.1 地址欺骗攻击
攻击者可以使用RS/NS/NA报文来修改受害主机或网关上受害主机的MAC地址,造成受害主机无法与网络进行正常的通信。
如下图所示:
图6 RS/NS/NA仿冒攻击示意图
如上图所示,攻击者能够伪造NS/NA报文,发送给网关或受害主机,通过这种方式来对网关上受害主机的MAC地址或受害主机上的特定的MAC地址进行修改,这样就造成了受害用户无法接收到正常的数据报文。
3.1.2 DAD攻击
当受害主机进行DAD查询的时候,攻击者通过NS或NA报文进行干扰,使得受害主机的DAD过程失败,无法获取到IP地址,这种攻击的概率和NS/NA的欺骗攻击相比,相对较少。见下图:
图7 DAD攻击示意图
如上图所示,在受害者进行DAD检测时,攻击者可以伪造NS报文,与受害者产生冲突,也可以伪造NA报文,应答受害者的NS报文。这两种情况,受害主机都无法获取地址,进行正常的网络通信。
3.1.3 RA攻击
RA能够携带很多网络配置信息,包括默认路由器,网络前缀列表,是否使用DHCP服务器进行有状态地址分配等网络配置的关键信息。如果受害者接收了虚假的RA信息,会造成网络配置错误,从而引发欺骗攻击。
图8 RA攻击示意图
如上图所示,攻击者发送伪造的RA报文,其中可以造成多种攻击:
1)伪造不存在的前缀,修改受害主机的路由表。
2)伪造网关的MAC及lifetime,造成受害主机的默认网关改变。
3)伪造DHCP服务器,同时伪造RA中的M bit,造成受害主机使用DHCP服务器分配到虚假的地址。
3.1.4 针对网关的泛洪攻击
通过发送大量的NS/RS报文,造成网关的表项溢出。
图9 泛洪攻击示意图
攻击者通过伪造大量的NS/RS报文,发送给网关,使得网关的表项溢出,造成网关无法提供正常的服务。
4 H3C 的ND防攻击解决方案
通过对上述的ND攻击类型的介绍。我们可以推出发现当前ND攻击防御的关键所在:如何获取到合法用户和网关的IPv6地址-MAC对应关系,并如何利用该对应关系对ND报文进行检查,过滤掉非法ND报文。H3C公司解决这一关键问题的思路是,通过自动的ND 监控模式、DHCP监控模式与手工配置的方式,获取到合法用户的IP-MAC对应关系。再配合RA trust与DHCP trust对RA报文与DHCP报文进行限制,从而解决不同环境下的ND防攻击问题。
同时,为了避免网关的ND表项被异常的ND报文打满溢出造成DoS攻击,在网关上能够针对端口配置最大的ND表项学习数量,能够缓解此类攻击。
4.1 信任表项与ND Detection
从前文的描述,我们知道,在局域网中ARP或ND攻击的根本原因是无法对所交互的ARP或ND报文进行验证,从而无法得知正确的用户IP、MAC、端口的绑定信息,所以无法对异常的ND报文进行过滤,使得网络中可能发生ARP/ND攻击。
H3C通过ND snooping、DHCP snooping、手工配置等手段在接入层交换机上建立的一张IP、MAC、Port的可信表项,获取可靠的用户IP地址与MAC地址的对应关系。通过这张表项,结合ND Detection技术,对异常的ND报文进行过滤,达到防止ND攻击的效果。
H3C的ND snooping与DHCP snooping是一种动态获取用户IP、MAC、Port对应关系的技术,下面分别对这两种技术进行简要描述:
ND snooping:ND协议报文的交互过程在上文已经进行了描述,在ND snooping中,监听ND协议的DAD交互过程,获取用户的IP、MAC、Port的对应关系。
DHCP snooping:通过监听DHCP的交互过程,获得用户的IP、MAC、Port的绑定表项。
手工绑定表项:手工绑定是一种常用的技术,在一些规模不大的网络中,或者对安全性要求较高且不经常变化的网络中,使用手工绑定来建立可信表项。
在建立了绑定表项之后,能够保证一个已经获取了IP地址的用户只能使用已获取的地址进行通信,过滤掉所有的不在绑定表项中的IPv6的非法用户发送的IP报文。
ND Detection是H3C在ND防攻击方面的创新技术,通过结合已经建立的绑定表项,这个绑定表项可以是使用ND snooping,DHCP snooping,手工来进行配置的,通过比较已经获取到的可信表项中的IP与MAC地址,对ND报文进行过滤,丢弃异常的报文。相比单纯使用ACL进行的用户绑定,ND Detection技术结合绑定表项对ND报文进行过滤,能够较好的防御ND攻击。
4.2 RA Trust与DHCP Trust
RA Trust与DHCP Trust的功能不同,但是思路是相同的,管理员可以在相应的连接DHCP服务器或网关的接口上进行配置,通过手工指定连接DHCP服务器与连接发送RA的设备的接口接口(通常是网关),能够避免网络中DHCP报文与RA报文的任意发送。当进行了RA Trust与DHCP Trust后,DHCP的服务器端报文与RA报文只能从配置了TRUST的端口进入,避免了DHCP服务器欺骗与RA攻击,提升了局域网安全性。
5 总结
综上所述,H3C的ND防攻击解决方案,通过在网络设备学习可信的用户接入表项,同时配合ND Detection技术,对非法报文进行过滤,提高了用户侧ND报文的可信性及安全性。再配合DHCP Trust与RA Trust功能,禁止非法的DHCP报文与RA报文发送,从多方面提升了ND协议的安全性,解决了在IPv6网络中存在的ND攻击问题。