Chinaunix首页 | 论坛 | 博客
  • 博客访问: 377835
  • 博文数量: 146
  • 博客积分: 2990
  • 博客等级: 少校
  • 技术积分: 1399
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-09 22:09
文章分类

全部博文(146)

文章存档

2011年(1)

2010年(2)

2009年(143)

我的朋友

分类: 系统运维

2009-03-20 18:22:22

六 深入sniff
 单纯的sniff的功能始终是局限的,所以在大多数的情况下,sniff往往和其他手段结合起来使用,sniff和spoof已及其他技术手段结合在一起对网络构成的危害是巨大的。单纯的sniff好比缺了一只腿,无法发挥大的作用,例如在sniff原理一节中我们讨论的例子里,我一再的强调我们使用的是一个普通的HUB进行连接是有原因的,如果我们把HUB用一个switch代替,那情况就要复杂一些了
 我们的机器A、B、C与Switch相连接,而Switch通过路由器Router访问外部网络。我们先来了解Switch的工作原理:
  与HUB 只是简单地把所接收到的信号通过所有端口(除了信号来的那个口)重复发送出去不同,而Switch却可以检查每一个收到的数据包,并对数据包进行相应的处理在Switch内保存着每一个网段上所有节点的物理地址,只允许必要的网络流量通过Switch。举例来说,当Switch接收到一个数据包之后,根据自身保存的网络地址表检查数据包内包含的发送和接收方地址。如果接收方位于发送方网段,该数据包就会被Switch丢弃,不能通过交换机传送到其它的
网段;如果接收方和发送方位于两个不同的网段,该数据包就会被Switch转发到目标网段。这样,通过交换机的过滤和转发,可以有效避免网络广播风暴,减少误包和错包的出现。顺便说一句,现在Switch和HUB的价格相去无几,所以hub正逐渐被网络交换机取代。
 现在回到我们的例子中来,我们假设机器A上的管理员为了维护机器C,使用了一个FTP命令向机器C进行远程登陆,那么在这里,数据是这样走的:首先机器A上的管理员输入的登陆机器C的FTP口令经过应用层FTP协议、传输层TCP协议、网络层IP协议、数据链路层上的以太网驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送到了Switch上,而Switch检查数据帧中的目的地址,并在他自身保存的网络地址表中知道了他应该把这数据帧发到机器C那里,于是,接下来机器C接收到了从A发来的信息,发现他是发给自己的信息,于是进行分析处理。
  OK,现在我们机器B上的管理员的好奇心只能深深的埋藏在心里了,因为数据包根本就没有经过他,就算他把自己的网卡设置成混杂模式也是有力无处使。
 在了解在一个Switch环境下原理后,我们结合一些手段去设法sniff,是的,我们可以做到这一点,有许多的手段可以让管理员B满足他的好奇心,在下面我会提出几个办法,当然只是其中的一些办法而已。
1 ARP Spoof
  在基于IP通信的内部网中,我们可以使用 ARP Spoof 的手段,了解什么是ARP Spoof的前提你先要明白一下什么是ARP和RARP协议,什么是MAC地址,什么又是IP地址。ARP协议是地址转换协议,RARP被称为反向地址转换协议,他们负责把IP地址和MAC地址进行相互转换对应。
  ARP Spoof 攻击的根本原理是因为计算机中维护着一个 ARP 高速缓存,并且这个ARP 高速缓存是随着计算机不断的发出ARP请求和收到ARP响应而不断的更新的,ARP 高速缓存的目的是把机器的IP地
址和MAC地址相互映射。你可以使用 arp 命令来查看你自己的 ARP 高速缓存。现在设想一下,一个Switch工作在数据链路层,他根据MAC地址来转发他所接收的数据包,而计算器维护的 ARP 高速缓存却是动态的......你想到什么了吗?
  为了加深理解,现在给我们的机器编上号,机器A:IP地址为 10.0.0.1 ,MAC地址为20-53-52-43-00-01 ,机器B:IP地址为 10.0.0.2 ,MAC地址为 20-53-52-43-00-02,机器C:IP地址为 10.0.0.3 ,MAC地址为20-53-52-43-00-03 。现在机器B上的管理员是个聪明的家伙,他向机器
A发出一个 ARP Reply (协议没有规定一定要等ARP Request出现才 能发送ARP Reply,也没有规定一定要发送过ARP Request才能接收ARP Reply),其中的目的IP地址为10.0.0.1,目的MAC地址为 20-53-52-43-00-01 ,而源IP地址为10.0.0.3,源MAC地址为 20-53-52-43-00-02 ,好了,现在机器A更新了他的 ARP 高速缓存,并相信了IP地址为10.0.0.3的机器的MAC地址是
20-53-52-43-00-02 。当机器A上的管理员发出一条FTP命令时---ftp 10.0.0.3,数据包被送到了Switch,Switch查看数据包中的目的地址,发现MAC为 20-53-52-43-00-02 ,于是,他把数据包发到了机器B上。再设想一下,如果不想影响A和C之间的通信该怎么办?你可以同时欺骗他们双方,
来一个 man-in-middle 。
 当然,在实际的操作中你还需要考虑到一些其他的事,比如某些操作系统在会主动的发送ARP请求包来更新相应的ARP入口等。
2. MAC Flooding
 在上面我们曾经提到过,Switch之所以能够由数据包中目的MAC地址判断出他应该把数据包发送到那一个端口上是根据他本身维护的一张地址表。这张地址表可能是动态的也可能是静态的,这要看Switch的厂商和Switch的型号来定,对于某些Switch来说,他维护的是一张动态的地址表,并且地址表的大小是有上限的,比如 3com Superstack Switch 3300 (3c16981 Hardware v.1 Software v.2.10) 就是这样一种Switch,我们可以通过发送大量错误的地址信息而使SWITCH维护的地址表“溢出”,从而使他变成广播模式来达到我们要 sniff 机器A与机器C之间的通信的目的。
3. Fake the MAC address
 伪造MAC地址也是一个常用的办法,不过这要基于你网络内的Switch是动态更新其地址表,这实际上和我们上面说到的 ARP Spoof 有些类似,只不过现在你是想要Switch相信你,而不是要机器A相信你。因为Switch是动态更新其地址表的,你要做的事情就是告诉Switch:HI,我是机器C。换成技术上的问题你只不过需要向Switch发送伪造过的数据包,其中源MAC地址对应的是机器C的MAC地址,现在Switch就把机器C和你的端口对应起来了。不过其中存在一个问题,现在机器C也会说了:HI,Switch老大,我才是机器C呢!,现在你该怎么办?切,还用问!让他说不了话就可以了,DOS还是其他什么,随便你了......
4. ICMP Router Advertisements
  这主要是由ICMP路由器发现协议(IRDP)的缺陷引起的,在Windows 95、98、2000及SunOS、Solaris 2.6等系统中,都使用了IRDP协议,SunOS系统只在某些特定的情况下使用该协议,而 Windows95 ,Windows95b, Windows98, Windows98se, 和 Windows2000都是默认的使用IRDP协议。IRDP协议的主要内容就是告诉人们谁是路由器,设想一下,一个HACK利用IRDP宣称自己是路由器的情况会有多么的糟糕!所有相信HACK的请求的机器把他们所有的数据都发送给HACK所控制的机器.........
5. ICMP Redirect
 所谓ICMP重定向,就是指告诉机器向另一个不同的路由发送他的数据包,ICMP重定向通常使用在这样的场合下,假设A与B两台机器分别位于同一个物理网段内的两个逻辑子网内,而A和B都不知道这一点,只有路由器知道,当A发送给B的数据到达路由器的时候,路由器会向A送一个ICMP重定向包裹,告诉A:HI,别再送数据给我转交了,你就直接送到B那里就可以了。设想一下,
一个hack完全可以利用这一点,使得A发送给B的数据经过他。
 上面提到的这些方法只不是其中的一些,为了配合sniff能够工作得更有效率,还有其他许多的办法,其实sniff的目的说穿了只有一个,就是抓包,从抓包这个概念上引伸下去,所有为了能够抓到网络上的信息包而采用的技术都可以归入sniff,单纯的sniff是没有什么效率的。你还能想到什么吗?进攻路由器,在路由器上放置sniff......,在系统内核中植入sniff......等等。
七 如何防止SNIFF
 防止sniff最有效的手段就是进行合理的网络分段,并在网络中使用交换机和网桥,在理想的情况下使每一台机器都拥有自己的网络段,当然这会使你的网络建设费用增加很多,所以你可以尽量使相互信任的机器属于同一个网段,使他们互相之间不必担心sniff的存在。并在网段于网段间进行硬件屏障。你也可以使用加密技术对你在网络中传送的敏感数据如户ID或口令,你的银行帐号,商业机密等进行加密,你可以选用SSH等加密手段。为了防止ARP欺骗,你可以使用永久的ARP缓存条目,反正上面的攻击手段和原理你也看了,你就反过来想想该怎么办好了。不过有盾必有矛,平时的安全意识才是最重要的。
 (注:以下关于AntiSniff的介绍取至backend翻译整理的L0pht AntiSniff 技术文档一文)当你做做层层保护后,你还是怀疑自己的网络上存在sniff该怎么办? L0pht 小组为了探测sniff专门发布了一个软件AntiSniff,当然这个软件不是免费的:),AntiSniff 工具用于检测局域网中是否有机器处于混杂模式,AntiSniff Version 1.x被设计为运行在以太网的Windows系统中,提供了简单易用的图形用户界面,AntiSniff Version 1.x 主要工作在非交换环境下的本地网段中,如果运行在交换环境下其功能将大打折扣。AntiSniff Ver 2.0 将不但能在本地网段中,而且能够穿过路由器和交换机进行工作。
◆ 操作系统类特殊测试
Linux 内核测试
 旧版本的Linux内核存在一个奇怪的特性,可被用于确定机器是否处于混杂模式。在正常情形下,网卡会过滤和丢弃那些目标地址不是本机MAC地址或以太网广播地址的数据包。如果数据包的目标地址为本机以太网地址或广播地址,将传送给内核进行处理,因为其认为该以太网数据帧包含了本机的正确IP地址或该网络广播地址。如果网卡处于混杂模式,则每个数据包都会传递给操作系统进行
分析或处理。许多版本的 Linux内核只检查数据包中的IP地址以确定是否存放到IP堆栈中进行处理。为了利用这一点,AntiSniff构造一个无效以太网地址而IP地址有效的数据包。对于使用了这些内核版本和处于混杂模式的Linux系统,由于只检查到IP地址有效而将其接收并存放到相应堆栈中。通过在这个伪造的以太网数据帧中构造一个ICMP ECHO请求,这些系统会返回响应包(如果处于混杂模式) 或忽略(如果不处于混杂模式),从而暴露其工作模式。当伪造的以太网数据帧中的IP地址设置为网络广播地址时这个测试非常有效。 AntiSniff的使用者可以修改伪造的以太网址,缺省值为66:66:66:66:66:66。
NetBSD
 许多NetBSD内核具有与上述Linux内核相同的特性,不过伪造以太网数据帧中的 IP地址必须设为广播地址。
Windows 95/98/NT
 根据对网络驱动程序头文件的了解,可以知道当处于混杂模式时,Microsoft的操作系统会确切地检查每个包的以太网地址。如果与网卡的以太网地址匹配,将作为目标IP地址为本机的数据包存放到相应堆栈中处理。可以被利用的一点是系统对以太网广播包的分析。在正常情形下,例如机器工作在非混杂模式下,网卡只向系统内核传输那些目标以太网址与其匹配或为以太网广播地址(ff:ff:ff:ff:ff:ff) 的数据包。如果机器处于混杂模式下,网络驱动程序仍然会检查每个数据包的以太网地址,但检查是否为广播包时却只检查头8位地址是否为0xff。因此,为了使处于混杂模式的系统返回响应信息,AntiSniff构造以太网地址为ff:00:00:00:00:00且含有正确目标IP 地址的数据包,当Microsoft的操作系统接收到这个数据包时,将根据网络驱动程序检查到的细微差别而返回响应包(如果处于混杂模式)或丢弃这个数据包(如果处于非混杂模式)。
 需要注意的是,这个检查与使用的网络驱动程序有关。Microsoft缺省的网络驱动程序具有以上特性,大多数的厂商为了保持兼容性也继承了这些特性。不过有些网卡会在其硬件层中检查以太网地址的头8位,所以可能会无论系统真正的状态是什么都总是返回正值。关于这类网卡和驱动程序请访问 AntiSniff Ver 1.x的web网站。
◆ DNS 测试
 进行DNS测试的原因是许多攻击者使用的网络数据收集工具都对IP地址进行反向 DNS解析,因为他们希望根据域名寻找更有价值的主机。例如joepc1.foo.bar对攻击者的吸引力往往不如payroll.foo.bar这种商业域名。此时这些工具就由被动型网络工具变为主动型网络工具了。而不监听网络通讯的机器不会试图反向解析数据包中的 IP地址。为了利用这一点,AntiSniff Ver 1.x使自身处于混杂模式下,向网络发送虚假目标IP地址的数据包,然后监听是否有机器发送该虚假目标IP地址的反向DNS查询。伪造数据包的以太网地址、检查目标、虚假目标IP地址可由用户定制。
◆ 网络和主机响应时间测试
 这种测试已被证明是最有效的。它能够发现网络中处于混杂模式的机器,而不管其操作系统是什么。警告,这个测试会在很短的时间内产生巨大的网络通讯流量。进行这种测试的理由是不处于混杂模式的网卡提供了一定的硬件底层过滤机制。也就是说,目标地址非本地(广播地址除外)的数据包将被网卡的固件丢弃。在这种情况下,骤然增加、但目标地址不是本地的网络通讯流量对操作系统的影响只会很小。而处于混杂模式下的机器则缺乏此类底层的过滤,骤然增加、但目标地址不是本地的网络通讯流量会对该机器造成较明显的影响(不同的操作系统/内核/用户方式会有不同)。这些变化可以通过网络通讯流量工具监视到。
  根据以上要点,AntiSniff Ver 1.x 首先利用ICMP ECHO请求及响应计算出需要检测机器的响应时间基准和平均值。在得到这个数据后,立刻向本地网络发送大量的伪造数据包。与此同时再次发送测试数据包以确定平均响应时间的变化值。非混杂模式的机器的响应时间变化量会很小,而混杂模式的机器的响应时间变化量则通常会有 1-4个数量级。为了对付攻击者和入侵者们最常用的多种工具,AntiSniff进行了三种网络饱和度测试:SIXTYSIX、TCPSYN和THREEWAY。
     * SIXTYSIX测试构造的数据包数据全为0x66。这些数据包不会被非混杂模式的机器接收,同时方便使用常见的网络监听/分析工具(如tcpdump和snoop等)记录和捕获。
     * TCPSYN测试构造的数据包包含有效的TCP头和IP头,同时TCP标志域的SYN位被设置。
    * THREEWAY测试采取的原理基本上与TCPSYN一样,但更复杂些。在这种测试中两个实际不存在的机器间多次建立完整的TCP三方握手通讯。它能够更好地欺骗那些骇客工具。
  AntiSniff Ver 1.x 中能够通过以上三种数据包测试发现正处于混杂模式机器的测试方法最好周期性地进行和与以前的数据比较。响应时间测试第一次运行的数据还能够用于分析一个大型网络在flooding和非flooding状态时的性能,并帮助工程师调整网络性能。一旦确信本地网络已运行在正常(没有未经允许而处于混杂模式的机器) 状态,就应该设置AntiSniff工具周期性运行。只要发现
某台机器性能(响应时间)发生数量级的变化,一般就能确定其正处于混杂模式。这种方法不需比较两台独立系统间的性能数据,而只需比较同一台机器不同时候的数据就能确定该机器是否处于混杂模式。
八 结尾
 本文旨在向你描述sniff的基本原理,为的是要使你不仅仅能够了解什么是sniff而已,而是要明白sniff运转的根本原理,文章参考了大量的资料,牵涉到直接引用的已经注明出处和作者,非常的感谢他们。在此还要感谢 W.Richhard.Stevens,虽然其人已逝,但留下的TCP/IP三卷本真是造福了大家,文章的很多地方也是拜他老人家指点迷经才得以感悟。最后还要感谢雀巢咖啡,让我得以熬夜把这篇文章写完,呵呵,谢谢大家。
原作者: himylife
阅读(2716) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-01-18 15:36:55

good ,thanks a lot