Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
bcm4360-wpa3 — функциональность wpa3 для чипа Wi-Fi в MacBook Pro 2014 года | Kitploit
Инструменты/GitHubGitHub/unsignedchad/bcm4360-wpa3
Аудит Wi-FiОбратная инженерияБезопасность беспроводных сетейАппаратная БезопасностьАнализ Бинарных ФайловАнализ Прошивок
GitHubunsignedchad/bcm4360-wpa3

bcm4360-wpa3

функциональность wpa3 для чипа Wi-Fi в MacBook Pro 2014 года

Репозиторий
511 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

WPA3-SAE + 802.11w на Broadcom BCM4360 (закрытый блоб wl)

Apple/Broadcom никогда не давали BCM4360 (14e4:43a0) WPA3. Его единственный драйвер для Linux — это закрытый блоб broadcom-sta (wl); brcmfmac не может им управлять. Это добавляет WPA3-SAE + полный 802.11w PMF к этому закрытому блобу — полностью с помощью хост-программного обеспечения, без исходного кода прошивки.

Доказано в эфире против точки доступа, работающей только с WPA3 и требующей MFP: SAE-аутентификация → ассоциация → 4-стороннее рукопожатие → данные CCMP, стабильно и устойчиво к атакам deauth-flood и SA-Query teardown.

Как это работает

Блоб представляет собой необлегчённый перемещаемый ELF-объектный файл .o (не конечный образ прошивки) — именно поэтому это работает. Мы не переписываем его; мы линкуем новый код на C с ним и перенаправляем несколько точек вызова:

  • wpa_supplicant выполняет SAE + 4-стороннее рукопожатие (криптография блоба только SHA-1; SAE требует SHA-256).
  • Небольшая прослойка cfg80211 (wl_cfg80211_hybrid.c, wl_linux.c) связывает аутентификацию/ассоциацию/ключи.
  • Три шага сборки делают блоб подключаемым:
    1. Патч байта P1 — разблокировать iovar auth, чтобы он принимал SAE (alg=3).
    2. objcopy --globalize-symbol — сделать ~10 внутренних функций блоба вызываемыми из нашего C.
    3. wl_reloc.py — переписать .rela.text, чтобы вызовы блоба к wlc_recv/wlc_sendauth/wlc_authresp_client попадали в наши перехватчики __wrap_*.

Этого достаточно, чтобы передавать SAE-кадры в эфир, внедрять RSN IE от wpa_supplicant в запрос ассоциации, устанавливать ключи, полученные в пространстве пользователя, и добавить программный PMF (отбрасывать незащищённые deauth; 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) внутрь блоба. Декомпилировать то, до чего они доходят: шлюз AKM (bcmwpa_akm2WPAauth), конечный автомат присоединения/аутентификации (wlc_join_BSS + продвижение auth→assoc по адресу 0x5b79d), диспетчер RX (wlc_recv) и путь PMK/ключей (wlc_sup_set_pmk, wlc_key_insert). Перепроверить каждый адрес с помощью objdump.

Перенос на другой чип

  1. Убедитесь, что блоб — это необлегчённый перемещаемый .o (file, nm). Облегчённый образ прошивки так не сработает.
  2. В Ghidra найдите: ограничение алгоритма auth, FSM join→auth→assoc + его продвижение "auth успешно", диспетчер RX и set_pmk/key-insert.
  3. Поместите их адреса в build.sh (--add-symbol re_auth_advance=..., список globalize) и patches/wl_reloc.py (цели __wrap_*).
  4. Исправьте смещения структур в wl_linux.c (wlc+0x6a8 txq, bsscfg+0x320 assoc, scb+0x18 bss) — это разметка и отличаются для каждой версии блоба.
  5. Отлаживайте в эфире с помощью сниффера; ошибки прошивки вызывают панику ядра — захватывайте через сеть (см. "Проблемы").

Проблемы → решения

  • Жёсткая блокировка ядра во время SAE, дампа нет. Адрес --add-symbol был на одну шестнадцатеричную цифру смещён (0x15b79d вместо 0x5b79d), попадание в середину инструкции → call <мусор> → ошибка NX. Признак — предупреждение сборки objtool: ... can't find starting instruction; проверьте, что каждый синтетический символ является реальным началом функции.
  • Невозможно захватить панику. efi-pstore не работает на Apple EFI; netconsole не может передавать через USB-сетевой адаптер. Потоковый вывод dmesg --follow по SSH на вторую машину — он сбрасывает ошибку до перезагрузки.
  • AP отклоняет ассоциацию (статус 31, политика MFP). Блоб строит свой собственный RSN IE с PSK/без MFP. Захватите sme->ie от wpa_supplicant в .connect и укажите буфер IE запроса ассоциации блоба (*(bsscfg+0x320)+0x30) на него — это также удовлетворяет проверке RSN-IE в 4-стороннем рукопожатии.
  • Установка ключа завершается ошибкой -22 — только IGTK (BIP, idx 4); аппаратный движок ключей не имеет слота для BIP.

Сборка

Требуются заголовки ядра, gcc, binutils, python3. Блоба нет в этом репозитории (он проприетарный).

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: выберите сеть, введите пароль, готово. 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. Подробности и одна ловушка 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 (режим перехода) ненадёжны — SAE на стороне хоста не всегда выигрывает в согласовании. Используйте один режим: настройте точку доступа только на WPA3 (или только на WPA2), или зафиксируйте безопасность в соединении NetworkManager (WPA3 Personal / SAE или WPA2). Чистая сеть WPA3 подключается каждый раз.
  • Блоб (wlc_hybrid.o_amd64) является проприетарным Broadcom — получите его самостоятельно из broadcom-sta. wl.ko в Releases содержит его встроенным (та же ситуация, что и с Debian'овским broadcom-sta-dkms).
  • Смещения специфичны для broadcom-sta 6.30.223.271 / BCM4360.
  • Протестировано на Linux 6.12 (Debian 13), Intel MacBookPro11,3.
  • Исследовательский код. Лицензия: GPL-2.0 (эта обёртка) + лицензия Broadcom (блоб).
Скачать инструмент
dmesg
Принимайте IGTK программно; PTK/GTK устанавливаются нормально, и данные идут.
  • Блоб никогда не расшифровывает управляющие кадры, поэтому 802.11w SA-запросы приходят в виде шифротекста. Захватите PTK и выполните AES-CCM программно (ядро ccm(aes)), чтобы прочитать запрос и отправить зашифрованный ответ.