众所周知,ARP欺骗已经是局域网中最令人头疼的一种***手段了,可以在一瞬间让整个网络中的所有计算机从Internet上面断开,也可以轻而易举地让Windows 98计算机出现持续的“IP地址冲突”,导致宕机,更有甚者,如果结合Sniffer软件还能够获取局域网中任何一台主机上网时的邮箱密码。
尽管ARP欺骗的危害巨大,但相应的防范措施却并不多,常见的方法一般也就是“VLAN划分”和“MAC地址绑定”两种。“VLAN划分”是将一个大网络划分成若干个小网络,由于ARP不能跨路由***,所以这样可以降低ARP欺骗的危害性,但它并不能阻止同一个网段内ARP欺骗的产生。“MAC地址绑定”理论上说的确可以在一定程度上降低ARP欺骗的危害,但实践中的效果却微乎其微,几乎没有几个网管员采用这种方法,因为除了巨大的工作量令网络管理员难以招架外,从网络管理的角度来看,这种方法也极为不科学,大有“高射炮打蚊子”之嫌。 本文中,笔者将和大家共同探讨另外一种管理办法——用SNMP网络管理来对付ARP欺骗,只要轻点一下手中的鼠标,我们就能够查到ARP***的源头,并将其踢出局域网,还大家一个清静且安全的网络环境。 为了能够更好说明整个追踪过程,笔者特意构建了一个小型局域网,其拓扑结构如图1所示。 图1 笔者会从这个拓扑图上采集实验数据,向大家详细介绍如何追踪位于交换机2上面的***者的真实IP地址,大家可以对照着这个拓扑图来阅读本文。 追踪原理 局域网中ARP欺骗的一个主要特点就是使用了伪造的IP地址和MAC地址,我们所看到的地址都是由***软件精心构造出来的虚假地址,因而无法从捕捉的数据包中识别出***者的真正来源。尽管如此,但一个有经验的网络管理员仍然能通过查找交换机的端口来定位***者的来源,因为IP地址和MAC地址可以伪造,但***者连接到交换机的那个端口却无法伪造,利用“MAC地址-IP地址-PORT”三者之间的联系,我们就可以准确而快速地定位***者来源,这就是追踪ARP欺骗***源的基本依据。那么,如何才能发现“MAC地址-IP地址-PORT”之间的关系呢? 在交换式局域网里,由于交换机可以自动记住连接到每一个端口上面的计算机的MAC地址,因此,无论***者使用什么样的计算机和操作系统,只要一开机,计算机的MAC地址和端口之间的关系就被自动记录到交换机的内存中,这是正常情况下的关联;如果***者在他的计算机上面发起一次ARP欺骗,那么交换机就会捕捉到这个ARP欺骗包,通过拆包检查,交换机就能记住在这个端口上又出现了一个新的MAC地址,这是ARP欺骗状态下的关联。此时,交换机的内存中就会出现同一个端口对应了两个不同的MAC地址的情况:一个是***者真实的MAC地址,另一个则是其伪造的MAC地址。 在Cisco交换机中,我们可以分别使用show arp和show mac-address-table命令来查看“端口和MAC地址”之间的对应关系,以下为笔者在交换机1上所获得的数据: Switch#show arp Protocol Address Age (min) Hardware Addr Type Interface Internet 192.168.0.92 1 0060.0892.e20d ARPA Vlan1 Internet 192.168.0.15 - 000a.f4e7.af40 ARPA Vlan1 Internet 192.168.1.3 141 000b.46ce.ea00 ARPA Vlan1 Internet 192.168.0.3 0 00a0.d1d1.5e77 ARPA Vlan1 Internet 192.168.1.2 232 000b.46ce.ea00 ARPA Vlan1 Switch#show mac-address-table Mac Address Table Vlan Mac Address Type Ports 1 0005.5d68.37da DYNAMIC Fa0/13 1 000b.461c.3e40 DYNAMIC Fa0/5 1 000b.461c.3e58 DYNAMIC Fa0/5 1 000b.46ce.ea00 DYNAMIC Fa0/24 1 000c.7687.c32b DYNAMIC Fa0/10 1 0050.2281.23ad DYNAMIC Fa0/11 1 0050.bafb.e0c5 DYNAMIC Fa0/16 1 0060.0892.e20d DYNAMIC Fa0/5 1 0090.0b01.d6fe DYNAMIC Fa0/23 1 00a0.d1d1.5e77 DYNAMIC Fa0/5 1 5078.4c6b.1c9d DYNAMIC Fa0/12 1 5078.4c6b.1c9f DYNAMIC Fa0/6 1 5078.4c6c.4cba DYNAMIC Fa0/22 Total Mac Addresses for this criterion: 13 Switch# 从中可以看到,192.168.0.92计算机所对应的端口为Fa0/5,即第5个端口。如果网络中没有部署相关的网络管理软件,利用show arp和show mac-address-table两条命令来查看MAC-PORT之间的对应关系不失为一种好的办法。但是大家可能也发现了,这种方法需要我们先从ARP表中找出相应计算机的MAC地址,然后再到MAC地址表中去查找对应的端口号,应该说还是比较麻烦的。要是网络中的计算机数量达到上百台,这样的查找就太费时费力了,说不定等我们查到时,***者早已逃之夭夭了…… 但是不管怎么说,我们至少已经找到了追踪***者源头的理论和实践依据,接下来的问题是:如何才能确定该端口上的一个MAC地址是伪造的呢?从前面的数据中也可以看出,端口5(Fa0/5)对应了4个不同的MAC地址,难道我们能说其中的三个都是伪造的?显然不行,这么武断是会造成冤假错案的。 识别恶意数据流 所谓“知己知彼,百战不殆”,要想在网络追踪中明确辨析真假MAC地址的话,首先就要了解***者的行为特征,了解能够代表***软件特性的数据流。这里,笔者将为大家分析一个极具代表性的ARP***软件“局域网终结者”。目前,局域网中绝大部分的ARP***行为都是由它来具体实施的,了解它的行为特征对我们的追踪将会起到一定的帮助。 在图1所示的拓扑图中,我们在192.168.0.9上面用局域网终结者发起一次ARP欺骗,阻挡网络中的所有主机跟网关192.168.0.1的连接,而后在网管工作站192.168.0.3上面用windump来捕捉局域网终结者所发出的ARP欺骗包,捕获的数据包内容如下: C:>windump -X arp host 192.168.0.1 windump: listening on DeviceNPF_{3B4C19BE-6A7E-4A20-9518-F7CA659886F3} 14:51:23.520119 arp who-has 192.168.0.1*** tell 192.168.0.1 0x0000 0001 0800 0604 0001 0006 6989 adc6 c0a8..i 0x0010 0001 0000 0000 0000 c0a8 00a4 2020 2020 0x0020 2020 2020 2020 2020 2020 2020 2020 14:51:49.883520 arp who-has 192.168.0.210 tell 192.168.0.1 0x0000 0001 0800 0604 0001 0006 6989 adc6 c0a8..i 0x0010 0001 0000 0000 0000 c0a8 00d2 2020 2020 0x0020 2020 2020 2020 2020 2020 2020 2020 14:52:03.881930 arp who-has 192.168.0.86 tell 192.168.0.1 0x0000 0001 0800 0604 0001 0006 6989 adc6 c0a8..i 0x0010 0001 0000 0000 0000 c0a8 0056 2020 2020..V 0x0020 2020 2020 2020 2020 2020 2020 2020 14:52:22.887181 arp who-has 192.168.0.193 tell 192.168.0.1 0x0000 0001 0800 0604 0001 0006 6989 adc6 c0a8..i 0x0010 0001 0000 0000 0000 c0a8 00c1 2020 2020 0x0020 2020 2020 2020 2020 2020 2020 2020 14:52:39.897678 arp who-has 192.168.0.190 tell 192.168.0.1 0x0000 0001 0800 0604 0001 0006 6989 adc6 c0a8..i 0x0010 0001 0000 0000 0000 c0a8 00be 2020 2020 0x0020 2020 2020 2020 2020 2020 2020 2020 这是***者192.168.0.9以192.168.0.1的名义发起的一次ARP欺骗,可以看出,***者发送了一系列的ARP请求包,表面上像是网关192.168.0.1在网络中查寻各个主机的MAC地址,而实际上是***者通过发送广播包告诉各个主机:192.168.0.1的MAC地址是“0006 6989 adc6”。这样,当各主机收到广播包后,就会用伪造的这个MAC地址来更换原先的ARP缓存表,此时用“arp -a”命令查看时得到的就是这个伪造的MAC地址。 当我们停止局域网终结者的***,清空本地主机上的ARP缓存,等网络恢复正常后再用“arp -a”命令查看时,网关的真实MAC地址却是“00-90-0b-01-d6-fe”: C:>ARP -A Interface: 192.168.0.3 --- 0x10003 Internet Address Physical Address Type 192.168.0.1 00-90-0b-01-d6-fe dynamic 由此可见,局域网终结者是通过不断地发送一个ARP请求包来阻断各个主机和网关之间的连接,同采用发送ARP应答包方式的软件相比,局域网终结者的隐蔽性要更强一些。 在接下来的实验中,笔者还发现局域网终结者所伪造的MAC地址是随机生成的,每次都不一样,这在一定程度上干扰了网络管理员们的视线。不过这也无妨,任它千变万化,只要我们部署好一个合理的网络管理系统,狐狸的尾巴终究还是会露出来的。