交换网络中的MAC地址欺骗
1 MAC地址欺骗
目前很多网络都使用Hub进行连接的,众所周知,数据包经过Hub传输到其他网段时,Hub只是简单地把数据包复制到其他端口。因此,对于利用Hub组成的网络来说,没有安全而言,数据包很容易被用户拦截分析并实施网络攻击(MAC地址欺骗、IP地址欺骗及更高层面的信息骗取等)。为了防止这种数据包的无限扩散,人们越来越倾向于运用交换机来构建网络,交换机具有MAC地址学习功能,能够通过VLAN等技术将用户之间相互隔离,从而保证一定的网络安全性。
交换机队于某个目的MAC地址明确的单址包不会像Hub那样将该单址包简单复制到其他端口上,而是只发到起对应的特定的端口上。如同一般的计算机需要维持一张ARP高速缓冲表一样,每台交换机里面也需要维持一张MAC地址(有时是MAC地址和VLAN)与端口映射关系的缓冲表,称为地址表,正是依靠这张表,交换机才能将数据包发到对应端口。
地址表一般是交换机通过学习构造出来的。学习过程如下:
地址表一般是交换机通过学习构造出来的。学习过程如下:
(1) 交换机取出每个数据包的源MAC地址,通过算法到相应的位置,如果是新地址,则创建地址表项,填写相应的端口信息、生命周期时间等;
(2) 如果此地址已经存在,并且对应端口号也相同,则刷新生命周期时间;
(3) 如果此地址已经存在,但对应端口号不同,一般会改写端口号,刷新生命周期时间;
(4) 如果某个地址项在生命周期时间内没有被刷新,则将被老化删除。
如同ARP缓冲表存在地址欺骗的问题,交换机里的这种MAC地址表也存在地址欺骗问题。在实际应用中,人们已经发现早期设计的许多交换机都存在这个问题,以Cisco2912交换机为例,阐明一下如何进行MAC地址欺骗。
(2) 如果此地址已经存在,并且对应端口号也相同,则刷新生命周期时间;
(3) 如果此地址已经存在,但对应端口号不同,一般会改写端口号,刷新生命周期时间;
(4) 如果某个地址项在生命周期时间内没有被刷新,则将被老化删除。
如同ARP缓冲表存在地址欺骗的问题,交换机里的这种MAC地址表也存在地址欺骗问题。在实际应用中,人们已经发现早期设计的许多交换机都存在这个问题,以Cisco2912交换机为例,阐明一下如何进行MAC地址欺骗。
如图所示,两个用户PcA和PcB分别连接Cisco2912的portA和portB两个端口。
PortC 00.00.CC.CC.CC.CC Internet
|
|
Cisco2912
|
|
Cisco2912
portA / \portB
/ \
Hub Hub
| |
PcA PcB
00.00.AA.AA.AA.AA 00.00.BB.BB.BB.BB
/ \
Hub Hub
| |
PcA PcB
00.00.AA.AA.AA.AA 00.00.BB.BB.BB.BB
假定PcA的MAC的地址是00.00.AA.AA.AA.AA
PcB的MAC的地址是00.00.BB.BB.BB.BB
在正常的情况下,Cisco2912里会保存如下的一对映射关系:
(00.00.AA.AA.AA.AA)<—>portA
(00.00.BB.BB.BB.BB) <—>portB
(00.00.CC.CC.CC.CC) <—>portC
依据这个映射关系,Cisco2912把从PortC上收到的发给PcA的包通过PortA发出,而不会从PortB发出。但是如果我们通过某种手段使交换机改变了这个映射关系,则Cisco2912就会将数据包转发到不应该去的端口,导致用户无法正常访问Internet等服务。最为简单的一种方法就是用户PcB构造一种数据包,该包的源MAC地址不再是自己的MAC地址00.00.BB.BB.BB.BB,而是PcA的MAC地址00.00.AA.AA.AA.AA,从上面的地址学习过程可以看出,Cisco2912就会错误的认为MAC地址00.00.AA.AA.AA.AA是从portB上来的,因此映射关系也就改为:
(00.00.AA.AA.AA.AA)<—>portB
(00.00.BB.BB.BB.BB) <—>portB
这样,Cisco2912就会错误地把从PortC上收到的目的地址为MAC A的数据包通过PortB发出,而不再发给PortA.。显然,如果PcB一直在发这种特意构造的包。用户PcA就无法通过Cisco2912正常访问Internet。更为严重的是,如果用户PcB构造portC上联设备(如路由器)的MAC地址(00.00.CC.CC.CC.CC),则会导致Cisco 2912下面所有的用户无法正常访问Internet等业务。
2 安全策略
网络中的上述问题主要集中在二层交换机,因此二层交换机的设计必须考虑到MAC地址学习的这种潜在的安全隐患。对此,提出以下安全策略。
MAC地址与端口的绑定。基于IP地址欺骗,人们普遍的做法是采用IP地址与MAC地址进行绑定。MAC地址原来被认为是硬件地址,一般不可更改,所以把IP地址同MAC地址组合到一起管理就成为一种可行的办法,但是认为作为主机标识的MAC地址不能更改这种观点其实是错误的,如前所述,利用网络工具或者修改注册表的办法很容易就会更改某台主机的MAC地址。所以,为了防止MAC地址欺骗,防止交换机中MAC地址映射表混乱,最有效的办法就是实现MAC地址与交换机端口的绑定。这样,用户就无法通过更改MAC地址来进行某种恶意的攻击或者有效地防止某些环路导致的MAC地址重复。绑定可以实现手工静态绑定,也可以实现自动静态绑定。实现手工静态绑定需要网络管理员手工将用户的MAC地址和端口号输入到网络里去,对于一个较大规模的网络,这项工作显然不够轻松,而且非常容易出错。对于自动静态绑定,可以如下实现:在交换机刚开始工作时,不设置绑定命令,而是由交换机自动进行MAC地址学习,建立一张MAC地址与端口号的映射关系,等网
络稳定之后,在通过网络管理界面配置绑定命令,一旦绑定命令生效,交换机自动将原来的映射关系绑定起来,在没有收到解除绑定命令时,该映射关系一直存在。这样,仅仅需要网络管理人员通过一条命令就可以实现所有的MAC地址同端口的静态绑定关系,不再需要手工一个个MAC地址的输入。当然,随着后期用户的不断加入,可以选择某段时间内集中进行这种绑定命令操作,从而有效地节省人力和保障网络安全。通过上面的阐述我们可以看出:解决IP地址欺骗最有效的措施是采用端口、MAC地址和IP地址三者同时绑定。
通过上述分析,我们可以看出,对于二层交换机而言,最大的安全隐患存在于MAC地址的学习过程。为了有效防止某种恶意攻击的MAC地址欺骗行为,我们在进行交换机设计时必须考虑一定的安全策略。
附:
在cisco交换机中为了防止ip被盗用或员工乱改ip,可以做以下措施,既ip与mac地址的绑定,和ip与交换机端口的绑定。
一、通过IP查端口
先查MAC地址,再根据MAC地址查端口:
一、通过IP查端口
先查MAC地址,再根据MAC地址查端口:
Switch# show mac-address-table 来查看整个端口的ip-mac表
二、ip与mac地址的绑定,这种绑定可以简单有效的防止ip被盗用,别人将ip改成了你绑定了mac地址的ip后,其网络不同,(tcp/udp协议不同,但netbios网络共项可以访问),具体做法:
cisco(config)#arp 10.138.208.81 0000.e268.9980 ARPA
这样就将10.138.208.81 与mac:0000.e268.9980 ARPA绑定在一起了
这样就将10.138.208.81 与mac:0000.e268.9980 ARPA绑定在一起了
三、ip与交换机端口的绑定,此种方法绑定后的端口只有此ip能用,改为别的ip后立即断网。有效的防止了乱改ip。
cisco(config)# interface FastEthernet0/17
cisco(config-if)# ip access-group 6 in
cisco(config)#access-list 6 permit 10.138.208.81
这样就将交换机的FastEthernet0/17端口与ip:10.138.208.81绑定了。
最常用的对端口安全的理解就是可根据MAC地址来做对网络流量的控制和管理,比如MAC地址与具体的端口绑定,限制具体端口通过的MAC地址的数量,或者在具体的端口不允许某些MAC地址的帧流量通过。
1.MAC地址与端口绑定,当发现主机的MAC地址与交换机上指定的MAC地址不同时,交换机相应的端口将down掉。当给端口指定MAC地址时,端口模式必须为access或者Trunk状态。
3550-1#conf t
3550-1(config)#int f0/1
3550-1(config-if)#switchport mode access /指定端口模式。
3550-1(config-if)#switchport port-security mac-address 00-90-F5-10-79-C1 /配置MAC地址。
3550-1(config-if)#switchport port-security maximum 1 /限制此端口允许通过的MAC地址数为1。
3550-1#conf t
3550-1(config)#int f0/1
3550-1(config-if)#switchport mode access /指定端口模式。
3550-1(config-if)#switchport port-security mac-address 00-90-F5-10-79-C1 /配置MAC地址。
3550-1(config-if)#switchport port-security maximum 1 /限制此端口允许通过的MAC地址数为1。
3550-1(config-if)#switchport port-security violation shutdown /当发现与上述配置不符时,端口down掉。
2.通过MAC地址来限制端口流量,此配置允许一TRUNK口最多通过100个MAC地址,超过100时,但来自新的主机的数据帧将丢失。
3550-1#conf t
3550-1(config)#int f0/1
3550-1(config-if)#switchport trunk encapsulation dot1q
3550-1(config-if)#switchport mode trunk /配置端口模式为TRUNK。
3550-1(config-if)#switchport port-security maximum 100 /允许此端口通过的最大MAC地址数目为100。
3550-1(config-if)#switchport port-security violation protect /当主机MAC地址数目超过100时,交换机继续工作,但来自新的主机的数据帧将丢失。
上面的配置根据MAC地址来允许流量,下面的配置则是根据MAC地址来拒绝流量。
1.此配置在Catalyst交换机中只能对单播流量进行过滤,对于多播流量则无效。
3550-1#conf t
2.通过MAC地址来限制端口流量,此配置允许一TRUNK口最多通过100个MAC地址,超过100时,但来自新的主机的数据帧将丢失。
3550-1#conf t
3550-1(config)#int f0/1
3550-1(config-if)#switchport trunk encapsulation dot1q
3550-1(config-if)#switchport mode trunk /配置端口模式为TRUNK。
3550-1(config-if)#switchport port-security maximum 100 /允许此端口通过的最大MAC地址数目为100。
3550-1(config-if)#switchport port-security violation protect /当主机MAC地址数目超过100时,交换机继续工作,但来自新的主机的数据帧将丢失。
上面的配置根据MAC地址来允许流量,下面的配置则是根据MAC地址来拒绝流量。
1.此配置在Catalyst交换机中只能对单播流量进行过滤,对于多播流量则无效。
3550-1#conf t
3550-1(config)#mac-address-table static 00-90-F5-10-79-C1 vlan 2 drop /在相应的Vlan丢弃流量。
3550-1#conf t
3550-1(config)#mac-address-table static 00-90-F5-10-79-C1 vlan 2 int f0/1 /在相应的接口丢弃流量。
3550-1#conf t
3550-1(config)#mac-address-table static 00-90-F5-10-79-C1 vlan 2 int f0/1 /在相应的接口丢弃流量。
在网络安全越来越重要的今天,企业对于局域网的安全控制也越来越严格,普遍采用的做法之一就是IP地址、网卡的MAC地址与交换机端口绑定,下面讲述MAC与交换机端口快速绑定的具体实现的原理和步骤。
我们通常说的MAC地址与交换机端口绑定其实就是交换机端口安全功能。端口安全功能能让您配置一个端口只允许一台或者几台确定的设备访问那个交换机;能根据MAC地址确定允许访问的设备;允许访问的设备的MAC地址既可以手工配置,也可以从交换机“学到”;当一个未批准的MAC地址试图访问端口的时候,交换机会挂起或者禁用该端口等等。
一、首先必须明白两个概念:
可靠的MAC地址。配置时候有三种类型。
可靠的MAC地址。配置时候有三种类型。
静态可靠的MAC地址:在交换机接口模式下手动配置,这个配置会被保存在交换机MAC地址表和运行配置文件中,交换机重新启动后不丢失(当然是在保存配置完成后),具体命令如下:
Switch(config-if)#switchport port-security mac-address Mac地址
动态可靠的MAC如何查看ip地址地址:这种类型是交换机默认的类型。在这种类型下,交换机会动态学习MAC地址,但是这个配置只会保存在MAC地址表中,不会保存在运行配置文件中,并且交换机重新启动后,这些MAC地址表中的MAC地址自动会被清除。
黏性可靠的MAC地址:这种类型下,可以手动配置MAC地址和端口的绑定,也可以让交换机自动学习来绑定,这个配置会被保存在MAC地址中和运行配置文件中,如果保存配置,交换机重起动后不用再自动重新学习MAC地址,虽然黏性的可靠的MAC地址可以手动配置,但是CISCO官方不推荐这样做。具体命令如下:
Switch(config-if)#switchport port-security mac-address sticky
其实在上面这条命令配置后并且该端口得到MAC地址后,会自动生成一条配置命令
Switch(config-if)#switchport port-security mac-address sticky Mac地址
这也是为何在这种类型下CISCO不推荐手动配置MAC地址的原因。
Switch(config-if)#switchport port-security mac-address Mac地址
动态可靠的MAC如何查看ip地址地址:这种类型是交换机默认的类型。在这种类型下,交换机会动态学习MAC地址,但是这个配置只会保存在MAC地址表中,不会保存在运行配置文件中,并且交换机重新启动后,这些MAC地址表中的MAC地址自动会被清除。
黏性可靠的MAC地址:这种类型下,可以手动配置MAC地址和端口的绑定,也可以让交换机自动学习来绑定,这个配置会被保存在MAC地址中和运行配置文件中,如果保存配置,交换机重起动后不用再自动重新学习MAC地址,虽然黏性的可靠的MAC地址可以手动配置,但是CISCO官方不推荐这样做。具体命令如下:
Switch(config-if)#switchport port-security mac-address sticky
其实在上面这条命令配置后并且该端口得到MAC地址后,会自动生成一条配置命令
Switch(config-if)#switchport port-security mac-address sticky Mac地址
这也是为何在这种类型下CISCO不推荐手动配置MAC地址的原因。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论