一次 ARP 故障排查
1. 网络现象
最近网络中有主机频繁断线,刚刚开始还比较正常,但是一段时间后就出现断线情况,有时 很快恢复,但是有时要长达好几分钟啊,这样对我影响太大了。最初怀疑是否是物理上的 错误,总之从最容易下手的东西开始检查,检查完毕后没有发现异常!突然想到目前网上比
较流行的ARP攻击,同时360提示在短短的几分钟里遭受了2000多次的ARP攻击。ARP攻击出现的故障情况与此非常之相似!对于ARP攻击,一般常规办法 是很难找出和判断的,需要抓包分析。
2. 原理知识
在解决问题之前,我们先了解下ARP的相关原理知识。 ARP原理
首先,每台主机都会在自己的 ARP 缓冲区 (ARP Cache)中建立一个 ARP 列表,以
表示 IP 地址和 MAC 地址的对应关系。
当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP 列表中是
否存在该 IP 地址对应的 MAC 地址,如果有﹐就直接将数据包发送到这个 MAC 地址; 如果没有,就向本地网段发起一个 ARP 请求的广播包,查询此目的主机对应的 MAC 地址。此 ARP 请求数据包里包括源主机的 IP 地址、硬件地址、以及目的主机的 IP 地址。
网络中所有的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 是否和自己的 IP 地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的 MAC
地址和 IP 地址添加到自己的 ARP 列表中,如果 ARP 表中已经存在该 IP 的信息,则 将其覆盖,然后给源主机发送一个 ARP 响应数据包,告诉对方自己是它需要查找 的 MAC 地址;
源主机收到这个 ARP 响应数据包后,将得到的目的主机的 IP 地址和 MAC 地址添加 到自己的 ARP 列表中,并利用此信息开始数据的传输。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。
ARP 欺骗原理
我们先模拟一个环境:
网关:192.168.1.1 MAC 地址:00:11:22:33:44:55
欺骗主机 A:192.168.1.100 MAC 地址:00:11:22:33:44:66
被欺骗主机 B:192.168.1.50 MAC 地址:00:11:欺骗主机 A 不停的发送 ARP22:33:44:77 应答包给网关,告诉网关他是 192.168.1.50 主机 B,这样
网关就相信欺骗主机,并且在网关的 ARP 缓存表里就有 192.168.1.50 对应的 MAC 就是
欺骗主机 A 的 MAC 地址 00:11:22:33:44:66,网关真正发给主机 B 的流量就转发给主机
A;另外主机 A 同时不停的向主机 B 发送 ARP 请求,主机 B 相信主机 A 为网关,在主机 B 的缓存表里有一条记录为 192.168.1.1 对应 00:11:22:33:44:66,这样主机 B 真正发
送给网关的数据流量就会转发到主机 A;等于说主机 A 和网关之间的通讯就经过了主机 A,主机 A 作为了一个中间人在彼此之间进行转发,这就是 ARP 欺骗。
3. 解决方法
看来只有抓包了,首先,我将交换机做好端口镜像设置,然后把安装有科来网络分析系统的 电脑接入镜像端口,抓取网络的所有数据进行分析。通过几个视图我得出了分析结果: 诊断视图提示有太多“ARP无请求应答”,如图1。
(图1 诊断提示)
在诊断中,我发现几乎都是00:20:ED:AA:0D:04发起的大量ARP应答。而且在参考信息中提示
说可能存在ARP欺骗。看来我的方向是走对了,但是为了进一步确定,得结合其他内容信息。 查看协议视图了解ARP协议的详细情况,如图2所示。
(图2 协议视图)
从图2中所显示的协议分布来看,ARP Response和ARP Request相差比例太大了,很不正常啊。
接下来,再看看数据包的详细情况,如下图3。
(图3 ARP数据包)
我从图3中的数据包信息已经看出问题了,00:20:ED:AA:0D:04在欺骗网络中192.168.17.0
这个网段的主机,应该是在告诉大家它是网关吧,想充当中间人的身份吧,被欺骗主机的通 讯流量都跑到他那边“被审核”了。
4. 解决办法
对于解决ARP攻击很多同学都说用防火墙,其实根据我的实践证明各种打着应对ARP攻击的防火墙实际上都是没用什么实质作用的。面对几秒钟所产生的数百次甚至是上千次的攻击产生的数据包对带宽的占用根本没法解决 现在基本确定为 ARP 欺骗攻击,现在我需要核查 MAC 地址的主机 00:20:ED:AA:0D:04 是哪台主机对照主机的 MAC 地址和主机对应表,终于给找出真凶主
机了。可能上面中了 ARP 病毒,立即断网杀毒。网络正常了,呜呼!整个世界又安静了!
5. 总结(故障原理)
我们来回顾一下上面 ARP 攻击过程。MAC 地址为 00:20:ED:AA:0D:04 的主机,扫描攻击
192.168.17.0 这个网段的所有主机,并告之它就是网关,被欺骗主机的数据都发送到 MAC 地址为 00:20:ED:AA:0D:04 的主机上去了,但是从我抓取的数据包中,MAC 为
00:20:ED:AA:0D:04 的主机并没有欺骗真正的网关,所以我们的网络会出现断网现象。
6.补充内容
对于 ARP 攻击的故障,我们还是可以防范的 ,以下三种是常见的方法:
可在 MS-DOS 窗口下运行以下命令, 手工绑定网关 IP 和网关 MAC静态绑定,就可
以尽可能的减少攻击了。对于win7和win8中使用ARP –s命令是行不同的,系统会提示错误,因为在win7及其更高版本的系统中必须使用更高级的命令,那就是netsh需要说明的是,手工绑定有两种方式,一种是在计算机重起后就会失效,另一种是只要不使用重置命令就永远能使用的 第一种:
netsh interface ipv4 set neighbors 11 \"192.168.1.1\" \"00-19-e0-c0-6f-0a\" store=active 最老的办法:) 上面的“store=active”表示[激活]---当前有效,重启后还原设置前。 第二种:
netsh interface ipv4 set neighbors 11 \"192.168.1.1\" \"00-19-E0-C0-6F-0A\"store=persistent 平时做好每台主机的 MAC 地址记录,出现状况的时候,可以利用 MAC 地址扫描工具扫描 上面的“store=persistent”表示[永久激活]---重启以后仍然保持不变。 出当前网络中主机的 MAC 地址对应情况,参照之前做好的记录,也可以找出问题主机。 重置命令是:netsh interface ipv4 reset 注意:
ARP –S 11是网卡的接口序号,需要运行前先查下。 先要在
WIN7系统盘下的WINDOWS\\SYSTEM32下找到CMD.EXE命令右键以管理员身份
然后输入netsh interface ipv4 show neighbors 查看一下你的邻居缓存项的属性 本人运行结果如下
运行
其中11就是网卡序号下面就可以检查了
按照上述的操作就可以完全有效地解决了ARP攻击了,比起什么之类的防火墙好用多了。