关于 offensive-z-wave
offensive-z-wave 是面向授权无线安全评估的 Z-Wave 攻击测试指南,涵盖 S0 与 S2 安全机制、流量捕获和设备评估。
主要功能
- 01识别 Z-Wave 区域频率
- 02捕获并分析纳入流量
- 03评估 S0 与 S2 安全性
- 04测试重放与命令注入
- 05检查默认密钥及集线器路径
适用场景
- 01评估 Z-Wave 网络的安全配置
- 02检查纳入期间的密钥交换风险
- 03测试未认证设备能否接受命令
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ snailsploit/ claude-red --skill offensive-z-wave安装后在 Claude Code 中输入/offensive-z-wave确认已加载。
详细介绍
Z-Wave 攻击
Z-Wave 工作在 800/900 MHz ISM 频段(美国:908 MHz,欧盟:868 MHz)。较早的网络使用 S0 安全方案,其网络密钥通过固定方式派生;该方案的缺陷早已广为人知。S2(自 2017 年起,Z-Wave Plus v2 强制采用)使用 ECDH 进行入网配置,安全性显著更高。
快速工作流
- 确认地区(美国 908 MHz / 欧盟 868 MHz)——适配器频率必须匹配
- 嗅探入网(配置)流量——密钥会在此过程中交换
- 根据帧格式判断是 S0 还是 S2
- 对于 S0:派生密钥并重放;对于 S2:分析 ECDH 并查找实现缺陷
硬件
| 适配器 | 用途 |
|---|---|
| Z-Force(旧款,难以找到) | 原始研究工具 |
| EZ-Wave(定制 HackRF 固件) | 现代全收发器 |
| Aeotec Z-Stick | 商用控制器,可用作合法节点 |
| HackRF + open Z-Wave firmware | 多频段 SDR 方案 |
| RTL-SDR + ZniffMobile(仅被动) | 低成本嗅探器 |
嗅探
# EZ-Wave (HackRF firmware-based)
git clone https://github.com/cureHsu/EZ-Wave
ezwave-sniff -f 908.4MHz -o capture.pcap
# Wireshark with the Z-Wave dissector parses captured frames
wireshark capture.pcap
查找入网阶段(控制器添加新设备)——网络密钥会在此阶段交换。
S0 安全缺陷
S0 在首台设备入网时,使用固定的全零 PSK 派生网络密钥。该固定材料早已广为人知——任何在入网期间被嗅探的 S0 网络都可以离线解密。
S0 commissioning:
1. New node joins → controller sends key with zero-PSK encryption
2. Attacker sniffs commissioning frame → derives session key
3. All future S0 traffic on that network is decryptable
如果你能够:
- 触发入网(将节点恢复出厂设置,或等待合法入网)
- 在约 2 秒的密钥交换窗口期间进行嗅探
你就掌握了该网状网络的网络密钥。
S2(Z-Wave Plus / S2 Authenticated)
S2 使用 ECDH 进行入网配置,修复了 S0 的缺陷:
- 每台设备都有一对 Curve25519 密钥
- 入网使用 DSK(设备专属密钥),并通过带外方式(贴纸/二维码)验证
- 网络密钥不会以明文形式通过无线传输
S2 的攻击面主要在于实现:
- 始终开放入网模式(控制器配置错误)
- S2 验证中的固件漏洞
- 资源受限芯片上 ECDH 的侧信道
- DSK 印在贴纸上 → 获得物理访问权限即可取得
对未经身份验证的节点进行重放 / 注入
许多低端 Z-Wave 设备(较旧的传感器、基础开关)不会强制执行 S0 或 S2——它们会接受明文命令。
# scapy-zwave (community fork) for crafted frames
from scapy.contrib.zwave import *
frame = ZWave(home_id=0x12345678)/ZWaveBasic(set_value=0xff)
sendp(frame, iface='ezwave0')
当目标设备缺少身份验证时,这可以解锁门、开关灯或解除传感器布防。
密钥暴力破解
对于使用默认 Home ID / 网络密钥的旧测试部署:
# Try default home IDs
for hid in 0x00000000 0x12345678 ...; do
ezwave-test --home-id $hid --target-node 1
done
在生产环境中的命中率很低;仅适用于使用默认配置的 IoT 实验室设备。
通过集线器横向攻击
Z-Wave 设备通常由集线器控制(SmartThings、Hubitat、Vera、Home Assistant、Z-Wave JS UI)。集线器是 Linux 设备,Z-Wave PSK 以明文形式存储:
- SmartThings Hub:以前凭据仅存于云端;现代 v3 设备会在本地存储网络密钥
- Home Assistant:
~/.homeassistant/zwave_js.json通常包含密钥 - Hubitat:较旧版本的网页 UI 使用默认密码
攻陷集线器 → 带走 Z-Wave PSK,以及控制每台已配对设备的权限。有关集线器固件提取,请参阅 offensive-iot。
渗透测试速查表
# 1. Identify region + frequency
# US: 908.4 MHz; EU: 868.4 MHz; CN: 868.4 MHz
# 2. Sniff
ezwave-sniff -f 908.4MHz -o cap.pcap
wireshark cap.pcap # filter zwave
# 3. Identify S0 vs S2 from frame format
# 4. For S0: capture inclusion → derive key → decrypt history + control devices
# 5. For S2: focus on hub compromise / DSK theft / implementation bugs
# 6. Test unauthenticated cleartext devices with crafted frames
检测
- 大多数 Z-Wave 部署都没有可与 Wi-Fi/Zigbee 监控相媲美的 IDS
- 集线器可能会记录异常命令,但 UI 很少会向用户显示这些记录
- 入网模式开放状态会显示在集线器 UI 中,但容易被疏忽的管理员忽略
报告
- 逐台设备确认芯片组 / 固件版本(ZW0500 系列、ZW7000 系列)
- 逐个节点标注 S0 或 S2——记录仍在包含 S2 兼容节点的网络中使用的 S0 节点
- 单独记录集线器的攻陷路径
关键参考资料
- EZ-Wave:github.com/cureHsu/EZ-Wave(基于 HackRF)
- “Z-Force and the Z-Wave Sniffer”——原始研究
- Silicon Labs Z-Wave 700-series 规范
- 来源:https://github.com/SnailSploit/offensive-checklist/blob/main/wireless.md