在 IPv6 环境下,当一个主机企图配置一个 IPv6 地址时,会先进行地址重复性检测,以确认在链路上该地址的唯一性。这一过程称为 DAD(Duplicate Address Detection)。
  比如在启动一个开启了 IPv6 的网卡时,网卡上会先自动配置一个 link-local 地址——以 fe80 开头的地址,在这个地址生效前会进行 DAD 检测。报文截图如下:

DAD 检测的关键就是图中这个 NS 报文,注意到该报文的源地址为全0,目的地址为一个多播地址,Target 指向自己欲配置的 IPv6 地址。一段时间内,若链路上没有谁回复 NA,或者在链路上收到同样结构的 NS 报文,则认为该地址在链路上具有唯一性,配置生效。

若在检测期间在链路上收到 NA 报文,情况又会如何?接下来我们可以伪造一个 NA 报文试一下,该 NA 报文在链路上通告:fe80::20c:29ff:fed7:5f0d 这个地址已经有人在用了。

NA 报文对主机造成了干扰,干扰结果是 DAD 检测失败,这个地址在链路上配置失败。

从 DAD 的整个过程来看,似乎可以通过伪造报文在局域网上做一些捣蛋的事,例如对于每个源地址为::的 NS 报文,可以组装出一个对应的 NA 或者 NS 报文,欺骗主机,干扰其地址的配置,造成主机无法有效的配置 IPv6 地址。

分类: CODE

0 条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注