热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

局域网中的ARP重定向攻击及防御措施

摘要:地址转换协议(ARP)如果被恶意利用,会对局域网产生严重威胁。本文介绍了ARP在TCPIP协议中的地位和作用,描述了它的工作原理,详细分析了它的几个主要特点,然后通过一个生动的实例介绍

摘 要:地址转换协议(ARP)如果被恶意利用,会对局域网产生严重威胁。本文介绍了ARP在TCP/IP协议中的地位和作用,描述了它的工作原理,详细分析了它的几个主要特点,然后通过一个生动的实例介绍了黑客如何利用ARP协议的特点来进行ARP重定向,劫持目标主机与其它主机的会话,通过伪造会话信息实现攻击目的。最后,提出了几种防御ARP欺骗的解决方案并分析了每种方案的利弊及应用场合。
关键词:ARP;ARP欺骗;防御

    计算机网络已经深入到社会生产、生活的每一个领域,人们正像离不开电一样离不开网络。勿庸置疑,TCP/IP已经成为网络体系结构“事实上的国际标准”。它的正式名称是TCP/IP互联网协议族(TCP/IP Internet Protocol Suite),一般称为TCP/IP(取名于它的两个主要标准)。地址解析协议ARP(Address Resolution Protocol)是TCP/IP协议族中的底层协议,用它来完成IP地址到硬件地址的转换。ARP由于其本身的特点,如果被恶意利用,就用对局域网产生严重的危害,我们必须予以足够的重视。

1.ARP在TCP/IP中的位置及作用
    从图中可以看出,ARP位于IP层的底部,这是因为IP经常要用到ARP。IP(Internet Protocol)是网际协议,使用它可以屏蔽网络底层的细节,实现不同物理网络的互联,但IP地址本身是不能直接用来进行通信的,它只是主机在抽象的网际层中的地址。主机中网际层的数据只有封装到数据链路层MAC帧中才能发送到实际的网络,这就需要IP地址到MAC地址(硬件地址)的转换。相反,网际层的数据到达一个网段后,只有得到IP地址对应的MAC地址,才能将数据交付给目的主机。ARP就是用来实现IP地址到MAC地址的转换的。

2.ARP的工作原理及特点
2.1 原理
    注:网络接口卡(网卡)的硬件地址一般为6个字节,为简便起见,本文一律用2个字节表示硬件地址
    如图二所示,如果主机A的IP地址为192.168.0.6,想要发送报文给IP地址为192.168.0.8的主机。IP报文必须由MAC层封装成数据帧才能发送,但此时并不知道与IP地址192.168.0.8对应的硬件地址是多少,所以主机A以广播的形式向网络发送ARP请求。请求报文中包含自己的IP地址及硬件地址,以及目标IP地址。主机C收到ARP请求后,发现目标IP地址是自己,于是向主机A发送ARP应答报文,告知主机A自己的硬件地址为CC-CC。

2.2 特点:
2.2.1动态绑定

    由于网络中经常会有主机的加入和撤出,而且主机会因硬件故障等原因更换网络接口卡,从而改变硬件地址,所以IP地址到硬件地址的映射不是一成不变的。地址转换协议ARP提供了一种既相当高效又易于维护的机制,实现IP地址到硬件地址的动态绑定。
2.2.2使用高速缓存
    主机并不是每发一个数据包都要先广播ARP请求。每个主机维护着一个高速缓存,其中存放着一张ARP表,表中每一个条目就是一个IP地址到硬件地址的对应。当主机发送ARP请求并收到应答后,就在ARP表中保存这个对应关系。当其它主机收到ARP请求广播时,也将请求报文中发送方的IP地址到硬件地址的对应关系保存到各自的ARP高速缓存中。这样,每一个主机在发送报文时,先从高速缓存中查找目标硬件地址,如果能查到,就不用再发送ARP请求广播了。使用高速缓存不但减少了网络中的通信量,降低了网络负载,而且提高了效率。
2.2.3 ARP高速缓存超时
    ARP缓存中的每一个条目都会超时,否则就不是“动态绑定”了。ARP协议会为表中每一个条目设置一个计时器,从该条目创建之时开始计时,计时器超时后,会删除相应的条目。超时时间因不同的操作系统而有所不同,典型的时间为20分钟。
2.2.4 ARP请求与ARP响应无对应关系
    ARP的这个特点是说,主机在没有收到ARP请求时也可以发送ARP应答;而且,主机在没有发送ARP请求时,也会“愉快地”接受ARP应答。也就是说,不管主机有没有发送请求,收到ARP应答后都要根据应答包中的IP地址到硬件地址的对应信息刷新ARP缓存。
2.2.5 ARP协议用于局域网
    因为只有MAC层的数据帧才用到硬件地址,而MAC层的数据帧是点对点传输,不经过中间节点的,所以ARP协议只用于局域网内,一般是同一网段内。路由器和网桥都不转发ARP报文。

3.基于ARP欺骗(ARP重定向)的攻击
    由于ARP本身的特点,攻击者很容易实施ARP欺骗。所谓ARP欺骗,又叫ARP重定向,就是向目标主机发送ARP报文(一般是应答报文),其中含有攻击者伪造的IP地址和硬件地址的对应信息。目标主机收到该报文后,会用报文中伪造的信息刷新ARP高速缓存,如果攻击者定时向目标主机发送该报文,而且时间间隔比ARP缓存的超时间隔要小的话,目标主机就会一直维持着一张含有错误信息的ARP缓存表。
    由于网际协议IP要依赖地址转换协议ARP来解析目标主机硬件地址,所以利用ARP欺骗可实现多种攻击。下面演示一个利用ARP欺骗实施攻击的例子。我们的做法是劫持目标主机的HTTP请求,然后发送含有恶意代码的HTTP应答,达到攻击目标主机的目的。
    如图三所示,主机A的IP地址为192.168.0.6,硬件地址为AA-AA;主机B的IP地址为192.168.0.8,硬件地址为BB-BB;网关C的IP地址为192.168.0.1,硬件地址为CC-CC。假设B为攻击者,A为目标主机。B定时向A和C发送伪造的ARP应答报文,在发给A的ARP应答报文中,含有硬件地址BB-BB和IP地址 192.168.0.1的绑定信息;在发给C的ARP应答报文中,含有硬件地址BB-BB和IP地址192.168.0.6的绑定信息。这样,当主机A和网关C收到伪造的ARP应答报文时,会根据报文中的绑定信息刷新ARP高速缓存,主机A以为主机B就是网关,而网关以为主机B就是主机A。于是,主机B和网关之间的通信就对被攻击者A劫持。
    如果主机B向主机A和网关C发送虚假ARP应答报文的时间间隔小于ARP缓存的超时时间,则主机A和网关C不会相互发送ARP请求,在它们的ARP缓存中,各自维持着虚假的绑定信息。
    如果主机A要访问远程主机(Web服务器)
www.abc.com上的网页,它首先会通过网关与www.abc.com进行三步握手建立TCP连接。由于主机A以为主机B就是网关,所以它会把握手信息发送给主机B。主机B收到主机A发来的握手信息后,再伪造握手信息发送给主机A。主机A收到握手信息后,以为与远程Web服务器www.abc.com成功建立了连接,于是发送HTTP请求。主机B收到HTTP请求后,发送含有恶意代码的网页脚本给主机A。然后,主机B向主机A和网关C发送包含正确绑定信息的ARP响应报文,使主机A能正常地访问外部网络。至此,攻击任务完成。

4.ARP欺骗的防御措施
4.1 使用静态的IP地址至硬件地址的对应表
    最简单的办法,是将IP地址和硬件地址进行静态绑定。在windows和linux操作系统下,可使用如下命令:
                  arp –s 192.168.0.1 CC-CC(注:有些系统只允许6个字节的硬件地址)
    使用此命令静态绑定IP地址192.168.0.1和硬件地址CC-CC后,这条绑定信息在ARP缓存表中就相对固定,没有超时设置。在linux和windows XP操作系统下,静态绑定的条目不会根据收到的ARP报文进行动态刷新。但是,在windows 9X/NT/2000系统下,此命令并不能真正实现“静态”绑定,只是在ARP缓存中设置了一条不会超时的地址对应关系,这条对应关系仍然会根据收到的ARP报文而动态改变。
    另外,在linux系统下,还可以从文件中加载静态的ARP对应表,命令如下:
arp  –f 
filename文件格式如下:
……
192.168.0.1  CC-CC-CC-CC-CC-CC
192.168.0.2  AA-AA-AA-AA-AA-AA
……
    从文件中加载和使用arp –s命令的效果是一样的。
    注意,ARP绑定信息存在于高速缓存中,所以系统重新启动时会失效。静态的ARP对应表在每次系统重启时都需要重新从文件中加载或使用命令进行绑定。静态绑定有违ARP动态解析和更新地址对应关系的原则,而且增加了管理网络的成本,不太适用于经常变动的网络环境和大规模的网络,但是对于小规模的安全网络来说,还是有效而且可行的。
4.2 禁止使用ARP协议
    在linux操作系统下,可以使用如下命令来禁止使用ARP协议:
               ifconfig    -arp
    这样,interface所指的网卡就不会发送和接受ARP报文。
    禁止使用ARP的前提是使用静态ARP对应表。表中没有的主机,将不能进行通信。如前所述,这个办法同样只适用于小规模的安全网络。
4.3 使用ARP服务器
    思路是,在本地网络中设立ARP服务器,服务器中保存有本地网络中所有主机的IP地址和硬件地址的对应关系。当网络中的主机需要解析地址时,就向ARP服务器发送ARP请求,而不是向整个网络中广播ARP请求。服务器收到主机发送来的ARP请求后,就把目标主机的IP地址和硬件地址的对应关系发送给请求者。网络中的所有主机,只接受ARP服务器发送来的ARP报文。这样,只需保证服务器的安全,就可以避免本地网络中的ARP欺骗。
    使用ARP服务器后,主机的一种更为理想的选择是使用相对固定的ARP对应表。当主机启动时,从ARP服务器拷贝一份ARP对应表,表中的条目不设置超时值,只根据从ARP服务器收到的ARP报文更新。当ARP服务器中的条目有所更新时,就把变化的部分向所有主机广播。这样,当主机进行通信时,不必先向ARP服务器发送ARP请求,所以提高了工作效率,而且降低了ARP服务器和网络的负载。
使用ARP服务器不会增加硬件成本,只需在一台比较有安全保障的主机上运行ARP服务器软件即可。

5.结语
    局域网中的ARP欺骗很让人头疼。只要你发送和接受ARP报文,就可能会受到虚假信息的欺骗。不使用ARP协议和静态ARP表,你就无法得到其它主机的IP地址和硬件地址的对应关系,别人也同样不知道你的,从而你不能和任何人通信,这无异于自己从网络中断开。使用静态ARP表有悖于ARP协议动态且易于维护的精神。使用ARP服务器目前还很难实现,因为这涉及到对ARP协议的修改。
    尽管有一定困难,但我们根据ARP的工作原理,以及我们的网络及主机系统的具体情况,采取一些相应的防护措施来抵御ARP欺骗,还是可行且有效的。

 

推荐阅读
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
author-avatar
大小姐_T_841
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有