- MAC地址泛洪攻击
- 实验目的
- 环境介绍
- Start Lab
- 结论
- 防御
- 参考
Author:颖奇L'Amore Blog:www.gem-love.com 这篇文章是以前写的
MAC地址泛洪攻击▸
交换机的主要功能为学习、转发、过滤、生成树防环等。 学习即是当某一个接口收到了Frame/Packet时会学习该接口下连接主机的mac地址并保存在CAM表(MAC地址表)中; 转发 过滤即是当一个接口收到一个单播时,会在CAM表中查询mac地址找出接口,DMAC映射了哪个接口,就从哪个接口转发出去,但是当DMAC没有相关映射时,就会泛洪它,这个泛洪叫做unknown unicast flooding
(未知单播泛洪)。 既然如此,攻击者在同一个接口伪装各种MAC地址来发包,那么交换机会一直学习并且在攻击者的口映射,有限的CAM表很快被占满,CAM表的aging time
(超时时间)默认为300秒,仅当达到Aging Time才会移除相关条目,再次收到相关帧则重新学习。但攻击者的攻击不会停止,因此表永远都是满的。当合法主机超时需要重新学习或新来了合法主机时,CAM表已经没法容纳它们,此时合法主机的包和帧全部被泛洪,攻击者在其他接口开启sniffer,便会抓到合法主机的数据。
实验目的▸
笔者在一次学习过程中,一位前辈认为是当表慢了后,新来几条,就会从上到下依次T掉几条,那么合法主机被T掉,而不是aging time超时被移除! 笔者仔细考虑了这个问题,发现其实这种说法并不科学:如果后到优先,那么合法主机被T掉后又可以重新学习,也就是合法主机来T非法主机,这样就不会未知单播泛洪,攻击没任何意义了。 但实践是检验真理的唯一标准。
环境介绍▸
拓扑:
R1用c7200 模拟了一个主机
ESW1用3725模拟交换 两个接口进同一个vlan 然后创建svi口 地址是192.168.0.10
云桥接了linux地址是192.168.0.2
由于交换机默认开启生成树,会block掉一个接口,所以实验前需要先关闭spaning-tre
Start Lab▸
看下现在的合法主机
先把aging time从300s改短点儿,改成2分钟 使用macof
攻击
很快 表已经满了,很显然,这条动态(dynamic)方式学习到的条目并没有被新来的大量条目“T”掉
2分钟后 合法条目因达到老化时间而被CAM表移除
抓包看看攻击效果
这capture是在R1–SW1链路上的抓包,由此可见:
- macof发送的是TCP包,因为是三层packet而不是二层frame,因此伴随有ARP广播请求。
- cam表已满,这些TCP packet也会被泛洪,因此这条链路上可以抓到它们。
结论▸
CAM表在满后,会停止继续学习mac地址,直到aging time到了老化掉某个或某些条目CAM表中有空闲位置时,才会继续学习。
防御▸
最简单的防范方法就是port security技术,他可以设置当一个接口学到≥x个(默认为2个)地址默认就shutdown-err-disable,当然我们可以设置,比如:允许学习5个地址且其中一个必须是某个Mac,这是因为交换机下联不一定是个主机,也可能是另一个switch! 笔者的模拟器并不支持port Security这feature 很无奈 无法演示
参考▸
《思科CCIE路由交换v5实验指南》