zoukankan      html  css  js  c++  java
  • ARP病毒的分析与防治思路

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://fendou929.blog.51cto.com/3021076/1152469

      先来看看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地址的数据包。)
    最 近,我单位碰到一个非常奇怪的问题,一台P4品牌电脑,内置英特尔网卡,一直以来用得挺好,浏览互联网,内网的通信都很正常。突然有一天,发现这台计算机 在浏览互联网时时通时断,ping互联网上的地址时,也是通一下,断一下,但ping内网时什么问题也没有,和内网的通信也非常正常,就是和互联网通信时 有这种现象,非常令人费解。这台电脑的IP地址为192.168.24.55,防火墙的 IP地址为192.168.24.7。 

    检查物理链路 
    我 单位所有访问互联网的电脑都是通过Netscreen NS25防火墙来连接的,如果说是防火墙的问题,而其他的电脑访问互联网都挺正常,没有时通时断的现象。根据这台电脑ping的现象来看,问题似乎应该在 下三层,而时通时断的现象好像是典型的物理层的问题,那么首先开始检查链路。 
    这 台电脑是接在一台Cisco三层交换机的某一个端口上,防火墙也是接在这台三层交换机上,在三层交换机上启用了路由,配置上肯定没有问题。先检查电脑到交 换机的网线,如果说这根网线有问题,那么这台电脑与内网的通信也应该有问题,通过对这根网线的测试证实没有问题。防火墙到交换机的跳线就更应该没有问题 了,因为其他的电脑都没有问题。由此可以判断链路是没有问题的,网卡会有问题吗?肯定也不会,因为它跟内网的通信是正常的,所以网卡肯定也没有问题。那么 就可以排除物理层的问题了。 

    模拟数据通信 
    再看网络层,这台电脑能够访问互联网,但并不是完全不行,只不过有丢包而已,似乎网络层也不应该有问题,那么所有问题似乎就集中在数据链路层了。数据链路层的问题会是哪里呢?思考了几天,毫无头绪,最后只好仔细的想一想网络通信的过程,看能不能找到问题。 
    假 设这台电脑有一个数据包需要发送到互联网,那么首先它会检查目的地址与本机地址是否是在一个网络中,如果不在一个网络中,就会将数据包发送给默认网关,本 案例中目的IP为互联网地址,所以肯定不在一个网络中,所以数据包会发送给默认网关。在这里默认网关为那台Cisco三层交换机,IP地址为 192.168.24.10。这时192.168.24.55这台电脑会检查本机的ARP表,查找192.168.24.10所对应的MAC地址,如果在 ARP表中没有发现相应的ARP表项,它就会发送一个ARP请求包,将它发送给网络中的所有设备来获得192.168.24.10的MAC地址。由于 ARP请求包是以广播方式发送的,网络中的所有设备都会接收到这个包,然后传送给网络层检验。 
    当 Cisco三层交换机接收到这个ARP请求时,就会检查本机的IP地址和ARP请求包中的目的IP地址是否相同,如果相同,交换机就会做出ARP应答,将 它的MAC地址发送给源,也就是192.168.24.55这台电脑。这台电脑收到ARP应答包后,就会将交换机的IP地址192.168.24.10和 MAC地址写入ARP表,然后将交换机的MAC地址作为目的MAC地址封装到数据包中,并将数据包发送到交换机。交换机在收到数据包后,就会检查目的IP 是否在本网段中,发现不在本网段中,就会查找路由表,看看有没有到目的IP的路由条目,如果没有,就会将数据包发送给默认路由,在本案例中这台交换机的默 认路由是那台IP为192.168.24.7的防火墙。所以交换机就会发送一个ARP广播,以获得防火墙的MAC地址。防火墙做出ARP应答后,交换机就 会将防火墙的MAC地址作为目的MAC地址封装到数据包中,数据包就会发送到防火墙,然后防火墙就会又重复上述过程,将数据包发送给互联网上的目的地址。 这一切过程都是正常的,没有什么问题。在电脑和交换机的ARP表中都能找到相应的ARP记录,用tracert命令跟踪路由也是正常的,那问题究竟在什么 地方呢?看来还得继续分析。 

    过滤ARP表 
    在 数据包到达了互联网上的目的地址之后,响应的数据包要返回到这台电脑,那么它也应该重复前面的过程。返回数据包先到达防火墙,在防火墙的ARP表中寻找目 的IP地址所对应的MAC地址,如果没有,就会发送ARP请求,得到目的电脑的MAC地址,将电脑的IP地址和MAC地址写入防火墙的ARP表,封装后发 送给这台电脑。这一切看起来都是正常的,但为什么会出现时通时断的现象呢?由这台电脑在内网都是正常的现象来判断,在三层交换机上应该是没有问题的,只是 在访问互联网时才出现问题,最后决定从防火墙上开始检查。 
    Telnet 上防火墙,检查防火墙配置,一切正常;检查端口,一切正常;检查路由表,也是一切正常。疑惑中,似乎不知该从哪里下手了。突然间,想起来为了防止内网用户 盗用IP地址上网,在防火墙上做了IP地址和MAC地址的绑定的!对,检查检查ARP表。于是输入命令:get arp,显示一大串ARP表的信息,竟然全部是IP地址和MAC地址的静态绑定的信息,仅仅只有一条动态的,那是防火墙的下一跳的IP地址和下一跳的 MAC地址的信息,就是没有192.168.24.55的ARP表项,难道是……ARP表的问题?似乎看到了一丝希望! 
    于 是决定先清除几个静态绑定的ARP表项试试,先用unset arp命令一连清除了6条静态绑定的ARP表项,然后在那台电脑上ping互联网的地址,居然不丢包了!?困扰我几天的问题难道就这样解决了吗?我简直有 点不敢相信,又让我的同事在这台电脑上面测试一下,登录QQ,浏览网页,收发邮件……,居然一切正常,再也没有原来时通时断的现象了!再Telnet到防 火墙上,get arp一看,192.168.24.55那台电脑的ARP表项赫然在目。看来问题真的解决了!高兴之余坐下来再好好的想一想原因吧。 

    故障溯源 
    这 台Netscreen NS 25的防火墙最多支持128个ARP表项,如果不进行静态绑定,ARP表项会不断地进行更新,超时的自动会删掉,所以不会出现ARP表项被占满的情况。而 如果是静态绑定,那么它永远就不会被清除,永远会占据一个ARP表项,留给动态使用的ARP表项空间就会越来越少,直到全部占满,导致我所碰到的情况。那 么既然如此,有朋友会问了,既然都占满了,其他的电脑就会完全不通,为什么会出现时通时断的现象呢?于是我将ARP表项数了一下,静态绑定的刚好达到 127个,剩下一个给防火墙的下一跳的地址占用了,注意这个是动态的,当它的更新时间到了之后,就被删掉了,那台电脑就占用了这个表项,于是网络就通了, 因为还有其它的电脑在不断地访问互联网,所以192.168.24.55的ARP表项一到达更新时间马上就会被防火墙的下一跳的地址所占用,这时网络就不 通了。其实在这时,我单位的所有机器在访问互联网时都会出现时通时断的现象,只不过防火墙的下一跳的地址占用ARP表项的时间长,互联网中断的时间在大家 能够忍受的范围内,都没有发觉罢了。因为防火墙的下一跳的地址占用ARP表项的时间长,192.168.24.55的ARP表项写不进ARP表,产生超 时,所以它不通的时间就长一些,就出现时通时断的现象了。

    1、 清空ARP缓存:大家可能都曾经有过使用ARP的指令法解决过ARP欺骗问题,该方法是针对ARP欺骗原理进行解决的。一般来说ARP欺骗都是通过发送虚 假的MAC地址与IP地址的对应ARP数据包来迷惑网络设备,用虚假的或错误的MAC地址与IP地址对应关系取代正确的对应关系。若是一些初级的ARP欺 骗,可以通过ARP的指令来清空本机的ARP缓存对应关系,让网络设备从网络中重新获得正确的对应关系,具体解决过程如下: 
    第一步:通过点击桌面上任务栏的“开始”->“运行”,然后输入cmd后回车,进入cmd(黑色背景)命令行模式; 
    第二步:在命令行模式下输入arp -a命令来查看当前本机储存在本地系统ARP缓存中IP和MAC对应关系的信息; 
    第 三步:使用arp -d命令,将储存在本机系统中的ARP缓存信息清空,这样错误的ARP缓存信息就被删除了,本机将重新从网络中获得正确的ARP信息,达到局域网机器间互 访和正常上网的目的。如果是遇到使用ARP欺骗工具来进行攻击的情况,使用上述的方法完全可以解决。但如果是感染ARP欺骗病毒,病毒每隔一段时间自动发 送ARP欺骗数据包,这时使用清空ARP缓存的方法将无能为力了。下面将接收另外一种,可以解决感染ARP欺骗病毒的方法。 
    2、指定ARP对应关系:其实该方法就是强制指定ARP对应关系。由于绝大部分ARP欺骗病毒都是针对网关MAC地址进行攻击的,使本机上ARP缓存中存储的网关设备的信息出现紊乱,这样当机器要上网发送数据包给网关时就会因为地址错误而失败,造成计算机无法上网。 
    第 一步:我们假设网关地址的MAC信息为00-14-78-a7-77-5c,对应的IP地址为192.168.2.1。指定ARP对应关系就是指这些地 址。在感染了病毒的机器上,点击桌面->任务栏的“开始”->“运行”,输入cmd后回车,进入cmd命令行模式; 
    第二步:使用arp -s命令来添加一条ARP地址对应关系, 例如arp -s 192.168.2.1 00-14-78-a7-77-5c命令。这样就将网关地址的IP与正确的MAC地址绑定好了,本机网络连接将恢复正常了; 
    第 三步:因为每次重新启动计算机的时候,ARP缓存信息都会被全部清除。所以我们应该把这个ARP静态地址添加指令写到一个批处理文件(例如:bat)中, 然后将这个文件放到系统的启动项中。当程序随系统的启动而加载的话,就可以免除因为ARP静态映射信息丢失的困扰了。 
    3、添加路由信息应对ARP欺骗: 
    一 般的ARP欺骗都是针对网关的,那么我们是否可以通过给本机添加路由来解决此问题呢。只要添加了路由,那么上网时都通过此路由出去即可,自然也不会被 ARP欺骗数据包干扰了。第一步:先通过点击桌面上任务栏的“开始”->“运行”,然后输入cmd后回车,进入cmd(黑色背景)命令行模式; 
    第二步:手动添加路由,详细的命令如下:删除默认的路由: route delete 0.0.0.0;添加路由: 
    route add -p 0.0.0.0 mask 0.0.0.0 192.168.1.254 metric 1;确认修改: 
    route change此方法对网关固定的情况比较适合,如果将来更改了网关,那么就需要更改所有的客户端的路由配置了。 
    4、安装杀毒软件: 
    安装杀毒软件并及时升级,另外建议有条件的企业可以使用网络版的防病毒软件。
    如何能够快速检测定位出局域网中的ARP病毒电脑? 
    面 对着局域网中成百台电脑,一个一个地检测显然不是好办法。其实我们只要利用ARP病毒的基本原理:发送伪造的ARP欺骗广播,中毒电脑自身伪装成网关的特 性,就可以快速锁定中毒电脑。可以设想用程序来实现以下功能:在网络正常的时候,牢牢记住正确网关的IP地址和MAC地址,并且实时监控着来自全网的 ARP数据包,当发现有某个ARP数据包广播,其IP地址是正确网关的IP地址,但是其MAC地址竟然是其它电脑的MAC地址的时候,这时,无疑是发生了 ARP欺骗。对此可疑MAC地址报警,在根据网络正常时候的IP-MAC地址对照表查询该电脑,定位出其IP地址,这样就定位出中毒电脑了。下面详细说一 下如何利用命令行方式检测ARP中毒电脑的方法。 
    命令行法 
    这 种方法比较简便,不利用第三方工具,利用系统自带的ARP命令即可完成。当局域网中发生ARP欺骗的时候,ARP病毒电脑会向全网不停地发送ARP欺骗广 播,这时局域网中的其它电脑就会动态更新自身的ARP缓存表,将网关的MAC地址记录成ARP病毒电脑的MAC地址,这时候我们只要在其它受影响的电脑中 查询一下当前网关的MAC地址,就知道中毒电脑的MAC地址了,查询命令为 ARP -a,需要在cmd命令提示行下输入。输入后的返回信息如下: 
    Internet Address Physical Address Type 
    192.168.0.1 00-50-56-e6-49-56 dynamic 

    这 时,由于这个电脑的ARP表是错误的记录,因此,该MAC地址不是真正网关的MAC地址,而是中毒电脑的MAC地址!这时,再根据网络正常时,全网的IP —MAC地址对照表,查找中毒电脑的IP地址就可以了。由此可见,在网络正常的时候,保存一个全网电脑的IP—MAC地址对照表是多么的重要。可以使用 nbtscan工具扫描全网段的IP地址。

    本文出自 “fendou929” 博客,请务必保留此出处http://fendou929.blog.51cto.com/3021076/1152469

  • 相关阅读:
    5. 添加后台管理页面
    4. 整合MyBatis
    3. 添加多个控制器
    2. 引入springmvc
    1. 开篇-springboot环境搭建
    去除angularjs路由的显眼的#号
    EasyUI DataGrid 分页实现示例
    等待对话框实现
    使用Struts2搭建登录注册示例
    观察者模式
  • 原文地址:https://www.cnblogs.com/UnGeek/p/2962347.html
Copyright © 2011-2022 走看看