有关ARP协议与ARP攻击防御的学习

一、什么是ARP协议

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;

最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。

二、 ARP协议工作原理

1. 在同一个网段的情况

假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:

  1. 主机A首先查看自己的ARP缓存表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。

  2. 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。

  1. 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。

  2. 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。

2. 在不同网段的情况

当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。

那么,主机A是怎么事先知道主机B和自己不在同一个网段呢?一开始我自行思考,以为是主机A在自己网段内进行ARP请求无果后才知道目标主机和自己并不在同一个网段,后来经过查阅资料,发现其实它还有更加聪明的手段。

通常,局域网内的主机可以通过检查其子网掩码和目标主机的IP地址来判断目标主机是否在同一个子网内。子网掩码定义了一个IP地址的网络部分和主机部分,如果两个主机的IP地址与子网掩码相与的结果相同,它们就在同一个子网内。如果不同,它们就在不同的子网内。

(注意,这里需要提前了解IP地址的划分方式等知识)

如果在不同的子网内,主机A将目标主机B的IP地址设置为下一跳的目标,并使用ARP请求获取连接到主机A子网的路由器的MAC地址。然后,它将数据帧发送到路由器,由路由器转发到目标主机B所在的子网。

注意:总而言之,ARP协议不能跨网段使用,在跨网段通信的过程中,主机通常只能获取链路中的下一跳节点的MAC地址,而无法直接获取到目标主机的MAC地址。

三、ARP缓存表和TTL

1. ARP表

网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址和MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应的信息,则通过发送ARP request报文来获得它。学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表现会被自动删除。如果目标设备位于其他网络则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转发给目的设备。

2. ARP表项又分为动态ARP表项和静态ARP表项。

动态ARP表项

动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。

静态ARP表项

静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。直到重新启动计算机为止。

配置静态ARP表项可以增加通信的安全性。静态ARP表项可以限制和指定IP地址的设备通信时只使用指定的MAC地址,此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间的正常通信。

静态ARP表项分为短静态ARP表项和长静态ARP表项。

在配置长静态ARP表项时,除了配置IP地址和MAC地址项外,还必须配置该ARP表项所在VLAN和出接口。长静态ARP表项可以直接用于报文转发。
在配置短静态ARP表项时,只需要配置IP地址和MAC地址项。如果出接口是三层以太网接口,短静态ARP表项可以直接用于报文转发;如果出接口是VLAN虚接口,短静态ARP表项不能直接用于报文转发,当要发送IP数据包时,先发送ARP请求报文,如果收到的响应报文中的源IP地址和源MAC地址与所配置的IP地址和MAC地址相同,则将接收ARP响应报文的接口加入该静态ARP表项中,之后就可以用于IP数据包的转发。
一般情况下,ARP动态执行并自动寻求IP地址到以太网MAC地址的解析,无需管理员的介入。

当希望设备和指定用户只能使用某个固定的IP地址和MAC地址通信时,可以配置短静态ARP表项,当进一步希望限定这个用户只在某VLAN内的某个特定接口上连接时就可以配置长静态ARP表项。

四、ARP报文格式

ARP 报文总长度为 28 字节,MAC 地址长度为 6 字节,IP 地址长度为 4 字节。


1. 相关字段的含义:

·硬件类型:指明了发送方想知道的硬件接口类型,以太网的值为 1。
·协议类型:表示要映射的协议地址类型。它的值为 0x0800,表示 IPv4 地址。
·发送方硬件地址:指示ARP请求或响应的发送设备的物理MAC地址。
·发送方协议地址:指示ARP请求或响应的发送设备的协议地址,如IPv4地址
·操作类型:用来表示这个报文的类型,ARP 请求为 1,ARP 响应为 2,RARP 请求为 3,RARP 响应为 4。
·发送方 MAC 地址:发送方设备的硬件地址。
·发送方 IP 地址:发送方设备的 IP 地址。
·目标 MAC 地址:接收方设备的硬件地址。
·目标 IP 地址:接收方设备的IP地址。

ARP 数据包分为请求包和响应包,对应报文中的某些字段值也有所不同。

ARP 请求包报文的操作类型(op)字段的值为 request(1),目标 MAC 地址字段的值为 Target 00:00:00_00:00:00(00:00:00:00:00:00)(广播地址)。

ARP 响应包报文中操作类型(op)字段的值为 reply(2),目标 MAC 地址字段的值为目标主机的硬件地址。

2. 实战解析

1. 请求报文

这里的请求包是网关向我的设备发送的,并且我在实践中发现其ARP高速缓存表的更新速度很快,在10—20秒之间,因为当我的设备在连接网络时,能频繁抓到其给我发送的ARP请求。

细心的读者会发现,这里的Target MAC address为0地址,但是在MAC地址中,全1地址才是广播地址,这是否是自相矛盾了呢?

两个地方的目的 mac 地址恰好相反,看似对立,其实是统一的:arp 请求是为了确定目标主机的 mac 地址才发的,此时还不知道这个地址,所以在 arp 请求报文中,目的 mac 地址字段自然而然就“留空”,也就是全 0(这个字段只有在 arp 响应报文中才有值);为了确定目标主机的 mac 地址,需要向局域网内所有主机进行询问,所以在以太网那一层,要把目的 mac 地址填成全 1,表示它是一个广播帧,这样才能让局域网内的所有主机接收到这个 arp 请求。

2. 响应报文

这就是我的主机对上面那条请求报文的响应,这里就可以看到其发送给路由器的本机MAC地址和路由器的IP地址与接口MAC地址。

3. 免费ARP报文

免费 ARP(Gratuitous ARP)包是一种特殊的ARP请求,它并非期待得到IP对应的 MAC 地址,而是当主机启动的时候,发送一个 Gratuitous ARP请求,即请求自己的IP地址的MAC地址。

免费ARP报文与普通ARP请求报文的区别在于报文中的目标IP地址。普通ARP报文中的目标IP地址是其他主机的IP地址;而免费ARP的请求报文中,目标IP地址是自己的IP地址。

免费 ARP 数据包有以下 3 个作用。
  1. 该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的IP地址和MAC地址。

  2. 可用于检测IP地址冲突。当一台主机发送了免费ARP请求报文后,如果收到了ARP响应报文,则说明网络内已经存在使用该IP地址的主机。

  3. 可用于更新其他主机的ARP缓存表。如果该主机更换了网卡,而其他主机的ARP缓存表仍然保留着原来的MAC地址。这时,可以发送免费的 ARP数据包。其他主机收到该数据包后,将更新ARP缓存表,将原来的 MAC地址替换为新的MAC地址。

  4. 查看与修改ARP高速缓存表
    这一节其实并不属于ARP报文格式,但是在研究ARP报文格式的过程中需要配合使用命令窗口来进行,因此将这一节与个人经验放在这里。

以Win11为例,可以在命令窗口执行一些指令:
arp/? 查看arp命令的有关帮助
arp -a 列出当前主机上的各网络适配器的arp高速缓存表
arp -d * 清除当前主机里的ARP高速缓存表(需要管理员权限)
arp -s IP MAC 手动设置静态IP-MAC映射关系(需要管理员权限)

补充拓展:利用上述的方式,我进一步探究了主机与路由之间的关系。在前面的第二部分第二小节中我提到一个问题,就是不同网段之间通信时,主机可以通过电子掩码来区分得知目标是否在不同网段。

个人实验如下:

猜想:现在假如主机A要与主机B进行不同网段的通信,它首先通过掩码得知B在不同网段,因此A需要把数据包的下一跳地址设置为路由的IP地址,同时标注上路由的MAC地址,假如我删去主机上高速缓存表中的路由IP-MAC对应关系,然后再让A向B发送数据包,那么A是否会向路由发送ARP请求来获取它的MAC地址呢?

其实,答案是会的。网络中的每一台主机联网都需要与路由进行通信,因此获取路由的MAC地址是必然的。

实验:
在主机上提前打开抓包工具(由于主机上可能存在许多应用与路由之间有频繁的数据传输,如果不提前打开抓包工具,主机的ARP高速缓存表可能很快就会刷新并添加上与路由的映射关系,这样会导致抓不到我们想要的ARP包),设置抓取ARP包,然后在命令窗口敲入arp -d 路由IP删除这条映射,刷新一下某个网站,果然,在所有的ARP包中,前面两条就是主机与路由器之间的ARP通信,这也证实了上面的猜想。

五、 RARP协议

1. 基本概念

反向地址转换协议,即RARP(Reverse Address Resolution Protocol)。 反向地址转换协议(RARP)允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。网络管理员在局域网的网关路由器里创建一个表以映射物理地址(MAC)和与其对应的 IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用。 RARP 可以使用于以太网、光纤分布式数据接口及令牌环 LAN等。

2. 产生原因

ARP(地址解析协议)是设备通过自己知道的IP地址来获得自己不知道的物理地址的协议。假如一个设备不知道它自己的IP地址,但是知道自己的物理地址,网络上的无盘工作站就是这种情况,设备知道的只是网络接口卡上的物理地址。这种情况下应该怎么办呢?RARP(逆地址解析协议)正是针对这种情况的一种协议。

RARP以与ARP相反的方式工作。RARP发出要反向解析的物理地址并希望返回其对应的IP地址,应答包括由能够提供所需信息的RARP服务器发出的IP地址。虽然发送方发出的是广播信息,RARP规定只有RARP服务器能产生应答。许多网络指定多个RARP服务器,这样做既是为了平衡负载也是为了作为出现问题时的备份。

3. 基本原理

  1. 源主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址。

  2. 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址。

  3. 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用。

  4. 如果不存在,RARP服务器对此不做任何的响应。

  5. 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

六、 ARP欺骗与ARP攻击

由于ARP协议没有任何安全验证,因此很容易产生ARP欺骗。

1. 原理阐述:

ARP攻击:

一般情况下,ARP攻击的主要目的是使网络无法正常通信,主要包括以下两种攻击行为。
(1)攻击主机制造假的ARP应答,并发送给局域网中除被攻击主机以外的所有主机。ARP应答中包含被攻击主机的IP地址和虚假的MAC地址。
(2)攻击主机制造假的ARP应答,并发送给被攻击主机。ARP应答中包含除被攻击主机以外的所有主机的IP地址和虚假的MAC地址。
只要执行上述ARP攻击行为中的任一种,就可以实现被攻击主机和其他主机无法通信。

ARP欺骗(亦称中间人攻击):

ARP欺骗是通过冒充网关或其他主机使得到达网关或主机的流量通过攻击手段进行转发。从而控制流量或得到机密信息。ARP欺骗不是真正使网络无法正常通信,而是ARP欺骗发送虚假信息给局域网中其他的主机,这些信息中包含网关的IP地址和主机的MAC地址;并且也发送了ARP应答给网关,当局域网中主机和网关收到ARP应答更新ARP表后,主机和网关之间的流量就需要通过攻击主机进行转发。

笔记:在学习时我发现了这样一个问题,经过查找资料我发现在 ARP 协议中,当主机发送 ARP 请求报文时,它会等待目标主机的响应(即 ARP 响应报文)。如果收到多个 ARP 响应报文(这通常意味着网络中有多个设备声称自己是目标地址的持有者),主机的行为通常是丢弃除第一个接收到的响应报文之外的其他响应报文。那么,在arp欺骗中,攻击机如何保证其伪造的arp响应数据包被受害主机(或网关)第一个接收到呢?

其实攻击者可以通过监听 ARP 请求,并快速发送伪造的 ARP 响应报文,使自己的报文在网络上传播得比其他设备的响应快,从而确保第一个到达靶机。一些专门的 ARP 欺骗工具(如 Ettercap、Cain & Abel、arpspoof)会利用复杂的算法来保证伪造 ARP 响应报文能够在网络中优先到达目标主机。这些工具能够高效地发送伪造响应,并且通常会在持续攻击过程中不断刷新 ARP 条目,以确保中间人攻击的成功。

2、本质

从上面可知,arp攻击与arp欺骗的本质相同,这是目的(或者说效果)不同,本质都是通过伪造假的arp响应数据包来欺骗目标主机或者网关。如果攻击机不对靶机(或网关)的流量进行转发,那么就时arp断网攻击;如果攻击机开启对流量的转发,则可以在对方浑然不知的情况下窃取数据包,称为中间人攻击。

3. 实践

(1)ARP欺骗

攻击机和靶机都在虚拟机环境下使用桥接模式,模拟出局域网内不同的两个终端设备。

先讲思路,正常情况下在攻击机无法看见靶机的上网流量,使用arp欺骗靶机后从攻击机上应该就能看见靶机的上网流量。

但是本人在实践时却遇到了一个问题:即使未发起arp欺骗,攻击机仍然能看到靶机上的上网流量,同样靶机也能看到其他主机的上网流量,这与我之前学习到的VMware桥接模式网络拓补图中相违背,理论上桥接模式下所有虚拟主机都连接在一个虚拟交换机下,在这种环境下虚拟主机相互独立,不应该看到其他主机的网络流量。

因此,在实操时我仅把桥接模式下所有主机都看作是使用集线器相连。为了验证arp欺骗是否成功,我在靶机上部署抓包软件,通过分析数据包来证明。

kali机:
ip:192.168.192.252
mac:00:50:56:39:7B:A2
开启ip转发: echo 1 > /proc/sys/net/ipv4/ip_forward

靶机:
ip:192.168.192.78
mac:00:0C:29:44:E8:ED

宿主机:
ip:192.168.192.105
mac:f4-26-79-···-···-···
网关
192.168.192.96
mac:E6-A9-DE-··-··-··

先看看靶机未受攻击前的arp缓存表:

现在使用攻击机对靶机和网关进行单向欺骗:

注意:
单向欺骗:靶机流量先流经攻击机再流经网关,网关流量直接流向靶机
双向欺骗:靶机和网关的流量都需要先经过攻击机再流向对方,也就是都需要经过攻击机二次转发。
现在查看靶机路由表,发现网关mac已经变成攻击机的mac地址

在靶机本地抓包并ping取百度,可以清晰看到每次ping取时请求包多出了一个:

我们取188号、189号和190号数据包,查看数据链路层的mac的源/目的地址:



证明单项欺骗成功,靶机外出流量先流经攻击机,再到达网关,靶机进入流量则是直接通过网关进入。

此时wireshark的专家系统也发出了警告:

我们再进行双向欺骗试试:

ping百度再次抓包:

虽然是看到ICMP应答包变成了两份,但是同时也出现了一些奇怪的现象。

以484~499数据包为例(这是一次ping取产生的数据包):





这与我预料中的有些不一样,又引起了我的困惑
预料中应该是宿主机icmp请求包形式不变,而返回的应答包先从网关流向攻击机网卡在流向靶机网卡。
但是实际却是:返回的应答包从网关流向宿主机网卡,再流向靶机网卡;icmp请求包前两次与单向欺骗相同,但是后面却多出两个icmp请求包,均为主机网卡流向网关。
这个疑惑我也一直没解开,网上对此的资料甚少,只能说虚拟机环境下与真实网络环境仍然存在差异。但是可以肯定的是靶机和网关都被成功欺骗了。


2025.2.23补档

使用真实物理机再次实操,使用ettercap+dirftnet在同局域网下其他对其他主机进行实时图片数据抓取

发现仅能抓取http下传输的图片,对https的内容没用密钥是不可抓取的。


(2)ARP断网攻击

操作同上,只是关闭攻击机流量转发功能
echo 0 > /proc/sys/net/ipv4/ip_forward
此时在使用靶机尝试上网,发现无法访问,证明攻击成功:

4、分析

学会攻击,当然也要了解这种攻击手段存在的缺陷,或者说作为网络安全员面对这种情况如何排查攻击机。
通过上面的实操,其实很容易发现,攻击机的mac地址并未被伪造,所以当局域网内发生arp欺骗时通过流量分析即可定位到攻击机硬件地址,抓获凶手。

5、防御

参考:
https://zhuanlan.zhihu.com/p/553192563

对于普通用户:
1、配置静态arp缓存表

Windows为例: arp -s <ip> <mac>

2、安装arp防火墙(一般安全软件都有这个工具,可能需要手动安装)
3、使用加密协议或者虚拟专用网上网
4、不随意接入开放网络

对管理员:
1、交换机端口安全功能(
2、DHCP Snooping功能
3、划分VLAN

posted @   wyuu101  阅读(882)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示