前文我们了解了GRE over IPSec 相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16601491.html;今天我们来聊一聊mac安全相关话题;
先来回顾下二层交换机的工作原理
我知道对于一台二层交换机来说,它的核心功能就是根据mac地址来转发数据;之所以能够根据mac地址来转发数据,是因为交换机的工作原理;交换机收到一个帧就会记录对应的帧的源mac和对应接口做对应;这样一来,当交换机收到对应目标mac的帧的时候,它就知道该把这个帧从那个接口转发出去;如果交换机收到的目标mac帧,在对应mac地址表里没有,此时交换机就会把对应数据包进行泛洪,如果在某一个接口收到了对应包的回复,此时它就会把对应接口和对应接口回复的源mac记录到mac地址表中;简单讲就是根据mac地址表来转发数据,如果没有就泛洪;
基于MAC的攻击
基于mac的攻击,通常手段有两种,一种是泛洪,一种是欺骗;所谓泛洪就是指攻击者在短时间内伪造很多mac地址帧,直接把交换机的mac地址表给写满;这样做最直接的后果就是,正常的数据包,交换机里没有对应mac,它不知道怎么转发,这个时候它就会泛洪,一泛洪,对应攻击者就能抓到数据包,从而获取数据;所谓欺骗是指攻击者恶意发送arp广播,告诉交换机,网关是我(通常就是欺骗网关,当然中间人攻击,也是类似的过程,两边欺骗);交换机收到攻击者的arp广播,它肯定会记录对应mac地址和接口,同时因为是arp广播,交换机上的其他pc收到对应的包,就会在本地记录对应mac和ip地址;从而在pc和网关通信时,会封装对应的mac地址,将数据发送给攻击者;这样一来攻击者就能够通过抓包等手段获取用户的数据;总之不管是mac泛洪攻击还是欺骗攻击,都是利用交换机的工作原理,通过mac地址表项来转发数据的特性来实行的攻击;
提示:上图为mac泛洪攻击的示意图;攻击者伪造很多mac地址,发送给交换机,以此来占用交换机mac地址表;使得正常的mac地址表项被覆盖;正常的mac地址表项被覆盖,正常用户通信时,交换机就会把对应数据包进行泛洪,使得用户数据被攻击者抓取;
MAC地址表项分类
提示:常见的就这三种表项,动态,静态和黑洞;动态表项是指交换机通过对帧内的源mac进行学习而来,有老化时间;静态和黑洞都是管理员手动配置的,都不会老化;黑洞表项是指收到对应mac地址的帧都会被丢弃,不管是源mac还是目标mac,交换机只要收到对应有黑洞表项的mac就会主动丢弃;
MAC地址表安全功能
MAC地址表特性参数
提示:默认交换机不做任何配置,动态学习mac的功能是开启的,老化时间为5分钟,端口的mac地址的优先级都是0;如果开启了端口安全,默认端口安全mac地址学习限制数量为1,即只能学习到一个mac,多的学习不到;端口安全的保护动作为restrict,即转发合法流量和发送告警;mac地址飘逸表项老化时间为5分钟,丢弃全0非法mac地址,以及收到全0非法mac地址报警功能都是关闭的;mac刷新arp功能也是关闭的;
实验:基于mac的泛洪攻击
实验环境说明:如上实验拓扑,我们使用云来桥接本地lo接口,另一端开一个kali来模拟攻击者
没有攻击,对应交换机mac地址表
提示:正常情况下,如果交换机没有收到帧,对应是mac地址表是空的才对,上面的mac地址是我们本地lo接口的mac,这是我们使用云桥接lo接口,默认lo接口会每隔一段时间发送一个ssdp包来发现局域网里的设备,所以我们在交换机上能够看到对应lo接口的mac地址;如下抓包
使用kali ping pc1和pc2
在交换机上查看mac地址表项
提示:可以看到对应的mac和接口一一对应;正是因为这个mac表项,对应交换机就能正常的将数据包转发到对应接口发送出去;
查看交换机mac地址表项汇总
提示:这里是模拟器bug,它的统计数据显示不出来;从上图可以看到该交换机最大容纳32768条mac地址和接口对应的记录,一旦超过这个记录就会覆盖最老的记录(覆盖只针对动态学习到的mac,静态是覆盖不了的);
使用kali攻击sw1
提示:使用macof工具来伪装mac地址,该工具能在一瞬间伪造大量mac地址帧,然后从网卡发送出去;-i选项是用来指定从那个网卡发送;
提示:可以看到我们只把macof工具开来不到5秒,对应交换机就收到了大量的mac地址帧,瞬间交换机的mac地址表也多了许多mac地址条目;
以上就是mac泛洪攻击的现象,我们总结一下,出现mac泛洪攻击时,查看交换机的mac地址表项就会发现,在某一个接口下会存在大量的mac地址条目,很显然这不正常;
MAC安全特性配置
1、添加静态mac地址表项
提示:添加静态mac时,我们需要写清楚对应mac 对应的接口和vlan即可;
验证:查看静态mac是否添加成功?
提示:可以看到对应mac地址表里就多了一条我们刚才添加的记录;汇总里也统计出有一条静态条目;
2、添加黑洞mac地址表项
验证:用kali ping pc2的地址,看看是否能够ping通呢?
提示:可以看到现在kali就不能正常ping通pc2,原因是kali拿不到pc2的mac,因为pc2的mac是一个黑洞mac,对应pc2收到kali的arp请求,在发送自己的mac时,交换机会丢弃对应pc2发送到任何包;
提示:第二张截图是在pc2上抓取的,可以看到pc2的确回复了kali的arp请求,但是kali却没有收到,原因就是交换机丢弃了pc2的包,因为pc2发送的包,源mac被设置成黑洞mac了;
3、配置老化时间
提示:默认mac地址表项的老化时间为300秒;
4、禁止mac地址学习功能
提示:以上命令可以在vlan模式和接口模式下使用,在接口模式下使用作用范围为当前接口,在vlan模式下使用作用范围是对应vlan;该命令后面还有两个参数,一个是forward,一个是discard;默认是不写后面的动作就是forward,表示转发;即对应端口或vlan所有接口,只是关闭动态学习mac的功能,但收到arp回复包进行转发;discard则表示根据目标mac地址,如果目标mac地址在mac地址表项存在,则转发,如果目标mac地址不存在mac地址表则丢弃;
实验:把g0/0/4接口的学习mac功能关闭,并配置默认动作为discard
查看mac地址表,看看对应g0/0/4口是否学习到mac?
提示:可以看到现在mac表,对应g0/0/4口没有学习到任何mac;
用pc1 ping pc3,看看对应接口是否会学习到mac?通信是否会通呢 ?
提示:可以看到对应pc1pingpc3并没有ping通;
查看mac地址表项
提示:可以看到4口也没有学习到mac;
抓包查看过程
提示:在pc3上抓包,可以看到对应pc3收到pc1的arp广播,并做了回复;
在pc1上抓包
提示:在pc1上抓包,对应pc3的arp回复包并没有收到,说明g0/0/4口丢弃了arp回复包,导致pc1拿不到pc3的mac,也就无法正常通信;
删除g0/0/4的禁止动态学习mac地址,先让g0/0/4学习到mac,然后再禁用学习功能呢
pc3发包,让交换机学习到mac
禁用4口学习mac功能
提示:可以看到现在4口已经学习到mac;
现在pc1 ping pc3 看看是否能通?
提示:可以看到现在pc1pingpc3是能够正常ping通的,这是因为交换机的mac地址表项里对应通信的目标mac,对应数据包会转发,如果没有则丢弃;当然,如果mac地址表老化,对应条目被删除,那么通信也无法正常进行;
把动作改为forward,看看对应接口是否能够学习到mac呢?通信是否正常呢?
pc1 ping pc3看看g0/0/4是否学习到mac?对应通信是否能够正常通行呢?
提示:可以看到通信是可以正常通讯,但是对应接口是不能够学习到mac条目的;
5、限制端口学习mac地址的数量
提示:该命令可以在接口模式和vlan模式下使用,在接口模式下作用范围当前接口,在vlan模式下作用范围是对应vlan;
验证:用macof工具攻击,看看对应3口是否只能学习到10条mac地址条目呢?
提示:可以看到对应交换机的终端在报警,对应3口也只能学习到10条mac地址条目;这里需要注意,这个学习到的mac是先学满10条,后面的就不学习了,并不是重复覆盖;
6、配置告警
提示:开启或关闭报警,必须配置前边的最大学习限制才可以,否则它会提示Error: Failed to change the configurations of the action or alarm because the MAC-limit rule does not exist.;
7、开启丢弃全0非法mac地址报文的功能
提示:以上两条命令在全局模式下使用;第一条作用是开启因收到全0非法mac报警;第二条表示开启丢弃全0非法mac;
8、配置mac刷新arp功能
提示:arp表是ip地址和mac地址以及出接口的对应表,mac地址表是mac地址和出接口的对应表;两者老化时间不一样,就导致当mac地址表是g0/0/1接口更新到g0/0/2口,对应arp里的信息还在g0/0/1口,这会导致通信中断;为了避免这样的问题,上述命令就表示当mac表项发生变化,通知arp表项对应条目更新,从而避免通信中断的问题;
官方文档示意图