
面向 Wi-Fi 客户端和接入点的自动化漏洞测试工具,通过帧注入、混合模式测试和数据包捕获分析,检测 FragAttacks 分片/聚合缺陷。
本仓库包含 FragAttacks 工具。它可以测试 Wi-Fi 客户端和接入点是否存在碎片化 与聚合攻击。这些漏洞会影响_所有_受保护的 Wi-Fi 网络。有关这些漏洞的更多信息, 请参阅 fragattacks.com。
以下附加资源可用:
有关自 2020 年 8 月 11 日以来对工具所做出更新的详细概述,请参阅更新日志。 该更新日志还包含 FragAttacks 工具所基于的 hostap 版本信息。
请注意,针对 WPA2 和 WPA3 的攻击是相同的,因为它们的 CCMP 和 GCMP 加密算法完全相同。 较旧的 WPA 网络默认使用 TKIP 加密,而针对 TKIP 的攻击 的适用性已在论文和网站中讨论。为了说明 Wi-Fi 从诞生之初就一直存在漏洞,论文和网站 还简要讨论了针对 WEP 的攻击的适用性。
仅支持特定的无线网卡。这是因为某些网卡可能会覆盖注入帧的序列号或片段号,或者可能重新排列 不同优先级的帧,这会干扰测试工具(即工具可能会判定某个设备是安全的,而实际上它并不安全)。 我已确认以下网卡可以正常工作:
| 网卡 | USB | 5GHz | 混合模式 | 注入模式 |
|---|---|---|---|---|
| Technoethical N150 HGA | 是 | 否 | 已修补驱动/固件 | 已修补驱动/固件 |
| TP-Link TL-WN722N v1.x | 是 | 否 | 已修补驱动/固件 | 已修补驱动/固件 |
| Alfa AWUS036NHA | 是 | 否 | 已修补驱动/固件 | 已修补驱动/固件 |
| Intel Wireless-AC 8265 | 否 | 是 | 已修补驱动 | 是 |
| Intel Wireless-AC 3160 | 否 | 是 | 已修补驱动 | 是 |
| Alfa AWUS036ACM | 是 | 是 | 已修补驱动 | 是 |
| Netgear WN111v2 | 是 | 否 | 已修补驱动 | 是 |
| Alfa AWUS036ACH | 是 | 是 | 否 | 是 |
最后两列的含义如下:
_是_表示该网卡在给定模式下开箱即用。已修补驱动/固件 表示该网卡在配合修补后的驱动和/或固件时兼容。 _否_表示该网卡不支持此模式。 我建议在混合模式下使用测试工具。
请注意,USB 设备可以在虚拟机中使用,并且修改后的驱动和/或固件可以安装在该虚拟机中。 不过,我发现使用虚拟机会使网卡可靠性降低;如果你无法原生安装修改后的驱动/固件, 我建议改用 Live USB 镜像。
我对上述网卡的使用经验可在此处找到。总结如下:
混合模式下的 AWUS036ACM 配合我们最新的驱动 表现可靠,这也是我推荐的型号。一个更便宜但几乎相同的设备是采用 MT7612U 芯片组的设备。更多信息请参见此处。
我之前推荐在混合模式下使用 Technoethical N150 HGA。该适配器与 TP-Link TL-WN722N v1.x 相同,需要使用修补后的驱动和固件。这是经过 最充分测试的适配器之一,但很难买到。因此我现在推荐使用 AWUS036ACM。
Intel 3160 和 8265 受支持并经过了广泛测试。有时它们的固件会崩溃,但 重启后网卡即可再次使用。Intel AX200 与测试工具不兼容。
WN111v2 似乎工作良好,尽管我没有对其进行广泛测试。
AWUS036ACH 的驱动不是 Linux 内核的一部分,需要安装单独的 驱动。在 Kali 上,你可以通过包管理器安装此驱动。该网卡未经广泛测试。
如果你找不到上述网卡,可以搜索替代网卡,这些网卡 有很大概率也能正常工作。当使用未明确支持的网卡时, 我强烈建议先运行注入测试,然后再使用该网卡, 并针对已知存在漏洞的实现使用该工具,以确认工具可以正常工作。
测试工具已在 Ubuntu 20.04 上使用内核 5.8 进行了测试。如果你使用其他 Linux 发行版,请注意 仅支持低于或等于 5.12 的内核版本。
使用 Ubuntu 20.04 时,你必须首先按如下方式安装内核 5.8。请注意,你现有的内核 将继续保留,并且默认情况下仍会被使用:
sudo apt install linux-image-5.8.0-63-generic linux-headers-5.8.0-63-generic linux-hwe-5.8-headers-5.8.0-63 \
linux-modules-5.8.0-63-generic linux-modules-extra-5.8.0-63-generic
现在重启 Ubuntu,启动时按住 shift 键,选择“Advanced options for Ubuntu”,然后通过选择 “Ubuntu, with Linux 5.8.0-63-generic”来启动内核 5.8。你可以编辑 GRUB 配置 使 Ubuntu 默认使用该内核版本。在当前运行的内核下继续执行后续说明。
安装所需依赖:
sudo apt-get update
sudo apt-get install libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libssl-dev \
libdbus-1-dev git pkg-config build-essential macchanger net-tools python3-venv \
aircrack-ng rfkill firmware-ath9k-htc
# 注意:在 Kali Linux 上使用 firmware-atheros 包而不是 firmware-ath9k-htc
现在克隆此仓库、构建工具,并配置一个虚拟 python3 环境:
git clone https://github.com/vanhoefm/fragattacks.git fragattacks
cd fragattacks/research
./build.sh
./pysetup.sh
上述说明只需执行一次。使用 git 拉取新代码后,你需要再次执行 ./build.sh 和 ./pysetup.sh。
使用以下命令安装已修补的驱动:
sudo apt-get install bison flex linux-headers-$(uname -r)
git clone https://github.com/vanhoefm/fragattacks-drivers58.git fragattacks-drivers58
cd fragattacks-drivers58
make defconfig-wifi
make -j 4
sudo make install
这将为 Linux 支持的大多数网卡编译驱动。如果你只想编译
我明确测试过的网卡的驱动,请改用 make defconfig-experiments。
你可能会看到以下警告:
make defconfig-wifi 时,你可能会看到与 -Wyacc 和 -Wformat-overflow 相关的警告。
只要驱动能成功编译,就可以忽略这些警告。.. needs unknown symbol .. 的警告。只要这些警告不包含
/lib/modules/*/updates/ 目录且编译出的驱动正常工作,就可以忽略它们。SSL error 和 sign-file 命令的警告。这意味着对内核模块进行
数字签名失败。通常可以忽略。cat /sys/module/mac80211/parameters/fragattack_version
来验证修改后的驱动是否已就位。如果该文件存在,则说明修改后的驱动已成功安装。现在安装已修补的 ath9k_htc 固件:
cd research/ath9k-firmware/
./install.sh
# 现在重启
./install.sh 脚本假定 ath9k_htc 固件镜像位于
目录 /lib/firmware/ath9k_htc 中。如果你的系统不是这种情况,
则必须手动将 htc_7010.fw 和 htc_9271.fw 复制到适当的目录。
安装已修补的驱动和固件后,你必须拔掉 Wi-Fi 适配器并 重启系统。如果你的 Linux 内核被更新或已修补的驱动被更新, 则必须再次执行上述说明。
请注意,即使你的设备开箱即用,我仍然建议安装修改后的 驱动,因为这可以确保内核和驱动代码中不会出现意外的回归问题。
如果你无法原生安装修改后的驱动/固件,可以下载一个 Live USB 镜像,其中包含修改后的驱动/固件以及我们的测试工具。 或者,你可以使用带有 USB 网卡的虚拟机,尽管我发现 在实际使用中虚拟机不太可靠。
每次要使用测试工具时,你都必须首先以 root 身份加载虚拟 python 环境。 可以使用以下命令完成:
cd research
sudo su
source venv/bin/activate
你现在应该在网络管理器中禁用 Wi-Fi,
以免它与测试工具发生干扰。同时确保没有其他网络服务在产生
出站流量。你可以通过执行 ./droptraffic.sh 使用 iptables 阻止流量来确保这一点
(重新启动即可恢复)。可选地,使用 sudo airmon-ng check 检查还有哪些
其他进程可能正在使用无线网卡并可能干扰我们的工具。
测试工具既可以测试客户端,也可以测试 AP:
测试 AP:通过编辑 research/client.conf 配置你要测试的 AP。这是一个
标准的 wpa_supplicant 配置文件,有关其支持的所有选项的概览,
请参阅 hostap 文档。
测试客户端:你必须使用 --ap 参数执行测试工具(见下文)。这会
指示工具创建一个名为 testnetwork、密码为 abcdefgh 的 AP。使用你要测试的
客户端连接到该网络。默认情况下,客户端必须使用 DHCP 请求 IP。
要编辑所创建 AP 的属性(例如其创建信道),
你可以编辑 research/hostapd.conf。
此模式只需要一张无线网卡,但通常需要已修补的驱动和/或 固件。有关如何安装已修补驱动/固件,请参阅已修补的驱动,有关兼容的 网卡,请参阅受支持的网卡。在此模式下使用以下命令执行测试 工具:
./fragattack.py wlan0 [--ap] $COMMAND
此模式的一个优点是,在测试可能进入睡眠状态的客户端时,它的表现相当好。 不过,如果可能,我建议禁用被测客户端的睡眠功能, 参见处理睡眠模式。
此模式需要两张无线网卡:一张将作为 AP 或客户端,另一张 将用于注入帧。其优点是,此模式可能无需已修补的 驱动即可工作。在此模式下使用以下命令执行测试工具:
./fragattack.py wlan0 --inject wlan1 [--ap] $COMMAND
这里接口 wlan0 将充当合法的客户端或 AP,wlan1 将用于注入 帧。对于 wlan0,可以使用任何在 Linux 上支持普通客户端或 AP 模式的网卡。对于 wlan1,必须使用根据受支持的网卡支持注入模式的网卡。
在此模式下测试客户端时,注入的帧可能是在客户端处于睡眠状态时发送的。 这会导致攻击失败,因此你必须确保客户端不会进入睡眠状态。
此模式是实验性的,仅供研究使用。更多信息请参见 hwsim 模式详情。
你可以按照接口模式中的说明运行测试工具来测试设备,
并将 $COMMAND 替换为下表中的命令之一。我们假定客户端会
使用 DHCP 请求 IP(如果不是这种情况,请参阅静态 IP 配置)。
除非另有说明,所有命令都同时适用于客户端和 AP。
如果设备对给定 $COMMAND 对应的攻击存在漏洞,工具会输出 TEST COMPLETED SUCCESSFULLY;
如果设备不存在漏洞,则输出 Test timed out! Retry to be sure, or manually check result。
测试完成后,你可以使用 CTRL+C 关闭测试工具。
大多数攻击都有若干细微变体,由不同的 $COMMAND 值表示。