ARP (Address Resolution Protocol) 协议是处于链路层和网络层中间的协议,结合了 IP 地址和 MAC 地址。主要划分到网络层,为 IP 协议提供服务。

在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的 MAC 地址。“地址解析”就是主机在发送帧前将目标 IP 地址转换成目标 MAC 地址的过程。ARP 协议的基本功能就是通过目标设备的 IP 地址,查询目标设备的MAC地址,以保证通信的顺利进行。

1. ARP 原理及流程

在任何时候,一台主机有 IP 数据报文发送给另一台主机,都要知道接收方的IP 地址。但是 IP 地址必须封装成帧才能通过物理网络。意味着发送方必须有接收方的物理 (MAC) 地址,因此需要完成逻辑地址到物理地址的映射。而 ARP 协议可以接收来自 IP 协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。

1.1. ARP 请求

任何时候,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个 ARP 请求报文,这个报文包含了**发送方的 MAC 地址**和 IP 地址 以及 **接收方的 IP 地址**。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播。

1.2. ARP 响应

局域网中的每一台主机都会接受并处理这个 ARP 请求报文,然后进行验证,查看接收方的 IP 地址是不是自己的地址,只有验证成功的主机才会返回一个 ARP 响应报文,这个响应报文包含接收方的 IP 地址和物理地址。这个报文利用收到的 ARP 请求报文中的请求方物理地址以单播的方式直接发送给 ARP 请求报文的请求方。

截屏2021-05-13 上午10.36.14

0020

2. ARP 协议报文字段

截屏2021-05-13 上午10.45.16

3.1. 报文格式

截屏2021-08-24 下午6.37.01

3. ARP 流程

  1. 源主机会尝试查询自己的 ARP 缓存表。ARP 缓存表存储着之前的查询结果和用户手动绑定的 IP + MAC 地址对

如果之前已经查询过某个 IP 对应的 MAC 地址是什么,或者用户十分确信某个 IP 与 MAC 的关系,为了加快查询速度,会将这些对应关系直接进行缓存,如果目标 IP 存在于表中,则直接返回表中 MAC 地址

1
2
3
4
➜  ~ arp -a
? (172.20.10.1) at fa:ff:c2:1a:fe:64 on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]

ARP 缓存表采用了老化机制。为了尽量保持映射关系的正确性,老化机制使得 ARP 缓存表每过几秒就会进行刷新,删除一些较早的 IP/MAC 地址对,但在此过程中,永远不会主动删除静态绑定的地址对

  1. 如果 ARP 缓存表中没有目标 IP 对应的 MAC 地址,源主机会向局域网进行广播,向所有主机发送 ARP 请求。这时如果目标主机收到 ARP 请求,首先将源主机的 IP 和 MAC 地址存入自己的 ARP 缓存表中,然后向源主机发送 ARP 响应,响应中会说明自己的 IP 与 MAC 地址,而且只有目标主机会进行回复

4. ARP 欺骗

一般的 ARP 欺骗主要能够实现监听、断网、局域网限速等功能。根据被欺骗对象的不同,主要分成主机型欺骗网关型欺骗。顾名思义,如果被欺骗者是主机就是主机型欺骗,反之则是网关型欺骗

在 ARP 缓存表没有地址对的情况下,主机会向局域网广播 ARP 请求,如果攻击机对此请求进行回复,告诉源主机自己才是目标主机,源主机会把所有本应发给目标主机的数据传给攻击机,也就实现了监听

  1. 构造特定的 ARP 响应报文,同时将 Protocol Source 更改成网关的 IP(其他照常填写)。这样靶机就会以为攻击机的 IP 就是网关的 IP,但最终传输数据依赖的是 MAC 地址,也就是说攻击机最终会把要发给网关的数据错误地传给攻击机。
  2. 不断地向靶机发送刚刚的 ARP 响应报文。事实上,即使靶机没有发出 ARP 请求,也会将响应报文中的 IP/MAC 地址对记录到 ARP 缓存表中。依据 ARP 缓存表的老化机制,不断地发送 ARP 响应可以让正确的 IP/MAC 地址对被刷新下去,靶机的 ARP 缓存表就被错误的 IP/MAC 地址对填满。

在 ARP 欺骗实现后,靶机要发往网关的数据全部发向攻击机,如果攻击机将报文转发给网关,则实现了监听;如果攻击机不进行转发,那么就是断网。