在计算机网络中,ARP欺骗、ARP缓存中毒或ARP毒性路由是一种攻击技术,攻击者会向本地区域网络发送(伪造的)地址解析协议(ARP)消息。通常,目的是将攻击者的MAC地址与另一台主机的IP地址(例如默认网关)关联起来,从而导致任何针对该IP地址的流量被发送到攻击者而不是真正的目标主机。
参考:
Wiki
正如Scapy文档所述,ARP缓存中毒攻击会通过VLAN跳转攻击来污染客户端的ARP缓存,从而防止客户端加入网关。
这意味着可怜的客户端将无法向网关(在这种情况下是接入点)发送其数据包,并且无法与外部资源进行通信。但请注意,同一客户端仍将能够与VLAN内的其他主机进行通信,即使攻击者(假设它也连接到相同的WiFi网络)也是如此。
让我们逐步了解此攻击过程。
在继续之前,请查看客户端侧的当前ARP表格(在执行攻击之前)。在Linux上查看ARP表格需要运行以下命令:
$ sudo arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether 54:f6:15:f5:51:55 C wlan0
如您所见,ARP表只有一条记录,其中列出了网关IP地址(192.168.1.1)和其MAC地址(54:f6:15:f5:51:55)。
当攻击者在Scapy中执行以下命令时:
send(Ether(dst=clientMAC)/ARP(op="who-has", psrc=gateway, pdst=client))
它创建并发送以下数据包:
在Ether层,目标MAC地址dst
被设置为指向客户端(受害者)的MAC。同时,Scapy自动填充其他Ether层字段,最重要的是src
字段,该字段设置为攻击者的MAC地址。这意味着在Ether层上,数据包似乎来自攻击者。其他Ether层字段保持不变,并包含默认值。如果您在Scapy中运行以下命令,可以自行查看:
a = Ether(dst="clientMAC")
a.show()
现在,在IP层上,攻击者制作了一个ARP请求数据包,其中将psrc
(源IP)字段设置为指向网关节点的IP(在本例中为AP)。现在,请记住,在之前的Ether层上,Scapy已经替我们填充了src
字段,并将其设置为指向攻击者的MAC地址。这意味着,发送到客户端(受害者)的最终数据包,看起来像来自具有攻击者MAC和网关IP地址的主机。稍后我们会详细讨论它。现在,让我们继续。最后,将客户端的IP地址设置为数据包的目标。
数据包被创建并发送到客户端(受害者)。
客户端接收此数据包并检查数据包的内容。它看到ARP请求从网关IP(假设为192.168.1.1)到达。它检查数据包的Ether层中的MAC地址字段psrc
(假设为a9:2b:24:9c:fd:c7),并更新其ARP表,现在如下所示:
$ sudo arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.1 ether a9:2b:24:9c:fd:c7 C wlan0
如您所见,IP地址保持不变,但MAC地址已更改。因此,现在,每当客户端发送数据包到网关节点时,它实际上会将它们发送到攻击者的MAC地址。如果攻击者的目标是阻止客户端与网关通信,则这些数据包将被丢弃并永远无法传递到所需的目标位置。
当攻击者继续向客户端发送伪造的ARP数据包时,客户端将无法与网关通信。一旦攻击者停止,来自带有真实IP和MAC地址的网关的真实ARP请求最终将到达客户端,恢复正常通信。这就是为什么作为攻击者,您可能想要创建一个循环以发送恶意数据包,如下所示:
sendp(Ether(dst=”CLIENT-MAC”)/ARP(op="who-has", psrc=”GATEWAY-IP”, pdst=”CLIENT-IP”), inter=0.2, loop=1)
通过这个永无止境的循环,您有效地阻塞了客户端和网关之间的通信。