别再只当脚本小子了!用Wireshark亲手分析一次ARP Spoof攻击的完整数据流

📅 2026/7/21 19:34:59 👁️ 阅读次数 📝 编程学习
别再只当脚本小子了!用Wireshark亲手分析一次ARP Spoof攻击的完整数据流

从数据包视角拆解ARP欺骗:一次完整的流量分析实战

当你发现网络突然变慢,或者敏感信息莫名其妙泄露时,有没有想过可能是ARP欺骗在作祟?作为局域网中最经典的中间人攻击手段,ARP欺骗往往被初学者视为简单的"脚本工具",但真正理解其底层流量特征的安全工程师,才能建立起有效的防御体系。今天,我们就用Wireshark亲手解剖一次完整的ARP Spoof攻击数据流,看看攻击者究竟如何悄无声息地劫持你的网络会话。

1. 实验环境搭建与攻击原理

在开始抓包前,我们需要先理解ARP协议的工作机制。ARP(Address Resolution Protocol)本质是一个局域网内的"电话簿",负责将IP地址解析为MAC地址。正常情况下,当主机A需要与主机B通信时,会广播ARP请求询问"谁的IP是B的地址?",只有B会回应自己的MAC地址。而ARP欺骗的核心,就是伪造这个应答过程。

搭建实验环境时,我通常建议使用三台虚拟机:

  • 攻击机:Kali Linux(192.168.1.100)
  • 靶机:Windows 10(192.168.1.101)
  • 网关:模拟路由器的Linux主机(192.168.1.1)

关键工具链配置:

# Kali上安装必要工具 sudo apt update && sudo apt install -y dsniff wireshark # 启用IP转发(让被劫持的流量还能正常路由) echo 1 > /proc/sys/net/ipv4/ip_forward

ARP欺骗攻击的执行命令非常简单:

arpspoof -i eth0 -t 192.168.1.101 192.168.1.1

这行命令背后实际发生了两件事:

  1. 持续向靶机(192.168.1.101)发送伪造的ARP响应,声称网关(192.168.1.1)的MAC地址是攻击机的MAC
  2. 同时向网关发送伪造的ARP响应,声称靶机的MAC地址也是攻击机的MAC

2. Wireshark抓包与ARP流量特征分析

启动Wireshark捕获eth0网卡流量后,我们重点关注ARP协议类型的数据包。正常情况下,一个健康的局域网中ARP流量应该非常稀疏,主要呈现以下特征:

  • ARP请求是广播帧(Destination: ff:ff:ff:ff:ff:ff)
  • ARP响应是单播帧
  • 每个IP对应的MAC地址在ARP缓存中会保持2-10分钟(取决于系统配置)

但当ARP欺骗发生时,流量模式会出现明显异常:

攻击阶段的可疑特征

流量特征正常情况ARP欺骗时
ARP响应频率低频高频(每秒1-5个)
ARP响应类型请求后响应无请求直接响应
源MAC地址真实设备MAC攻击者MAC
目标IP一致性请求与响应匹配响应包可能包含无关IP

在Wireshark中,我们可以用以下过滤表达式快速定位可疑流量:

arp.opcode == 0x0002 && !(arp.src.proto_ipv4==192.168.1.1 && arp.src.hw_mac==00:11:22:33:44:55)

这个过滤器会捕获所有ARP响应包(opcode 0x0002),并排除掉真实网关(假设其MAC为00:11:22:33:44:55)发送的合法响应。

3. 关键数据包逐帧解析

打开捕获的pcap文件,按时间顺序观察几个关键帧:

Frame 1: 靶机发送的正常ARP请求

No. Time Source Destination Protocol Info 1 0.000000 192.168.1.101 ff:ff:ff:ff:ff:ff ARP Who has 192.168.1.1? Tell 192.168.1.101

Frame 2: 网关回应的合法ARP响应

No. Time Source Destination Protocol Info 2 0.000042 192.168.1.1 00:11:22:33:44:55 ARP 192.168.1.1 is at 00:11:22:33:44:55

Frame 3: 攻击机发送的伪造ARP响应(未经请求)

No. Time Source Destination Protocol Info 3 1.023456 192.168.1.1 00:11:22:33:44:66 ARP 192.168.1.1 is at aa:bb:cc:dd:ee:ff

这里最关键的异常点是:

  • 攻击机(aa:bb:cc:dd:ee:ff)冒充网关IP(192.168.1.1)
  • 该响应未经任何请求直接发送(Gratuitous ARP)
  • 响应目标MAC是靶机的真实MAC(00:11:22:33:44:66)

4. TCP会话劫持的流量证据

ARP欺骗成功后,所有靶机的外网流量都会流经攻击机。在Wireshark中可以看到:

  1. 靶机与网关之间的TCP三次握手:

    • 靶机(192.168.1.101)→ 攻击机(aa:bb:cc:dd:ee:ff)
    • 攻击机(aa:bb:cc:dd:ee:ff)→ 真实网关(00:11:22:33:44:55)
  2. 数据传输阶段的MAC地址异常:

    • 本应直接发给网关的包,目标MAC却始终是攻击机的MAC
    • 攻击机会修改源MAC后转发给网关,形成完整的中间人链路

通过Conversations统计视图(Statistics → Conversations → TCP tab),可以清晰看到所有流量都经过攻击机中转:

Address AAddress BPacketsBytes
192.168.1.101192.168.1.10012001.2MB
192.168.1.100192.168.1.111801.1MB

5. 防御策略与检测方案

理解了攻击原理后,我们可以部署多层次的防御措施:

网络层防护

  • 启用交换机的动态ARP检测(DAI)功能
  • 配置静态ARP绑定(适用于设备较少的环境)
Switch(config)# ip arp inspection vlan 1 Switch(config)# ip arp inspection validate src-mac dst-mac ip

主机层防护

  • Windows系统启用ARP缓存保护
netsh interface ipv4 set interface <ID> arpfilter=enable
  • Linux系统配置ARP静态条目
arp -s 192.168.1.1 00:11:22:33:44:55

检测方案对比

检测方法实现复杂度有效性适用场景
ARPwatch监控小型网络
流量镜像分析关键业务网络
交换机DAI企业级网络
终端安全软件移动办公环境

在实际项目中,我发现结合NetFlow/sFlow流量分析和终端ARP监控是最有效的组合方案。曾经在一次安全评估中,通过以下Python脚本检测到内网的ARP欺骗行为:

from scapy.all import sniff, ARP def detect_arp_spoof(pkt): if pkt[ARP].op == 2: # ARP响应 real_mac = get_real_mac(pkt[ARP].psrc) if real_mac and real_mac != pkt[ARP].hwsrc: print(f"[!] ARP Spoof detected: {pkt[ARP].psrc} is at {pkt[ARP].hwsrc} (should be {real_mac})") sniff(prn=detect_arp_spoof, filter="arp", store=0)

6. 进阶分析:SSL剥离攻击的关联证据

更高级的攻击者会在ARP欺骗基础上实施SSL剥离,迫使受害者使用HTTP协议。在流量中表现为:

  1. 大量302重定向响应
  2. HTTPS链接被替换为HTTP
  3. 注入的JavaScript代码片段

这类攻击的检测要点包括:

  • 监控80端口的异常流量突增
  • 检查HTTP响应头中的Content-Length不匹配
  • 分析DOM修改行为(可通过Selenium自动化检测)

在防御方案上,除了常规的HSTS预加载列表,我还建议在内部网络部署透明HTTPS代理,确保所有流量强制加密。这个方案在金融行业客户中实施后,成功阻断了多起内部ARP欺骗攻击。