Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
bcm4360-wpa3 — 2014 MacBook ProのWi-Fiチップ向けのwpa3機能 | Kitploit
ツール/GitHubGitHub/unsignedchad/bcm4360-wpa3
Wi-Fi監査リバースエンジニアリングワイヤレスセキュリティハードウェアセキュリティバイナリ解析ファームウェア解析
GitHubunsignedchad/bcm4360-wpa3

bcm4360-wpa3

2014 MacBook ProのWi-Fiチップ向けのwpa3機能

リポジトリを見る
511ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

WPA3-SAE + 802.11w on the Broadcom BCM4360(クローズド wl バイナリ)

Apple/Broadcom は BCM4360 (14e4:43a0) に WPA3 を提供したことはありません。唯一の Linux ドライバはクローズドな broadcom-sta (wl) バイナリであり、brcmfmac では駆動できません。本プロジェクトは、そのクローズドバイナリに WPA3-SAE + 完全な 802.11w PMF を追加します。すべてホストソフトウェア側で実現し、ファームウェアのソースコードは不要です。

実際に WPA3 のみ・MFP 必須の AP に対してオンエアで検証済み:SAE 認証 → アソシエーション → 4-way ハンドシェイク → CCMP データ通信が安定し、deauth-flood および SA-Query ティアダウン攻撃にも耐性があります。

動作の仕組み

このバイナリは 非ストリップ・再配置可能な ELF .o(最終ファームウェアイメージではありません)であることが、この手法が機能する唯一の理由です。バイナリを書き換えるのではなく、新しい C コードとリンクし、いくつかのコールサイトをリダイレクトします。

  • wpa_supplicant が SAE と 4-way ハンドシェイクを実行します(バイナリの暗号は SHA-1 のみ。SAE には SHA-256 が必要)。
  • 小さな cfg80211 グルーコード(wl_cfg80211_hybrid.c、wl_linux.c)が認証・アソシエーション・キーを仲介します。
  • 3 つのビルドステップでバイナリをフック可能にします。
    1. P1 バイトパッチ — auth iovar の制限を解除し、SAE(alg=3)を受け付けるようにします。
    2. objcopy --globalize-symbol — 約 10 個のバイナリ内部関数を C コードから呼び出し可能にします。
    3. wl_reloc.py — .rela.text を書き換え、バイナリ内部の wlc_recv/wlc_sendauth/wlc_authresp_client への呼び出しが、私たちの __wrap_* フックに着地するようにします。

これにより、SAE フレームを無線で送受信し、wpa_supplicant の RSN IE をアソシエーションリクエストに挿入し、ユーザー空間で生成された鍵をインストールし、ソフトウェア PMF(保護されていない deauth をドロップ、SW-CCMP で SA-Query に応答)を追加することができます。

リバースエンジニアリング

使用ツール:Ghidra(ヘッドレス)、nm、objdump、strings、モニターモードスニファ(iw + tcpdump)。

root@kitploit:~
# 1. バイナリは broadcom-sta に同梱されており、ストリップされていません(約 4091 シンボル)→ Ghidra が名前を復元します。
GHIDRA=/opt/ghidra
$GHIDRA/support/analyzeHeadless ./proj wl -import wlc_hybrid.o_amd64 \
    -analysisTimeoutPerFile 3600          # 自動解析後、GUI で逆コンパイル

# 2. 戦略を決める前に、何が存在するかトリアージします(不足している暗号はホスト側に移動する必要があります):
nm wlc_hybrid.o_amd64 | grep -iE 'sha256|sae|bip|igtk|mmie'          # → ここでは空
nm wlc_hybrid.o_amd64 | grep -iE 'wpa|akm|sup|sendauth|key_insert'

# 3. パッチを当てる前にオフセットを確認します(このバイナリでは .text vaddr V == ファイルオフセット V+0x40):
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)を追跡してバイナリ内部へ進みます。それが到達するコードを逆コンパイルします:AKM ゲート(bcmwpa_akm2WPAauth)、参加/認証 FSM(wlc_join_BSS + 0x5b79d にある認証→アソシエーション進行関数)、RX ディスパッチ(wlc_recv)、PMK/鍵パス(wlc_sup_set_pmk、wlc_key_insert)。すべてのアドレスを objdump でクロスチェックします。

他のチップへの移植

  1. バイナリが 非ストリップ・再配置可能な .o であることを確認します(file、nm)。ストリップされたファームウェアイメージではこの方法は機能しません。
  2. Ghidra で以下を見つけます:認証アルゴリズムの制限、参加→認証→アソシエーション FSM とその「認証成功」進行関数、RX ディスパッチ、set_pmk/key-insert。
  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)— これらはレイアウトであり、バイナリバージョンごとに異なります。
  5. スニファを使ってオンエアで繰り返しテストします。ファームウェア障害はカーネルパニックになります — dmesg をネットワーク経由でキャプチャします(苦労した点を参照)。

苦労した点 → 解決策

  • SAE 中にカーネルがハードロックし、バックトレースが得られない。 --add-symbol のアドレスが 1 桁ずれていた(0x15b79d vs 0x5b79d)、命令途中に着地 → call <garbage> → NX フォールト。 兆候はビルド時の警告 objtool: ... can't find starting instruction です。すべての合成シンボルが実際の関数開始点であることを確認してください。
  • パニックをキャプチャできない。 Apple EFI では efi-pstore が壊れている。USB-イーサネット NIC では netconsole が送信できない。SSH 経由で dmesg --follow を別のマシンにストリーム出力します — リブート前に oops がフラッシュされます。
  • AP がアソシエーションを拒否する(ステータス 31、MFP ポリシー)。 バイナリは独自の PSK/非 MFP RSN IE を構築する。 .connect 内の wpa_supplicant の sme->ie をキャプチャし、バイナリのアソシエーションリクエスト IE バッファ(*(bsscfg+0x320)+0x30)をそこに向けます — これで 4-way の RSN-IE チェックも満たされます。
  • 鍵インストールが -22 で失敗する — それは IGTK(BIP、idx 4)のみ。ハードウェア鍵エンジンに BIP スロットがない。 IGTK はソフトウェアで受け入れます。PTK/GTK は正常にインストールされ、データ通信が流れます。
  • ため、802.11w SA-Query が暗号文として届く。

ビルド

カーネルヘッダ、gcc、binutils、python3 が必要です。バイナリはこのリポジトリには含まれていません(プロプライエタリ)。

root@kitploit:~
# 1. 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.sh                 # -> wl-src/wl.ko   (Releases からダウンロードも可能)

インストール

クイックテスト

root@kitploit:~
sudo rmmod b43 brcmfmac bcma ssb wl 2>/dev/null   # カードを解放
sudo insmod wl-src/wl.ko                          # wlan0 が出現

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 が SAE + 4-way + DHCP を実行

(スタンドアロンの代替: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          # 今回の起動のみ
echo 'options wl re_verbose=0' | sudo tee /etc/modprobe.d/wl-quiet.conf   # 永続的

注意点

  • WPA2/WPA3 混在(トランジションモード)AP は信頼性が低い — ホスト駆動の SAE が常にネゴシエーションに勝つとは限りません。単一モードを使用してください:AP を WPA3 のみ(または WPA2 のみ)に設定するか、NetworkManager 接続のセキュリティを固定します(WPA3 Personal / SAE、または WPA2)。純粋な WPA3 ネットワークには毎回接続できます。
  • バイナリ(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 のライセンス(バイナリ)。
ツールをダウンロード
バイナリは管理フレームを復号しない
PTK をキャプチャし、ソフトウェアで AES-CCM(カーネル ccm(aes))を使ってクエリを読み、暗号化された応答を送信します。