Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
macstealer — MacStealer:Wi-Fi 客户端隔离绕过 | Kitploit
工具/GitHubGitHub/vanhoefm/macstealer
Wi-Fi审计漏洞分析漏洞利用信息收集网络安全无线安全渗透测试红队
GitHubvanhoefm/macstealer

macstealer

MacStealer:Wi-Fi 客户端隔离绕过

查看仓库
55260108个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

MacStealer:Wi-Fi 客户端隔离绕过

1. 引言

本仓库包含 MacStealer。它可以测试 Wi-Fi 网络是否存在客户端隔离绕过漏洞 (CVE-2022-47522)。我们的攻击可以在 MAC 层拦截(窃取)发往其他客户端的流量, 即使客户端之间被禁止互相通信。该漏洞影响存在恶意内部人员的 Wi-Fi 网络,我们的攻击可以绕过客户端隔离(有时也称为 AP 隔离)。该攻击还可用于绕过动态 ARP 检测(DAI),并且很可能还可以绕过其他阻止客户端相互攻击的方法。该攻击也被称为 安全上下文覆盖攻击,参见我们 USENIX Security '23 论文 的第 5 节(仓库)。

受影响的网络的具体示例包括:

  • 用户之间可能互不信任的企业网络,这些网络使用客户端隔离或 ARP 检测等技术来防止用户相互攻击。例如,同时为访客和员工提供账户的公司网络,以及 eduroam 和 govroam 等网络。

  • 受 Passpoint(原 Hotspot 2.0)保护的公共热点。这些热点可以让你自动、安全地连接。例如,它可以使用你手机的 SIM 卡无缝认证你的身份。

  • 启用了客户端隔离的家庭 WPA2 或 WPA3 网络。这包括为访客或不安全的(IoT)设备提供独立 SSID 的网络。还包括使用多个密码以进一步隔离设备的网络,这被称为 Multi-PSK、Identity PSK、per-station PSK 或 EasyPSK。更多信息请参阅 威胁模型讨论。

  • 基于 WPA3 SAE-PK 的公共热点。这些热点受共享公共密码保护,但攻击者无法利用这个公开已知的密码。

我们强调,我们的攻击无法绕过 VLAN。换句话说,根据目前的实验,我们的攻击无法用来攻击另一个 VLAN 中的设备。

我们还提供了 USENIX Security '23 中其他结果的仓库。

2. 漏洞详细信息

该攻击的核心思想在于,客户端认证的方式与数据包如何路由到正确的 Wi-Fi 客户端之间没有关联。也就是说,认证是基于密码、用户名、802.1X 身份和/或证书完成的,但一旦客户端连接成功,数据包的路由则基于 MAC 地址进行。恶意内部人员可以滥用这一点,通过断开受害者连接,然后使用攻击者自己的凭据以受害者的 MAC 地址连接来拦截发往该 Wi-Fi 客户端的数据。任何仍在发往受害者途中的数据包,例如受害者仍在加载的网站数据,现在将由攻击者收到,而不是受害者。

更准确地说,该攻击由三个步骤组成:

  1. 让受害者请求数据:攻击者首先等待受害者(客户端)与易受攻击的接入点(AP)建立 Wi-Fi 连接。我们假设受害者随后会向互联网上的服务器发送请求。例如,受害者可能向(明文)网站 example.com 发送 HTTP 请求。攻击者的目标是拦截该网站将要发送的响应。

  2. 以受害者的 MAC 地址连接:在受害者请求数据之后(例如通过发送 HTTP 请求数据包),攻击者将在响应到达易受攻击的 AP 之前 强制断开受害者与网络的连接。在我们的例子中,这意味着在 example.com 的响应到达 AP 之前,受害者就会被断开。一旦受害者断开连接,攻击者便伪造受害者的 MAC 地址,并使用自己的凭据连接到网络。这意味着攻击者是一个恶意内部人员,可以使用自己的凭据连接网络,例如在企业 Wi-Fi 网络中使用自己的用户名和密码。

  3. 拦截响应:一旦攻击者以受害者的 MAC 地址连接,AP 会将攻击者新生成的加密密钥与受害者的 MAC 地址关联起来。因此,当服务器的响应到达 Wi-Fi 网络时,或者通常任何发往受害者的入站流量到达时,路由器都会将这些入站数据包转发到受害者的 MAC 地址。在我们的例子中,这意味着 example.com 的响应被路由器转发到受害者的 MAC 地址。然而,攻击者现在正在使用这个 MAC 地址。这意味着 AP 将使用攻击者的密钥对响应进行加密。换句话说,攻击者现在将收到任何仍在发往受害者途中的待处理流量。

我们强调,被拦截的流量可能受到更高层加密的保护,例如 TLS 和 HTTPS。然而,即使使用了更高层加密,我们的攻击仍然会暴露受害者正在通信的 IP 地址。这反过来又会暴露受害者正在访问的网站,而这些网站本身可能就是敏感信息。

默认情况下,该攻击不会拦截受害者_发送的_流量,而只能拦截_发往受害者的_流量。然而,攻击者可以尝试后续攻击,以拦截受害者发送的流量。特别是,通过拦截发往受害者的 DNS 应答,攻击者可以伪造 DNS 应答,并同时拦截发往受害者以及受害者发送的所有 IP 流量。

只有在目标网络启用了客户端隔离时,上述攻击才有意义。否则,如果客户端隔离被禁用,恶意内部人员只需使用 ARP 欺骗 等技术直接攻击其他客户端即可(参见 客户端隔离测试)。

该攻击对企业 WPA1、WPA2 和 WPA3 网络均同样适用。这是因为该攻击并不利用 Wi-Fi 的任何加密特性,而是滥用网络确定数据包应发送(即路由到)哪个客户端的方式。

有关该攻击的更多详细信息,请参阅我们论文 Framing Frames: Bypassing Wi-Fi Encryption by Manipulating Transmit Queues 中的_安全上下文覆盖攻击_(第 5 节)。

3. 可能的缓解措施

3.1. 防止 MAC 地址窃取

为了缓解我们的攻击,AP 可以临时阻止客户端连接到网络,如果它们使用的 MAC 地址是最近连接过该 AP 的地址。这样可以防止攻击者伪造 MAC 地址并拦截发往受害者的待处理或排队帧。当可以保证某个 MAC 地址背后的用户没有变化时,可以允许客户端立即重新连接。请注意,此检查必须在属于同一分布式系统的所有 AP 上进行,更具体地说,是在客户端可以在保持当前 IP 地址的同时漫游到的所有 AP 上进行。

3.1.1. 使用共享口令时

为了安全地识别最近连接过的用户,AP 可以存储客户端 MAC 地址与其缓存的安全关联(例如缓存的 PMK)之间的映射。可以通过证明客户端拥有与该 MAC 地址关联的缓存安全关联(例如,使用正确的缓存 PMK 进行连接),来允许客户端在最近使用过的 MAC 地址下立即(重新)连接。

使用 multi-PSK(也称为 per-station PSK 或 Identity PSK)时,AP 可以维护最近连接过的 MAC 地址及其使用的(唯一)密码的映射。当客户端连接时,AP 会检查其 MAC 地址是否最近被使用过。如果没有,或者如果使用过但客户端使用与之前相同的密码,客户端可以正常连接。但是,如果同一个 MAC 地址使用了不同的密码,客户端必须等待预定的时间后才能成功连接。

在使用 SAE-PK 保护热点时,我们知道的唯一能安全识别 MAC 地址被同一用户再次使用的方法,是依赖缓存的安全关联(例如与该 MAC 地址关联的缓存 PMK)。

上述防御措施假设,在一定的延迟之后,不再有发往受害者的待处理数据包到达。为了防止在超过此延迟后发生泄露,客户端可以对它们通信的服务使用端到端加密(例如 TLS)。

3.1.1. 使用 802.1X 认证和 RADIUS 扩展时

在使用基于 802.1X EAP 的认证时,另一种更安全的识别最近连接用户的方法是使用客户端在 802.1X 认证期间使用的 EAP 身份。AP 可以安全地从认证客户端的 RADIUS 服务器学习 EAP 身份,并维护最近连接的 MAC 地址与其对应 EAP 身份的映射。当客户端连接时,AP 会检查其 MAC 地址是否最近被使用过。如果没有,或者如果使用过且客户端使用与之前相同的 EAP 身份,客户端可以正常连接。但是,如果同一个 MAC 地址使用了不同的 EAP 身份,客户端必须等待预定的时间后才能成功连接。

一个挑战是,出于隐私方面的考虑,AP 可能并不总是知道客户端的 802.1X 身份。例如,该信息可能只在归属 AAA 服务器上可用,而 AP 只会从 RADIUS 服务器收到一个计费用户身份。该身份不允许 AP 识别同一设备/凭据的两次关联,因为其值可能会不断变化。AP 确实会在 EAP-Response/Identity 中收到匿名身份,例如 anonymous@realm,并且可以依靠该身份至少识别来自不同领域的用户。

为了防止同一领域内的用户相互攻击,同时不向 AP 泄露客户端身份,需要与 RADIUS 服务器进行配合并对其进行更改。具体来说,可以更新 RADIUS 服务器,以帮助检测该 MAC 地址最近是否被同一领域(在给定的本地网络中)的另一个用户使用。然后,RADIUS 服务器需要被告知客户端何时断开连接,以便了解某个 MAC 地址最后一次被其某个用户使用是什么时候,并且需要被告知任何正在尝试连接的客户端的 MAC 地址。

最后需要说明的是,虽然这种依赖 EAP 身份的方法可以防止不同用户相互攻击,但无法防止某个已被入侵的设备攻击该同一用户的另一台设备。也就是说,攻击只能在不同用户之间被阻止,而不能在同一用户的不同设备之间被阻止。

3.2. 保护网关的 MAC 地址

需要注意的是,我们的攻击不仅限于拦截发往 Wi-Fi 客户端的数据包。攻击者还可以尝试使用默认网关或本地网络中其他服务器的 MAC 地址进行关联。为了防止此类攻击,AP 或控制器可以禁止客户端使用与默认网关相同的 MAC 地址。更一般地说,可以在 Wi-Fi 客户端连接网络时使用重复 MAC 地址检测,以防止 Wi-Fi 客户端使用网络中其他设备正在使用的 MAC 地址。

3.3. 管理帧保护(802.11w)

使用管理帧保护(MFP)会使攻击更难执行,但并非不可能。在之前的工作中,我们发现了即使在使用 MFP 的情况下也能断开/去认证客户端的一些方法。基于这些经验,即使使用 MFP,似乎总会有某种方法可以强制将客户端与网络断开。换句话说,要完全防止断开连接和去认证攻击是很困难的。话虽如此,MFP 会在实际执行攻击时带来额外的障碍,因此它可以成为有用的缓解措施,使攻击在实际中更难(但并非不可能)执行。

3.4. VLAN 的使用

根据初步实验,该攻击无法跨不同的 VLAN 生效。换句话说,执行攻击的恶意内部人员必须与受害者处于同一 VLAN 中。因此,一种缓解措施是将不同的用户组放入不同的 VLAN。然而,恶意内部人员仍然能够对同一 VLAN 中的其他用户发起攻击(即绕过客户端隔离)。

请注意,使用 multi-PSK(又名 per-station PSK 或 identity PSK)时,你可以根据客户端使用的密码将其放入不同的 VLAN。换句话说,你可以为每个密码使用一个 VLAN。这样可以防止使用不同密码的客户端相互攻击。

4. 工具前提条件

MacStealer 工具适用于 Linux 支持的任何网卡。我们在 Ubuntu 22.04 上测试了 MacStealer。要在 Ubuntu 22.04 上安装所需的依赖项,请执行:

root@kitploit:~
sudo apt update
sudo apt install libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libssl-dev \
	libdbus-1-dev git pkg-config build-essential net-tools python3-venv \
	aircrack-ng rfkill

现在克隆此仓库,构建工具,并配置虚拟 python3 环境:

root@kitploit:~
git clone https://github.com/vanhoefm/macstealer.git macstealer
cd macstealer/research
./build.sh
./pysetup.sh

上述说明只需执行一次。

使用 git 拉取新代码后,你需要再次执行 ./build.sh 和 ./pysetup.sh。有关自协调披露开始以来对 MacStealer 的更新的详细概述,请参阅 变更日志。

5. 每次使用前

5.1 执行环境

每次你想使用 MacStealer 时,首先必须以 root 身份加载虚拟 python3 环境。可以使用以下命令:

root@kitploit:~
cd research
sudo su
source venv/bin/activate

你现在应该在网络管理器中禁用 Wi-Fi,以免它与 MacStealer 发生冲突。也可以使用 sudo airmon-ng check 来检查哪些其他进程可能正在使用无线网卡并可能干扰 MacStealer。

5.2. 网络配置

下一步是编辑 client.conf,填入你要测试的网络的信息。这是 wpa_supplicant 的配置文件,必须包含两个网络块:一个代表受害者,一个代表攻击者。用于测试虚构网络 kuleuven 的示例配置文件如下:

root@kitploit:~
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test: fill in properties of the network to test
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Victim login: fill in login credentials representing the victim
	identity="[email protected]"
	password="SuperSecret"
}

network={
	# Don't change this field, the script relies on it
	id_str="attacker"

	# Network to test: you can copy this from the previous block
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Attacker login: fill in login credentials representing the attacker
	identity="[email protected]"
	password="SomePassword"
}

在 “network to test” 部分,你必须提供被测网络的名称及其安全配置。参见 wpa_supplicant.conf,了解如何编写/编辑配置文件的文档,以及各种类型 Wi-Fi 网络的示例网络块。在第一个网络块中,在 “victim login” 下,你必须指定代表模拟受害者的有效登录凭据。在第二个网络块中,你可以在 “network to test” 下提供完全相同的信息,但必须提供代表模拟攻击者的登录凭据。

在上述示例中,MacStealer 将测试一个攻击,其中攻击者是 [email protected],并且该攻击者将尝试拦截发往受害者 [email protected] 的流量。

默认情况下,脚本使用配置文件 client.conf。你可以通过提供 --config network.conf 参数来使用不同的配置文件,其中你可以将 network.conf 替换为你想要使用的配置文件。

此仓库还包含以下示例配置文件:

  • multipsk.conf:用于测试使用 multi-PSK 的网络的配置文件,其中一个密码供受信任设备使用,另一个密码提供给访客。

  • saepk.conf:用于测试使用 SAE-PK 的公共热点的配置文件。

请注意,也可以编辑网络块来测试特定的 AP/BSS。

5.3. 服务器配置

默认情况下,MacStealer 将在所有测试中向 8.8.8.8 的 443 端口发送 TCP SYN 数据包,这是 Google 的 DNS 服务器。如果你想使用不同的服务器或端口,可以使用 --server 参数提供。例如:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222

你还可以添加 TCP SYN 数据包中必须使用的端口:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222:80

将 wlan0 替换为你的 Wi-Fi 接口名称,并将 IP 地址替换为你想要使用的服务器。该服务器必须重传 TCP SYN/ACK 应答,并且理想情况下,在 MacStealer 发送初始 TCP SYN 后 10 秒以上,仍应发送重传的 SYN/ACK。 你可以使用 --ping 参数按如下方式测试此重传行为:

root@kitploit:~
./macstealer.py wlan0 --server 208.67.222.222 --ping

如果服务器具有所需的重传行为,MacStealer 将输出以下内容:

root@kitploit:~
[22:53:15] Received SYN/ACK 15.265095233917236 seconds after sending SYN.
[22:53:20] >>> Ping test done, everything looks good so far. You can continue with other tests.

如果提供的服务器不发送 TCP SYN/ACK 应答,或者重传时间不够晚,MacStealer 将输出以下内容:[22:52:05] Received SYN/ACK 1.0727121829986572 seconds after sending SYN. [22:52:24] >>> Ping test done. Consider using a server that retransmits SYN/ACK for a longer time.

服务器必须在超过 10 秒后仍然重传 SYN/ACK 的原因是, 有时以模拟攻击者身份重新连接可能需要数秒时间。此重新连接 过程必须在服务器发送最后的重传 TCP SYN/ACK 数据包之前完成。

6. 漏洞测试

下表包含测试网络时常用的命令, 以及每个命令功能的简要说明。表格下方详细 解释了每条命令。

如果被测网络使用管理帧保护(802.11w),该工具假设 攻击者仍然可以强制将受害者与网络断开连接。这一假设 基于近期研究,该研究表明, 在使用 MFP 时,断开连接攻击通常仍然可行,尽管不那么直接或普遍。

6.1. 健全性检查

在测试漏洞之前,你可以使用以下命令确认 MacStealer 能够同时以受害者和攻击者身份连接到网络:

  • ./macstealer.py wlan0 --ping:使用受害者的凭据连接到网络。 连接后,会向服务器发送 TCP SYN(默认情况下服务器为 8.8.8.8,可以更改)。 MacStealer 将检查 SYN/ACK 是否被(重新)传输以及传输次数。你可以 用它来确认受害者的凭据是否正确,并检查配置的服务器是否 正确重传了 SYN/ACK 应答。

  • ./macstealer.py wlan0 --ping --flip:与上述测试相同,但此次脚本将使用 攻击者的凭据进行连接。你可以用它来确认攻击者的 凭据是否正确。

6.2. 漏洞测试(CVE-2022-47522)

  • ./macstealer.py wlan0:测试 MAC 地址窃取攻击的默认变体。攻击者 将重新连接到与受害者相同的 AP/BSS。

  • ./macstealer.py wlan0 --other-bss:攻击者将连接到同一 网络的不同 AP/BSS。对于(同样)容易受到此测试影响的网络,实际利用更容易。如果仅 无线范围内只有一个 AP/BSS,则脚本在以攻击者身份连接时会超时。

6.3. 客户端隔离测试(以太网层)

利用 MAC 地址窃取漏洞只有在启用了客户端隔离, 或使用 ARP 检测等技术来防止客户端相互攻击时才有意义。 否则,攻击者可以使用更简单的攻击,如 ARP 欺骗 来拦截流量。要测试是否启用了客户端隔离,或网络是否使用了 ARP 检测, 可以使用以下命令:

  • ./macstealer.py wlan0 --c2c wlan1:使用这些参数,MacStealer 会测试网络 是否允许从攻击者(wlan1)到受害者(wlan0)的客户端到客户端 ARP 欺骗流量。 这里的 wlan1 是第二个无线网络接口。脚本随后会测试恶意 ARP 数据包是否可以从攻击者发送到受害者。

  • ./macstealer.py wlan0 --c2c-eth wlan1:这与上述测试类似,但不是发送 恶意 ARP 数据包,而是攻击者向受害者发送 DNS 数据包。

如果在上述两项测试中的任何一项中客户端到客户端流量被阻止, 则应将 MAC 地址窃取漏洞视为实际风险(即启用了客户端隔离,或 使用了 ARP 检测等其他技术来防止用户相互攻击)。

默认情况下,MacStealer 将尝试使用两个接口连接到同一个 AP/BSS,因此 两张网卡必须能够看到相同的网络(即确保两个网络接口支持相同的频段和信道)。 如果你希望两个客户端连接到不同的 AP/BSS, 可以使用 --other-bss 参数。

你可以使用 --flip-id 参数来测试是否允许从受害者(wlan0) 向攻击者(wlan1)的流量。

6.4. 故障排除清单

如果 MacStealer 似乎无法正常工作,请检查以下各项:

  1. 检查没有其他进程正在使用网卡(例如,关闭你的网络管理器)。 如果其他进程也在使用该网卡,你可能会看到输出 kernel reports: match already configured, 该提示表明有另一个进程正在使用网卡。

  2. 如果之前一切正常,请尝试拔出 Wi-Fi 适配器,重启计算机或虚拟机, 然后再试一次。

  3. 确认你正在连接到正确的网络。仔细检查 client.conf。

  4. 如果你使用 git 更新了代码,请重新执行 ./build.sh 和 ./pysetup.sh(参见先决条件)。

  5. 如果你使用的是虚拟机,请尝试改为在本机 Linux 安装中运行 MacStealer。

  6. 使用额外参数 -dd 运行 MacStealer,以从 wpa_supplicant 和 MacStealer 本身获得额外的调试输出。

7. 高级用法

7.1. 测试 IP 层客户端隔离

默认的客户端隔离测试将检查客户端之间的以太网层流量 是否被允许。也可以测试客户端之间的 IP 层流量 是否被允许,使用以下命令:

root@kitploit:~
./macstealer.py wlan0 --c2c-ip wlan1 [--flip-id]

当客户端之间的 IP 层流量被允许时,客户端之间仍然可能相互攻击。 例如,ICMP 重定向攻击 可能仍然可行。这类攻击比 ARP 欺骗更麻烦,但理想情况下仍应通过 同时阻止客户端之间的 IP 层流量来加以防范。

7.2. 测试常规网络属性

可以执行以下测试来检验网络的常规属性。这些测试与漏洞没有直接关系, 但可用于更好地了解网络的行为。

  • ./macstealer.py wlan0 --same-id [--other-bss] [--flip]:测试 TCP 连接在 断开连接并重新连接到接入点后是否保持存活。如果重新连接后 连接无法保持存活,则网络很可能不容易受到 MAC 地址窃取攻击。 然而,这种行为的一个主要缺点是,合法客户端每次重新连接 到该网络时都必须建立新的 TCP 连接,使该网络显得缓慢且 不可靠(因此应使用更好的防御措施)。

你可以使用 --other-bss 参数重新连接到同一网络的不同 AP/BSS。 你可以使用 --flip 参数以攻击者身份而非受害者身份执行 此测试。

  • ./macstealer.py wlan0 --flip:测试正常 MAC 地址窃取攻击,但交换 攻击者和受害者的角色。换句话说,攻击者将使用配置文件 中提供的“受害者凭据”,而受害者将使用“攻击者凭据”。

  • ./macstealer.py wlan0 --c2c wlan1 --same-id [--flid-id]:测试客户端到客户端流量是否 允许在同一用户的两台设备之间传输。关于 wlan1 参数的说明, 请参阅客户端隔离测试。

你可以使用 --flip 参数以攻击者身份而非受害者身份执行 此测试。

7.3. 其他参数

  • --delay seconds:你可以使用 --delay 参数指定以攻击者身份重新连接 前的延迟时间(以秒为单位)。

  • -d 或 -dd:添加这两个参数之一会增加脚本及其底层 wpa_supplicant 实例的调试详细程度。

7.4. 测试特定的接入点 / BSS

默认情况下,MacStealer 会自动选择网络中的一个 AP/BSS 进行连接和测试。 如果你的网络有多个 AP/BSS,你可以通过指定要测试的特定 AP/BSS 来测试一个, 即在受害者的网络配置块中使用 bssid 关键字。例如,你可以使用:

root@kitploit:~
...

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test: fill in properties of the network to test
	ssid="kuleuven"
	key_mgmt=WPA-EAP
	eap=PEAP
	phase2="auth=MSCHAPV2"

	# Victim login: fill in login credentials representing the victim
	identity="[email protected]"
	password="SuperSecret"

	# This a specific AP/BSS
	bssid=00:11:22:33:44:55
}

...

使用上述配置,MacStealer 将测试 00:11:22:33:44:55。这意味着它将 同时以受害者 和攻击者 身份连接到该 AP。

你还可以将此与 --other-bss 参数结合使用。在这种情况下,受害者将 连接到 00:11:22:33:44:55,而攻击者将连接到同一 网络的不同 AP/BSS。

另一种选择是在受害者 和 攻击者的网络配置块中分别指定显式的 BSS/AP。

请注意,MacStealer 最多会搜索给定的 AP/BSS 30 秒。如果找不到 指定的 AP/BSS,该工具将退出。

7.5. 测试 SAE-PK 网络

你可以使用以下配置文件测试 SAE-PK 网络。请注意,对于 SAE-PK 网络,受害者和攻击者的认证方式没有区别,即 他们都使用相同的密码。

root@kitploit:~
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl

# WPA3/SAE: support both hunting-and-pecking loop and hash-to-element
sae_pwe=2

network={
	# Don't change this field, the script relies on it
	id_str="attacker"

	# Network to test - attacker login
	ssid="test-saepk"
	psk="7iip-ytnz-qa25"
	key_mgmt=SAE
	ieee80211w=2
}

network={
	# Don't change this field, the script relies on it
	id_str="victim"

	# Network to test - victim login
	ssid="test-saepk"
	psk="7iip-ytnz-qa25"
	key_mgmt=SAE
	ieee80211w=2
}

8. 威胁模型讨论

8.1. WPA-PSK 认证

在实践中,客户端隔离也用于使用预共享密码保护的网络。 例如,一些路由器提供了为访客或不安全(IoT)设备创建网络的选项, 该网络中的客户端相互隔离,因此无法相互攻击。然而,使用客户端隔离的 安全优势在这种情况下值得怀疑。客户端隔离本应 防止恶意内部人员攻击他人。但如果恶意内部人员知道 预共享密码,他们只需创建一个恶意克隆(邪恶孪生),诱骗受害者连接到 这个网络恶意副本,然后攻击其他客户端!换句话说,使用客户端 在密码保护的网络中使用客户端隔离并不能提供强有力的安全性,恶意客户端 可以创建恶意 AP 来继续攻击其他客户端。

话虽如此,可以认为创建恶意 AP 可能会被网络管理员检测到, 这意味着客户端隔离确实使攻击变得更加困难。此外,当轻量级设备被(远程) 攻陷时,它可能没有资源来(轻松地)充当恶意 AP。这使得在启用客户端隔离时 实施攻击更加困难,但并非不可能。总体而言,尽管客户端隔离 在密码保护的网络中不能提供强有力的安全保证,但可以认为它增加了 实施攻击的实际难度。

我们的 MacStealing 攻击比创建恶意 AP 更容易实施。恶意内部人员 (例如,轻量级且已攻陷的 IoT 设备)只需伪造 MAC 地址并(重新)连接到 网络即可。这种攻击也更难被检测到。基于这一观察,我们的新攻击使 情况变得更糟,因此可以认为,在使用预共享密码保护的网络中, 我们的攻击也应被视为具有相关性。

结论:在密码保护的网络中使用客户端隔离时,你是在假设 恶意内部人员不会创建恶意 AP。否则,从安全角度而言,使用客户端隔离是 毫无意义的。MacStealing 攻击无需创建恶意 AP 即可实施, 因此会使攻击变得更加容易。

8.2. 常见误解

  • 我们攻击的目标不是绕过接入点上的 MAC 地址拒绝/允许列表。伪造 MAC 地址以绕过 MAC 地址过滤是一种不同的已知攻击。

  • 我们攻击的目标不是劫持 Wi-Fi 热点中他人的付费连接。例如, 一些开放(或受保护)热点要求用户先付费才能访问互联网。 付费用户通常通过其 MAC 地址来识别,攻击者可以伪造受害者的 MAC 地址来获得互联网访问权限。这不是我们攻击的目的;MacStealer 的目标 是绕过客户端隔离。

  • 我们的攻击也影响那些针对 Hole 196 漏洞进行防御的网络。例如, Passpoint(前身为 Hotspot 2.0)网络必须 防止 Hole 196 漏洞,但仍然容易受到我们的攻击。

  • 我们的攻击在防御 ARP 欺骗的网络中同样有效。在安全性很差的 Wi-Fi 网络中, 攻击者可以轻易地执行 ARP 欺骗来拦截受害者的流量,而我们的攻击 并不实用。然而,可能存在恶意内部人员的现代网络依赖于客户端隔离 或其他方法来防止中间人攻击。我们的攻击绕过了所有这些现代防御, 仍然使攻击者能够拦截发往受害者的流量。

总而言之,我们的攻击影响那些客户端被阻止相互攻击的 Wi-Fi 网络, 从而使攻击者能够拦截发送至另一客户端的流量。

8.3. 分配的 CVE

大多数供应商使用 CVE-2022-47522 来指代本 git 仓库中讨论的 Wi-Fi 客户端隔离绕过漏洞。 该漏洞对应我们论文 第 5 节中的攻击。

不幸的是,其他供应商也使用该 CVE 来指代我们论文 第 3 节讨论的(严格来说并不相关的)漏洞。事实上,我们认为可在 MITRE 上找到的 CVE 实际描述仅描述了我们论文第 3 节中的攻击。在实践中,CVE-2022-47522 似乎被用来指代 我们论文中的所有攻击,尽管它们在技术上并不相同。

9. 变更日志

版本 1.2(进行中)

  • 改进 README:澄清了 CVE 标识符的用法。

  • 改进 README:将引言重点放在绕过客户端隔离上,更新防御部分,补充 802.1X 说明,并 防止窃取默认网关的 MAC 地址。

  • 新增 --delay 参数,用于指定以攻击者身份重新连接前的延迟秒数。

版本 1.1(2023 年 1 月 18 日)

  • 默认使用 8.8.8.8 作为服务器,而不是 216.58.208.100(两者都是 Google 服务器)。

  • 更新客户端隔离测试:默认在以太网层使用 ARP 欺骗进行测试。同时提供 在以太网层通过转发发送 UDP 数据的选项,以及一个在 IP 层进行转发的测试。

  • 改进 README:更新了可能受影响的网络类型。新增了关于受密码保护的 WPA2 或 WPA3 网络是否受到影响的讨论。解释了用于测试客户端到客户端以太网或 IP 层流量 的不同命令。

  • 改进 README:讨论 MFP,讨论将 VLAN 作为缓解措施,明确必须在哪些 AP 上执行 身份检查,指定服务器端口,

  • 改进 MacStealer 的输出。

版本 1.0(2023 年 1 月 3 日):

  • 准备了在禁运期间使用的初始版本。该代码基于 hostap 提交 0f3f9cdcab6a。
下载工具
命令简要说明
健全性检查
./macstealer.py wlan0 --ping以受害者身份连接并测试服务器的重传行为。
./macstealer.py wlan0 --ping --flip以攻击者身份连接并测试服务器的重传行为。
漏洞测试
./macstealer.py wlan0测试 MAC 地址窃取攻击的默认变体。
./macstealer.py wlan0 --other-bss让攻击者使用与受害者不同的 AP 进行连接。
客户端隔离:以太网层
./macstealer.py wlan0 --c2c wlan1测试客户端到客户端的以太网层流量(ARP 欺骗)。
./macstealer.py wlan0 --c2c-eth wlan1测试客户端到客户端的以太网层流量(DNS)。