代码改变世界

网络嗅探技术浅析

2009-01-21 16:14  hyddd  阅读(12008)  评论(16编辑  收藏

一.嗅探可以做什么?为什么需要嗅探?

  嗅探(sniff),就是窃听网络上流经的数据包,而数据包里面一般会包含很多重要的私隐信息,如:你正在访问什么网站,你的邮箱密码是多少,你在和哪个MM聊QQ等等......而很多攻击方式(如著名的会话劫持)都是建立在嗅探的基础上的。

二.嗅探技术

  在集线器盛行的年代,要做嗅探是件相当简单的事情,你什么事情都不用干,集线器自动会把别人的数据包往你机器上发。但是那个年代已经过去了,现在交换机已经代替集线器成为组建局域网的重要设备,而交换机不会再把不属于你的包转发给你,你也不能再轻易地监听别人的信息了(不熟悉集线器和交换工作原理的朋友可以参考我之前写的文章《网络基础知识1:集线器,网桥,交换机》),注意,只是不再轻易地,不是不行!呵呵,要在交换机网络下做嗅探还是有方法的,接下来我总结一下最近看到的关于交换机网络嗅探的一些方法:>

1.基于ARP欺骗的嗅探技术(对ARP攻击不熟悉可以参看我另外两篇文章《Arp小记》《Arp攻击实战》

  以前搞ARP攻击没什么意思,它顶多就是把一些机器搞得不能上网,真的没啥意思,但自从交换机成为架设局域网的主流设备后,ARP攻击有了新的用途:用ARP欺骗辅助嗅探!原理很简单,先看看下面两幅图:

  

  左图是正常通信时,两台机器数据流向。右图是B被A机器ARP欺骗后,两台机器的数据流向,着重看右图,B被ARP欺骗后,数据的流向改变了,数据先是发给了A,然后再由A转发给网关;而从网关接收数据时,网关直接把发给B的数据转发给了A,再由A转发给B,而A的自己的数据流向是正常的。现在B的数据全部要流经A,如果A要监听B是易于反掌的事情了。

  再简单说说这个ARP欺骗的过程吧,也就是怎么实现改变B的数据流向:

  1).现在架设A的IP地址是192.168.1.11,MAC地址是:11-11-11-11-11-11;B的IP地址是192.168.1.77,MAC地址是77-77-77-77-77-77;网关IP地址是192.168.1.1,MAC地址是:01-01-01-01-01-01。

  2).A发送ARP欺骗包(ARP应答包)给B,告诉B:我(A)是网关,你把访问外网的数据发给我(A)吧!ARP欺骗包如下:

  SrcIP: 192.168.1.1 ,SrcMAC:11-11-11-11-11-11

  DstIP: 192.168.1.77 ,DstMAC:77-77-77-77-77-77

  3).A发送ARP欺骗包(ARP应答包)给网关,告诉网关:我(A)是机器B,结果网关把所有给B的数据都发到A那里了。ARP欺骗包如下:

  SrcIP: 192.168.1. 77,SrcMAC:11-11-11-11-11-11

  DstIP: 192.168.1. 1,DstMAC:01-01-01-01-01-01

  4).机器A有一个辅助用的转发软件,它负责把“网关->B”和“B->网关”的数据包转发。

至此,ARP欺骗的辅助任务完成了,接下来就是用你的嗅探器进行偷窥了~噢~哈哈!

  这里有几点值得注意一下的:

  1).ARP欺骗包每隔一段时间要发一次,否则网关和B的ARP缓存会更新!

  2).ARP欺骗完成后,网关的ARP记录会有两记录的MAC地址是相同的,分别是:192.168.1.11(11-11-11-11-11-11)和192.168.1.77(11-11-11-11-11-11),这样可能会比较明显,嗯~可以把A自己在网关的ARP缓存改了:192.168.1.11(01-10-01-10-01-10,乱写一个),但这样会有两个问题:一个是这个MAC是乱写的,局域网内根本没有这个MAC地址的机器,根据交换机的工作原理,网关发给192.168.1.11这IP的机器的数据将会被广播。第二个是,此刻你(A)的正常与外界通信的能力将会丧失。可以权衡考虑一下。

  以前的一篇文章《Arp攻击实战》,里面所使用的ARP攻击工具:"WinArpAttacker",它就有利用这种原理进行嗅探的功能,见下图:

  

2.欺骗交换机缓存

  用ARP欺骗辅助嗅探是一种比较旧的方式,现在的局域网机器很多都装了ARP防火墙!如果机器装了ARP防火墙,上面的嗅探方式就没用了:<,那还有其他的方式吗?嗯~有!那就是欺骗交换机缓存!

  cncert的一个很出名的会话劫持工具SSCLONE就是采用这种方法进行嗅探的,它的网站上也有专门的文章说明“欺骗交换机缓存”的嗅探方法(见参考资料)。我在这里大概说一下原理吧。

  交换机里面有一张CAM表,记录了Mac-Port信息(这个端口对应的机器的MAC地址是什么),MAC信息的获取是:交换机从转发的数据包中提取。所谓欺骗交换机缓存,就是修改这张CAM表以达到欺骗交换机的目的!比如现在有一个4端口的交换机,它的CAM表如下:

  port1 -- 11-11-11-11-11-11

  port2 -- 22-22-22-22-22-22

  port3 -- 33-33-33-33-33-33

  port4 -- 44-44-44-44-44-44

现在port1的机器A(IP是192.168.1.11,MAC地址为11-11-11-11-11-11)想要嗅探port2的机器B(IP是192.168.1.22,MAC地址为22-22-22-22-22-22),怎么办呢?呵呵~流程如下:

  机器A对外发送一个数据包,如下:

  SrcIP:192.168.1.11  ScrMac:22-22-22-22-22-22

  DstIP:xxx.xxx.xxx.xxx(随便写),DstMac:xx-xx-xx-xx-xx-xx(随便写)

  此时,交换机收到这个包,发现在原来CAM里面,port1对应的机器MAC地址是11-11-11-11-11-11,怎么现在变为:22-22-22-22-22-22了呢??哦,应该是这台机器的MAC地址变了吧~好!那我更新CAM表!

  更新后的交换机CAM表如下:

  port1 -- 22-22-22-22-22-22

  port2 -- 22-22-22-22-22-22

  port3 -- 33-33-33-33-33-33

  port4 -- 44-44-44-44-44-44

现在有port1和port2对应的MAC地址是一样的。如果现在网关(假设现在port4连接的是网关)来了一个数据包是给机器B(IP是192.168.1.22,MAC地址为22-22-22-22-22-22),交换机会顺序查询此刻的CAM表来确定该数据包转发去哪个端口!在查询port1时,发现此端口对应MAC地址和数据包里的MAC地址相同,交换机直接就把包转发到port1的机器A了,由于该包已转发完毕,交换机继续处理下一个数据包......就这样,数据包又再次落入充满窥探欲望的人手中!

  这里也需要注意几个问题:

  1).A收到包后,还是需要转发给B的,不然B和外面的对话就中断了。

  2).当A把包转发给B时,需要修复交换机的CAM表。

当你看完以上这两点注意时,可能会发现利用这种的一些缺陷:

  1).A在转发包给B时需要恢复CAM表,转发后又要再次欺骗。如果在转发包时,网关来了一个数据给B,此时的CAM表是正确的,交换机会把这个数据会直接发给B,A无法监听到这个包,由于每次转发都需要完成以上操作,导致CAM表刷新相当频繁,最后的结果是,A监听到的数据很不完整。

  2).你接的交换机的端口号决定着你的命运!

  如果B接的port1端口,A接的是port2端口,那么,用这种方式,A将永远也嗅探不到B的信息,更悲观的想一下,如果你连接的是这个交换机最后一个端口呢??!:<

  3).跨交换机进行嗅探丢包非常多!

  看下图:

  

现在交换机A连接交换机B的port1,机器C连接port2,如果没有机器B的话,机器A还是能比较顺利监听机器到C的信息的,但是有了机器B就不同了,交换机的CAM表里port1这条记录,会因为机器A和机器B的发包而经常改变。导致的问题大家也可以想到了。

  现在,防止欺骗交换机缓存的方法只有在交换机处绑定port-mac这对信息,但由于这和交换机原先设计的理念有矛盾,故这个是无法实现的,也就是说,没有办法防止:<

  值得一说的是,现在无线网已经兴起了,和集线器时代一样,在无线网络监听别人的信息是不费吹灰之力的事情,无线网的安全也值深思呀~

  有什么想法大家踊跃发言呀~!:>

三.参考资料:

1.http://www.cncert.net/TEC/network/2008-7-26/161.html

2.http://blog.csdn.net/zhihui13/archive/2008/10/10/3048272.aspx