
2014 맥북 프로의 와이파이 칩을 위한 wpa3 기능
wl blob)Apple/Broadcom은 BCM4360 (14e4:43a0)에 WPA3를 제공하지 않았습니다. 이 칩의 유일한 Linux 드라이버는 비공개 broadcom-sta (wl) blob이며, brcmfmac으로는 구동할 수 없습니다. 이 프로젝트는 해당 비공개 blob에 WPA3-SAE + 전체 802.11w PMF를 추가합니다 — 전적으로 호스트 소프트웨어에서, 펌웨어 소스 없이.
WPA3 전용, MFP 필수 AP와의 실제 무선 환경에서 검증됨: SAE 인증 → 연결 → 4-way → CCMP 데이터, 안정적이며 deauth-flood 및 SA-Query 종료 공격에 내성.
blob은 스트리핑되지 않은, 재배치 가능한 ELF .o (최종 펌웨어 이미지가 아님)입니다 — 이것이 작동하는 전체 이유입니다. 우리는 이를 다시 작성하지 않습니다. 새 C 코드를 링크하고 몇몇 호출 지점을 리디렉션합니다.
wpa_supplicant가 SAE + 4-way를 실행합니다 (blob의 암호화는 SHA-1 전용이며, SAE는 SHA-256이 필요합니다).wl_cfg80211_hybrid.c, wl_linux.c)가 인증/연결/키를 연결합니다.auth iovar의 제한을 해제하여 SAE(alg=3)를 수락하도록 합니다.objcopy --globalize-symbol — 약 10개의 blob 내부 함수를 우리 C 코드에서 호출 가능하게 만듭니다.wl_reloc.py — .rela.text를 다시 작성하여 blob의 wlc_recv/wlc_sendauth/wlc_authresp_client 호출이 우리의 __wrap_* 후크로 연결되도록 합니다.이것으로 SAE 프레임을 무선으로 전송하고, assoc-req에 wpa_supplicant의 RSN IE를 주입하며, 사용자 공간에서 파생된 키를 설치하고, 소프트웨어 PMF(보호되지 않은 deauth 드롭, SW-CCMP로 SA-Query 응답)를 추가하기에 충분합니다.
도구: Ghidra (headless), nm, objdump, strings, 모니터 모드 스니퍼 (iw + tcpdump).
# 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
전략: 오픈 글루 코드 (wl_cfg80211_connect, wl_set_auth_type)의 cfg80211 진입점에서 시작하여 iovar (auth, wpa_auth, wsec)를 따라 blob 내부로 들어갑니다. 도달하는 부분을 디컴파일합니다: AKM 게이트 (bcmwpa_akm2WPAauth), 조인/인증 FSM (wlc_join_BSS + 0x5b79d의 auth→assoc 진행자), RX 디스패치 (wlc_recv), PMK/키 경로 (wlc_sup_set_pmk, wlc_key_insert). 모든 주소를 objdump로 교차 확인합니다.
.o 인지 확인합니다 (file, nm). 스트리핑된 펌웨어 이미지는 이 방식으로 작동하지 않습니다.set_pmk/키 삽입.build.sh (--add-symbol re_auth_advance=..., globalize 목록)와 patches/wl_reloc.py (__wrap_* 대상)에 입력합니다.wl_linux.c의 구조체 오프셋을 수정합니다 (wlc+0x6a8 txq, bsscfg+0x320 assoc, scb+0x18 bss) — 이는 레이아웃이며 blob 버전마다 다릅니다.dmesg를 캡처하세요 (어려움 참조).--add-symbol 주소가 16진수 한 자리 차이 (0x15b79d vs 0x5b79d)로 명령어 중간에 위치 → call <garbage> → NX 오류. 징후는 빌드 경고 objtool: ... can't find starting instruction입니다. 모든 합성 심볼이 실제 함수 시작인지 확인하세요.dmesg --follow를 스트리밍 — 재부팅 전에 oops를 플러시합니다..connect에서 wpa_supplicant의 sme->ie를 캡처하고 blob의 assoc-req IE 버퍼 (*(bsscfg+0x320)+0x30)를 가리키게 합니다 — 4-way의 RSN-IE 검사도 충족됩니다.-22 — IGTK (BIP, idx 4)만 해당; HW 키 엔진에 BIP 슬롯이 없음. 소프트웨어에서 IGTK를 수용; PTK/GTK는 정상 설치되고 데이터가 흐릅니다.커널 헤더, gcc, binutils, python3 필요. blob은 이 저장소에 없습니다 (독점).
# 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)
sudo rmmod b43 brcmfmac bcma ssb wl 2>/dev/null # free the card
sudo insmod wl-src/wl.ko # wlan0 appears
NetworkManager가 이 드라이버를 통해 WPA3-SAE를 구동합니다 — wifi GUI를 사용하세요: 네트워크 선택, 비밀번호 입력, 완료. NM이 저장하고 부팅 시 자동 재연결합니다. CLI 동등 명령:
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
(Standalone alternative: sudo ./examples/connect.sh wlan0 examples/wpa3-sae.conf.example.)
sudo dkms/install.sh
드라이버를 DKMS에 등록 (커널 업그레이드 시 자동 재빌드), 충돌하는 인트리 드라이버 + 기존 wl을 블랙리스트에 추가하고, 부팅 시 NetworkManager 전에 우리 드라이버를 로드합니다. 그런 다음 wifi GUI에서 연결하세요. 자세한 내용과 DKMS의 한 가지 주의사항: dkms/README.md. 대신 일회성 수동 재빌드를 하려면 ./build.sh → wl-src/wl.ko를 실행하세요.
드라이버는 기본적으로 상세한 WPA3/PMF 디버그를 출력합니다. 런타임에 (또는 영구적으로) 무음 처리:
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
wlc_hybrid.o_amd64)은 Broadcom 독점입니다 — 직접 broadcom-sta에서 가져오세요. Releases의 wl.ko에는 이를 내장하고 있습니다 (Debian의 broadcom-sta-dkms와 동일한 상황).ccm(aes))을 수행하여 쿼리를 읽고 암호화된 응답을 보냅니다.