IPv6“友邻发现”(ND)是IPv6协议栈的核心部分,它被用于IPv6地址解析和IPv6无状态地址自动配置等。在本文中,探讨了IPv6的不同组件将如何受到基于ND的攻击。
在部署IPv6无状态地址自动配置(SLAAC)时都需要IPv6节点。在SLAAC中,本地路由器将IPv6网络配置信息提供给本地主机,而本地主机利用这一信息来建立起IPv6连接,这包括IPv6地址的配置等。与动态主机配置协议版本6不同,这里没有地址“租用”。相反地,主机会自己自动配置(或“租用”)IPv6地址。SLAAC采用路由器请求和路由器通告消息来请求和传达IPv6网络及IPv6地址管理配置信息。自动配置过程的运作大致如下:
1. 主机配置链路本地地址;
2. 主机检查地址是否唯一,即主机对(暂时)地址执行重复地址检测(DAD);
3. 主机发送路由器请求消息;
4. 在接收路由器通告(RA)后,主机为接收的路由器通告中的每个前缀配置一个或多个暂时IPv6地址;
5. 主机检查地址是否唯一,即对暂时地址执行DAD;
6. 如果地址是唯一的,它通常会成为“首选”地址,可以积极用于网络通信。
在本质上,这意味着一个节点首先配置一个链路本地IPv6地址,然后基于RA消息中的前缀信息配置一个或多个全局IPv6地址。RA消息可能获取其他网络配置信息,例如到特定网络的IPv6路径、递归域名系统服务器的IPv6地址以及采用的最大传输单元(即最大数据包大小)。
有些IPv6部署未能对RA消息中的信息执行验证检查,或者未能执行对相应数据结构的大小限制。
例如,有些部署会对RA消息中的每个前缀配置一个地址,而不会对它们配置的IPv6地址的最大数量进行任何限制。因此,攻击者可以对具有多个RA消息(包含多个自动配置前缀)的受害者采用洪水式攻击,受害者将自动配置很多IPv6地址,最终将会崩溃或停止响应。
为了帮助了解这种攻击的基础,IT管理员可以利用SI6 Networks的IPv6工具包中的ra6工具来执行这种攻击,如下:
ra6 -i eth0 --flood-prefixes 10 -d ff02::1 -l -z 1 -v
这个命令将会向所有本地节点发送一个RA消息,每秒包含10个(随机)前缀。这将导致每个节点为每个随机前缀配置一个IPv6地址。
在Unix系统中,ifconfig命令可以部署在任何受害者的节点来检查已经自动配置的IPv6地址。
图1 ifconfig命令可以用来探测自动配置的地址
当然,在现实世界攻击中,RA消息将以更高的速率发送,例如每秒至少100。然而,由于这种攻击可能让所有本地节点崩溃,本例中采用了更保守的数据包速率来执行攻击。
所有RA消息包含路由器寿命值,这表明路由器发送消息多久后可以作为默认路由器。本地主机从RA消息获取这个数值,并通过本地定时器来追踪它。本地路由器通过定期发送(未请求的)RA消息来试图“更新”本地主机的相关定时器。因此,在正常情况下,路由器的寿命永远不会到期。然而,攻击者可以利用这个定时器或参数来用于拒绝服务(DoS)目的。如果攻击者能够模拟本地路由器,并发送路由器寿命值为0(或其他小数值)的RA消息,受害者节点将从默认路由器列表中删除假冒路由器,从而发生拒绝服务的情况。
假设特定子网的合法本地路由器是fe80::1,攻击者会按如下命令利用ra6来向所有本地节点来执行DoS攻击:
ra6 -i eth0 -s fe80::1 -d ff02::1 -t 0
“-i eth0”表明发动攻击所使用的网络接口;“-s fe80::1”表明攻击数据包的源地址(合法本地路由器被假冒);“-d ff02::1”表示攻击数据包被发送到“所有节点链路本地多播地址”,而“-t 0”设置“路由器寿命值”为0。
Netstat命令可以用来检查受害者节点的路由表,并确认指向fe80::1节点的默认路径已被删除。
在IPv6地址被用于网络通信之前,该地址需要检查唯一性—这通常被称为重复地址检测。DAD的工作原理大致如下:
·愿意使用IPv6地址的节点将为上述地址发送一个邻居请求(NS)消息
·如果在响应中收到邻居通告(NA),该地址被认为是重复的,那么DAD失败。
·如果没有收到该地址的NA消息(可能是在一系列NS消息重发后),该地址被认为是唯一,DAD成功。
DAD相应的NS消息被发送,其中包含设置为未指定地址(::)的源地址,因此这很容易区别于用于地址解析(而不是重复地址检测)的NS消息。
攻击者可以通过如下命令利用na6工具来轻松地执行针对本地节点的DoS攻击:
na6 -i eth0 -b :: -L -v
这个命令指示na6监听(“-L”)网络接口eth0中包含源地址设置为未指定地址(“-b::”)的NS消息,当收到这种消息时响应NA。因此,当节点被引导并尝试自动配置IPv6地址时,它试图配置的每个地址都会被认为是重复地址,则SLAAC会失败。
Ifconfig命令可以用来检查受害者网络接口卡的配置,如下:
图2 检查网络接口卡的配置
从上面的截图中来,至少要注意两件事情。首先,链路本地地址被标记为“重复”。其次,这个接口没有配置全局IPv6地址,原因在于,当暂时链路本地地址的DAD失败时,SLAAC被终止。因此,DoS攻击会发生。
网络不可达检测(NUD)是IPv6的另一个组件,包括测试到相邻节点的路径,如果当前路径失效还可以允许选择替代路径。最重要的是,攻击者为感染NUD唯一能做的事情是让该协议来相信失败路径可以正常工作。
与其他基于ND的攻击相比,这个漏洞并不是那么吸引攻击者,因此,大家并不需要过多担心这个攻击方法。
好文章,需要你的鼓励
临近年底,苹果公布了2024年App Store热门应用和游戏榜单,Temu再次成为美国下载量最多的免费应用。
云基础设施市场现在已经非常庞大,很难再有大的变化。但是,因为人们可以轻松地关闭服务器、存储和网络——就像开启它们那样,预测全球云基础设施开支可能非常困难。