MAC地址欺骗的原理和实战介绍1

更新时间:2023-05-24 02:15:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一.MAC地址欺骗的原理和实战介绍

一、原理:

在开始之前我们先简单了解一下交换机转发过程:交换机的一个端口收到一个数据帧时,首先检查改

数据帧的目的MAC地址在MAC地址表(CAM)对应的端口,如果目的端口与源端口不为同一个端口,则把帧从

目的端口转发出去,同时更新MAC地址表中源端口与源MAC的对应关系;如果目的端口与源端口相同,则丢

弃该帧。

有如下的工作场景:

一个4口的switch,端口分别为Port.A、Port.B、Port.C、Port.D对应主机 A,B,C,D,其中D为网

关。

当主机A向B发送数据时,A主机按照OSI往下封装数据帧,过程中,会根据IP地址查找到B主机的

MAC地址,填充到数据帧中的目的MAC地址。发送之前网卡的MAC层协议控制电路也会先做个判断,如果

目的MAC相同于本网卡的MAC,则不会发送,反之网卡将这份数据发送出去。Port.A接收到数据帧,交换

机按照上述的检查过程,在MAC地址表发现B的MAC地址(数据帧目的MAC)所在端口号为Port.B,而数据

来源的端口号为Port.A,则交换机将数据帧从端口Port.B转发出去。B主机就收到这个数据帧了。

这个寻址过程也可以概括为IP->MAC->PORT,ARP欺骗是欺骗了IP/MAC的应关系,而MAC欺骗则是欺

骗了MAC/PORT的对应关系。比较早的攻击方法是泛洪交换机的MAC地址,这样确实会使交换机以广播模式

工作从而达到嗅探的目的,但是会造成交换机负载过大,网络缓慢和丢包甚至瘫痪,我们不采用这种方法。

二、实战

工作环境为上述的4口swith,软件以cncert的httphijack 为例,应用为A主机劫持C主机的数据。

以下是劫持过程(da为目的MAC,sa为源MAC)

1. A发送任意da=网关.mac、sa=B.mac的数据包到网关。这样就表明b.mac 对应的是port.a,在一段时间

内,交换机会把发往b.mac 的数据帧全部发到a主机。这个时间一直持续到b主机发送一个数据包,或者

另外一个da=网关.mac、sa=b.mac的数据包产生前。

2. A 主机收到网关发给B的数据,记录或修改之后要转发给B,在转发前要

发送一个请求B.MAC的广播,这个包是正常的

MAC信息为:da=FFFFFFFFFF、sa=a.mac

这个数据帧表明了a.mac对应port.a,同时会激发b主机响应一个应答包

MAC信息为:da=a.mac、sa=b.mac

这个数据帧表明了 b.mac对应port.b

至此,对应关系已经恢复,A主机将劫持到的数据可顺利转发至B

3. 转发劫持到的数据到B,完成一次劫持

三、攻击特点

1. 由于这种攻击方法具有时间分段特性,所以对方的流量越大,劫持频率也越低,网络越稳定。

2. 隐蔽性强,基于1的特殊性和工作本质,可以在ARP防火墙和双向绑定的环境中工作。

四、如何防护

高级的交换机可以采用ip+mac+port 绑定,控制CAM表的自动学习。目前尚无软件可以防护此

类攻击

五、利用工具

1.httphijack beta 2 说明:http会话劫持

2.ssclone 说明:交换环境下的会话复制软件(gmail,qqmail,sohumail…..)

3.skiller 说明:流量控制

二.前很多网络都使用Hub进行连接的,众所周知,数据包经过Hub传输到其他网段时,Hub只是简单地

把数据包复制到其他端口。因此,对于利用Hub组成的网络来说,没有安全而言,数据包很容易被用户拦

截分析并实施网络攻击(MAC地址欺骗、IP地址欺骗及更高层面的信息骗取等)。为了防止这种数据包的无

限扩散,人们越来越倾向于运用交换机来构建网络,交换机具有MAC地址学习功能,能够通过VLAN等

技术将用户之间相互隔离,从而保证一定的网络安全性。

交换机队于某个目的MAC地址明确的单址包不会像Hub那样将该单址包简单复制到其他端口上,而

是只发到起对应的特定的端口上。如同一般的计算机需要维持一张ARP高速缓冲表一样,每台交换机里面

也需要维持一张MAC地址(有时是MAC地址和VLAN)与端口映射关系的缓冲表,称为地址表,正是依靠

这张表,交换机才能将数据包发到对应端口。

地址表一般是交换机通过学习构造出来的。学习过程如下:

(1) 交换机取出每个数据包的源MAC地址,通过算法找到相应的位置,如果是新地址,则创建地址表

项,填写相应的端口信息、生命周期时间等;

(2) 如果此地址已经存在,并且对应端口号也相同,则刷新生命周期时间;

(3) 如果此地址已经存在,但对应端口号不同,一般会改写端口号,刷新生命周期时间;

(4) 如果某个地址项在生命周期时间内没有被刷新,则将被老化删除。

如同ARP缓冲表存在地址欺骗的问题,交换机里的这种MAC地址表也存在地址欺骗问题。在实际应

用中,人们已经发现早期设计的许多交换机都存在这个问题,以Cisco2912交换机为例,阐明一下如何进

行MAC地址欺骗。

如图所示,两个用户PcA和PcB分别连接Cisco2912的portA和portB两个端口。

PortC Internet

Cisco2912

portA / portB /

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

() <—>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地址(),

则会导致Cisco 2912下面所有的用户无法正常访问Internet等业务。

这太简单了,对付MAC地址欺骗,其实就是对局域网ARP保护就可以了。

每台主机都有一个临时存放IP-MAC的对应表ARP攻击就通过更改这个缓存来达到欺骗的目的,使用静态

的ARP来绑定正确的MAC是一个有效的方法.在命令行下使用arp -a可以查看当前的ARP缓存表.以下是

本机的ARP表 :

C:\Documents and Settings\cnqing>arp -a

Interface: 192.168.0.1 on Interface 0x1000003

Internet Address Physical Address Type

192.168.0.1 00-03-6b-7f-ed-02 dynamic

其中代表动态缓存,即收到一个相关ARP包就会修改这项.如果是个非法的含有不正确的网关的ARP包,这个

表就会自动更改.这样我们就不能找到正确的网关MAC,就不能正常和其他主机通信.静态表的建立用ARP

-S IP MAC.

执行arp -s 192.168.0.1 00-03-6b-7f-ed-02后,我们再次查看ARP缓存表.

C:\Documents and Settings\cnqing>arp -a

Interface: 192.168.0.1 on Interface 0x1000003

Internet Address Physical Address Type

192.168.0.1 00-03-6b-7f-ed-02 static

此时"TYPE"项变成了"static",静态类型.这个状态下,是不会在接受到ARP包时改变本地缓存的.从而有效的

防止ARP攻击.静态的ARP条目在每次重启后都要消失需要重新设置. 此时我们就可以自己写一个批处理

文件,文件内容如下:

@echo off

arp -d

arp -s 192.168.0.1 00-03-6b-7f-ed-02

写好之后我们把它存储为 rarp.bat,再把此文件放到开始菜单-程序-启动栏,这样每次启动机器时,就自动

执行此批处理文件。菜单-程序-启动栏默认目录:C:\Documents and Settings\All Users\「开始」菜单\程序\

启动

第二种方法就是直接使用防止局域网Arp攻击 的软件

比如说: Arp保护神等等

交换机如何获得mac地址

交换机工作在数据链接层,当一台主机发送数据时,交换机会收到MAC帧,我包含发送主机的MAC地址

和接收主机的地址,交换机收到这个帧后,会把这个发送主机的MAC地址记录在自己的MAC表中,并记

下这个发送主机对应的端口号。之后交换机会查看自己MAC表看有没得接收主机的记录,如果有就直接

发到对应的端口,如果没有就广播出去

交换机的工作原理中,交换机之间的MAC地址学习室通过端口泛洪的方式 以太网交换机厂商根据市场需求,推出了三层甚至四层交换机,但无论如何,其核心功能仍是二层的以太

网数据包交换,这样将大大提高交换机的处理速率。

交换机是一种基于MAC地址识别,能完成封装转发数据包功能的网络设备。交换机可以“学习”MAC

地址,并把其存放在内部地址表中,通过在数据帧的始发者和 目标接收者之间建立临时的交换路径,使数

据帧直接由源地址到达目的地址。

1.交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地

址表中。

2.交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。

3.如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪(flood)。

4.广播帧和组播帧向所有的端口转发。

以太网交换机了解每一端口相连设备的MAC地址,并将地址同相应的端口映射起

有如下的工作场景:

一个4口的switch,端口分别为Port.A、Port.B、Port.C、Port.D对应主机 A,B,C,D,其中D为网关。

当主机A向B发送数据时,A主机按照OSI往下封装数据帧,过程中,会根据IP地址查找到B主机的M

AC地址,填充到数据帧中的目的MAC地址。

发送之前网 卡的MAC层协议控制电路也会先做个判断,如果目的MAC相同于本网卡的MAC,则不

会发送,反之网卡将这份数据发送出去。Port.A接收到数据帧,交换机按照上述的检查过程,在MAC地

址表发现B的MAC地址(数据帧目的MAC)所在端口号为Port.B,而数据

这个寻址过程也可以概括为IP->MAC->PORT,ARP欺骗是欺骗了IP/MAC的应关系,而MAC欺骗则

是欺骗了MAC /PORT的对应关系。比较早的攻击方法是泛洪交换机的MAC地址,这样确实会使交换机

以广播模式工作从而达到嗅探的目的,但是会造成交换机负载过大,网络缓慢和丢包甚至瘫痪,我们不采

用这种方法。

工作环境为上述的4口swith,软件以cncert的httphijack 为例,应用为A主机劫持C主机的数据。以

下是劫持过程(da为目的MAC,sa为源MAC)这样就表明b.mac 对应的是port.a,在一段时间内,交换机会

把发往b.mac 的数据帧全部发到a主机。这个时间一直持续到b主机发送一个数据包,或者另外一个da=

网关.mac、sa=b.mac的数据包产生前。

由于这种攻击方法具有时间分段特性,所以对方的流量越大,劫持频率也越低,网络越稳定。隐蔽性强,

基于1的特殊性和工作本质,可以在ARP防火墙和双向绑定的环境中工作。

高级的以太网交换机可以采用ip+mac+port 绑定,控制CAM表的自动学习。目前尚无软件可以防护

此类攻击

三.交换机端口安全之Mac泛洪攻击

我们都知道,组建我们的网络,交换机是必不可少的一个设备,我们都会用它来做一些相应的配置,如划分VLAN、VTP、以及生成内的端口安全呢?这是一个必要的操作。那么下面我们就使用Cisco Packet Tracer 5.2来做做这方面的实验,但是还是有一些不我们知道交换机在网络中存在规模最大,

通过这个图我们得出一个结论那就是:离接入层越近风险越大,所以问题主要集中在接入层。

那么下来我们就来分析一下这个交换机倒底存在那些安全呢?

交换机所面临攻击的层面: MAC layer attacks

VLAN attacks

Spoofing attacks

Attacks on switch devices

那么我们知道了交换机所面临这四种攻击,我们现在来一个一个的分析一下这些:

Mac Flooding Attack:

利用伪造数据帧或数据包软件,不停变化源MAC地址向外发包,让有限的MAC地址表空间无法容纳进而破坏MAC地址表。 应对:限定端口映射的MAC数量

在这里三台PC的IP地址如下:

以下我们在交换机上面配置MAC地址绑定。

那现我们来测试一下看看能否正常使用。 从这里我们可以看见,PC0能够正常使用。那我们再新添加一台PC并将这台PC接到FA0/1端口上面看看会是什么效果。

从这个图我们可以看见,PC3接在FA0/1接口上面,当PC3

没有向其它网段发送数据包的时候一切正常,那么下面我们来发送一个

个MAC地址,所以就执行将此接口shutdown掉,从上图我们也可以看见,PC3连接 的FA0/1已经被shutdown了。 我们可以看出来,当交换机的FA0/1接口接PC0的时候,能够正常使用,但是当我的PC3接入到交换机的FA0/1上,当我发送数据

那么当有其它MAC地址的计算机接入一我们这个端口以后,该端口会自动shutdown,那么当shutdown以后的接口如何恢复呢? 注意以下来条命令不能在Cisco Packet Tracer 5.2中使用,这个软件里面现在还没有集成这几条命令。

这种方法只能对付下挂交换机的情况,不能对付下挂路由器的情况。

如果产生err-disable的原因是udld,下面有一条命令非常管用:

收集这些日志也非常管用。

所以建议配置一个syslog server,收集log信息。

刚才在上面我们绑定的那个MAC地址是PC0的,我们现在查看一下交换机上面的MAC地址表看看:

但是针对Cisco Packet Tracer 5.2来说,我们不能直接使用

no shutdown

命令来启用,也不能使用我们上面的那条命令,那么我址接入到此端口的

时候我们就将它设置不不转发数据并且上报网管平台。

从上面我们可以看见,当设置为数据包不转发以后,我们从PC3上面还是ping不通我们的PC2,而我们的交换机只是不转发此数据包

那么我们又出现一个新的问题?我们不可能一个端口只绑定一个MAC地址吧!那么我们如何给一个端口绑定多个MAC地址通行呢?

但是这个设置手工绑定多条MAC地址的命令在这里没有,所以这个也不能使用。

它将接入到此端口的MAC地址自动绑定到这个MAC地址中呢?

但是在这里如果我设置了maximum

设置为100的话,那么不是我们手工需要绑定100条?而且我们还需要去收集这100个MAC地址

那么我们再来试试看呢?

我们使用接入到交换机端口FA0/2这个接口的计算机发送一点数据包来看看。

现在来在交换机上面来查看一下MAC地址表。

这个表是没有发达数据包之前的。我们可以看见还是动态学习到的。

而下面的是我们命令了动态学习的到第一台通过这个端口发送数据包的那台计算机的MAC地址。而自动变成静态绑定的。

看看,这样是不是就解决了我们手工去绑定MAC地址那些烦琐的事件了。这样是不是给我们减轻了很大的工作量。

下面这条命令是查看端口安全的,以及每一个端口

从上面我们可以看出FA0/1端口有3条违反我们策略的。指行的是Restrict。而Fa0/2没有违反我们的策略,如果说现有呢就执

以上就是我们基于MAC地址的限制。我想这个功能对于大家在实际工程中应用的还是比较广泛。我们用来做端口安全的还有一种方而这里使用这个软件不能做基于交换机的802.1x认证。那么那天用到真机以后我再将这方面的内容发送出来!

这里只是解决了Mac Flooding Attack现在由于时间太晚了,剩下的明天继续。

2.

MAC地址泛洪攻击

1,2层交换机是基于MAC地址去转发数据帧的。

2,转发过程中依靠对CAM表的查询来确定正确的转发接口。

3,一旦在查询过程中无法找到相关目的MAC对应的条目,此数据帧将作为广播帧来处理。

4,CAM表的容量有限,只能储存不多的条目,当CAM表记录的MAC地址达到上限后,新的条目将不会

添加到CAM表中。

基于以上原理,我们会发现一个非常有趣的现象。某台PC不断发送去往未知目的地的数据帧,且每个包

的源MAC地址都不同,当这样 的数据包发送的速度足够快之后,快到在刷新时间内将交换机的CAM表

迅速填满。CAM表被这些伪造的MAC地址占据,真实的MA C地址条目却无法进入CAM表。那么任何

一个经过交换机的正常单播数据帧都会以广播帧的形式来处理。如下图所示

上传的图像

本文来源:https://www.bwwdw.com/article/1pf4.html

Top