kali@kali:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Kali
Description: Kali GNU/Linux Rolling
Release: 2020.1
Codename: kali-rolling
我们知道,虽然终端设备想要上网必须具有公有 IP 地址,但是在 Internet 的 TCP/IP 协议中,IP 地址的作用是标识一台主机或路由器与一条链路的接口,也就是说 IP 地址指明了数据由一个网络传输到另一个网络的路径,但是我们知道,为了节约 IP 地址,通常情况下,在一个内部网络中,主机常常使用 RFC 规定的三种私有 IP 地址作为局域网中主机的 IP 地址,而且主机的 IP 地址是由该网络的路由器动态分配的,如果数据的传输仅仅依赖于 IP 地址,那么当数据到达一个内部网络中时就可能因为目标主机的 IP 地址发生改变而将数据传输到了错误的目标主机。但是不同设备的物理地址(MAC 地址)是全网唯一的,而且一般也不会被改变(MAC 地址是写入网卡的,一般情况下是固定不变的),因此使用 MAC 地址作为信息的标识,定位目标网络设备就可以保证信息能够正确抵达目标主机。而通过目标设备的IP地址查找目标设备的 MAC 地址就是 ARP 协议的基本功能。
1.1. ARP 协议的工作过程
由于内部网络中主机的IP地址往往是动态分配的,因此,在主机中是有 ARP 缓存的,记录着本网络中 IP 地址与 MAC 地址的对应关系。那么,这个 ARP 缓存是怎么生成的呢?首先,当网络中的主机 A 需要向主机 B 发送信息时,会将包含目标 IP 地址的 ARP 请求广播到该网络中的所有主机上,网络中的其他主机在收到主机 A 的 ARP 请求后可以自主的发送 ARP 应答报文,应答中包含自己的 IP 和自己的 MAC 地址,主机 B 也会发送这样的应答报文给主机 A. 这样主机 A 就知道了主机 B 的 MAC 地址与 IP 地址了。
ARP 攻击的第一步就是 ARP 欺骗。由上述“ARP 协议的工作过程”我们知道,ARP 协议基本没有对网络的安全性做任何思考,当时人们考虑的重点是如何保证网络通信能够正确和快速的完成——ARP 协议工作的前提是默认了其所在的网络是一个善良的网络,每台主机在向网络中发送应答信号时都是使用的真实身份。不过后来,人们发现 ARP 应答中的 IP 地址和 MAC 地址中的信息是可以伪造的,并不一定是自己的真实 IP 地址和 MAC 地址,由此,ARP 欺骗就产生了。
假设一个网络中有 3 台主机,分别为 A、B 和 C. 当主机 A 向网络中发送了 ARP 请求时,用于攻击的主机 C 可以假装是 B, 然后向主机 A 发送一个伪造的 ARP 应答报文,由于 A 并不会采取措施验证该报文真伪,而是直接存入自己的 ARP 缓存并在需要时使用(ARP 缓存分两种,一种是静态 ARP 缓存,该类缓存只要主机不关机就一直存在。另一类是动态 ARP 缓存,该类缓存是有时效限制的,一般 ARP 动态缓存的最长生命周期是 10 分钟,如果一个动态缓存项目在 2 分钟内没有被使用,则删除,如果在两分钟内被使用了,则增加两分钟的生命周期,直到达到 10 分钟的最长生命周期后进行更新),由此,C 就成功的欺骗了 A. 那么来自主机 B 的正确的应答报文去哪了?如果 A 收到了来自 B 的正确的应答报文,更新了自己的 ARP 缓存,那么 C 的 ARP 欺骗不就失败了吗?确实会发生这种情况,但是如果 C 不断的向网络中的各台主机大量发送伪造的 ARP 应答报文,直到同时欺骗了 A 和 B, C 就成功的对主机 A 和 B 进行了 ARP 欺骗。接下来 C 就可以监听 A 和 B 之间的流量,伪造 A 和 B 的通信内容或者阻止 A 和 B 的通信。
2.3. ARP MAC 地址泛洪攻击
交换机中会保存一份内网中活跃主机的 MAC 地址与 IP 地址对应关系的数据表,此时,如果交换机要转发数据包的主机在该数据表中,那么,交换机就会按照 MAC 地址与端口自动完成数据包的转发。
但是,如果交换机与内网中的某台主机长时间未通信,那么,相应的 MAC 地址表就会因“老化”而被自动删除。交换机会直到下次需要与该主机进行通信时才会通过广播的方式获取该主机的 MAC 地址。
于是,ARP MAC 地址泛洪攻击的原理就是向交换机发送大量的伪造 MAC 地址,挤占掉交换机 MAC 地址数据表的全部存储空间,使得因发生老化而被删除的 MAC 地址无法再被重新添加,此时,从交换机发出的所有数据包都会变成请求获取内网目标主机 MAC 地址的广播包——这时,我们就可以对交换机发动 ARP 仿冒与欺骗攻击了。
我们知道,IP 地址位于 OSI 模型的第三层(网络层),MAC 地址位于 OSI 模型的第二层(数据链路层)。而路由器工作在三层或者三层以上。由此看来,用于连接 IP 地址与 MAC 地址的 ARP 协议是不能跨越第三层的(ARP 工作在网络层),因此 ARP 广播包也不可能通过路由器到达其他网络。
ARP 攻击之所以能够产生,就是因为伪造了对 ARP 广播的应答,综合上述分析可知,如果用于攻击的主机并不在目标网络中,就接收不到目标网络中 ARP 请求的广播,其伪造的 ARP 应答也无法到达目标网络。因此,ARP 攻击只能发生在局域网(子网)内部。正因如此,我们只能对目标主机 IP 地址网络号部分以及子网掩码与我们的攻击机器 IP 地址网络号部分和子网掩码相同的主机发动 ARP 攻击。
三、补充
3.1. RARP 协议
ARP 协议的作用就是在已知内网其他设备的 IP 地址的情况下,获取这些内网设备的 MAC 地址的协议。而 RARP 协议(RARP: Reverse Address Resolution Protocol, 即“反向地址转换协议”)则是为了让只知道自己的 MAC 地址的设备从网关那里获取自己的 IP 地址的协议。