mcpField
O
offensive-z-wave

offensive-z-wave

github.com/snailsploit安全9.7k173 次安装2 周前更新
代码仓库

关于 offensive-z-wave

offensive-z-wave 是面向授权无线安全评估的 Z-Wave 攻击测试指南,涵盖 S0 与 S2 安全机制、流量捕获和设备评估。

主要功能

  1. 01识别 Z-Wave 区域频率
  2. 02捕获并分析纳入流量
  3. 03评估 S0 与 S2 安全性
  4. 04测试重放与命令注入
  5. 05检查默认密钥及集线器路径

适用场景

  1. 01评估 Z-Wave 网络的安全配置
  2. 02检查纳入期间的密钥交换风险
  3. 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 进行入网配置,安全性显著更高。

快速工作流

  1. 确认地区(美国 908 MHz / 欧盟 868 MHz)——适配器频率必须匹配
  2. 嗅探入网(配置)流量——密钥会在此过程中交换
  3. 根据帧格式判断是 S0 还是 S2
  4. 对于 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 节点
  • 单独记录集线器的攻陷路径

关键参考资料

评论

支持 Markdown