前面我们对IPv6协议的相关安全问题简单的介绍了一下,现在我们针对另据发现协议的脆弱性进行一个分析。首先我们需要来了解一下这个协议的工作原理,以便我们来了解测试中的内容。
1.邻居发现协议脆弱性分析
在IPv6协议中,用邻居发现协议(NeighborDiscovery)代替了IPv4下的ARP协议来获取局域网内部机器的Mac地址,这是局域网内主机之间通信的前提条件。邻居发现协议主要包括两种格式的ICMP6报文:邻居请求NS(NeighborSolicitation)和邻居宣告NA(NeighborAdvertisement)。
邻居发现协议的工作原理
当局域网中的两台主机A与B之间通信前,A必须首先获取B的MAC地址,主要步骤如下:
(1)A以广播的方式向FE02::1发送一个ICMP IPv6协议的NS消息,询问B的MAC地址
(2)局域网中每个节点都能接收到该NS请求,当一个节点接收到该NS请求后,将目标MAC地址与自身MAC地址进行比较,如果不一致,则不应答;反之,如果所请求的MAC地址与自身MAC地址相等,则回应一个邻居宣告消息NA,表明自己就是所要请求的节点。本例中,在正常情况下,只有B回应NS请求,应答包中包含B的MAC地址。
邻居宣告报文的选项
需要特别注意的是IPv6协议中NA有3个特殊的标志位,R表示是否是路由,S表示是否是target本机做出的宣告,O表示是否覆盖原有的缓存。设置这几个标志位的主要目的原本是为了提高提高局域网节点工作的效率。
邻居发现协议安全隐患分析
通过以上的分析我们可以看出,IPv6下的邻居发现协议于IPv4下的ARP协议相比,在安全方面,并没有改进。主要体现在以下几个方面:
第一,对于NS的ICMP6报文,局域网中的任意节点,只要在局域网中监听到,就能回复,缺乏认证过程。所以IPv4下的ARP欺骗,在IPv6下可以利用NA欺骗代替,其原理是一样的,此处不再重复。
第二,相对于IPv4下的ARP应答包,NA作为IPv6下的应答包多了上述所说的3个标志位,不可否认,在所有局域网内节点都正常工作的情况下,这3个标志位无疑可以提高局域网节点工作的效率,但是一旦存在某个恶意节点,这3个标志位,无疑将成为恶意节点的有力工具。
首先通过R标志位,恶意节点可以伪装成路由,通过S标志位,恶意节点可以伪装成本机,对恶意攻击最有利的要数O标志位,恶意节点可以向被攻击者路由表中植入虚假路由信息。因为在IPv4下,邻居缓存表是每隔一定的时间刷新一次,恶意节点要覆盖正确地缓存可能要发送大量的虚假应答,容易被检测出,而在IPv6下利用O标志位覆盖正确的缓存则只需要发送少量的虚假NA包,非常难检测。
2.ICMP IPv6协议重复地址检测协议脆弱性分析
IPv6网络中的节点地址配置可以采用动态分配或静态设置两种方式,对于目前广泛采用的动态IPv6地址配置,需要经过以下几个步骤:
(1)从路由器或默认网关处获取IPv6地址前缀,如Prefix。
(2)节点生成一个后缀地址Suffix
(3)将前缀地址与后缀地址拼接成完整的IPv6地址:Prefix-Suffix
(4)执行重复地址检测(DAD:DuplicateAddressDetection),判断Prefix-Suffix是否已经被网络中其它节点占用:
a)A以广播的方式向FE02::1发送一个ICMPIPv6NS消息,询问Prefix-Suffix是否已经被网络中其它节点占用。
b)局域网中每个节点都能接收到该NS请求,当一个节点接收到该NS请求后,将目标地址与自身地址进行比较,如果不一致,则不应答;反之,则回应一个邻居宣告消息NA,表明自己已经使用了该IP地址。
(5)如果没有收到回应,则将Prefix-Suffix配置本机地址;反之,转第(1)步,重复执行上述步骤。
ICMP IPv6协议重复地址检测协议安全隐患分析
在执行重复地址检测的过程中,由于缺乏认证过程,局域网中任何节点都可以回应相应请求。这样,攻击者可以针对某个特定的主机(或局域网内所有主机)所发出重复地址检测消息进行回应,使得相应节点无法配置IPv6地址,从而无法连网。