在IPv4下,网关地址往往需要自己手动设定。IPv6下由路由请求RS和路由宣告RA两种ICMP6的报文共同构成了IPv6路由发现协议。该协议的作用一方面是为了帮助局域网内部的节点寻找网关或路由器,使该节点能够与外网通信,另一方面,对于刚接入网络的新IPv6节点,先根据网关或路由的信息设定自己的IPv6地址,才能和其他节点进行通信,两种报文的格式。
IPv6路由发现协议的工作原理:
(1) 客户端向所有路由器地址(FF02::2)发送路由请求消息RS或者路由器周期性地向所有节点(多播地址FF02::1)发送路由宣告消息RA。
RA报文的IP包源地址必须填写本地链路地址,这是因为路由器往往有多块网卡,如果填写全局地址,接到宣告的节点不知道应该发给那个网卡,而利用本地链路地址与网卡Mac地址的一一对应性,能唯一的标识出为节点服务的网卡。IP包的目的地址分两种,如果RA是路由定期广播整个局域网的,就填广播地址,如果是对于RS的应答,则填写请求节点的地址。其他的诸如lifetime、reachable time以及options等都是一些设置参数,比如prefix(地址前缀)、优先级等,大部分对于本文意义不大,但是优先级的设置可以让你在所有路由中,取得优势地位。
(2) 客户端根据RA消息配置地址前缀和路由信息。
路由请求RS报文比较简单,IP包的目的地址当然要填写广播地址,而源地址填写请求者的地址即可,options可以填写请求者的Mac地址。
IPv6路由发现协议安全隐患分析
通过以上分析我们不难发现这个协议的漏洞。由于缺乏源地址认证,局域网内任意节点都都可以发送路由宣告消息RA,从而将自己伪装成路由。对于动态获取IPv6地址的节点,它是无法分辨哪个才是正确路由的。如果恶意的节点伪装成路由,并且在RA中将路由的优先级设为最高,动态获取IP的节点极有可能将数据包交由这个恶意节点转发。
导致以上漏洞主要原因是缺乏认证机制。