如何避免IPv6“友邻发现”威胁?

  如果企业正着手准备部署IPv6,那么一定要了解“友邻发现(ND)”及其漏洞。

 

  IPv6友邻发现是IPv6协议套件的一个核心部件。它可用于IPv6解析和IPv6无状态地址自动配置。本文主要介绍各种基于友邻发现(ND)的攻击,以及阐述IT管理员如何使用一个开源IPv6工具套件来评估所有可能受此类问题影响的安全设备的有效性。

 

  IPv6友邻发现(ND)是IPv6协议套件的一个关键组件,它部署在IPv6节点,包含许多的功能:

 

  · IPv6地址解析

 

  · 无状态地址自动配置

 

  · 重复地址检测

 

  · 友邻中断检测

 

  IPv6地址解析包括将一个友邻节点的IPv6地址映射到相应的链路层地址上。在IPv4中,执行相同功能的是地址解析协议(Address Resolution Protocol, ARP)。无状态地址自动配置(Stateless address autoconfiguration, SLAAC)包括发现邻近路由器和获取用于建立IPv6连接的网络配置信息。重复地址检测(Duplicate address detection, DAD)是一个在部署一个IPv6网络通信地址之前用于检测重复IPv6地址的功能。最后,友邻中断检测(NUD)可用于评估一条通向相邻节点路径的可达性。在遇到节点中断时,可以部署一条替代路径。

 

  友邻发现使用互联网控制消息协议v6消息控制它的所有功能;它不同于ARP,后者直接运行在底层的链路层协议之上。虽然这种设计方式看起来“更整洁一些”(因为ND不会绑定到任何一种链路层技术上),但是这里也包含一些重要影响。例如,任何用于监控ND流量或防御ND攻击的设备或技术都必须应对IPv6数据包的多样性及其复杂性。又例如,IPv6碎片和IPv6扩展头信息就被证实可能会影响任何ND安全性、监控设备或技术。

 

  IPv6地址解析及其工作方式

 

  当IPv6数据包发送到本地链路时,一个相邻节点的IPv6地址(可以是最终目标或中间路由器)需要映射到相应的链路层地址。

 

  想要搞坏地址解析功能的最简单方法是部署nDisc6 IPv6诊断工具的ndisc6工具(开源)。ndisc6工具可以破坏两个功能:解析得到的IPv6地址和用于执行地址解析的网络接口。例如,它可能将IPv6地址fc00:1::1解析为下面的链路层地址:

  图1:解析一个IPv6地址

 

  一个IPv6实现在一个名为友邻发现缓存(与之对应的是IPv4的ARP缓存)中保存着IPv6地址到链路层地址的映射列表。在手工评估一个节点是否下载了错误地址映射(可能由攻击造成的错误)的过程中,检查友邻缓存是非常有用的。所有IPv6实现都提供了用于检测友邻缓存的方法或工具。例如,在GNU/Linux系统中,使用“ip”命令就可以检查友邻缓存:

 

  图2:检查友邻发现缓存

 

  结果中每一行包含一个IPv6地址、友邻所在的网络接口、相应的链路层地址、表示地址是否指向一个路由器的关键字(router)和这个记录的状态(例如,友邻是否可达、映射信息是否失效等)。

 

  在BSD系列操作系统中,则可以使用ndp检查友邻缓存的内容: