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

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

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

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

工具目录

分类

查看所有分类
Loading categories
bcm4360-wpa3 — 2014年款MacBook Pro中WiFi芯片的WPA3功能 | Kitploit
工具/GitHubGitHub/unsignedchad/bcm4360-wpa3
Wi-Fi审计逆向工程无线安全硬件安全二进制分析固件分析
GitHubunsignedchad/bcm4360-wpa3

bcm4360-wpa3

2014年款MacBook Pro中WiFi芯片的WPA3功能

查看仓库
511个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

在 Broadcom BCM4360(封闭的 wl blob)上实现 WPA3-SAE + 802.11w

Apple/Broadcom 从未为 BCM4360 (14e4:43a0) 提供 WPA3。其唯一的 Linux 驱动是封闭的 broadcom-sta (wl) blob;brcmfmac 无法驱动它。本项目为这一封闭 blob 添加了 WPA3-SAE + 完整 802.11w PMF —— 完全通过主机软件实现,无需固件源码。

已在空中与仅支持 WPA3、要求 MFP 的 AP 验证:SAE 认证 → 关联 → 四次握手 → CCMP 数据,稳定运行,并能抵抗 去认证洪水 和 SA-Query 拆除 攻击。

工作原理

该 blob 是一个 未剥离、可重定位的 ELF .o(并非最终的固件镜像)—— 这正是其可行性的根本原因。我们不重写它;而是 将新的 C 代码与之链接,并 重定向少量调用点:

  • wpa_supplicant 运行 SAE 和四次握手(blob 的加密仅支持 SHA-1;SAE 需要 SHA-256)。
  • 一个小型 cfg80211 胶水代码(wl_cfg80211_hybrid.c、wl_linux.c)桥接认证/关联/密钥。
  • 三个构建步骤使 blob 可挂钩:
    1. P1 字节补丁 —— 解除 auth iovar 的限制,使其接受 SAE(alg=3)。
    2. objcopy --globalize-symbol —— 使约 10 个 blob 内部函数可从我们的 C 代码调用。
    3. wl_reloc.py —— 重写 .rela.text,使 blob 对 wlc_recv/wlc_sendauth/wlc_authresp_client 的调用落入我们的 __wrap_* 挂钩。

这足以在空中驱动 SAE 帧,将 wpa_supplicant 的 RSN IE 注入关联请求,安装用户空间派生的密钥,并添加软件 PMF(丢弃未受保护的去认证帧;通过 SW-CCMP 应答 SA-Query)。

逆向工程

工具:Ghidra(无头模式)、nm、objdump、strings、一个监控模式嗅探器(iw + tcpdump)。

root@kitploit:~
# 1. The blob ships inside broadcom-sta and is NOT stripped (~4091 syms) -> Ghidra recovers names.
GHIDRA=/opt/ghidra
$GHIDRA/support/analyzeHeadless ./proj wl -import wlc_hybrid.o_amd64 \
    -analysisTimeoutPerFile 3600          # auto-analyze, then decompile in the GUI

# 2. Triage what's present BEFORE picking a strategy (absent crypto must move host-side):
nm wlc_hybrid.o_amd64 | grep -iE 'sha256|sae|bip|igtk|mmie'          # -> empty here
nm wlc_hybrid.o_amd64 | grep -iE 'wpa|akm|sup|sendauth|key_insert'

# 3. Verify any offset before you patch it (.text vaddr V == file offset V+0x40 in this blob):
objdump -d --start-address=0x47d40 --stop-address=0x47d60 wlc_hybrid.o_amd64

策略:从 开放 胶水代码中的 cfg80211 入口点(wl_cfg80211_connect、wl_set_auth_type)开始,并沿着 iovars(auth、wpa_auth、wsec)进入 blob。反编译它们所到达的位置:AKM 门控(bcmwpa_akm2WPAauth)、加入/认证 FSM(wlc_join_BSS 和位于 0x5b79d 的认证→关联推进器)、RX 分发(wlc_recv)以及 PMK/密钥路径(wlc_sup_set_pmk、wlc_key_insert)。使用 objdump 交叉检查每个地址。

移植到其他芯片

  1. 确认 blob 是 未剥离的可重定位 .o(使用 file、nm 检查)。剥离后的固件镜像无法采用此方式工作。
  2. 在 Ghidra 中找到:auth-alg 限制、加入→认证→关联 FSM 及其 "认证成功" 推进器、RX 分发,以及 set_pmk/密钥插入。
  3. 将其地址填入 build.sh(--add-symbol re_auth_advance=...、全局化列表)和 patches/wl_reloc.py(__wrap_* 目标)。
  4. 修复 wl_linux.c 中的结构体偏移量(wlc+0x6a8 txq、bsscfg+0x320 assoc、scb+0x18 bss)—— 这些是布局信息,且 因 blob 版本而异。
  5. 通过嗅探器在空中迭代;固件故障会导致内核崩溃——通过网络捕获 dmesg(参见“挑战”部分)。

挑战 → 解决方案

  • SAE 期间内核死锁,无回溯。 --add-symbol 的地址偏移了一个十六进制数字(0x15b79d 而非 0x5b79d),落在了指令中间 → call <garbage> → NX 错误。线索是构建警告 objtool: ... can't find starting instruction;请验证每个合成符号均为真正的函数起始。
  • 无法捕获内核崩溃。 efi-pstore 在 Apple EFI 上损坏;netconsole 无法通过 USB 以太网网卡发送数据。通过 SSH 将 dmesg --follow 流式传输到第二台机器——它会在重启前刷新 oops 信息。
  • AP 拒绝关联(状态 31,MFP 策略)。 Blob 构建了自己的 PSK/无 MFP RSN IE。在 .connect 中捕获 wpa_supplicant 的 sme->ie,并将 blob 的关联请求 IE 缓冲区(*(bsscfg+0x320)+0x30)指向它——同时也满足了四次握手的 RSN-IE 检查。
  • 密钥安装失败 -22 —— 仅 IGTK(BIP,索引 4)出现问题;硬件密钥引擎没有 BIP 槽位。在软件中接受 IGTK;PTK/GTK 安装正常,数据可流通。
  • Blob 从不解密管理帧,因此 802.11w SA-Query 以密文形式到达。捕获 PTK 并在软件中执行 AES-CCM(内核 ccm(aes))以读取查询并发出加密响应。

构建

需要内核头文件、gcc、binutils、python3。该 blob 不 在此仓库中(专有)。

root@kitploit:~
# 1. Get the pristine blob from broadcom-sta 6.30.223.271:
#    hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz  ->  lib/wlc_hybrid.o_amd64
cp /path/to/wlc_hybrid.o_amd64 wl-src/lib/wlc_hybrid.o_amd64.orig

# 2. Build:
./build.sh                 # -> wl-src/wl.ko   (or download it from Releases)

安装

快速测试

root@kitploit:~
sudo rmmod b43 brcmfmac bcma ssb wl 2>/dev/null   # free the card
sudo insmod wl-src/wl.ko                          # wlan0 appears

NetworkManager 通过此驱动驱动 WPA3-SAE —— 只需使用 Wi-Fi GUI:选择你的网络,输入密码,即可完成。NM 会保存它并在每次启动时自动重新连接。CLI 等效命令:

root@kitploit:~
nmcli con add type wifi ifname wlan0 con-name w ssid "YOUR_SSID"
nmcli con modify w wifi-sec.key-mgmt sae wifi-sec.psk "YOUR_PASS" 802-11-wireless-security.pmf 3
nmcli con up w        # NM does SAE + 4-way + DHCP

(独立替代方案:sudo ./examples/connect.sh wlan0 examples/wpa3-sae.conf.example)

持久化(重启 + 内核更新后仍存活)

root@kitploit:~
sudo dkms/install.sh

使用 DKMS 注册驱动(在内核升级时自动重建),将冲突的内核内驱动和原装 wl 加入黑名单,并在启动时在 NetworkManager 之前加载我们的驱动。然后通过 Wi-Fi GUI 连接。详情及一个 DKMS 陷阱:dkms/README.md。如需一次性手动重建,请运行 ./build.sh → wl-src/wl.ko。

调试日志

该驱动默认输出详细的 WPA3/PMF 调试信息。在运行时(或永久)关闭:

root@kitploit:~
echo 0 | sudo tee /sys/module/wl/parameters/re_verbose          # this boot
echo 'options wl re_verbose=0' | sudo tee /etc/modprobe.d/wl-quiet.conf   # permanent

注意事项

  • 混合 WPA2/WPA3(过渡模式)AP 不可靠 —— 主机驱动的 SAE 并不总能赢得协商。请使用单一模式:将 AP 设置为仅 WPA3(或仅 WPA2),或在 NetworkManager 连接中固定安全设置(WPA3 Personal / SAE 或 WPA2)。纯 WPA3 网络每次都能连接。
  • 该 blob(wlc_hybrid.o_amd64)是 Broadcom 专有 的 —— 请自行从 broadcom-sta 获取。Releases 中的 wl.ko 嵌入了它(与 Debian 的 broadcom-sta-dkms 情况相同)。
  • 偏移量特定于 broadcom-sta 6.30.223.271 / BCM4360。
  • 已测试于 Linux 6.12 (Debian 13)、Intel MacBookPro11,3。
  • 研究性代码。许可证:GPL-2.0(此封装代码)+ Broadcom 的许可证(blob)。
下载工具