近日某小区有用户反映上网经常出现掉线现象,而当工程人员上门检修时并未发现用户所说的故障现象。后来几天内又多次接到该用户电话反映故障,同时陆续接到该小区其他用户反映有同类故障出现,这时感觉到了事态的严重性。
该小区有一百余户住户,采用光纤+五类线入户方式开通宽带上网,一直比较正常,日常问题均是线路故障或用户操作引起的问题。这次出现的问题影响到该小区的大部分用户,故障出现的时间无任何规律性,并且往往又能自动恢复正常。
并非病毒所致
因为有多个用户反映出现该故障,可以排除用户的线路和机器故障的原因,根据以往经验怀疑是某用户机器中毒,开机后病毒发作发送大量数据包导致局域网通信拥塞使得用户掉线。于是我们将一台电脑安装上Sniffer软件后接入小区局域网,试图找出中毒机器。经过长时间观测,并未发现有任何机器的连接数或发出的数据包异常增多,可仍有用户在我们观测时反映有掉线现象。
查找IP地址冲突点
我们分别更换了位于小区第一级的光纤收发器和交换机,问题仍没有得到解决。既然小区局域网没有发现问题,我们将目光转向了位于机房内的汇聚交换机,怀疑接入该小区的端口性能不良,准备更换端口。该小区接在一台huawei-s3526的16号端口上,登录到交换机上以后,看到出现下面一些提示信息:
%1/15/2006 18:32:30-SYSM-5-IP COLLISION:Rcv src IP 10.4.1.50 arped
00-00-6a-60-78-a3 By 00-03-47-52-43-10 resided in port 16
%1/15/2006 18:32:32-SYSM-5-IP COLLISION:Rcv src IP 10.4.1.42 arped
00-00-93-64-48-d2 By 00-03-47-52-43-10 resided in port 16
……
%1/15/2006 18:32:35-SYSM-5-IP COLLISION:Rcv src IP 10.4.1.26 arped
00-00-34-3d-20-65 By 00-03-47-52-43-10 resided in port 16
信息中提示出现IP地址冲突,显示的端口号正是该小区的接入端口。莫非问题的结症在这里?仔细观察,发现所有提示均表示一个MAC地址为00-03-47-52-43-10的机器与其他机器在IP地址与MAC地址转换的过程中发生了冲突,即所有IP地址均被改成了与00-03-47-52-43-10地址相对应。因为该小区用户采用的是DHCP方式分配IP地址,通过认证计费系统查找MAC地址为00-03-47-52-43-10的用户,到该用户家与用户进行沟通,该用户反映从未手动更改过IP地址,上网一直很正常,日常使用中也未感觉到机器有何异样。
我们在其机器上用Netstat等命令查看,也未发现有任何异常连接或过多连接,不同于一般机器中毒状况。后经与用户协商断开该用户与楼栋交换机的连接,长时间观察,小区不再有用户反映掉线,看来掉线的确是由该用户引起的。
木马欺骗ARP缓存表
该现象应该是软件方面的问题。将该用户机器硬盘拆下,挂接到另外一台机器上进行扫描杀毒,发现存在十余种病毒,通过查找资料,最终发现肇事者是一个隐藏在外挂中的木马程序。通常来说,木马程序仅仅窃取用户的信息,而这个木马为何会导致其他用户掉线呢?
我们知道,用户访问因特网的数据包必须通过多次路由才能到达目的服务器,目的服务器返回用户的数据包也必须通过多次路由才能回到用户端。数据包路由的第一步是用户机器上填写的默认网关,如果网关出现问题,那么用户是无法上网的。默认网关填写的是IP地址,而用户机器与网关通信时采用的是MAC地址,问题就发生在这里。
我们先了解一下ARP协议。
ARP协议是“Address Resoluti
on Protocol”(地址解析协议)的缩写,在局域网中,网络中实际传输的是“帧”,帧里面有目标主机的MAC地址。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
采用以太网方式接入上网的电脑里都有一个ARP缓存表(见表1),表里的IP地址与MAC地址是一一对应的。
表1 ARP缓存表
主机
IP地址
MAC地址
主机
网关
192.168.16.254
xx-xx-xx-xx-xx-xx
网关
A
192.168.16.1
aa-aa-aa-aa-aa-aa
A
我们以主机A(192.168.16.1)上网为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有网关的IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.16.254的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有网关接收到这个帧时,才向主机A做出这样的回应:“192.168.16.254的MAC地址是xx-xx-xx-xx-xx-xx”。这样,主机A就知道了网关的MAC地址,它就可以向网关发送信息了。同时它还更新了自己的ARP缓存表,下次再向网关发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用老化机制,在一段时间内如果表中的某一行没有使用,就会删除,这样可以大大减少ARP缓存表的长度,加快查询速度。当局域网内某台主机运行ARP欺骗的木马程序时,会欺骗局域网内所有主机和路由器,让所有上网的流量必须经过病毒主机。其他用户原来直接通过路由器上网现在转由通过病毒主机上网,切换的时候用户会断一次线。当ARP欺骗的木马程序停止运行时,用户会恢复从路由器上网,切换过程中用户会再断一次线。
于是我们在网关交换机的“系统历史记录”中看到大量如下类似的信息:
%1/15/2006 18:32:30-SYSM-5-IP COLLISION:Rcv src IP 10.4.1.26 arped
00-00-93-64-48-d2 By 00-00-b4-52-43-10 resided in port 16
这个消息代表了用户的MAC地址发生了变化,在ARP欺骗木马开始运行的时候,局域网主机的MAC地址更新为病毒主机的MAC地址。
双向绑定防止ARP欺骗
我们可以采用双向绑定的方法来解决并且防止ARP欺骗。
(1)在PC上绑定路由器的IP和MAC地址。
(2)在路由器上绑定用户主机的IP和MAC地址。
对于网络运营商来说,在不方便进行双向绑定时,只有通过管理员经常查阅路由器日志,尽早发现相关提示信息,断开问题用户连接的办法来保障其他用户正常上网。