Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
bcm4360-wpa3 — 2014 맥북 프로의 와이파이 칩을 위한 wpa3 기능 | Kitploit
도구/GitHubGitHub/unsignedchad/bcm4360-wpa3
Wi-Fi AuditingReverse EngineeringWireless SecurityHardware SecurityBinary AnalysisFirmware Analysis
GitHubunsignedchad/bcm4360-wpa3

bcm4360-wpa3

2014 맥북 프로의 와이파이 칩을 위한 wpa3 기능

저장소 보기
511개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

WPA3-SAE + 802.11w on the Broadcom BCM4360 (비공개 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이 필요합니다).
  • 작은 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 프레임을 무선으로 전송하고, assoc-req에 wpa_supplicant의 RSN IE를 주입하며, 사용자 공간에서 파생된 키를 설치하고, 소프트웨어 PMF(보호되지 않은 deauth 드롭, SW-CCMP로 SA-Query 응답)를 추가하기에 충분합니다.

리버스 엔지니어링

도구: Ghidra (headless), 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

전략: 오픈 글루 코드 (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로 교차 확인합니다.

다른 칩으로 포팅

  1. blob이 스트리핑되지 않은 재배치 가능한 .o 인지 확인합니다 (file, nm). 스트리핑된 펌웨어 이미지는 이 방식으로 작동하지 않습니다.
  2. Ghidra에서 다음을 찾습니다: 인증 알고리즘 제한, 조인→인증→연결 FSM + "인증 성공" 진행자, RX 디스패치, 그리고 set_pmk/키 삽입.
  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) — 이는 레이아웃이며 blob 버전마다 다릅니다.
  5. 스니퍼로 실제 환경에서 반복 테스트; 펌웨어 오류는 커널 패닉을 유발합니다 — 네트워크를 통해 dmesg를 캡처하세요 (어려움 참조).

어려움 → 해결 방법

  • SAE 중 커널 하드 락, 역추적 없음. --add-symbol 주소가 16진수 한 자리 차이 (0x15b79d vs 0x5b79d)로 명령어 중간에 위치 → call <garbage> → NX 오류. 징후는 빌드 경고 objtool: ... can't find starting instruction입니다. 모든 합성 심볼이 실제 함수 시작인지 확인하세요.
  • 패닉 캡처 불가. Apple EFI에서 efi-pstore가 고장남; netconsole이 USB-이더넷 NIC를 통해 TX할 수 없음. SSH를 통해 두 번째 머신으로 dmesg --follow를 스트리밍 — 재부팅 전에 oops를 플러시합니다.
  • AP가 assoc 거부 (상태 31, MFP 정책). blob이 자체 PSK/비MFP RSN IE를 구성합니다. .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는 정상 설치되고 데이터가 흐릅니다.
  • blob이 관리 프레임을 해독하지 않음, 따라서 802.11w SA-Query가 암호문으로 도착합니다.

빌드

커널 헤더, 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를 구동합니다 — wifi 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

(Standalone alternative: sudo ./examples/connect.sh wlan0 examples/wpa3-sae.conf.example.)

영구 설치 (재부팅 + 커널 업데이트에도 유지)

root@kitploit:~
sudo dkms/install.sh

드라이버를 DKMS에 등록 (커널 업그레이드 시 자동 재빌드), 충돌하는 인트리 드라이버 + 기존 wl을 블랙리스트에 추가하고, 부팅 시 NetworkManager 전에 우리 드라이버를 로드합니다. 그런 다음 wifi 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).
도구 다운로드
PTK를 캡처하고 소프트웨어에서 AES-CCM (커널 ccm(aes))을 수행하여 쿼리를 읽고 암호화된 응답을 보냅니다.