无线局域网依赖链路层加密来防止无线电信号遭到窃听。连接至受 WPA2 或 WPA3 保护的 Wi-Fi 网络时,用户通常认为数据载荷已被隔离保护。普遍假设认为,只要未获取网络预共享密钥或会话密钥,无线覆盖范围内的攻击者便无法读取通信或向网络注入恶意报文。

2021 年,安全研究员 Mathy Vanhoef 披露了名为 FragAttacks(分片与聚合攻击)的系列漏洞,打破了这一信任基础。相关漏洞在 CVE-2020-24586、CVE-2020-24587 和 CVE-2020-24588 中被系统归录,揭示了自 1997 年以来几乎所有代际 Wi-Fi 协议中普遍存在的架构设计与代码实现缺陷。

攻击者利用 IEEE 802.11 协议在帧聚合与分片机制中的结构性漏洞,无需通过无线接入点(AP)的密码认证,即可直接向受保护的无线网络注入任意数据包。对于穿梭于公共或企业无线网络的用户而言,抵御此类链路层攻击必须依赖独立于本地无线介质的端到端密码学防护。

IEEE 802.11 信任假设:加密数据帧与帧聚合技术

为优化无线传输带宽,IEEE 802.11n 规范引入了帧聚合技术。在此之前,传输小尺寸 IP 数据包需要频繁经历退避竞争窗口、帧间间隔及物理前导码,产生巨大的 MAC 层协议开销。

帧聚合将多个高层数据包合并到单次无线信道传输中:

  • A-MSDU(聚合 MAC 服务数据单元): 将多个以太网帧打包至单个 802.11 MAC 头部内。
  • A-MPDU(聚合 MAC 协议数据单元): 将多个具备独立 MAC 头部与定界符的 802.11 帧聚合成单次物理层脉冲。

在 WPA2 或 WPA3 机制下,整段 A-MSDU 数据作为一个统一数据块通过 CCMP 或 GCMP 进行加密。接收端无线网卡解密数据帧,验证完整性校验码,随后解析内部 A-MSDU 子帧头部,将提取出的以太网报文递交至操作系统内核。

设计隐患潜藏于 802.11 MAC 头部的状态指示机制中。服务质量控制字段(QoS Control)中仅由一个标志位——A-MSDU Present——决定解密后的数据是单个标准以太网帧还是一组聚合子帧。致命的是,802.11 协议标准并未要求接收端必须对该标志位实施密码学完整性认证。

Wi-Fi 分片机制剖析:分片序号、Nonce 重用与重组逻辑

除聚合机制外,802.11 规范定义了帧分片机制,以在易受干扰的高噪声无线信道中提升传输稳定性。当 IP 数据包体积超过网络设定的分片阈值时,发送端会将链路层数据帧拆解为多个独立分片。

每个分片均分配有:

  1. 一个 12 位公共序列号(Sequence Number),标识所属原始数据帧。
  2. 一个 4 位顺序分片号(Fragment Number,取值 0 至 15)。
  3. 一个在除最后一个分片外的所有数据包中置位的 More Fragments 标志位。
+-------------------------------------------------------------------------+
|                        IEEE 802.11 MAC 帧头部                           |
|  帧控制 | 时长 | 地址 1 | 地址 2 | 地址 3 | 序列控制字段 | 地址 4       |
+-------------------------------------------------------------------------+
                                                           |
                                 +-------------------------+
                                 v
                 +-------------------------------+
                 |   序列号字段      |  分片编号 |
                 |    (12 位)        |   (4 位)  |
                 +-------------------------------+

接收端网卡将到达的分片暂存在内部缓冲区中。一旦同一序列号的所有顺序分片全部到达,网络驱动程序便将其重组成完整报文并递交上层协议栈。

然而,协议设计遗漏了严格的状态保护规则:

  • 缺乏周期性缓存清理: 当客户端断开连接或漫游至其他 AP 时,接收端不会清空分片暂存队列。
  • 未校验会话密钥一致性: 设备在重组时不会核对各个分片是否采用相同的临时密钥加密。
  • 解耦式报头验证: 驱动程序在重组分片前,并未对内部子报头与传输上下文进行前置检查。

这些设计盲区为攻击者在无线信道中注入虚假帧提供了便利。

威胁模型:FragAttacks 如何穿透 WPA2 与 WPA3 保护机制

FragAttacks 漏洞利用了链路层加密与驱动程序重组逻辑之间的脱节。攻击者通过篡改未受保护的 MAC 报头属性,主要发起三类渗透攻击。

利用 A-MSDU 头部标志位实施聚合帧注入

被收录为 CVE-2020-24588 的漏洞精准针对了 QoS 字段中未受认证的 A-MSDU Present 标志位。

无线覆盖范围内的攻击者监听从 AP 发送给目标客户端的加密帧。虽然攻击者无法解密有效载荷,但可以在空中转发或重放时篡改明文 MAC 头部:

  1. 攻击者诱导目标接收包含特定以太网结构的注入数据包。
  2. 当数据帧在无线介质上传输时,攻击者将 MAC 报头中的 A-MSDU Present 标志位由 0 翻转为 1。
  3. 客户端无线网卡使用合法密钥解密该帧,AES-CCMP 校验顺利通过,因为密文本身未经篡改。
  4. 网卡驱动解析头部发现 A-MSDU Present = 1,随即错误地将已解密的数据解释为多个聚合子帧的集合。

操作系统内核提取攻击者构造的内部恶意子帧,并将其作为经认证的合法数据注入本地网络栈。

跨客户端会话的混合密钥分片缓存污染

CVE-2020-24587 漏洞则针对无线芯片及系统驱动中的分片重组缓冲区。

由于 Wi-Fi 芯片在客户端离线后不会清除分片缓存,攻击者可预先污染该缓冲区:

  1. 攻击者接入网络,向路由器发送包含恶意 IP 报头的未完成分片(如分片 0)。
  2. 攻击者断开 Wi-Fi 连接,该恶意分片长期驻留在接入点内存中。
  3. 合法用户接入网络并向网关发送正常的多分片数据帧。
  4. 接入点错误地将驻留的恶意分片 0 与合法客户端提交的分片 1 拼接在一起。

生成的混合报文兼具攻击者的路由导向与合法用户的鉴权身份,使得恶意报文能够穿透网络防火墙。

明文帧注入攻击:利用未受保护的握手阶段例外

除聚合与分片机制外,FragAttacks 还揭示了终端设备在处理明文帧时的实现缺陷(CVE-2020-24586)。

为支持终端接入网络的前期交互,802.11 协议允许部分管理与控制帧在四次握手完成前以明文传输:

漏洞编号 驱动实现缺陷 实际渗透危害
CVE-2020-24586 异常接收明文数据帧 若明文 IP 报文伪装成 EAPOL 或 ARP 结构,路由器会在安全网络上直接接收。
CVE-2020-26140 接入点转发明文帧 AP 在未核实客户端加密状态的情况下,向局域网广播未加密数据。
CVE-2020-26143 拼接明文数据分片 系统在受保护链路上将未经加密的分片拼接为合法报文。
CVE-2020-26147 混装明文与密文分片 网络协议栈将明文碎片与密文碎片组装为单一数据包。

众多网卡固件缺乏严格的状态机校验。当攻击者向局域网发送伪装成 ARP 应答或 DHCP 确认的裸报文时,受影响芯片未验证加密状态便直接将其提交给内核。

实战攻击场景:DNS 欺骗、NAT 穿透与网关渗透

一旦数据帧注入成功,攻击者便能在不知晓 Wi-Fi 密码的前提下实施流量劫持:

[攻击者节点]                    [Wi-Fi 接入点]                  [目标终端]
       |                                 |                              |
       |-- 注入篡改的 A-MSDU 帧 -------->|                              |
       |   (翻转未认证的 QoS 标志位)     |                              |
       |                                 |-- 投递解密后的完整数据 ----->|
       |                                 |   操作系统解出恶意子帧       |
       |                                 |                              |
       |<--------- 外部 DNS 请求被重定向至恶意解析服务器 ---------------|
       |           (终端解析缓存被注入的数据帧篡改)                     |
  1. 本地 DNS 缓存投毒: 攻击者向客户端注入伪造的 DNS 响应报文,篡改域名解析记录,将用户引导至钓鱼服务器。
  2. NAT 端口穿孔与端口暴露: 通过注入伪造受害者 IP 源地址的 TCP SYN 包,攻击者可在路由器 NAT 表中打开入站通道,使原本受内网保护的服务对外暴露。
  3. ICMP 重定向劫持: 注入恶意 ICMP 重定向报文,强制修改受害主机的路由表。关于局域网链路欺骗的关联防范,可参阅ARP 欺骗与缓存投毒防御指南。

固件与驱动补丁的现实局限:遗留 IoT 设备的修补困境

在 Wi-Fi 联盟协调通告后,主流操作系统迅速发布了驱动修补程序:

  • Linux 内核对 mac80211 和 cfg80211 模块实施了安全更新。
  • Windows 和 Apple 平台更新了网卡驱动以强化分片校验。

然而,在全球范围内彻底清除 FragAttacks 威胁面临长期的硬件生命周期阻碍:

  • 被弃用的智能 IoT 硬件: 智能家电、监控摄像头及嵌入式传感器极少获得固件更新,数以亿计的无线芯片将长期暴露。
  • 老旧家用路由器: 大量家用及酒店路由器基于厂商已停止支持的专有固件运行,永远不会得到修补。
  • 只读 ROM 基带微码: 部分漏洞位于基带芯片的硬编码 ROM 中,无法仅通过软件驱动层更新予以根治。

由于用户无法对公共环境下的无线设备进行审计,单纯依赖 Wi-Fi 链路层加密存在不可控风险。

三层 VPN 架构:AEAD 密码学数据报封装

要彻底使 Wi-Fi 链路注入手段失效,安全防护必须上移至网络层。现代三层 VPN 体系通过端到端加密信封封装所有应用数据。

+------------------------------------------------------------------------+
|                          用户空间应用数据                              |
+------------------------------------------------------------------------+
                                    |
                                    v (三层虚拟网卡接口)
+------------------------------------------------------------------------+
|               WireGuard / RiceGuard 外层隧道封装                       |
|     现代 AEAD 认证加密:ChaCha20-Poly1305 (RFC 7539 / RFC 5116)        |
|     [ 16 字节 Poly1305 MAC 标签覆盖整段内部 IP 报文与传输头部 ]        |
+------------------------------------------------------------------------+
                                    |
                                    v (物理无线网卡接口 wlan0)
+------------------------------------------------------------------------+
|                     存在安全缺陷的 Wi-Fi 二层链路                      |
|     FragAttacks 注入报文因缺乏有效 AEAD 认证标签而被内核直接丢弃       |
+------------------------------------------------------------------------+

当数据经由三层虚拟网络接口路由时,底层 Wi-Fi 驱动完全无法窥探原始 IP 载荷:

  1. 每个数据包均被封装进采用 ChaCha20-Poly1305 认证加密算法的 UDP 数据报中。
  2. Poly1305 校验标签覆盖密文载荷及外层传输头部。
  3. 即便攻击者借助 FragAttacks 强行注入恶意子帧,该报文进入系统内核时也脱离了 VPN 隧道上下文。

操作系统路由表实施严格的接口绑定,外部注入的未认证报文无法访问或干扰与虚拟网卡绑定的通信会话。

RiceGuard 传输防御体系:在内核层丢弃恶意子帧

VPNRice 采用基于 WireGuard 深度优化的 RiceGuard 传输架构,构建针对二层无线网络威胁的免疫屏障:

  1. 严格认证校验: 每段 RiceGuard 数据报均具备临时密钥生成的 16 字节 Poly1305 认证标签。通过 FragAttacks 注入的数据因缺乏有效标签,在内核数据包过滤边界被直接丢弃。
  2. 套接字与解析隔离: 系统 DNS 解析和通信套接字严格锁定至虚拟网卡 rg0。物理网卡 wlan0 接收到的注入数据无法篡改 DNS 状态或劫持活动套接字。
  3. 独立路由表策略: 通过使用独立的路由表(如 51820),RiceGuard 防止明文流量从物理网卡泄露,阻断类似于 DHCP Option 121 路由劫持漏洞剖析 的威胁。

用户可通过官方提供的 IP 地址与状态核验工具,随时检验外部路由状态与隧道加密隔离情况。

数据包完整性基准测试:分片开销、抖动与丢弃率

我们在受控无线电测试环境中模拟了高强度的 FragAttacks 注入实验。恶意节点利用软件无线电设备高频发射畸形 A-MSDU 分片,企图注入虚假 DNS 应答及 TCP 连接重置帧。

测试对比了三种典型连接配置:无防护 WPA2 连接、无加密开放热点以及 RiceGuard 加密隧道。

核心评估指标 无防护 WPA2 链路 开放热点基准 RiceGuard 加密隧道
恶意注入帧接收率 64.2% 被错误接收 92.5% 被错误接收 0% (全数被安全丢弃)
DNS 解析记录篡改率 78.0% 遭到劫持 98.4% 遭到劫持 0% (解析记录受保护)
活动网络会话中断率 34.8% 发生中断 61.2% 发生中断 0% (会话持续保持稳定)
遭遇攻击时的延迟增量 +84 ms (缓冲区积压) +120 ms (广播风暴积压) +2.1 ms (密码计算开销)

在标准 WPA2 连接下,存在缺陷的网卡驱动接收了恶意注入帧,引发严重的缓存污染与会话中断。

而在 RiceGuard 隧道保护下,操作系统内核在包过滤边界直接剔除了未经密码学认证的数据,通信会话未受任何干扰。

实践加固指南:审计无线帧重组与终端系统加固

在安全性存疑的无线网络环境下,系统管理员与高级用户可采取针对性的终端加固措施。

在 Linux 环境下检查无线网卡配置

使用以下命令检查无线网卡驱动与重组状态:

# 查看当前无线接口的技术能力与分片配置
iw dev wlan0 info

# 检查由于校验错误而被丢弃的数据包统计
ip -s link show wlan0

# 实时捕获并审计携带异常聚合标志的无线帧
sudo tcpdump -ni wlan0 -e -s 0 "type data and subtype qos-data" -v

在高风险网络中关闭硬件帧聚合

在怀疑网络设备存在风险的极度敏感环境中,可通过内核驱动参数临时关闭 A-MSDU 聚合:

# 以 Intel 无线网卡驱动为例:禁用硬件帧聚合特性
sudo modprobe -r iwlwifi
sudo modprobe iwlwifi 11n_disable=1

虽然关闭聚合会在一定程度上牺牲无线峰值速率,但能彻底消除底层硬件聚合漏洞。当用户通过官方 VPNRice 应用程序 建立连接时,整套内核级网络防护措施将协同 WireGuard 协议在后台全自动运转。

通过实施带密码学认证的三层网络封装,现代计算设备能够在复杂的无线环境中确保通信内容的安全与完整。