网卡混杂模式的检测

来源:互联网 发布:cosme淘宝旗舰店真假 编辑:程序博客网 时间:2024/05/16 06:41

把网卡置于混杂模式和普通模式有什么不同?

混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。
一般来说,混杂模式不会影响网卡的正常工作,多在网络监听工具上使用。

以太网(Ethernet)具有共享介质的特征,信息是以明文的形式在网络上传输,当网络适配器设置为监听模式(混杂模式,Promiscuous)时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。IEEE802.3 标准的以太网采用的是持续 CSMA 的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。运用这一原理使信息捕获系统能够拦截的我们所要的信息,这是捕获数据包的物理基础。
以太网是一种总线型的网络,从逻辑上来看是由一条总线和多个连接在总线上的站点所组成各个站点采用上面提到的 CSMA/CD 协议进行信道的争用和共享。每个站点(这里特指计算机通过的接口卡)网卡来实现这种功能。网卡主要的工作是完成对于总线当前状态的探测,确定是否进行数据的传送,判断每个物理数据帧目的地是否为本站地址,如果不匹配,则说明不是发送到本站的而将它丢弃。如果是的话,接收该数据帧,进行物理数据帧的 CRC 校验,然后将数据帧提交给LLC 子层。
网卡具有如下的几种工作模式:
1) 广播模式(Broad Cast Model):它的物理地址(MAC)地址是 0Xffffff 的帧为广播帧,工作在广播模式的网卡接收广播帧。
2)多播传送(MultiCast Model):多播传送地址作为目的物理地址的帧可以被组内的其它主机同时接收,而组外主机却接收不到。但是,如果将网卡设置为多播传送模式,它可以接收所有的多播传送帧,而不论它是不是组内成员。
3)直接模式(Direct Model):工作在直接模式下的网卡只接收目地址是自己 Mac地址的帧。
4)混杂模式(Promiscuous Model):工作在混杂模式下的网卡接收所有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。

网卡的缺省工作模式包含广播模式和直接模式,即它只接收广播帧和发给自己的帧。如果采用混杂模式,一个站点的网卡将接受同一网络内所有站点所发送的数据包这样就可以到达对于网络信息监视捕获的目的。



网卡的传输模式:网卡的传输模式:双工/半双工。网卡的传输速率:10M/100M,也有的是1000M。在网卡属性里的配置——高级设置里配置。


转自http://hi.baidu.com/y_jinhe/blog/item/fd14ae86ee2e163b66096e7e.html

(这个博客有很多网络安全方面的)

Detecting   sniffers   on   your   network 

 

网卡混杂模式的检测
2008年05月19日 14:57
1.简介
在局域网中,嗅探行为已经成为网络安全的一个巨大威胁。通过网络嗅探,一些恶意用户能够很容易地窃取到绝密的文档和任何人的隐私。要实 现上述目的非常容易,恶意用户只要从网络上下载嗅探器并安全到自己的计算机就可以了。然而,却没有一个很好的方法来检测网络上的嗅探器程序。本文将讨论使 用地址解析协议(Address Resolution Protocol)报文来有效地检测办公网络和校园网上的嗅探器程序。

2.网络嗅探的原理
局域网通常使用以太网进行连接。在以太网线缆上使用IP(IPV4)协议传输的传递 的信息是明文传输的,除非使用了加密程序进行了加密。当一个人把信息发送到网络上,他会希望只有特定的用户才能收到这些信息。但是,非常不幸,以太网的工 作机制为非验证用户提供了窃取这些数据的机会。以太网在进行信息传输时,会把分组送到各个网络节点,目的地址匹配的节点会接收这些分组,其它的网络节点只 做简单的丢弃操作。而接收还是丢弃这些分组由以太网卡控制。在接收分组时,网卡会过滤出目的地址是自己的分组接收,而不是照单全收。在本文以后的部分我们 将把网卡的这种过滤称为硬件过滤(Hardware Filter)。但是这只是在正常情况下,嗅探器使用另一种工作方式,它把自己的网卡设置为接收所有的网络分组,而不管分组的目的地址是否是自己。这种网 卡模式叫作混杂模式(Promiscuous Mode)。

3.检测混杂模式的基本概念
在网络中,嗅探器接收所有的分组,而不发送任何非法分组。它不会妨碍网络数据的流动,因此很难对其进行检测。不过,处于混杂模式(promiscuous mode)网卡的状态很显然和处于普通模式下不同。在混杂模式下,应该被硬件过滤掉的分组文会进入到系统的内核。是否回应这种分组完全依赖与内核。

下面我们举一个现实世界中的例子,说明我们检测处于混杂模式网络节点的方法。设想一下,在一个会议室中正在举行一个会议。某个人把耳朵放在会议室就 可以进行窃听(嗅探^_^)。当她(还是个女的,原文如此:P)进行窃听(嗅探)时,会屏住呼吸,安静地聆听会议室内所有的发言。然而,如果此时会议室内 有人忽然叫窃听者的名字:“XX太太”,她就可能答应“唉”。这听起来有点好笑,但是完全可以用于网络嗅探行为的检测。网络进行网络嗅探的节点会接收网络 的所有报文,因此其内核可能对某些本该被硬件过滤的分组作出错误回应。根据这个原理,我们可以通过检查节点对ARP报文的响应来检测网络的嗅探行为。

4.基础
1).硬件过滤器
首先,我们从处于混杂模式(promiscuous mode)下和普通模式下有何不同开始。以太网的地址是6个字节,制造商为每块网卡分配的地址在全世界是唯一的,因此理论上没有相同地址的网卡。在以太网 上的所有通讯都是基于这种硬件地址。不过,网卡可以被设置为不同的过滤模式以接收不同种类的分组。下面就是以太网卡的过滤模式:
unicast 
网卡接收所有目的地址是自己的分组
broadcast
接收所有广播分组,以太网广播分组的目的地址是FFFFFFFFFFFF。这种广播分组能够到达网络上的所有节点。
multicast
接收目的地址为指定多投点递交(multicast)组地址的分组。网卡只接收其地址已经预先在多投点列表中注册的分组。
all multicast
接收所有多投点递交广播分组。
promiscuous
根本不检查目的地址,接收网络上所有的分组。


图-1描述了硬件过滤器处于在正常情况下和在混杂模式下的区别。通常,网卡的硬件过滤器被设置为接收目为单投点递交(unicast)、广播 (broadcast)和多投点递交(multicast)地址1的分组。过滤器只接收目的地址为自己的地址、广播地址(FF FF FF FF FF FF)和多投点地址1(01 00 5E 00 00 01)的分组。2).ARP机制
使用以太网连接的IP网络需要依靠以太网进行传输。只使用IP地址,报文是无法发送的。因此,在以太网上需要一种机制来提供IP地址和硬件地址之间的转 换。这种机制就是地址解析协议(Address Resolution Protocol)。ARP属于网络层,和IP处于OSI模型的同一层。在IP网络上地址解析是不断进行的,所以ARP报文比较适合用来检测处于混杂模式 (promiscuous mode)的网络节点。
在下面的例子中,我们将讲述使用ARP报文是怎样解析IP地址的:
例如:网络上一台IP地址为192.168.1.1的PC(X)以太网地址是00-00-00-00-00-01,这台PC(X)需要向网络上另外一台 IP地址为192.168.1.10的PC(Y)发送消息。在发送之前,X首先发出一个ARP请求包查询192.168.1.10对应的以太网地址。查询 包的目的地址被设置为FF-FF-FF-FF-FF-FF(广播),从而本地网络上的所有节点都可以收到这个包。收到之后,每个节点会检查这个ARP包查 询的IP地址和本机的IP地址是否匹配。如果不同,就忽略这个ARP包;如果匹配(Y)就向X发出应答。X收到应答之后就缓存Y的IP/硬件地址。然 后,X就可以向Y发送实际的数据。

5.检测处于混杂模式的节点
上面讲到,报文的过滤状态是处于混杂模式状态和正常的网络节点的区别。当网卡被设置为混杂模式,本该被过滤掉的报文就会进入系统的内核。通过这种机制,我 们可以检测到网络上处于混杂模式的节点:我们构造一个ARP查询包,其目的地址不是广播地址,然后向网络上的各个节点发送这个ARP查询包,最后通过各个 节点的回应来判断是否处于混杂模式。
下面我们讨论一下整个ARP请求/响应的操作过程。首先,产生一个ARP查询包来解析192.168.1.10的硬件地址。为了使网络上的所有节点都能够 收到这个查询包,把这个包的目的地址设置为广播地址。理论上,只有IP地址为192.168.1.10的网卡才能对这个查询包进行响应。
进一步设想,如果我们把这个查询包的目的地址(以太网地址)设置为另外的地址,而不是原来的广播地址又将如何?例如:我们把查询包的目的地址设置为 00-00-00-00-00-01会发生什么?处于正常模式下网络节点的以太网卡会认为这个查询包是发往其它主机的,其硬件过滤器会拒绝接收这个包;然 而,如果这个网络节点(192.168.1.10)的以太网卡处于混杂模式(promiscuous mode)下,那么即使以太网地址不匹配,其硬件过滤器也不进行任何过滤,从而使这个查询包能够进入到系统的内核。因为这个节点的IP地址和查询包的要查 询IP地址相同,其内核就会认为ARP查询包到达,应该作出应答。但是,另我们吃惊的是,这个处于混杂模式节点的内核不会应答ARPR查询包。这种出人意 料的结果说明这个包被系统内核过滤掉了。在这里我们把这叫作软件过滤器。


再进一步,我们可以通过区别硬件过滤器和软件过滤器的不同特征来检测处于混杂模式的网络节点。硬件过滤器一般会阻塞所有无效的分组(这些分组显然不会进入 系统内核),因此能够通过硬件过滤器一般也能够通过软件过滤器,这种情况我们不多做讨论。现在我们需要构造应该被被硬件过滤器阻塞,但是却能够通过软件过 滤器的报文。如果把这种报文送到各个网络节点,那么处于普通模式下的网络节点将不做应答;而处于混杂模式的节点会进行应答。

6.软件过滤器
软件过滤器依赖于操作系统的内核,因此有必要理解系统内核软件过滤器是如何工作的。Linux是开放源玛系统,因此我们能够获得其软件过滤机制。但是对于Micro$oft Windows我们只有凭经验猜测了:(。

1).Linux 
在Linux的以太网驱动模块中,分组是以硬件地址分类的。


广播包

FF FF FF FF FF FF


多投点分组

所有的分组都有一个组标志位集合,不包括广播分组。


TO_US分组

目的地址和本机网卡相同的分组。


OTHERHOST分组

所有目的地址和本机网卡不同的分组。

现在,我们假设具有组标志位的所有分组都是广播分组。IP网络对应的以太网多投点分组的目的地址是01-00-5e-xx-xx-xx,而且,通过 校验组标志位本来就不能对多投点分组进行分类。这个假设并不错误,因为01-00-5e-xx-xx-xx是一个基于IP的多投点地址,但是网卡硬件地址 还用于其它高层协议。

下面,我们看一下ARP模块的代码。


if (in_dev == NULL    
arp->ar_hln != dev->addr_len ' ' 
dev->flags & IFF_NOARP    
skb->pkt_type == PACKET_OTHERHOST    
skb->pkt_type == PACKET_LOOPBACK    
arp->ar_pln != 4) 
goto out;


Linux内核的ARP模块拒绝所有OTHERHOST类型的分组。接着,ARP模块将处理广播、多投点和TO_US类型的分组。表1综合了硬件过滤器和 软件过滤器对各种ARP分组的过滤处理,1说明:hw(hardware)、sw(software)、res.(response)、 gr(group)。


下面,后我们将对这六硬件地址的分组进行详细描述:

TO_US 
网卡在正常模式下,所有地址为TO_US的分组都能够通过精简过滤器和软件过滤器。因此,不管网卡是否处于混杂模式(promiscuous mode)下,ARP模块都会对其进行响应。


OTHERHOST 
当网卡处于正常模式下,会拒绝所有地址为OTHERHOST的分组。即使网卡处于混杂模式(promiscuous mode),这种分组也无法通过软件过滤器,因此这种ARP请求不会收到响应。


BROARDCAST 
在正常模式下,BROARDCAST分组能够也能够通过硬件和软件过滤器,因此不能用于网络节点混杂模式的检测。


MULTICAST 
在正常模式下,如果分组的硬件地址没有在多投点地址列表中注册,网卡将拒绝接收;但是,如果网卡处于混杂模式,这种分组将畅通无阻地穿过硬件过滤器和软件过滤器。因此,可以使用这种类型的分组来检测处于混杂模式的网络节点。


group bit 
这种类型的分组既不属于BRODCAST类型也不属于MULTICAST类型,但是其硬件地址的组位(以太网地址的首字节低序第一位)置位 即:01-00-00-00-00-00。在正常模式下,网卡会拒绝接收此类分组;但是在混杂模式下,这种类型的分组能够通过硬件过滤器。而在Linux 内核中,这种类型的分组被归类为多投点分组进行处理,能够穿过软件过滤器。因此,这种类型的分组也能够用于混杂模式检测。


2).Micro$oft Windows 
Windows系统不是开放源码系统,因此不能从源代码分析其软件过滤行为。只好由实验来测试。在实验中,我们使用了以下的硬件地址:

FF-FF-FF-FF-FF-FF 广播地址
所有的网络节点都会接收这种分组。通常的ARP查询包使用这个地址。


FF-FF-FF-FF-FF-FE 伪广播地址
FF-FF-FF-FF-FF-FE是一种伪广播地址,它的最后一位丢失。这个地址被用来检查软件过滤器是否检查所有的地址位,是否应答。


FF-FF-00-00-00-00-00 16位伪广播地址 
FF-FF-00-00-00-00-00只有前16位和真正的广播地址相同。如果过滤器函数只测试广播地址的第一个字,这个地址就可以归入广播地址。


FF-00-00-00-00-00 8位伪广播地址
这个地址只有前8位和广播地址相同,如果过滤器函数只检查广播地址的首字节,它也可以归入广播地址类。


01-00-00-00-00-00 多投点标记置位地址 
这个地址只有多投点标记位(以太网地址的首字节低序位)被置位,用来检查过滤器函数是否也象Linux一样把它作为多投点地址处理。


01-00-5E-00-00-00 多投点地址0 
多投点地址0并不常用,因此我们使用这个地址作为没有在网卡多投点地址列表中注册的多投点地址。正常情况下,硬件过滤器应该拒绝接收这种分组。但是,如果 软件过滤器不能检查所有的地址位,这类分组就可能被归类到多投点地址。因此,如果网卡处于混杂模式(promiscuous mode),内核就会进行应答。


01-00-5E-00-00-01 多投点地址1 
局域网上的所有网络节点都应该接收多投点地址1类型的分组。换句话说,默认情况下硬件过滤器允许这类分组通过。但是可以由于网卡不支持多投点模式而不应答。因此,这类分组可以用于检查主机是否支持多投点地址。


即使结果:
对于这7种类型地址的测试结果如表2所示。测试是针对Windows85/98/ME/2000和Linux。不出所料,网卡处于正常模式下,内核会对所有地址为广播地址和多投点地址1的分组进行回应。
然而,当网卡处于混杂模式下时,每种操作系统的测试结果不尽相同。Windows95/98/ME会响应31、16、8位伪广播地址的分组。因此,我们可以认为Window9x系列操作系统的软件过滤器只通过检测一位来判断分组地址是否是广播地址。
Windows2000对地址为31、16位伪广播地址的分组进行响应。因此,我们可以认为WindowsY2K检查地址的8位来判断分组地址是否为广播地址。
Linux内核对所有七种地址的分组都会进行响应。

7.混杂模式检测
我们可以把这个测试结果用于局域网处于混杂模式节点的检测。下面是具体检测过程:
1).我们需要检测IP地址A的主机是否处于混杂模式。我们首先需要构造如下格式的ARP分组和以太网帧:

ARP分组:
目的以太网地址 00 00 00 00 00 00(说明1) 
发送方以太网地址 00 11 22 33 44 55(说明2) 
高层协议类型 08 00(IP) 
硬件类型 00 01(以太网) 
硬件地址长度 06(以太网地址长度) 
IP地址长度 04 
发送方的IP地址 本机IP地址 
目标的IP地址 被检测主机的IP地址 
ARP操作码 00 01(ARP请求01、ARP应答02)

以太网帧: 
协议类型 08 06(ARP) 
发送方的硬件地址 本机以太网卡地址 
目标硬件地址 FF FF FF FF FF FE

说明1:这时ARP要查询的以太网地址,全部填0或者1都可以。
说明2:用自己的以太网地址代替。

2).分组构造完成后,我们可以把它发送到网络上。

3).现在我们需要等待目标主机的反应。如果目标主机处于正常状态,这个分组就会被阻塞;但是如果处于混杂模式(promiscuous mode)下,我们就会收到应答。

8.检查所有网络节点
只要顺序使用第七节叙述的检测方法,我们就可能检测出所有处于混杂模式下的网络节点。但是,某些情况下,会使这种检测方法失效。

9.异常情况
上面讲到有一些情况不能使用这种方式进行混杂模式检测。这些异常情况包括:

1).旧网卡
有些旧网卡不支持多投点列表,例如:3COM EtherlinkIII。分组不经过硬件过滤器的检查就进入软件过滤器,

2).3COM网卡
安装在LInux主机的3COM 3c905网卡,默认情况下被设置为接收所有的多投点分组。因此,我们无法区别混杂模式和多投点模式。造成这种异常的原因是这种网卡的Linux驱动模块 不支持多投点列表,网卡就会接收所有多投点分组。注意:Linux安装程序使用3c59x.o作为这种网卡的驱动模块。如果把驱动模块改为 3c905x.o可以解决这个问题。

3).Windows Y2K分组捕获驱动模块
当WindowsY2K分组捕获驱动模块是动态加载的,也会产生异常情况。WinPcap2.1(2.01不同)和SMS是用于WindowsY2K的两 种动态加载分组捕获驱动模块。当它们安装到WindowsY2K系统中,会有一些特别的反应。即使网卡不处于混杂模式下,也会对地址为16为伪广播地址的 分组进行响应(使用这两种驱动模块的嗅探器也将无法准确操作)。也就是说,即使嗅探器没有运行也照样可以检测到。可能是Micro$oft为了方便混杂模 式的检测有意为之。