王宇杰,杨志军
(北京交通大学信息中心,北京100044)
IPv6环境下邻居发现(Neighbor Discovery,简称ND)协议通过使用5种类型的ICMPv6消息,实现如下主要功能:地址解析、验证邻居是否可达、重复地址检测、路由器发现、前缀发现、地址自动配置和重定向功能,它工作于本地链路范围内。ND协议取代了IPv4中使用的ARP、ICMP路由器发现和ICMP重定向报文。IPv4下的ARP是直接封装在数据帧中进行传输的,其广播、动态学习的工作机制注定是一种低效和不安全的协议,容易受到地址欺骗和泛洪类型的攻击。而IPv6下的ND协议是封装在IPv6报文中进行传输的,并且IPv6采用组播代替IPv4中的广播。因此,ND协议工作时,节点间的交互报文对其它节点的影响很小。虽然IPv6下的ND协议对比ARP要高效得多,但是,其工作机制仍然存在着安全漏洞,比较典型的安全威胁有:RA欺骗,NA欺骗,重定向欺骗,RS泛洪,NS泛洪。这些安全威胁的存在与在IPv4下的ARP一样会造成地址学习的失败、路由的错误和设备CPU的高负荷,影响网络的互通性,从而影响用户IPv6业务的稳定运行。
IPv6地址分为单播、组播和任播3类。如果仅关心与ND协议相关的IPv6地址,那么,每个IPv6节点启动IPv6协议栈后,将在本地以太网卡接口上自动配置固定前缀FE80::/64,接口ID部分使用EUI-64地址的链路本地单播地址;启用私密性扩展的IPv6主机还能生成固定前缀FE80::/64,接口ID部分使用临时接口标识符的链路本地单播地址。如果主机接收到路由器的前缀公告信息,还能自动配置可聚合全球单播地址。而组播地址包括由特定前缀FF::/8标识的组播地址、被请求节点组播地址和众所周知的组播地址,其中被请求节点组播地址由前缀FF02::1:FF00::/104和单播地址的最后24 bit组成,众所周知的组播地址主要有本地链路范围所有节点组播地址FF02::1和本地链路范围所有路由器组播地址FF02::2。
以太网网卡工作时需要维护一个已注册MAC地址的表,如果网卡收到一个目标MAC地址存在于注册表中的数据帧,就将此帧传递给上层协议作进一步处理。默认情况下,以太网卡初始化后,将在这张表中注册分配给网卡的单播MAC地址和广播地址(0xFF-FF-FF-FF-FF-FF)。节点启动IPv6协议栈,通过重复地址检测后,还将在网卡中注册被请求节点组播地址映射的MAC地址,地址结构为0x33-33-FF-xx-xx-xx,xx-xx-xx由单播地址的最后24 bit组成;本地链路范围内所有节点组播地址映射的MAC地址,地址结构为0x33-33-00-00-00-01;对于路由器来说,除了上面注册的地址外,还有1个本地链路范围所有路由器组播地址映射的MAC地址,地址结构为0x33-33-00-00-00-02。
ND协议报文封装如图1。
图1 ND协议报文封装
1.3.1 邻居请求消息NS
NS作用:获取邻居的链路层地址;验证邻居是否可达;进行重复地址检测。其中,IPv6报头的源地址字段的值为发送方接口的单播IPv6地址,进行重复地址检测时为未指定IPv6地址(::),对应的MAC帧头的源地址字段的值为发送方网卡的MAC地址;IPv6报头的目标地址字段的值为被请求节点组播地址或单播地址,对应的MAC帧头的目标地址字段的值为对应的被请求节点组播地址映射的MAC地址或目标单播MAC地址。
1.3.2 邻居通告消息NA
NA作用:响应NS消息;节点在链路层变化时主动发送NA消息,向邻居节点通告本节点的变化信息。其中,如果是对NS消息进行响应,IPv6报头的源地址字段的值为发送方接口的单播IPv6地址,对应的MAC帧头的源地址字段的值为发送方网卡的MAC地址;IPv6报头的目标地址字段的值为最初发送邻居请求消息的发送方单播地址,对应的MAC帧头的目标地址字段的值为最初发送邻居请求消息的发送方的单播MAC地址。
1.3.3 路由器请求消息RS
RS作用:向路由器发出请求,请求前缀和其他配置信息,用于节点的自动配置。其中,IPv6报头的源地址字段的值为发送方接口的链路本地地址或者未指定地址(::), 对应的MAC帧头的源地址字段的值为发送方网卡的MAC地址;IPv6报头的目标地址字段的值为本地链路范围所有路由器组播地址(FF02::2),对应的MAC帧头的目标地址字段的值为0x33-33-00-00-00-02。
1.3.4 路由器通告消息RA
RA作用:响应RS消息;在没有抑制RA消息发布的条件下,路由器会周期性地发布RA消息,其中包括前缀信息选项和一些标志位的信息。IPv6报头的源地址字段的值为发送方接口的链路本地地址,对应的MAC帧头的源地址字段值为发送方网卡的MAC地址;IPv6报头的目标地址字段值为本地链路范围所有节点组播地址(FF02::1),或者发送路由器请求消息的节点单播IPv6地址,对应的MAC帧头的目标地址字段值为0x33-33-00-00-00-01,或者是发送路由器请求消息的节点单播MAC地址。
1.3.5 重定向消息
重定向消息作用:缺省网关通过向源主机发送重定向消息,使主机重新选择正确的下一跳地址进行后续报文的发送。其中,IPv6报头的源地址字段值为重定向消息的发送接口的单播地址,对应的MAC帧头的源地址字段值为重定向消息的发送接口的网卡MAC地址;IPv6报头的目标地址字段值为始发节点的单播IPv6地址,对应的MAC帧头的目标地址字段值为始发节点的单播MAC地址。
主机通过发送虚假的RA报文,可以实现RA欺骗。欺骗手段为:欺骗主机通过在以太网卡上注册MAC地址0x33-33-00-00-00-02,即可以侦听到正常工作主机发出的目标地址为本地链路范围所有路由器组播地址(FF02::2)的RS消息。然后,修改RA消息中ND报头的默认路由器优先级字段,给发送RS的正常主机回应虚假RA,正常主机收到欺骗RA报文后,在本机的默认路由器列表中会添加1个错误的或指向欺骗主机的默认路由,造成正常主机数据报文的路由错误。欺骗主机也可以自发发送RA欺骗报文,其目标地址为本地链路范围所有节点组播地址(FF02::1),在RA欺骗消息中,定义虚假的前缀信息选项,而前缀列表定义了主机可以直接到达的目标的IP地址范围,从而可以使本地链路范围内所有正常主机产生错误的路由表项。欺骗RA通过修改前缀信息选项的自治标志位,还可以使正常主机收到虚假前缀后在以太网卡接口生成无状态自动配置的带虚假前缀的IPv6地址。
防御RA欺骗基本对策:仅允许路由器发送RA消息,其它任何主机发出的RA消息均过滤丢弃。可以在接入交换机上实施本策略,方法是除上行到路由器的端口外,接入交换机在其它所有接入端口上检测收到的ICMPv6消息是否是类型为134的RA消息,如果是,则丢弃。
欺骗主机通过在以太网卡上注册被请求节点组播地址映射的MAC地址,即可以侦听到正常主机发出的目标地址为被请求节点组播地址的NS重复地址检测消息,通过向正常请求主机回送NA欺骗消息,使正常主机不能通过重复地址检测过程,因此,正常主机就不能实现IPv6地址的初始化。欺骗主机通过在以太网卡上注册路由器的被请求节点组播地址映射的MAC地址,即可以侦听到正常主机发出的目标地址为路由器被请求节点组播地址的NS链路层地址解析消息,发出欺骗NA消息响应请求,欺骗NA消息中的ND报头中包含1个目标地址字段的值为路由器的接口IPv6地址,ND选项中包含欺骗主机的源链路层地址。同时,欺骗主机通过在以太网卡上注册正常主机的被请求节点组播地址映射的MAC地址,侦听路由器发出的目标地址为正常主机的被请求节点组播地址的NS链路层地址解析消息,并向路由器发出欺骗NA消息响应请求,欺骗NA消息中的ND报头中包含1个目标地址字段的值为正常主机的接口IPv6地址,ND选项中包含欺骗主机的源链路层地址。使得正常主机和路由器之间的交互报文都要经过欺骗主机转发,达到中间人攻击(Man-in-the-Middle Attack)的目的。
在接入交换机上启用IPv6源地址防伪造功能,同时启用ND消息的检测功能。针对重复地址检测的NA欺骗和中间人攻击的NA欺骗,比较NA消息中IPv6报头的源地址字段的值与ND报头中包含的目标地址字段的值是否一致,不一致表示是NA欺骗消息,丢弃此消息。
欺骗主机向正常主机发送虚假的重定向消息,重定向消息的ND报头中包含1个下一跳地址字段和1个目标地址字段,下一跳地址字段的值设置为伪造地址,使收到重定向消息的正常主机会用目标地址字段的值及下一跳地址字段的值来更新本机目标高速缓存中的表项,从而使正常主机的报文转发发生错误。
正常情况下,只有本地链路上的路由器可以发送重定向消息,主机是不能发送重定向消息的。可以在接入交换机上实施策略,方法是除上行到路由器的端口外,接入交换机在其它所有接入端口上检测收到的ICMPv6消息是否是类型为137的重定向消息,如果是,则丢弃。
RS、NS泛洪属于DOS攻击,攻击主机通过向路由器短时间内发送大量的RS消息,消耗路由器CPU的资源,从而影响路由器对正常数据报文的处理;攻击主机通过向正常主机短时间内发送大量的NS消息,消耗主机CPU的资源,从而影响正常主机对数据报文的处理。
可以在接入交换机上实施策略,其方法是除上行到路由器的端口外,接入交换机在其它所有接入端口上设置主机发送RS、NS消息的速率,接入端口检测收到的RS、NS消息是否超过了限定的每秒消息数,超出部分做丢弃处理。
IPv6环境下工作于本地链路范围的ND协议,由于其信息交互过程未进行安全方面的考虑,使得恶意主机通过欺骗和泛洪手段可以很容易地进行攻击,造成本地链路范围内的主机和路由器正常的报文转发受到影响,干扰了用户使用IPv6网络的体验。通过在接入层实施防御策略,可以在网络末梢保护主机和路由器,使其免受欺骗和泛洪的攻击,起到保护本地链路范围内信息报文正常交互的作用。
[1] Qing Li(美),Tatuya Jinmei Keiichi Shima(日). IPv6 Advanced Protocols Implementation[M] . 北京:人民邮电出版社,2009.
[2] Joseph Davies.理解IPv6[M] . 北京:清华大学出版社,2004.
[3] 李振强,赵晓宇,马严. IPv6技术揭秘[M] . 北京:人民邮电出版社,2006.