MAC地址泛洪攻击
MAC地址泛洪攻击
lololoweCAM表
交换机会通过自己接收到的数据帧, 建立数据帧源 MAC 地址和端口之间的对应关系(自学习), 此后, 交换机就可以利用存储这个映射关系的逻辑表, 有针对性地明确(单播)转发数据帧, 交换机上这个存储映射关系的逻辑表叫作 MAC 地址表或 CAM 表。
CAM 表的容量是有限的, 如果短时间内收到大量不同源 MAC 地址发来的数据包, CAM 表就会被填满。当填满之后, 新到的条目就会覆盖前面的条目。这样当网络中正常的数据包到达交换机之后, 而交换机中 CAM 表已经被伪造的表项填满, 无法找到正确的对应关系, 只能将数据包盲目转发(广播)出去。这时受到攻击的交换机实际上已经退化成集线器。黑客只需要在自己的计算机上将网卡设置为混杂模式, 就可以监听整个局域网的通信。
MAC地址泛洪攻击
- 攻击机:kali (192.168.44.134)
- 靶机:华为S3700交换机 (192.168.44.66)
- PC1 (192.168.44.88)
- PC2 (192.168.44.99)
从上图可以看出 kali 位于交换机的 g0/0/1
端口, 且属于动态端口
使用macof
安装dsniff
macof是dsniff工具集的一个组件。使用以下命令安装 dsniff:
1 | sudo apt install -y dsniff |
攻击
1 | sudo macof -d 192.168.44.66 |
从上图可以看到 macof 向交换机循环发送了大量 TCP SYN 握手包, 并且每个数据包的源和目的 MAC 地址都不同。
抓包
- 交换机抓包:
从上图可以看到交换机短时间内就收到了上百万个伪造源 IP 地址的数据包。
交换机在遭到攻击之后, 内部的 CAM 表很快就会被填满(上图可见攻击机所在接口出现了大量伪造的不同的 MAC 地址的)。交换机在退化成集线器后会将收到的单播数据包全部广播出去, 使得任何人都可收到数据包。
- 攻击机抓包
从上图可以看到攻击机(192.168.44.134)抓到了 PC1(192.168.44.88) ping PC2(192.168.44.99)的单播包。
使用scapy
scapy 模块中的 RandMAC()和 RandIP() 可以很方便地构造随机 MAC 地址和 IP 地址, 也可以生成固定网段的 IP 地址, 方法是:RandIP("192.168.1.*")
。编写如下代码:
1 | from scapy.all import * # 导入scapy库的所有模块 |
执行该程序后, 可以看到程序发送了大量垃圾数据包。
防护
交换机启用端口安全功能, 限制每个端口最多可以学习的 MAC 地址数量:
1 | system-view # 进入系统视图 |
完成此配置之后, 再次在 kali 中启动 macof 进行攻击。攻击进行一段时间之后, 在交换机中使用display mac-address
命令查看它的 CAM 表。可以看到虽然攻击者依然产生了大量的数据包, 但是依然只占用了 CAM 表中的8项, 因而永远无法达到填满整个 CAM 表的目的。同时, 交换机也发出了警告来表示该接口进入了限制模式。
参考书籍: