热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MAC泛洪攻击的实施与防御

原文发表于2017年第7期《网络安全与信息化》,转发到博客。更多相关资料可参看视频教程“局域网安全实战”,http:edu.51cto.comcourse10348.html

原文发表于2017年第7期《网络安全与信息化》,转发到博客。

更多相关资料可参看视频教程“局域网安全实战”,http://edu.51cto.com/course/10348.html 

 

MAC泛洪攻击是一种针对局域网交换机的攻击方式,目的在于窃取局域网内用户的通信数据。本文以神州数码CS6200交换机为例,从原理、实施、防御三个方面对MAC泛洪攻击进行了全面介绍。

1.    交换机的MAC地址表

交换机的主要功能是在局域网内的主机之间转发数据帧。交换机接收从主机上传来的比特流之后,要先将其缓存成数据帧,然后通过分析帧头中的MAC地址,交换机就可以判断出数据的发送方和接收方,从而将数据转发给目的主机。

交换机的工作核心是端口/MAC地址映射表,这张表里记录了交换机每个端口同与之相连的主机MAC地址之间的对应关系。交换机刚启动时,端口/MAC地址映射表是空白的,当某台主机发送了一个数据帧到相应端口上后,交换机首先将数据帧里的源MAC地址与该端口的对应关系记录在映射表里,然后再去映射表里查找与数据帧的目的MAC地址相对应的端口,而此时肯定是找不着的,这时交换机就以广播的方式将这个数据帧向除了源端口以外的其它所有端口转发,从而将数据发送给了目的主机。经过这一个过程之后,在映射表里便已经产生了第一条记录。因而只要网络中的每台主机都发送了一次数据,在地址表中便会记录下所有主机MAC地址与端口的对应关系,从而建立起一个完整的端口/MAC地址映射表。映射表建好之后,交换机便可以在所有主机之间直接转发数据帧,而再也无需广播了。

在交换机中执行“showmac-address-table”命令就可以查看到MAC地址表。

CS6200#showmac-address-table

Readmac address table….

Vlan              Mac Address               Type             Creator          Ports

1             00-03-0f-3e-e6-90             STATIC        System          CPU

1             ec-a8-6b-61-64-a1             DYNAMIC   Hardware      Ethernet1/0/10

通常情况下,交换机的每个端口只会连接一台主机,因而在MAC地址表中每个端口只会对应1MAC地址。但由于交换机还要用于级联其它的交换机,因而在相应的级联端口上就会对应多个MAC地址,从而在地址表产生大量记录。

由于交换机的缓存有限,因此它所能够记忆的MAC地址数量也是有限的,所以交换机不会永久地记住所有的端口与MAC地址的对应关系。在端口/MAC地址映射表中每一项记录都被设定了一个自动老化时间,若某MAC地址在一定时间内(默认为300秒)不再出现,那么交换机将自动把该MAC地址从地址表中清除。当下一次该MAC地址重新出现时,将会被当作新地址处理,从而使交换机可以维护一个精确、有用的MAC地址表。交换机档次越低,交换机的缓存就越小,它能记住的MAC地址数也就越少。

以神州数码DCRS-6200交换机为例,它的MAC地址表中最多可以记录16384MAC地址。执行“showmac-address-table count”命令可以查看到MAC地址表的容量以及当前已经记录的地址数目。

CS6200#showmac-address-table count

Computethe number of mac address…..

Maxentries can be created in the largest capacity card:

Total              Filter Entry Number is:       16384

Static             Filter Entry Number is:       16384

Unicast          Filter Entry Number is:       16384

Multicast        Filter Entry Number is:       4096

 

Currententries have been created in the system:

Total              Filter Entry Number is:  2

Individual      Filter Entry Number is:  2

Static             Filter Entry Number is:  1

Dynamic        Filter Entry Number is:  1

Multicast(Insert)   Filter Entry Number is:  0

Multicast(Wait)     Filter Entry Number is:  0

2.    MAC泛洪攻击

MAC泛洪攻击就是由攻击者通过攻击工具产生大量的数据帧,这些数据帧中的源MAC地址都是伪造的,并且不断变化。因而交换机将在攻击主机所连接的端口上产生大量的MAC地址表条目,从而在短时间内将交换机的MAC地址表填满,直到再无法接收新的条目。

此时对于网络中那些事先没有在交换机的MAC地址表中留下记录的主机,它们之间的数据通信就会全部采用广播的方式进行,这样虽然并不影响数据的发送和接收,但此时的交换机实质上就成为了一台集线器,攻击者在网络中的任何一台主机上打开Wireshark,就可以监听到网络中的这些流量。

下面我们搭建一个如图1所示的实验环境,实验目的是通过在KaliLinux上发动MAC泛洪攻击,从而捕获目标主机访问目标服务器的数据。在实验过程中需要注意,先不要将目标主机和目标服务器连接到交换机上,待MAC泛洪攻击成功之后,再将它们连接上去,这样才能保证不会在交换机的MAC地址表中产生它们的记录,从而使得它们之间的数据通信采用广播方式。

wKioL1nJhF2CG8n-AAA1hLCuFDo703.jpg

1实验环境

KaliLinux中已经集成了MAC泛洪工具macof,执行macof之后,工具就开始不停向外发送伪造的源MAC地址不断变化的数据帧,如图2所示。如果一个macof的效果不明显,可以打开多个命令行界面,同时执行macof

wKiom1nJg6aTWVQUAAC1WmadFAw204.jpg-wh_50

2利用macof进行MAC泛洪攻击

此时在交换机上执行“showmac-address-table count”命令检查攻击效果,发现整个MAC地址表已被全部填满。

CS6200#showmac-address-table count

Computethe number of mac address…..

Maxentries can be created in the largest capacity card:

Total              Filter Entry Number is:       16384

Static             Filter Entry Number is:       16384

Unicast          Filter Entry Number is:       16384

Multicast        Filter Entry Number is:       4096

 

Currententries have been created in the system:

Total              Filter Entry Number is:  16384

Individual      Filter Entry Number is:  16384

Static             Filter Entry Number is:  1

Dynamic        Filter Entry Number is:  16383

Multicast(Insert)   Filter Entry Number is:  0

Multicast(Wait)     Filter Entry Number is:  0

 

执行“showmac-address-table”命令查看MAC地址表,可以看到绝大部分MAC地址都是从10号端口(Kali Linux所连接的端口)学习到的。

CS6200#showmac-address-table

Readmac address table….

Vlan              Mac Address               Type             Creator          Ports

1             00-03-0f-3e-e6-90             STATIC        System          CPU

1             ec-a8-6b-61-64-a1             DYNAMIC   Hardware      Ethernet1/0/10

1             00-07-72-01-47-8b     DYNAMIC   Hardware      Ethernet1/0/10

1             00-0a-b5-14-d5-dd            DYNAMIC   Hardware      Ethernet1/0/10

……

这时将目标主机和目标服务器连接到交换机上,然后在Kali Linux中打开Wireshark,就可以监听到它们之间的通信数据了。由于此时Kali Linux中存在大量的MAC泛洪数据,所以在抓包之前最好先设置捕获过滤器,比如设置过滤规则“host 10.39.1.11”,只抓取主机10.39.1.11发出和接收的数据。

然后在目标主机上访问目标服务器中的一个网站登录页面,并输入用户名admin以及密码123456,此时在Kali LinuxWireshark中成功抓获了它们之间的流量,为了更精确的显示我们所需要的数据,在Wireshark中又设置了显示过滤器http,只显示HTTP协议产生的数据,这时就可以轻松看到之前所输入的用户名和密码了,如图3所示。

wKioL1nJg4njfor5AAC9Q11g1GU934.jpg-wh_50

3Wireshark中抓取的用户名和密码

3.    通过Port-Security防范MAC泛洪攻击

通过Port-Security(端口安全性)技术可以有效防范MAC泛洪攻击,Port-Security可以限制交换机端口上所允许的有效MAC地址的数量,这样交换机就不会无限制的从端口获取MAC条目。如果某个端口的有效MAC地址个数已经达到最大值,那么当该端口再次接收到新的MAC地址时,就被认为发生安全违规,交换机将自动采取相应的动作。

管理员可以配置发生安全违规后交换机将采取的动作:

l  关闭(shutdown):在此模式下,安全违规将造成端口变为错误禁用状态,并关闭端口LED。当端口处于错误禁用状态时,可以先输入shutdown,再输入no shutdown,使其脱离此状态。此模式为默认模式。

l  保护(protect):在此模式下,当有效MAC地址的数量达到端口允许的限制时,带有未知源地址的数据帧将被丢弃。

l  限制(restrict):与保护模式基本相同,区别是在此模式下除了将数据帧丢弃之外,还会发出SNMP消息,并记录日志等。

下面在神州数码CS6200交换机上配置Port-Security

首先执行命令“clear mac-address-table dynamic”清除之前地址表中的记录。

然后在Kali Linux所连接的10号端口上启用Port-Security,并采用默认设置,有效MAC地址只有一个。

CS6200(config)#mac-address-learning cpu-control                   //开启CPU控制学习功能

CS6200(config)#interface ethernet 1/0/10                                 //进入端口配置模式

CS6200(config-if-ethernet1/0/10)#switchport port-security      //启用Port-Security

这时在Kali Linux中再次实施MAC泛洪攻击,就会发生安全违规,10号端口被关闭。执行“show Interface ethernet 1/0/10”命令查看端口信息,可以发现提示“Ethernet 1/0/10 is shutdown by port security”的提示信息。

CS6200(config)# show Interface ethernet 1/0/10

Interfacebrief:

Ethernet1/0/10 is administratively downlineprotocol is down

Ethernet1/0/10 is shutdown by port security

Ethernet1/0/10is layer 2 portalias name is (null)indexis 1;

Hardwareis Fast-Ethernetaddress is 00-03-0f-3e-e6-91

由于默认情况下每个端口的有效MAC地址只有一个,这时如果在端口所连接的主机上开启一个桥接模式的虚拟机,就会导致发生安全违规,从而将端口关闭。因而建议将端口的有效MAC地址的数量设置的大一些,这样端口就不会轻易被关闭了。比如将端口的有效MAC地址数量设置为5个:

CS6200(config-if-ethernet1/0/10)#switchport port-security maximum 5

我们还可以改变发生安全违规后的动作,比如将违规动作改为restrict,这样就只丢弃包而不关闭端口。

CS6200(config-if-ethernet1/0/10)# switchportport-security violation restrict

由于Port-Security需要在交换机的每个端口上依次设置,因而对于那些确定不会级联其它交换机的端口,建议都启用Port-Security,并根据实际情况将有效MAC地址的数量设置的稍微大一些,从而增强局域网的安全性。

 

本文出自 “一壶浊酒” 博客,转载请与作者联系!


推荐阅读
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • HSRP热备份路由器协议的应用及配置
    本文介绍了HSRP热备份路由器协议的应用及配置方法,包括设计目标、工作原理、配置命令等。通过HSRP协议,可以实现在主动路由器故障时自动切换到备份路由器,保证网络连通性。此外,还介绍了R1和R2路由器的配置方法以及Sw1和Sw2交换机的配置方法,最后还介绍了测试连通性和路由追踪的方法。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • RabbitMq之发布确认高级部分1.为什么会需要发布确认高级部分?在生产环境中由于一些不明原因,导致rabbitmq重启,在RabbitMQ重启期间生产者消息投递失败,导致消息丢 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 本文介绍了如何使用MATLAB调用摄像头进行人脸检测和识别。首先需要安装扩展工具,并下载安装OS Generic Video Interface。然后使用MATLAB的机器视觉工具箱中的VJ算法进行人脸检测,可以直接调用CascadeObjectDetector函数进行检测。同时还介绍了如何调用摄像头进行人脸识别,并对每一帧图像进行识别。最后,给出了一些相关的参考资料和实例。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了源码分析--ConcurrentHashMap与HashTable(JDK1.8)相关的知识,希望对你有一定的参考价值。  Concu ... [详细]
author-avatar
拍友2502911223
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有