Netexpert FAQ 网络分析专家学习建议入口 @netexpert成员申请指南
netexpert积分规则的说明 Netis招贤纳士(2008年11月22日更新)
发新话题
打印

原创:交换网络中的sniffer讨论

原创:交换网络中的sniffer讨论

大家都知道在HUB的网络里面用sniffer很容易嗅探到 数据包的。
因为是 在一个冲突domain。学过CCNA都知道。hub只是一个电信号的转发。
当你的nic在 混合模式下。是可以听到所有的数据包的。

那么在Switch  的网络里面怎么样呢?
Switch是根据 MAC address 具体转发到某个端口的。
这样。用一般的sniffer软件是不能听到其他的端口的数据的。在物理上就被隔离了:)

怎么办?
在switch 里面是根据mac-address-table来确定转发的。
如果我们把这个mac-address-table clear 不是可以了吗?:)
但是设备我们不一定可以接触啊。还是郁闷。

switch 的 mac-address-table是存在cache 中的。是有一定的空间的。
如果我们把这个表用一些垃圾的数据把这个表给刷了。这样的那些直接接在switch 上的mac地址没有地方来放了。
因为mac表中没有这些数据。switch 只有象所有的端口去转发这些数据包。
这样我们就可以在其他的端口 听到这些数据包了 :)
就实现了sniffer的功能。

当然还有一种正常的作法是在交换网络下面是用SPAN来进行SNIFFER的。

基于上面的论述,提出一个问题,在交换网络里用SNIFFER好,还是在共享式的HUB下面用SNIFFER好呢? 先让网友们拍拍砖。

TOP

转一篇贴子:基于交换网络的ARP spoofing sniffer

[注]在阅读这篇文章之前,我假设你已经知道TCP/IP协议,ARP协议,知道什么是sniffer等基本网络知识。
在一般的局域网里面,经常会有两种接入方式,一种是HUB接入(这里的HUB是指普通HUB),一种是交换机直接接入(这里的交换机是比较高级的交换机,老式交换机不在此列)。采用HUB方式接入的网络,数据传送的时候,是采用广播的方式发送,这个时候,只要一台主机将自己的网卡设置成混杂模式(promiscuous mode),就可以嗅探到整个网络的数据。 此篇文章不打算讨论这种网络环境的嗅探(sniffer)和反嗅探(anti sniffer)方法,主要是想就交换机方式直接接入的网络环境如何sniffer以及如何anti sniffer做一个比较粗浅的分析。
我们知道,一台计算机想要接入到网络中,必须要有两个地址。一个是网卡的地址,我们称之为MAC地址,它是固化在网卡中的。在以太网中,我们通过MAC地址来进行数据传送和数据交换。在以太网环境中,数据会分帧传送,每一个数据帧都会包含自己的MAC和目的MAC地址信息; 另外一个地址是平时所说的IP地址,定义在网络层,每一台网络计算机都会有一个或者多个IP地址,这是一个虚拟的数据,并且可以随时更改。
IP地址和MAC地址是同时使用的,在数据传送过程中,一个完整的TCP/IP包需要由以太网进行数据封装,数据分帧,最后再通过物理层传输到目标计算机。在以太网封装上层的TCP/IP包的时候,它需要知道源MAC地址和目的MAC地址,但是我们只能给出一个对方的IP地址,这个时候就需要一个协议来支持IP到MAC的转换,这就是ARP,Address Resolution Protocol.
在局域网中,ARP是通过广播的方式来发送的,比如,我的机器IP是192.168.7.110(A),需要知道192.168.7.119(B)机器的MAC地址,那从A机器就会广播一个ARP包,这个包里带有B机器的IP,如果B机器收到了此ARP包,那么他就会同样返回一个ARP包,里面带有响应的MAC地址。A收到这个ARP包后,得到B的MAC地址,这个时候以太网就可以开始封装TCP/IP包了,可以开始正常的数据传送了。比如:
d:\>arp -a

Interface: 192.168.7.110 on Interface 0x1000003
Internet Address Physical Address Type
192.168.7.1 00-90-0b-01-a0-61 dynamic

d:\>ping 192.168.7.119

Pinging 192.168.7.119 with 32 bytes of data:

Reply from 192.168.7.119: bytes=32 time<10ms TTL=128

Ping statistics for 192.168.7.119:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
Control-C
^C
d:\>arp -a

Interface: 192.168.7.110 on Interface 0x1000003
Internet Address Physical Address Type
192.168.7.1 00-90-0b-01-a0-61 dynamic
192.168.7.119 00-d0-59-26-df-1a dynamic

可以清楚的看到,在未和192.168.7.119通讯之前,本机是没有该IP对应MAC地址的,但一旦通讯后,我们就知道了对方的MAC地址,windows会将对方MAC地址存在自己的ARP cache里面。
为了节省网络资源以及通讯时间,多数操作系统会保留一张ARP缓存表,里面记录曾经访问的IP和MAC地址影射记录,一旦局域网中有一个新的ARP广播,对应一个IP到MAC的记录,这个ARP缓存表就会被刷新,MAC地址会更换成新的广播包里定义的MAC地址,这个时候就存在一个问题,在更新的时候,系统并没有去检查是否真的是由该机器广播出来的,局域网中的恶意用户就会利用欺骗的方式来更改网络途径,将真正的MAC地址替换成自己的MAC地址,这种方法称之为:ARP spoofing。
交换机在处理数据的时候,它会根据自己机器内部的一个MAC到端口的数据表来查询符合要求的MAC地址数据包该发往哪个端口。这张表从交换机开机的时候就存在,在每个端口第一次数据传送的时候就会记录对应的端口的MAC地址. 通过发送我们伪造的MAC地址数据包到交换机,就可以欺骗交换机刷新自己的MAC地址到端口的数据表,假设A主机连接在2口,假设我在4口,要sniffer A主机的数据,那么我就需要伪造一个ARP数据包,告诉交换机A主机MAC地址是在4口,那么交换机就会将本来发送到A主机的数据会转送到4口上,这个时候我就可以监听到了A主机的数据传送了,这个就是基于交换网络的arp欺骗sniffer过程。
通过arp 欺骗,一般sniffer有几个方法:
1. 就是上面介绍的欺骗MAC进行数据窃听,但由于A收不到数据,这样它会重新发布ARP包,这样导致sniffer很容易暴露,而且效果不好,A会丢包,同样你的sniffer 一样不会抓到全部的数据。
2. 发起"中间人"窃听。攻击者可以在两台通讯主机之间插入一个中转回路,这样,攻击者既可以sniffer到两机的数据,同样还可以不影响两机的通讯。我们假设X是攻击者的机器,A和B是目标机器。
X如果想发起攻击,首先在向A主机发送一个ARP包,让A认为B机器IP对应的MAC地址是X主机的,同时再向B机器发送一个ARP包,让B机器认为A机器IP对应的MAC地址是X主机的,如下图:

3. MAC flood攻击
通过快速(比如超过1000线程) 发送大量伪造MAC地址数据包,会造成交换机的MAC-端口表塞满,但为了正常数据不被丢弃,大多数交换机会采取类似HUB一样方式:广播的方式发送数据。这个时候,再在网络中任何一台机器设置网卡为混杂模式,就可以sniffer到任何想要监听的数据了。
*注: 以上方法我并没有正式测试过,理论上可行,实际上还有待验证。
上面介绍了几种常见的基于switch网络的arp spoofing sniffer方法,那么对于一个管理员来说,如何防范这种方式的数据嗅探呢?
严格来说,没有一种通用的方法来解决arp欺骗造成的问题,最大的可能就是采用静态的ARP缓存表,由于静态的ARP表不可以刷新,那么伪造的ARP包将会被直接丢弃。但这样造成的问题就是,整个网络中的所有机器,都必须要建立一个静态的MAC表,在大型网络中,会增加交换机的负担,造成效率下降。如果机器更换,那么就要手工去更改MAC地址表,很显然,在大型网络中这种方式是不适用的。
在这里需要注意的是,windows下即使你建立了静态的MAC到IP的影射表,但是在收到了强制更新的ARP包后,依然会刷新机器的影射表,一样会被sniffer到。
高级交换机还提供了MAC绑定功能,指定交换机某个端口和某个MAC绑定,这种方法可以很有效的防止MAC克隆(clone)方式的窃听,但是对于上述的arp 欺骗攻击效果不大。
最可靠的方法就是采用第三方软件来解决,Arpwatch是一个运行在Unix平台下的免费工具,他可以检测到网络中所有MAC地址的变化,一旦网络中的MAC地址有变化,它就会发送一封email到指定地点。

后记:这篇小文写的很简短,其实在交换网络中还有其他几种攻击方法,比如MAC clone等,而且交换网络中的sniffer方法还不止这一种,我这里只是介绍最常见,容易发生和编程实现的sniffer方法,希望对大家有所帮助。本人水平有限,如有错误,请不吝指责.

参考文摘:
1. An Introduction to ARP Spoofing(Sean Whalen)
2. Sniffing (network wiretap, sniffer) FAQ

TOP

单一的清空桥表来SNIFFER是没用的
上面所说的第二个,占满桥表空间倒是还行,即MAC攻击
但当switch将MAC与端口绑定以及限制端口学习MAC地址数就可有效避免这种SNIFFER
合法的SNIFFER应该只有TAP与SPAN吧
对爱从来追求 对你永不放弃

TOP

我们是合法的用,但有的时候,人家不合法的用的时候呢,所以这个时候,你就可以通过个方法找出非法的啊。因为,有的病毒就会达到这种效果。
请大家继续指正。

TOP

,是的,基本没啥指正的
原理都一样,要查非法SNIFFER
此帖http://www.netexpert.cn/viewthread.php?tid=160有详细说明
对爱从来追求 对你永不放弃

TOP

楼上兄弟说的什么?

TOP

我也奇怪,有时候有些帖子显示出来是空白,疑惑
要看内容需要引用才看得到,不解??
对爱从来追求 对你永不放弃

TOP

没有人接着讨论了吗

TOP

我的理解,hub不是全双工的,所以说就算是一个hub上面只有两台主机通信,还是会有冲突,会影响通信效率。
所以,如果不想影响网络的效率,最好不要不使用hub方式吧

如果纯粹作为测试环境,就无所谓了,我平常也这么用。

TOP

一般来讲,交换环境下,是看不到发给别人的包,那是不是交换环境,对SNIFFER来讲,是不好用的,这种观点对吗?

TOP

5555,好多好资料,但因积分太低不能下载学习,郁闷ING!

TOP

多谈谈,学习ing

TOP

我只想知道,2楼中的方法2,方法3可以怎样实现?

TOP

引用:
原帖由 iammin 于 2005-6-19 23:03 发表
我的理解,hub不是全双工的,所以说就算是一个hub上面只有两台主机通信,还是会有冲突,会影响通信效率。
所以,如果不想影响网络的效率,最好不要不使用hub方式吧

如果纯粹作为测试环境,就无所谓了,我平 ...
HUB不管你单工,冲突(有冲突时会产生随机的排队,时间还是比较快的),你加个SNIFFER应当不会有什么影响,只要不是长时间(几天)的就行,只要不是太大的网络就行!
对吧?

TOP

有一个软件叫 Switchsniffer,是使用 ARP 欺骗实现中间人攻击的,配合 Sniffer 程序就可以实现交换环境下的嗅探。

TOP

谢谢分享,下了好好学一下

TOP

发新话题
版块跳转