ARP欺骗攻击(ARP Spoofing)

地址解析协议(Address Resolution Protocol)

因为存在网络层地址和链路层地址,所以需要在它们之间进行转换。对于因特网而言,这就是地址解析协议ARP。


ARP欺骗攻击(ARP Spoofing)_第1张图片
ARP协议
  • 帧类型:对于ARP协议,该字段为0x0806。对于RARP协议,该字段为0x8035。
  • 硬件类型:表示硬件地址的类型。值为1时表示以太网地址。也就是说ARP协议不仅仅应用于以太网协议,还可以支持别的链路层协议。
  • 协议类型:表示要映射的协议地址类型。值为0x0800时表示IP协议。
  • 硬件地址长度:与硬件类型对应的硬件地址的长度,以字节为单位。如果是以太网,则是6字节(MAC长度)。
  • 协议地址长度:与协议类型对应的协议地址长度,以字节为单位。如果是IP协议,则是4字节(IP地址长度)。
  • 操作类型(op):四中操作类型。ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)。
  • 发送端硬件地址:如果是以太网,则是源主机以太网地址,此处和以太网头中的源地址对应。
  • 发送端协议地址:如果是IP协议,则表示源主机的IP地址。
  • 目的端硬件地址:如果是以太网,则是目的以太网地址,和以太网头中的目的地址对应。
  • 目的端协议地址:如果是IP协议,则表示源主机要请求硬件地址的IP地址。
  • 对应ARP请求包来说,目的端的硬件地址字段无须填充,其他字段都需要填充。对于ARP回复包来说,所有字段都需要填充。
  • FF-FF-FF-FF-FF-FF是广播地址

Typical Traslation Scenario

But how does the ARP table get filled in the first place? The answer is that it is filled automatically by ARP on an "as-needed" basis.

Two things happen when the ARP table can not be used to translate an address:

  1. An ARP request packet with a broadcast Ethernet address is sent out on the network to every computer.
  2. The outgoing IP packet is queued.
  3. The ARP response arrives with the IP-to-Ethernet address translation for the ARP table.
  4. For the queued IP packet, the ARP table is used to translate the IP address to the Ethernet address.
  5. The Ethernet frame is transmitted on the Ethernet.

Notice:
Some implementations of IP and ARP don't queue the IP packet while waiting for the ARP response. Instead the IP packet is discarded and the recovery from the IP packet loss is left to the TCP module or the UDP network application. This recovery is performed by time-out and retransmission. The retransmitted message is successfully sent out onto the network because the first copy of the message has already caused the ARP table to be filled.

ARP欺骗攻击(ARP Spoofing)_第2张图片
ARP请求与应答
ARP欺骗攻击(ARP Spoofing)_第3张图片
ARP请求
ARP欺骗攻击(ARP Spoofing)_第4张图片
ARP应答

正常通讯中TCP连接与ARP的关系

应用接受用户提交的数据,触发TCP建立连接,TCP的第一个SYN报文通过connect函数到达IP层,IP层通过查询路由表:

如果目的IP和自己在同一个网段:

  • 当IP层的ARP高速缓存表中存在目的IP对应的MAC地址时,则调用网络接口send函数(参数为IP Packet和目的MAC))将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC的封装,并发送出去;

  • 当IP层的ARP高速缓存表中不存在目的IP对应的MAC地址时,则IP层将TCP的SYN缓存下来,发送ARP广播请求目的IP的MAC,收到ARP应答之后,将应答之中的对缓存在本地ARP高速缓存表中,然后完成TCP SYN的IP封装,调用网络接口send函数(参数为IP Packet和目的MAC))将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC的封装,并发送出去;。

如果目的IP地址和自己不在同一个网段

此时就需要将包发送给默认网关,这需要知道默认网关的MAC地址:

  • 当IP层的ARP高速缓存表中存在默认网关对应的MAC地址时,则调用网络接口send函数(参数为IP Packet和默认网关的MAC)将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC

  • 当IP层的ARP高速缓存表中不存在默认网关对应的MAC地址时,则IP层将TCP的SYN缓存下来,发送ARP广播请求默认网关的MAC,收到ARP应答之后,将应答之中的<默认网关地址,对应的MAC>对缓存在本地ARP高速缓存表中,然后完成TCP SYN的IP封装,调用网络接口send函数(参数为IP Packet和默认网关的MAC)将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC的封装,并发送出去。

ARP缓存

定义

ARP缓存是一个缓冲区,用来储存IP地址和MAC地址,本质就是的对应表。表中一个条目记录了网络上一个主机的IP地址和其对应的MAC地址。

每一个以太网或令牌环网络适配器都有自己单独的表。

当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。

ARP缓存表项的生存时间TTL

ARP缓存包含动态和静态项目。

  • 动态项目随时间推移自动添加和删除,每个动态ARP缓存项都有都设置了TTL(生存时间),TTL为0时此项目就从表中删除,Windows下TTL一般不超过10分钟。

  • 静态 ARP 缓存条目是永久性的,可以使用 TCP/IP 工具手动添加和删除。静态 ARP 缓存条目用来禁止节点发送对常用的本地IPv4地址(例如路由器和服务器的 IPv4 地址)的ARP请求。

更新及老化机制

Timeout

Periodically time out cache entries, even if they are in use. Note that this timeout should be restarted when the cache entry is "refreshed" (by observing the source fields, regardless of target address, of an ARP broadcast from the system in question). For proxy ARP situations, the timeout needs to be on the order of a minute.

Standard ARP

Request(Broadcast)

  1. 若收到一个ARP请求,以太网目的地址为FF-FF-FF-FF-FF-FF,目标IP地址为本机IP地址,则查看ARP缓存中是否有发送者硬件地址和发送者IP地址对应的条目,若有,且与收到的不一致,更新该条目,否则忽略该请求;若无,则添加,最后构造一个针对请求主机的ARP单播应答。
ARP欺骗攻击(ARP Spoofing)_第5张图片
ARP广播请求
ARP欺骗攻击(ARP Spoofing)_第6张图片
ARP单播应答
  1. 若收到一个ARP请求,以太网目的地址为FF-FF-FF-FF-FF-FF,但目标IP地址不是本机IP地址,忽略该请求。
ARP欺骗攻击(ARP Spoofing)_第7张图片
本机IP为192.168.199.233

Reply(Unicast)

  1. 若收到一个ARP回复,以太网目的地址为本机MAC地址,目标IP地址为本机IP地址,则查看ARP缓存中是否有发送者硬件地址和发送者IP地址对应的条目,若有,且与收到的不一致,更新该条目;否则向缓存表中添加纪录。
ARP欺骗攻击(ARP Spoofing)_第8张图片
构造虚假ARP回复前的ARP缓存表
ARP欺骗攻击(ARP Spoofing)_第9张图片
构造的虚假ARP回复
ARP欺骗攻击(ARP Spoofing)_第10张图片
构造虚假ARP回复后的ARP缓存表

Unicast Poll

Unicast Poll -- Actively poll the remote host by periodically sending a point-to-point ARP Request to it, and delete the entry if no ARP Reply is received from N successive polls. Again, the timeout should be on the order of a minute, and typically N is 2.

ARP欺骗攻击(ARP Spoofing)_第11张图片
ARP请求(单播)
ARP欺骗攻击(ARP Spoofing)_第12张图片
ARP应答(单播)

Gratuitous ARP

免费ARP(Gratuitous ARP)

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

分析

网络拓扑结构

ARP欺骗攻击(ARP Spoofing)_第13张图片
拓扑结构

这里有两台路由器,所处网段12.1.1.0/24,地址都配置为12.1.1.2,很明显,这是我们精心构造的。当时,实际网络里面,也经常有类似的地址冲突情况发生。类似这种情况,底层是如何坚持和沟通的呢?我们为R1和R2配置完地址之后,通过wireshark抓取底层数据包,如下:

ARP欺骗攻击(ARP Spoofing)_第14张图片
image.png

作用

  1. 一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。

正常情况下发送免费ARP请求不会收到ARP应答,如果收到了一个ARP应答,则说明网络中存在与本机相同的IP地址的主机,发生了地址冲突。

  1. 更新其他主机高速缓存中旧的硬件地址进行。

如果发送免费ARP的主机正好改变了硬件地址,如更换了接口卡。其他主机接收到这个ARP请求的时候,发现自己的ARP高速缓存表中存在对应的IP地址,但是MAC地址不匹配,那么就需要利用接收的ARP请求来更新本地的ARP高速缓存表表项。

  1. 网关利用免费ARP防止ARP攻击

有些网关设备在一定的时间间隔内向网络主动发送免费ARP报文,让网络内的其他主机更新ARP表项中的网关MAC地址信息,以达到防止或缓解ARP攻击的效果。

  1. 利用免费ARP进行ARP攻击

ARP协议并不只在发送了ARP请求才接收ARP应答,计算机只要接收到ARP应答数据包,就会使用应答中的IP和MAC地址对本地的ARP缓存进行更新。

主机可以构造虚假的免费ARP应答,将ARP的源MAC地址设为错误的MAC地址,并把这个虚假的免费ARP应答发送到网络中,那么所有接收到这个免费ARP应答的主机都会更新本地ARP表项中相应IP地址对应的MAC地址。更新成功后,这些主机的数据报文就会被转发到错误的MAC地址,从而实现了ARP欺骗的攻击。

代理ARP(Proxy ARP)

ARP欺骗原理

ARP缓存表

你可能感兴趣的:(ARP欺骗攻击(ARP Spoofing))