头图

文章首发博客,你可以前往 阅读原文

ARP(Address Resolution Protocol,地址解析协议)是一种在计算机网络中用于将IP地址映射到MAC地址的协议。ARP协议通常在局域网中使用,它允许主机查找目标主机的MAC地址,以便在网络中发送数据包

当一个主机需要向另一个主机发送数据包时,它需要知道目标主机的MAC地址,因为MAC地址是在数据链路层使用的地址。如果目标主机的IP地址已知,但是它的MAC地址未知,就需要使用ARP协议进行地址解析

ARP协议是属于网络层协议,基于IP协议

扫码关注公众号,查看更多最新优质文章

通信过程


假如局域网内有多个主机,当主机A需要和主机C进行通讯时,需要先获得主机B的mac地址:

  1. 主机A先从自己的ARP缓存表中获取主机B的mac地址
  2. 当没有时会想局域网中发送arp广播请求,路由器等设备接收到arp请求后,会将请求发送给局域网中的每个主机
  3. 当每个主机接收到arp请求后发现目标ip不是自己,就会丢弃掉arp数据包,不做任何回应
  4. 而真正的主机接收到后,会将自己的mac地址以单播的形式响应给发送端
  5. 路由器等设备也会学习ip,当目标主机响应源主机时,路由器也会维护一份路由表,在路由器的路由表没有过期时,路由器会直接返回目标主机的mac地址

真实环境抓包情况如下:

ARP首部

  • 硬件类型:2字节,硬件地址类型,值为1时表示以太网
  • 协议类型:2字节,表示映射的协议地址类型,对于IP协议值为0x0800
  • MAC地址长度:1字节,表示MAC地址长度,以字节为单位,此处为6
  • IP协议地址长度:1字节,表示IP的长度,以字节为单位,此处为4
  • 操作类型:2字节,指定本次ARP报文类型。ARP请求(1)、ARP应答(2)、RARP请求(3)、RARP应答(4)
  • 源MAC地址:6字节,发送方的硬件地址
  • 源IP地址:4字节,发送方的IP地址
  • 目的MAC地址:6字节,接收方硬件地址,在请求报文中该字段值全为0,即00:00:00:00:00:00,表示任意地址,等待接收方来补充
  • 目的IP地址:4字节,接收方的IP地址

抓包情况如下:

ARP缓存表

为了避免每次通信都要进行这种转换,每个设备(如路由器、交换机、网关等)都会在自己的ARP缓存表中存储已经进行过ARP请求并得到回应的IP地址和MAC地址的对应关系。当设备需要与该IP地址对应的设备进行通信时,就可以直接从ARP缓存表中获取对应的MAC地址,而不用再次发送ARP请求

ARP缓存表中的每个条目通常包含以下信息:

  • IP地址:需要转换为MAC地址的IP地址
  • MAC地址:与IP地址对应的MAC地址
  • 接口:该MAC地址所在的网络接口
  • 时间戳:上次从目标设备获取该MAC地址的时间

查看主机维护的arp缓存表:

➜ arp -ae
Address           HWtype  HWaddress           Flags Mask    Iface
192.168.11.11     ether   xx:1b:xx:b5:e2:12   C             ens160
192.168.11.235    ether   xx:ef:xx:5b:d1:a5   C             ens160
192.168.11.194    ether   xx:a4:xx:0a:xx:c5   C             ens160
192.168.11.120    ether   xx:9c:23:xx:b0:xx   C             ens160
gateway           ether   xx:05:a5:xx:9b:8f   C             ens160
192.168.10.1      ether   6e:xx:33:xx:45:xx   C             ens256

ARP缓存表的大小有限,当表满了时,新的ARP请求会替换最早的条目。此外,由于ARP缓存表中的信息是动态的,因此有时需要手动清除过期的ARP缓存表项

动态ARP表

动态ARP表是由ARP和计算机自动维护的,它会记录最近进行过通信的IP地址和MAC地址的映射关系,并在一定时间内保持这种关系。当通信终止一段时间后,这些映射关系就会被清除。这种清除机制可以确保ARP表中的信息是最新的,但也可能导致频繁地进行ARP请求

静态ARP表

静态ARP表是由管理员手动设置的,它不会自动更新。管理员可以在静态ARP表中指定某个IP地址对应的MAC地址,这样ARP表中就会一直保持这种映射关系,直到管理员手动删除或更新它。这种方式可以减少ARP请求的次数,提高网络性能,但需要管理员进行手动维护,可能导致静态ARP表中的信息不够实时

RARP

ARP是将IP地址转换为MAC地址,而RARP(Reverse Address Resolution Protocol,反向地址解析协议)是一种用于将MAC地址转换为IP地址的协议,与ARP相反

当一个网络设备启动时,它通常知道自己的MAC地址,但不知道自己的IP地址。此时,设备可以向网络中的RARP服务器发送一个RARP请求,请求服务器将自己的MAC地址转换为IP地址;RARP服务器将在自己的RARP表中查找该MAC地址对应的IP地址,并将IP地址返回给设备;由于DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)的出现,RARP协议已经逐渐被淘汰。DHCP协议可以动态地分配IP地址和其他网络配置信息,而不需要依赖于RARP服务器

代理ARP

代理ARP(Proxy ARP)是一种网络协议,它允许一个主机为另一个主机响应ARP请求,从而实现两个不在同一子网内的主机之间的通信。代理ARP通常在路由器或交换机等设备上实现,这些设备会监视网络中的ARP请求,并根据需要向其他子网中的主机发送ARP响应

当一个主机需要与另一个不在同一子网内的主机通信时,它会向本地网段的网关发送ARP请求,请求网关的MAC地址。如果网关启用了代理ARP功能,并且知道目标主机的MAC地址,它就会响应ARP请求,将目标主机的MAC地址发送给源主机,源主机就可以使用该MAC地址向目标主机发送数据包

ARP欺骗

ARP可以说是最不安全的协议,传播中没有身份验证,对于网络中的任意主机都可以接收到发送者的arp包,因此可以假装成目标主机并返回给源主机错误的mac地址,当源主机发送数据时就会将数据发送到错误的主机上,造成数据泄露等安全问题

ARP欺骗示意图:

主机A想要和主机C进行通信,发送的ARP数据包被hacker截取后,伪造成主机C,将自己的mac地址发送给主机A,主机A就会将hacker的mac地址存到自己的arp缓存表中,这样以后发送到主机C的数据全都会发送到hacker的主机上

ARP欺骗会造成数据的泄露,假如网页上没有使用https证书,数据都会以明文的形式传输,很容易泄露数据。如下图:当在网页上提交表单,通过抓包工具就可以看到数据内容

如何防范ARP欺骗?

  1. 使用静态ARP表:静态ARP表是手动配置的ARP表,可以避免ARP欺骗攻击。管理员可以在网络设备上手动配置每个设备的MAC地址和IP地址的对应关系,从而限制ARP欺骗攻击
  2. 使用动态ARP检测工具:动态ARP检测工具可以检测网络中的ARP欺骗攻击,并且可以发出警报或者自动阻止攻击。例如,ARPwatch、ARPdefender等工具可以帮助管理员实时监控网络中的ARP请求和响应,从而及时发现并防止ARP欺骗攻击
  3. 使用加密协议:使用加密协议可以保护网络中的通信,从而避免ARP欺骗攻击。例如,使用SSL、TLS等加密协议可以保护Web应用程序的通信,从而避免中间人攻击
  4. 使用虚拟专用网络(VPN):使用VPN可以将网络流量加密并隧道化,从而避免ARP欺骗攻击。VPN可以将本地网络与远程网络之间建立一个安全的隧道,从而保护网络通信的安全

ARP泛洪

ARP泛洪(ARP Flooding)是一种网络攻击方法,它利用ARP协议的特性向网络中广播大量的虚假ARP请求,从而导致网络中所有主机的ARP缓存被污染

ARP泛洪攻击的原理是攻击者向网络中发送大量虚假的ARP请求包,每个ARP请求包都包含一个虚假的IP地址和MAC地址。当网络中的其他主机接收到ARP请求包时,它们会更新自己的ARP缓存,将虚假的MAC地址与IP地址映射起来。这样,当这些主机向虚假IP地址发送数据包时,数据包会被发送到错误的MAC地址,从而无法到达真正的目标主机。如果攻击者拦截这些数据包并篡改它们,就可以实现中间人攻击或拒绝服务攻击等行为

为了防止ARP泛洪攻击,可以采取以下几种措施:

  • 使用静态ARP表:在网络中使用静态ARP表,将每个IP地址与MAC地址手动映射起来,这样可以避免ARP缓存被污染。但是,静态ARP表的管理比较困难,需要手动进行维护
  • 使用ARP防火墙:在网络中使用ARP防火墙,对所有的ARP请求和响应进行过滤和验证,可以有效地防止ARP欺骗和ARP泛洪攻击
  • 使用网络安全设备:在网络中使用网络安全设备,例如交换机和路由器等,可以对ARP请求和响应进行监控和过滤,从而保护网络安全

总结

ARP协议用来将IP地址映射为mac地址,ARP协议是个非常不安全的协议,因此很容易称为攻击的漏洞,为了防范ARP攻击,要采取必要的措施来防止攻击

参考文献


大卫talk
71 声望8 粉丝

人生是一场修行