概述
FragAttacks(Fragmentation and Aggregation Attacks)是由安全研究员 Mathy Vanhoef 于 2021 年公开的一系列 Wi-Fi 安全漏洞,影响范围覆盖所有现代 Wi-Fi 安全协议(包括 WPA3)。这些漏洞利用了 Wi-Fi 802.11 标准中帧分片(Fragmentation)和帧聚合(Aggregation)机制的设计缺陷和实现漏洞,可被攻击者用于在 Wi-Fi 通信范围内窃取用户数据或攻击设备。
兼容网卡列表
在进行 FragAttacks 测试之前,需要选择支持混杂模式和注入模式的网卡:
| 网卡型号 |
USB |
5GHz |
混杂模式 |
注入模式 |
芯片 |
| Technoethical N150 HGA |
Yes |
No |
需要修补驱动/固件 |
需要修补驱动/固件 |
— |
| TP-Link TL-WN722N v1.x |
Yes |
No |
需要修补驱动/固件 |
需要修补驱动/固件 |
— |
| Alfa AWUS036NHA |
Yes |
No |
需要修补驱动/固件 |
需要修补驱动/固件 |
— |
| Intel Wireless-AC 8265 |
No |
Yes |
需要修补驱动 |
Yes |
— |
| Intel Wireless-AC 3160 |
No |
Yes |
需要修补驱动 |
Yes |
— |
| Alfa AWUS036ACM |
Yes |
Yes |
需要修补驱动 |
Yes |
MT7612U |
| Netgear WN111v2 |
Yes |
No |
需要修补驱动 |
Yes |
— |
| Alfa AWUS036ACH |
Yes |
Yes |
No |
Yes |
— |
建议:推荐使用 Alfa AWUS036ACM(MT7612U 芯片),该网卡支持 2.4GHz 和 5GHz 双频段,注入模式兼容性好,且仅需修补驱动即可支持混杂模式。
涉及的 CVE 漏洞
FragAttacks 涵盖了多个 CVE 编号的漏洞,分为设计层面缺陷和实现层面缺陷两类:
设计层面漏洞
| CVE 编号 |
类型 |
描述 |
| CVE-2020-24586 |
分片缓存攻击 |
设备在重新连接时不清除内存中的分片缓存 |
| CVE-2020-24587 |
混合密钥攻击 |
使用不同密钥加密的分片可被重组 |
| CVE-2020-24588 |
聚合攻击 |
接受非 SPP(Security Policy Processing)A-MSDU 帧 |
实现层面漏洞
| CVE 编号 |
类型 |
描述 |
| CVE-2020-26139 |
转发漏洞 |
转发未经认证发送者的 EAPOL 帧 |
| CVE-2020-26140 |
明文接收 |
在受保护网络中接受明文数据帧 |
| CVE-2020-26141 |
TKIP MIC 校验 |
不验证分片帧的 TKIP MIC |
| CVE-2020-26142 |
重组漏洞 |
将分片帧作为完整帧处理 |
| CVE-2020-26143 |
明文注入 |
接受分片的明文数据帧 |
| CVE-2020-26144 |
A-MSDU 注入 |
接受以 RFC1042 头开始的明文 A-MSDU 帧 |
| CVE-2020-26145 |
广播分片 |
接受明文广播分片 |
| CVE-2020-26146 |
非连续 PN |
重组具有非连续包编号的加密分片 |
| CVE-2020-26147 |
混合分片 |
重组加密/明文混合分片 |
测试工具使用
fragattack.py 基本用法
1 2 3 4 5
| usage: fragattack.py [-h] [--inject INJECT] [--inject-test INJECT_TEST] [--inject-test-postauth INJECT_TEST_POSTAUTH] [--hwsim HWSIM] [--ip IP] [--peerip PEERIP] [--ap] [--debug DEBUG] [--delay DELAY] [--inc-pn INC_PN] iface testname [actions]
|
关键参数说明
| 参数 |
说明 |
iface |
用于测试的网络接口 |
testname |
要运行的测试名称或标识符 |
--inject INJECT |
用于注入帧的接口 |
--inject-test INJECT_TEST |
通过监控接口测试注入功能 |
--inject-test-postauth |
在认证之后运行注入测试 |
--hwsim HWSIM |
使用监控模式的接口,通过 hwsim 模拟 AP/客户端 |
--ip IP |
作为发送者使用的 IP 地址 |
--peerip PEERIP |
被测设备的 IP 地址 |
--ap |
作为 AP 运行以测试客户端 |
--debug DEBUG |
调试输出级别 |
帧操作参数
| 参数 |
说明 |
--delay DELAY |
特定测试中分片之间的延迟 |
--inc-pn INC_PN |
测试分片中的非顺序包编号 |
--amsdu |
将 ping 封装在 A-MSDU 帧中 |
--amsdu-fake |
设置 A-MSDU 标志但包含正常载荷 |
--amsdu-spp |
强制认证 QoS A-MSDU 标志 |
请求覆盖参数
| 参数 |
说明 |
--arp |
使用 ARP 请求覆盖默认请求 |
--dhcp |
使用 DHCP discover 覆盖默认请求 |
--icmp |
使用 ICMP ping 请求覆盖默认请求 |
--ipv6 |
使用 ICMPv6 路由器通告覆盖默认请求 |
--udp UDP |
使用指定端口的 UDP 包覆盖默认请求 |
--no-dhcp |
作为 AP 时不回复 DHCP 请求 |
--icmp-size SIZE |
设置 ICMP ping 请求大小 |
--padding PADDING |
为 ARP/DHCP/ICMP 请求添加填充数据 |
密钥协商参数
| 参数 |
说明 |
--rekey-request |
作为客户端主动请求 PTK 重协商 |
--rekey-plaintext |
使用明文 EAPOL 帧进行 PTK 重协商 |
--rekey-early-install |
在重协商期间发送 Msg3 后安装 PTK |
--full-reconnect |
先取消认证再重新连接 |
高级参数
| 参数 |
说明 |
--bcast-ra |
使用广播接收器地址发送 ping |
--bcast-dst |
发送到 AP 时使用广播目标地址 |
--bad-mic |
使用无效的认证标签发送 ping |
--pn-per-qos |
为每个 QoS TID 使用独立的 Tx 包计数器 |
--no-qos |
不发送 QoS 数据帧(实验性) |
--freebsd-cache |
发送 EAPOL 帧作为广播 EAPOL/A-MSDU |
--connected-delay DELAY |
AfterAuth 后等待指定秒数再触发 Connected 事件 |
--pre-test-delay DELAY |
启动测试前的延迟 |
--to-self |
发送源和目标 MAC 地址相同的 ARP/DHCP/ICMP |
--no-drivercheck |
不检查是否使用了修补后的驱动 |
--stay-up |
测试完成后不退出 |
测试示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ./fragattack.py wlan0 --inject-test wlan1
./fragattack.py wlan0 ping --ap
./fragattack.py wlan0 ping --amsdu
./fragattack.py wlan0 ping --inc-pn 2
./fragattack.py wlan0 ping --arp
|
攻击原理
分片攻击
Wi-Fi 802.11 协议支持将大型帧分割为更小的分片进行传输。FragAttacks 利用了以下设计缺陷:
- 分片缓存不清除:设备在断开并重新连接时,不会清除之前缓存的分片数据。攻击者可以先发送恶意分片,在目标重新连接后利用缓存的分片完成攻击
- 混合密钥重组:协议未强制要求所有分片使用同一密钥加密。攻击者可以混合使用不同会话的分片来构造恶意帧
- 非顺序包编号:某些实现不验证分片帧的包编号是否连续,允许注入伪造的分片
聚合攻击
A-MSDU(Aggregate MAC Service Data Unit)是一种帧聚合机制:
- A-MSDU 标志伪造:协议中 A-MSDU 标志位未受到认证保护,攻击者可以翻转该标志位
- 明文帧注入:某些实现在受保护的 Wi-Fi 网络中仍然接受明文数据帧,允许直接注入恶意数据
安全提示
⚠️ 重要警告: FragAttacks 测试工具仅可用于授权的安全评估和学术研究。使用前请注意:
- 仅在自己拥有或获得明确授权的网络上进行测试
- 未经授权对他人 Wi-Fi 网络进行攻击测试属于违法行为
- 测试前应确保使用的网卡驱动已正确修补
- 建议在隔离的实验环境中进行测试
- 发现漏洞后应及时向设备厂商报告
参考资料