*1.2.3 MAC地址泛洪攻击概述
我们在本章中反复介绍过,交换机会自动根据入站数据帧的源MAC地址在自己的MAC地址表中建立MAC地址与自己端口对应关系的条目。具体来说,当交换机接收到一个数据帧时,它会用这个数据帧的源MAC地址与自己MAC地址表中当前保存的MAC地址进行比较。如果发现这个MAC地址已经保存在自己的MAC地址表中,则对MAC地址表这个已有的条目进行更新操作(即更新条目中对应的端口/重置老化计时器);如果发现这个MAC地址在自己的MAC地址表中还没有保存,则将这个MAC地址与包括接收这个数据帧的端口等信息一并作为一个条目,写入自己的MAC地址表中,以备下次转发以这个MAC地址为目的地址的数据帧时使用。
上述这个让交换机得以实现即插即用的操作方式,存在着一种不大不小的隐患。这个隐患的根源在于MAC地址表的存储资源不可能是无限大的。
在图1-18中,终端1的攻击者用软件生成了大量以不同MAC地址作为源MAC地址的数据帧,并且一股脑儿地将这些数据帧发送给了交换机,而交换机当然也会将这些伪造的MAC地址与数据帧入站端口编号记录在自己的MAC地址表中。
图1-18 MAC地址泛洪攻击
图1-18所示的攻击十分容易实现,而且攻击效率很高。Ian Vitek编写的macof只使用了100行Perl代码,但一台普通的PC运行这段代码,每秒就可以生成数十万个不同的MAC地址。按照这种方式继续下去,这台交换机的MAC地址表很快就会被这些伪造的源MAC地址占满。这时,若交换机再接收到以未知MAC地址作为源地址的数据帧时,它已经无法再将这些数据帧的源MAC地址记录到自己的MAC地址表中了,即使这次数据帧的源MAC地址是真实的,如图1-19所示。
图1-19 MAC地址表被占满
此时,攻击者已经达到了鸠占鹊巢的目的。如果这个局域网中有哪些设备的MAC地址交换机还没有学习到,那么交换机对去往这些设备的数据帧就会始终采取类似广播的形式进行处理,即将这个数据帧从接收端口之外的所有端口发送出去。关于交换机这种对待未知目的MAC地址的转发方式,我们已经在图1-11中进行了介绍。显然,“接收端口之外的所有端口”也包括攻击者连接的端口,这样攻击者还可以达到他的另外一个攻击目的——获得局域网中其他设备之间相互发送的数据帧副本,如图1-20所示。
图1-20 MAC地址泛洪攻击实现的另一种效果
MAC 地址泛洪攻击是一种在局域网中比较常见的攻击方式,发起这种攻击的工具唾手可得,因此发起攻击的门槛很低。当然,对于大部分缺乏更深层次理论知识和技术水平的攻击者来说,他们发起攻击只是为了满足一时的好奇心和虚荣心,倒也未必有能力借助MAC地址泛洪攻击来获取到足以对他人构成财产和隐私危害的数据信息,或者对网络通信造成进一步的破坏。