1. ARP简介
地址解析协议(英语:Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,实现从 IP 地址到 MAC 地址的映射。
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。
而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。
2. ARP交互流程
假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:
- 主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
- 如果主机A在ARP表中找不到对应的MAC地址,然后以广播方式发送一个ARP请求报文。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
- 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
- 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
3. ARP帧结构
- 硬件类型:如以太网(0x0001)、分组无线网。
- 协议类型:如网际协议(IP)(0x0800)、IPv6(0x86DD)。
- 硬件地址长度:每种硬件地址的字节长度,一般为6(以太网)。
- 协议地址长度:每种协议地址的字节长度,一般为4(IPv4)。
- 操作码:1为ARP请求,2为ARP应答,3为RARP请求,4为RARP应答。
- 源硬件地址:n个字节,n由硬件地址长度得到,一般为发送方MAC地址。
- 源协议地址:m个字节,m由协议地址长度得到,一般为发送方IP地址。
- 目标硬件地址:n个字节,n由硬件地址长度得到,一般为目标MAC地址。
- 目标协议地址:m个字节,m由协议地址长度得到,一般为目标IP地址。
4. ARP Proxy
对于没有配置缺省网关的计算机要和不同网段的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答。代理ARP就是将一个主机作为对另一个主机ARP进行应答。
好处:不影响其他router的路由表的情况下在网络上添加一个新的router,使得子网对该主机来说变得更透明化。
坏处:带来巨大的风险,除了ARP欺骗,和某个网段内的ARP增加,最重要的就是无法对网络拓扑进行网络概括。
4.1 ARP与ARP Proxy
当电脑没有网关(采用代理ARP)时:”跨网段访问谁,就问谁的MAC”;当电脑有网关(采用正常ARP)时:”跨网段访问谁,都问网关的MAC”。
无论哪种ARP,跨网段通信时,发送方请求得到的目标MAC地址都是网关MAC。
当正常ARP第一次获取网关MAC之后,后续的通信都不再需要重新进行ARP请求;而代理ARP每次访问新的外网地址,都需要再次请求。
4.2 ARP Proxy的应用
- 路由器在需要查询远程网段里的MAC地址时,与其相连接的路由器,在收到ARP Request时就会扮演代理ARP的角色。
- 在很多网关设备上,都支持将内网的服务器映射为公网地址对外提供服务,以达到隐藏内部网络的目的
5. 免费ARP
Gratuitous ARP,被翻译为免费ARP也被称为无故ARP,用于检测局域网内的IP地址冲突,在一定程度上能够给用户和网络运维人员提供帮助。相比”免费”这个翻译,”无故”这个词其实会更加好理解:在没有人问自己的情况下,无缘无故自问自答。
免费ARP出现的场景,例如地址修改或变更时、DHCP分发地址时、网关冗余协议交互时(例如HSRP)、TFTP传输数据时。
当电脑检测到自己的IP地址跟其他电脑冲突时,它们会以广播的形式通知对方,以ARP Request或Reply广播形式发送,地址冲突的对端以单播回应,直到地址冲突被修复。另外,当地址冲突出现时,Windows和Mac等图形化操作系统会以弹窗的形式提醒用户,而Linux等非图形化界面则以日志的方式进行记录或者进行告警。
6. ARP攻击
6.1 攻击原理
- ARP缓存表基于”后到优先“原则,IP与MAC的映射信息能被覆盖;
- ARP攻击基于伪造的ARP回应包,黑客通过构造”错位“的IP和MAC映射,覆盖主机的ARP表(也被称为”ARP毒化”),最终截取用户的数据流
一般来说攻击者首先是ARP扫描,发现网段内的主机,然后伪造ARP回应包进行欺骗。
6.2 危害
- 账号窃取(明文的通信协议)
- 流量控制
- 断网攻击
6.3 防范措施
根据攻击原理,有两种解决方案:第一种是保证电脑不接收欺骗包,即从网络设备(如:交换机)上解决,提前识别并丢弃此类ARP包。常见技术是DAI(Dynamic ARP Inspection)动态ARP检测,原理如下两点:
- 交换机记录每个接口对应的IP地址和MAC,即port<->mac<->ip,生成DAI检测表;->->
- 交换机检测每个接口发送过来的ARP回应包,根据DAI表判断是否违规,若违规则丢弃此数据包并对接口进行惩罚。
但简单的交换机不具备动态ARP监测技术。现在的接入交换机基本能被Telnet/SSH/Web管理,更专业的交换机同时支持动态ARP监测(dai)、IP源防护(ipsg)、DHCP侦听(dhcp snooping)、端口安全、AAA、802.1x等局域网安全技术,已经超越了原有二层交换机的定义。
第二种是保证用户接收欺骗包后不相信,如ARP防火墙,有以下两个特点:
- 绑定正确的的IP和MAC映射,收到攻击包时不被欺骗。
- 能够根据网络数据包特征,自动识别局域网存在的ARP扫描和欺骗行为,并做出攻击判断(哪个主机做了攻击,IP和MAC是多少)。
还有ARP双向静态绑定,PC1和PC2通信双方都静态绑定对方的IP和MAC映射,即便收到ARP欺骗包,由于静态绑定的ARP映射条目优先级高于动态学习到的,所以可以保证不被欺骗。缺点是手工操作,配置量大。