ARP(地址解析协议)

1. ARP 概述

地址解析协议,即 ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。 它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。

主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。

网络层使用的是 IP 地址,但在实际网络的链路上传输数据帧时,最终还必须使用该网络的硬件地址。但 IP 地址和下面的网络的硬件地址由于格式不同而不存在简单的映射关系。此外,一个网络上可能会经常会有新主机加入进来,或撤走一些主机。更换网络适配器也会使主机的硬件地址改变。地址解析协议 ARP 解决的方法是:在主机ARP高速缓存中应存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。

注意:ARP是解决同一局域网中主机或者路由器的IP地址和硬件地址的映射问题,在每一台主机中都有一个ARP高速缓存(ARP cache),里面存储本主机所知道本局域网中其他主机的IP地址与硬件地址的映射表

2. ARP 协议工作原理

当主机 A 向本局域网上的某台主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就在 ARP 高速缓存中查出其对应的硬件地址,再把这个硬件地址写入 MAC 帧,然后通过局域网把该 MAC 帧发往此硬件地址。
也有可能查不到主机 B 的 IP 地址。这可能主机 B 才入网,或者主机 A 刚刚加电,其高速缓存还是空的。这种情况下,主机 A 自动运行 ARP,然后按照以下步骤找出主机 B 的硬件地址。

  1. ARP进程在本局域网上广播一个ARP请求分组。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。
  2. 本局域网所有主机运行的ARP进程收到此ARP请求分组。
  3. 主机B的IP与请求分组里面的IP一致,将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后向A发送ARP响应分组(单播);其他主机则不理睬
  4. 主机 A 收到从主机 B 发来的 ARP 响应分组时,就在其 ARP 高速缓存中写入主机 B 的 IP 地址到硬件地址的映射。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

如果所要找的主机和源主机不在同一个局域网,则源主机发送 ARP 请求分组,找到本局域网上的一个路由器 R1 的硬件地址。剩下的工作由 R1 完成。

3. ARP 缓存

ARP高速缓存(即ARP表)是 ARP 地址解析协议能够高效运行的关键 (如果有多次ARP响应时,以最后一次响应为准)

每台主机或路由器在其内存中具有一个 ARP 表(ARP table),这张表包含 IP 地址到 MAC 地址的映射关系。该 ARP 表包含一个寿命值(TTL),它指示了从表中删除每个映射的时间。从一个表项放置到某 ARP 表中开始,一个表项通常的过期时间是 20 分钟

4. ARP 报文格式

Wireshark 抓取 ARP 请求报文:

字段1:以太网目的地址(Destination)。是ARP请求的目的以太网地址,全1时代表广播地址。
字段2:以太网源地址(Source)。发送ARP请求的以太网地址。
字段3:帧类型(Type)。以太网帧类型表示的是后面的数据类型,ARP请求和ARP应答这个值为0x0806。(常见类型:0800:IP数据报;0806:ARP请求/应答数据报;8035:RAPP请求/应答;)
字段4:硬件地址(Hardware type)。表示硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1。
字段5:协议类型(Protocol type)。指定协议地址类型,如0x0800表示协议地址类型为IPv4地址。该值与以太帧首部的类型字段相同。
字段6:硬件地址长度(Hardware size)。表示硬件地址的大小(单位:字节),如以太网地址为6。
字段7:协议地址长度(Protocol size)。表示协议地址的大小(单位:字节),如IPv4地址大小为4。
字段8:操作类型(Opcode)。值为1,表示进行ARP请求;值为2,表示进行ARP应答;值为3,表示进行RARP请求;值为4,表示进行RARP应答。
字段9:发送端以太网地址(Sender MAC address)。这里是以太网地址,和字段2相同。
字段10:发送端 IP 地址(Sender IP address)。
字段11:目的端硬件地址(Target MAC address)。
字段12:目的端 IP 地址(Target IP address)。

5. 抓包分析

下图红框中为 Wireshark 抓取的一对 ARP 请求和 ARP 应答

5.1. ARP 请求报文

5.2. ARP 应答报文

6. 免费 ARP

免费 ARP 是指主机发送 ARP 查找自己的 IP 地址。通常,发生在系统引导期间进行接口配置时。与标准 ARP 的区别就是免费 ARP 分组的目的 IP 地址字段封装的是自己的 IP 地址,即向所在网络请求自己的 MAC 地址。

免费 ARP 的作用:

  1. 一个主机可以通过它来确定另一个主机是否设置了相同的 IP 地址。
    主机并不希望对此请求有一个回答。但是,如果收到一个回答,那么就会在终端日志上产生一个错误消息
    “以太网地址: a: b:c:d:e:f 发送来重复的 IP 地址”。这样就可以警告系统管理员,某个系统有不正确的设置。
  2. 更新其他主机高速缓存中旧的硬件地址信息。
    如果发送免费 ARP 的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接
    口卡,然后重新启动),那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。一个比较著名的 ARP 协议事实[Plummer 1982]是,如果主机收到某个 IP 地址的 ARP 请求,
    而且它已经在接收者的高速缓存中,那么就要用 ARP 请求中的发送端硬件地址(如以太网地
    址)对高速缓存中相应的内容进行更新。主机接收到任何 ARP 请求都要完成这个操作(ARP 请求是在网上广播的,因此每次发送 ARP 请求时网络上的所有主机都要这样做)。
    文献[Bhide、Elnozahy和Morgan 1991]中有一个应用例子,通过发送含有备份硬件地址和
    故障服务器的 IP 地址的免费 ARP 请求,使得备份文件服务器可以顺利地接替故障服务器进行
    工作。这使得所有目的地为故障服务器的报文都被送到备份服务器那里,客户程序不用关心
    原来的服务器是否出了故障。但《TCP/IP 详解》作者反对这个做法,因为这取决于所有不同类型的客户端都要有正
    确的ARP协议实现。他们显然碰到过客户端的ARP协议实现与规范不一致的情况。
  3. 网关利用免费 ARP 防止 ARP 攻击。
    有些网关设备在一定的时间间隔内向网络主动发送免费 ARP 报文,让网络内的其他主机更新 ARP 表项中的网关 MAC 地址信息,以达到防止或缓解 ARP 攻击的效果。
  4. 利用免费 ARP 进行 ARP 攻击。
    ARP 协议并不只在发送了 ARP 请求才接收 ARP 应答,计算机只要接收到 ARP 应答数据包,就会使用应答中的 IP 和 MAC 地址对本地的 ARP 缓存进行更新。
    主机可以构造虚假的免费 ARP 应答,将 ARP 的源 MAC 地址设为错误的 MAC 地址,并把这个虚假的免费 ARP 应答发送到网络中,那么所有接收到这个免费 ARP 应答的主机都会更新本地 ARP 表项中相应 IP 地址对应的 MAC 地址。更新成功后,这些主机的数据报文就会被转发到错误的 MAC 地址,从而实现了 ARP 欺骗的攻击。

7. ARP 代理

如果 ARP 请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托 ARPARP 代理(Proxy ARP)。 这样可以欺骗发起 ARP 请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。
ARP 代理也称作混合 ARP(promiscuous ARP)或ARP 出租(ARP hack)。这些名字来自于 ARP 代理的其他用途:通过两个物理网络之间的路由器可以互相隐藏物理网络。在这种情况下,两个物理网络可以使用相同的网络号,只要把中间的路由器设置成一个 ARP 代理,以响应一个网络到另一个网络主机的 ARP 请求。这种技术在过去用来隐藏一组在不同物理电缆上运行旧版 TCP/IP 的主机。分开这些旧主机有两个共同的理由,其一是它们不能处理子网划分,其二是它们使用旧的广播地址(所有比特值为 0 的主机号,而不是目前使用的所有比特值为 1 的主机号)。

ARP 代理的优点:

  1. 最主要的一个优点就是能 够在不影响其他router的路由表的情况下在网络上添加一个新的router,这样使得子网的变化对主机是透明的
  2. ARP 代理应该使用在主机没有配置默认网关或没有任何路由策略的网络上

ARP 代理的缺点:

  1. 增加了某一网段上ARP流量
  2. 主机需要更大的ARP table来处理IP地址到MAC地址的映射
  3. 安全问题,比如ARP欺骗(spoofing)
  4. 不会为不使用ARP来解析地址的网络工作
  5. 不能够概括和推广网络拓扑

8. ARP 攻击

ARP 协议的基本功能就是通过目标设备的 IP 地址,查询目标设备的 MAC 地址,以保证通信的进行。 基于 ARP 协议的这一工作特性,黑客向对方计算机不断发送有欺诈性质的 ARP 数据包,数据包内包含有与当前设备重复的 Mac 地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信。

一般情况下,受到ARP攻击的计算机会出现两种现象:

  1. 不断弹出“本机的XXX段硬件地址与网络中的XXX段地址冲突”的对话框。
  2. 计算机不能正常上网,出现网络中断的症状。

因为这种攻击是利用ARP请求报文进行“欺骗”的,所以防火墙会误以为是正常的请求数据包,不予拦截。因此普通的防火墙很难抵挡这种攻击。

[参考文献]

  1. 百度百科 ARP
  2. 《计算机网络》 谢希仁.
  3. 《计算机网络自顶向下方法》
  4. 《TCP/IP 详解 卷1:协议》
  5. ARP 详解 https://blog.csdn.net/lm409/article/details/80299823
  6. ARP 地址解析协议原理 https://www.cnblogs.com/csguo/p/7542944.html
  7. 代理ARP(proxy ARP)的原理及其工作方式 https://www.cnblogs.com/yxmx/articles/1684944.html
posted @ 2019-06-19 18:30  SXISZERO  阅读(2834)  评论(0编辑  收藏  举报