ARP协议
ARP(Address Resolution Protocol,地址解析协议)是一种在计算机网络中用于将IP地址映射到MAC地址的协议。ARP协议通常在局域网中使用,它允许主机查找目标主机的MAC地址,以便在网络中发送数据包
当一个主机需要向另一个主机发送数据包时,它需要知道目标主机的MAC地址,因为MAC地址是在数据链路层使用的地址。如果目标主机的IP地址已知,但是它的MAC地址未知,就需要使用ARP协议进行地址解析
ARP协议是属于网络层协议,基于IP协议
通信过程
假如局域网内有多个主机,当主机A需要和主机C进行通讯时,需要先获得主机B的mac地址:
- 主机A先从自己的ARP缓存表中获取主机B的mac地址
- 当没有时会想局域网中发送arp广播请求,路由器等设备接收到arp请求后,会将请求发送给局域网中的每个主机
- 当每个主机接收到arp请求后发现目标ip不是自己,就会丢弃掉arp数据包,不做任何回应
- 而真正的主机接收到后,会将自己的mac地址以单播的形式响应给发送端
- 路由器等设备也会学习ip,当目标主机响应源主机时,路由器也会维护一份路由表,在路由器的路由表没有过期时,路由器会直接返回目标主机的mac地址
真实环境抓包情况如下:
ARP首部
硬件类型
:2字节,硬件地址类型,值为1时表示以太网协议类型
:2字节,表示映射的协议地址类型,对于IP协议值为0x0800MAC地址长度
:1字节,表示MAC地址长度,以字节为单位,此处为6IP协议地址长度
: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
2
3
4
5
6
7
8
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欺骗?
- 使用静态ARP表:静态ARP表是手动配置的ARP表,可以避免ARP欺骗攻击。管理员可以在网络设备上手动配置每个设备的MAC地址和IP地址的对应关系,从而限制ARP欺骗攻击
- 使用动态ARP检测工具:动态ARP检测工具可以检测网络中的ARP欺骗攻击,并且可以发出警报或者自动阻止攻击。例如,ARPwatch、ARPdefender等工具可以帮助管理员实时监控网络中的ARP请求和响应,从而及时发现并防止ARP欺骗攻击
- 使用加密协议:使用加密协议可以保护网络中的通信,从而避免ARP欺骗攻击。例如,使用SSL、TLS等加密协议可以保护Web应用程序的通信,从而避免中间人攻击
- 使用虚拟专用网络(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攻击,要采取必要的措施来防止攻击