关于ARP病毒的分析与防治思路
来源:优易学  2011-12-26 13:37:12   【优易学:中国教育考试门户网】   资料下载   IT书店
  先来看看ARP病毒是怎么回事。
  简单的说就是:这种病毒自身可以伪造一些ARP回应包。这些包的源IP地址一般是重要设备的IP地址,而那个源MAC地址可能是自己的MAC,也可能是一个无用的MAC地址。而目的IP地址和目的MAC地址都是广播地址,这样的话,这个新的ARP条目就会发送到网络中的任何一个设备中。然后,这些设备就会更新自己的ARP缓存,这样一来呢,就达到欺骗的效果了。以后我们的机器在往重要的设备上发送数据的时候,就会先检查自己的ARP缓存啊,确实存在这么一个ARP条目,殊不知已经是被掉包的了。所以呢,我们发送的数据就不会按照我们原来的意愿,到达真正的目的地。
  从上面的这些话当中,我们可以提炼出:中毒后的机器会频繁的自动产生一些假的ARP包,来达到让别的设备更新自己的ARP缓存的目的,以达到欺骗的目的。
  我们可以分下实现这个ARP病毒需要分几个步骤:
  1.机器得自己产生ARP报文。
  2.并且一定要频繁,更新设备ARP缓存的间隔一定要比正常情况下的小,且小的多。
  3.别的设备得接受,并且承认这种频繁来更新的ARP条目。
  知道了它的工作过程,那么我们就从各个步骤进行分析,下对策。
  首先说呢,ARP这个协议本身就不怎么地,本身就是不安全的。就是在没有ARP请求包的情况下,机器也可以发送ARP回应包。这样看来的话,就好像是UDP对应起TCP一样,是属于那种“无连接状态”的。也正是这种协议本身的安全缺陷,才让欺骗这么容易的进行。没事的情况下,设备还具备发送这样的ARP包的能力呢,别说中毒了,那就发送的更狂了,并且发送的还都是一些经过特定修改的。修改ARP回应包的源Ip地址,修改成重要设备的地址。修改了这个IP地址,才可以对这个对应的IP地址的设备进行阻碍,以后发送往这个设备发送的数据都会发送到这个中毒的机器来。也许你会说,中毒的可以发,人家那个正常的设备也可以发啊。是啊,所以为不让其他的设备承认真正的设备发送的ARP包,这个中毒的机器才使得自己拼命的发,一个劲的发,拼命的发。这样的话,让那个真正的设备发送的ARP包没有机会更新其他设备的ARP缓存。如果我们不该找个ARP包的源MAC地址的话,也就是说这个MAC地址是这个中毒的机器的MAC地址,那么以后发送到那个源IP地址的设备的数据都会发送到这个中毒的机器来。如果这个MAC地址是网关的地址的话,那么其他的机器上网的数据不是发送到真正的网关了,而是发送到这个中毒的机器来。如果在这个机器上再安装个分析软件的话,就完全可以知晓网络中的一切信息交流。如果这个MAC地址是个无效的。那么以后发送到那个源IP地址的数据流就会被无奈的丢弃啦。因为在LAN中传输数据用的是MAC啊,。现在每个机器都是知道了那个IP地址的是那个MAC地址,殊不知这个MAC是静心策划的无效MAC。这样一来的话,就会导致发送到那个IP地址的数据全部被丢弃。造成的后果如何就看这个ARP包的源Ip地址是什么设备的IP地址 了。如果是网关的话,那么全网的机器就都上不去网了。如果是一个普通机器的Ip地址呢,那么这个机器就上不去了。我们说的,这种ARP病毒包会频繁的发送,虽然正常的ARP包被接受的几率很小很小了,但是也会有被接受的可能啊,所以,ARP病毒会导致网络中的机器上网断断续续的。厉害了,就完全出现网络断开的现象咯。不知不觉,一个“首先”就分析了1和2两个步骤。那么我们对于上述的这些过程,该如何阻挠呢?细看,这些都是病毒的实质的工作方式。我们不可能更改他们啊。那么我们就想想是否可以阻止这样的数据包进入网络。如果进入不了网络,那就完全么事咯。这个问题就需要我们在机器联网的地方做手脚了。那就是接入层交换机上的端口咯。也就说得让交换机的端口只允许一个MAC地址的数据包通过,并且这个数据包还是的MAC地址还是下面连接的机器的真正的MAC地址。这样一来呢,如果再找个端口上进出其他MAC地址的数据包,这个端口就会采取相应的措施:关闭端口(永久性关闭或者将端口周期性的进入到err-disable状态)、限制(将非匹配MAC地址的数据包全部丢弃掉)、保护(当端口学习的MAC地址数到达了设置在这个端口上可以学习的MAC的最大数量的时候,丢弃后面来的任何不同于先前这些MAC地址的数据包。)
  其实,实现这个功能,CISCO设备的端口安全特性就可以搞定。它是个接口级的命令:
  CORE2(config-if)#switchport port-security ?
  aging Port-security aging commands
  mac-address Secure mac address
  maximum Max secure addresses
  violation Security violation mode
  看到上面的这些参数,我们可以清晰的看到:端口安全特性可以实现在某个特定的access模式接口上设定这个端口中学习到的MAC地址的存活时间,设定允许学习的MAC地址的最大数目,设定只允许某个特定的MAC地址的数据包通过(也就是端口和MAC地址的绑定),设定违背我们设置的这些规则的处理方式(就是上面介绍的关闭端口、限制、保护三种)。在这个命令的下面有5个可以执行的参数,而前4个的实现都是在最后一个实施的基础上的。我们输入命令到这个步骤,然后敲下回车,就说明再这个端口上开启了端口安全的特性,然后再逐步实施以上的那些参数。
  我们再来仔细分析下参数:aging \ mac-address \ maximum
  Mac-address:参数后面的值就是我们想让这个端口允许通信的那个特定的MAC地址。输入这个命令,就算是我们把某个特定的MAC地址和这个端口绑定了。别的机器拿来后,插上网线是不可以上网的。利用这种方法来限制那种虚假的ARP包,工作量就老大了,并且网络中还是有很多移动的用户,运作起来就更加的麻烦。不好不好!不过在这个参数的后面呢,还有一个特性,sticky 特性,即:
  CORE2(config-if)#switchport port-security mac-address ?
  H.H.H 48 bit mac address
  sticky Configure dynamic secure addresses as sticky
  这个特性说的就是:这个端口会记住这个端口中第一个学习到的MAC地址。并且只有这么一个。当然了这个学习到的MAC是动态的,到了一定的生存时间还是会在这个端口的缓存中消失的。至于存在多长的时间,那就看下面的这个参数咯。
  存活时间(aging):这个参数后面的参数值说的就是端口缓存中的MAC表项可以保持多久。
  最大数(maximum):这个参数后面的参数值说的就是这个端口允许学习的MAC地址的最大数量。
  我们分析了,让端口和MAC地址绑在一起不好,太麻烦了。那么使用sticky特性看来还是不错的,比较方面,并且在一定程度上可以解决这个问题。但是还得结合存活时间这个参数。这样一来,就不会让这个MAC频繁的学习、变动了。使用了这个特性后呢,在端口允许学习的MAC地址的最大数量上就是1个了,就是那个最先学习到的MAC地址。那么运用这个特性的时候,最大学习数量这个参数就不需要了。如果我们不使用这个特性,而是通过限制最大学习的MAC地址数和存活时间,也不会太好。比如我们允许最大的是2个(不能太多,越多越危险,只有一个是最安全的。),存活时间设置到最大。因为ARP欺骗包是频繁发送的,所以只要给它一点机会,就会疯狂的发送出去,那么最大的学习数量2个,就成了漏洞了。
  我们前面也提到了,在伪造ARP包的时候,源IP地址和源MAC地址都是可以进行特定的修改的。我们上面提出的这个端口安全的特性,只是针对修改MAC地址的欺骗ARP包。那么对于修改IP地址的ARP欺骗包如何避免呢?我们可以绑定IP地址和MAC地址。这样的话,即使有一个修改了IP的ARP欺骗包,发送的时候,发现自己的IP地址和MAC地址的匹配关系和原来绑定的不一样,所以这个数据包就夭折了。也就进入不了网络了。
  下面我们说说:其他的设备在什么情况下是承认新来的ARP条目的。在我们机器中的ARP缓存,其中的MAC条目的存活时间一般为2—3分钟。并且更新条目的时候,是查看ARP对应关系中的IP地址的。想想也是咯,因为在一个机器的ARP缓存中同时存在俩个ARP地址条目:IP地址相同且MAC地址不相同。这种情况是肯定不存在的嘛。如果真存在的话,那么发向这个IP地址的数据到底该往哪里发送就全乱套了。如果是存在好几个ARP条目:IP地址不相同,MAC地址相同,还是会出现的。这种情况也就是最一般的ARP欺骗了啊~
  当我们机器中的ARP对应条目是静态的时候,那么这个条目就是无法被代替的。也就是说它的存活时间是永久。只有是动态的,才会被新来的那些相应的条目更新掉。对于这种情况,我们有没有一个方法可以让机器不承认新来的这些ARP更新条目呢?弄成静态的就OK 了吧。所以,弄个网关的绑定批处理,放在系统的启动项里,这样就好了。但是对于那种移动性很强的笔记本用户来说就不怎么方便。到一个VLAN中就会绑定原来VLAN中的网关,就会出乱子了。如果我们从目的端来处理这个问题,那么就太逊了!~~因为这种情况下,ARP欺骗包已经在网络中进行逛游了~~~并且,这种数据包,为了最大可能让别人接受它,病毒程序回把这种包的TTL值设置到最大。也就是说这种广播包在网络中逛游的时间会尽量的长。最好的就是在源头搞定它。
  在我们上述介绍的方法中,最简单实行、有效的就是:使用端口安全的sticky 特性+aging参数+IP----MAC地址绑定。
  ARP欺骗一般分为俩种:内网的和外网的。
  内网的:就是发生在LAN内部的。一般的欺骗行为就是欺骗网关,发送一个IP地址是网关和MAC地址是自己的ARP欺骗包。并且别的机器都承认了这点。那么以后发送到网关的数据就会到了这个中毒的机器。如此一来,别的机器上网断断续续,非常的慢,时间长了甚至会断网。这个中毒的机器还是可以上网的,不过也会越来越慢的,因为别的机器发送的数据都得经过这个中毒的家伙联通外部网络。当中设备down掉后,所有的其他的机器都上不去网了。这种情况下的ARP欺骗很容易看出来的。如果网络非常的慢,并且时断时续的,有ARP病毒的特征。那么就可以进入“运行---CMD”,命令:arp –a 。这样一来的话,就会看到网络Ip地址对应的MAC地址,然后你再查查这个MAC地址对应着多少IP地址,如果是很多的话,那么就中招了。解决的办法就是:arp –d ,删除原来的ARP 缓存,并且对正确的网关IP地址和MAC地址进行绑定:arp –s [ip address] [mac-address] 。这种情况的欺骗也是非常容易看出来的。通过arp –a 和arp –s 俩搞定就OK 了。具体的过程是:我们查看上网有问题的机器,进去看看arp –a ,找到了那个网关的ARP条目,查看对应的MAC地址,和真的网关的MAC地址是不一样的,所以肯定是中毒咯。那么我们的解救办法就是删除ARP缓存的条目,然后手动绑定正确网关IP和MAC地址。接下来就是找到那个中毒的机器-----根据那个MAC地址,去中心设备上查看这个地址是从哪个端口上学习到的,然后一级一级的查下去,找到后就让它隔离杀毒去,使用的命令是:show mac-address table | include [H.H.H.H] 。并且根据上面的违背方式的处理方式做出相应的解决,比如把那些关闭了的端口no shut 下。
  刚才有点事情,打断了思路。从这里写吧(和原来的思路的轨道不会差很多哦~~~呵呵、、放心!)。我们看到了ARP欺骗包不是修改Ip地址就是修改MAC地址,或者是同时修改。我们把IP地址和MAC地址绑定了,就可以防止那种修改IP地址的ARP欺骗包。因为你绑定了IP地址后,即使那个机器关机了,他的Ip地址和MAC地址对应关系还是存在和核心设备里的。如果想伪造一个已分配出去的IP地址,就不会成功的,会导致冲突的。我已经尝试过了:绑定一个IP地址,并且将其网线拔掉,然后这个时侯就让别的机器再配置成这样的IP地址(现在先前配置的IP地址的主机已经脱网了,也不会产生冲突咯按说),尝试上网,结果不能联通网络。OK 咯,这就说明我们上面想要阐述的问题了啊!如果是修改MAC地址的那种欺骗包呢,我们就采用在端口上限制某些特定的MAC地址通过或者限制端口学习的MAC地址的最大数量。这个时侯呢,这些MAC地址条目显然是动态的,那么就有可能被ARP欺骗包更新掉。所以我们还得结合MAC条目的存活时间参数,设置的其值尽量的最大。限制端口通过特定的MAC地址,也就是MAC地址和端口绑定,这样不太好,因为有些用户移动性还是很大的。所以还是采用sticky特性吧。
  以上说了这么多这么多的话,聊的都是LAN之内的ARP欺骗。现在还出现了LAN之间的ARP欺骗。比如一个网段的俩个机器10.140.19.2和10.140.19.3之间想进行通信。在路由器的那边有个机器10.140.18.2,这个机器上有ARP病毒。当19.2发送给19.3数据的时候,原本可以很轻松的完成的。但是18.2的病毒就想让他们之间的数据先发送到他这里,然后发送到19.3,或者是发送到他这里就OK 了,就不往下发了。他要是想告诉19.2一个假的ARP包的话,那么那个真正的19.3的机器肯定不能在网络上存在的啊,否则就会产生Ip地址的冲突,那个假的数据包也发送不出去啊。所以第一个问题就是解决掉19.3这个机器,让他down掉。如何down掉呢,别问我了,至少现在我还没研究黑客的东西。假设它over了,那么19.2就会发送广播啊,找原来的19.3啊。正常的情况下,就会在路由器的一边使劲的喊,没人鸟你。如果这个时侯18.2发送给路由器一个特殊的包,让路由器发给19.2发送一个ICMP重定向(主机路由重定向),这个重定向报文的作用就是告诉19.2,如果你想发送数据包到19.3,你得把数据包发送到路由器,然后传输到18.2的MAC才可以。这就是让ARP欺骗和ICMP重定向结合起来了。
  如果没有ICMP重定向这个东西,那么这个LAN之间的欺骗就成不了啊。如果想阻止这种欺骗,那就搞定ICMP重定向呗。一般什么情况下我们会开启设备的这个功能呢?说:一个LAN有俩个口连接着internet。默认的情况下呢,也就是默认路由咯,我们就使用端口1。但是,若默认路由出了问题,那就得使用另外的那个端口进入internet了。但是下面的机器不知道啊,还是把数据都发送到这个端口,这个时侯呢,这个端口就会产生一个ICMP重定向报文,发送给那个发送数据包的主机,以后发送数据的时候,别往我这里发了,从我这里走不是最好的走法,你直接发送到端口2就OK 了。其实仔细想想,这不就是实现了网关的冗余嘛?如果使用了HSRP这种负载均衡,使用的是虚拟的网关地址。那么这样的话呢,这个ICMP重定向就用不到了吧。是啊,当我们开启HSRP或者VRRP的时候,这个功能就自动关闭了。如果没使用这俩个功能,我们也可以手动关闭ICMP重定向(在某个特定的端口下)。
  如果真的是发生了这样的LAN之间的ARP欺骗,我想病毒一定会在路由器中加入一个主机路由。加入的这个路由条目的目的地址就是那个中毒的机器。找到那个IP地址的机器所在,隔离杀毒就好了嘛。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训