2. IoT无线协议全景与攻击面建模
IoT无线协议安全测试的第一步不是抓包,而是建立“协议全景图”。同一栋楼里可能同时存在BLE门锁、Zigbee传感器、Wi-Fi摄像头、LoRaWAN水表和Thread照明,它们工作在相同或相近的2.4GHz/Sub-GHz频段,却拥有完全不同的协议栈、拓扑结构和攻击面。如果测试者只熟悉Wi-Fi渗透,面对Zigbee的NWK层帧计数器或LoRaWAN的Join-Accept重放就会无从下手。本节的目标是建立一张可复用的攻击面建模地图:先按协议栈分层理解每层“谁在说话、说什么、怎么保护”,再按拓扑判断攻击者能站在哪里,最后把攻击面落到具体测试项上。
一、协议栈分层:从PHY到APP的信任边界
所有无线协议都可以抽象为“物理层—链路/媒体访问层—网络/路由层—传输/会话层—应用层”的纵向结构,但各协议的层名、职责和加密位置差异很大。理解分层的关键是找到加密起点和认证终点:加密从哪一层开始,意味着该层以下的字段是明文可读的;认证在哪一层结束,意味着该层以上的伪造可能被接受。
- BLE:PHY(1M/2M/Coded) → Link Layer(广播/连接、跳频) → L2CAP → ATT/GATT → 应用Profile。配对与加密在SMP完成,但广播包(ADV)始终明文,包含MAC、设备名、UUID、厂商数据,是信息收集的第一入口。
- Zigbee:PHY(802.15.4) → MAC → NWK(路由、帧计数器) → APS → ZCL/应用。NWK层可做逐跳加密,APS层可做端到端加密,但许多设备为兼容性关闭APS加密,导致ZCL命令可被伪造。
- Z-Wave:PHY(Sub-GHz) → MAC → Transport → Network(路由) → Application。S0使用固定密钥派生,S2引入ECDH和临时密钥,S0设备是重点攻击对象。
- Wi-Fi:PHY → MAC(802.11) → 安全层(WPA2/WPA3) → IP/TCP/UDP → 应用。管理帧在WPA3前多为明文,Deauth、Beacon伪造、PMKID捕获都发生在链路层。
- LoRaWAN:PHY(LoRa调制) → MAC → 网络会话(DevAddr、FCnt) → 应用会话(AppSKey)。NwkSKey保护MAC命令,AppSKey保护载荷,Join流程中的DevNonce和AppNonce是重放防护核心。
- NB-IoT:基于蜂窝LTE的窄带物理层 → RLC/MAC → PDCP(加密) → NAS/RRC → CoAP/MQTT。安全主要依赖运营商USIM和蜂窝加密,攻击面更多在应用层和模组固件。
- Thread:PHY(802.15.4) → MAC → 6LoWPAN → IPv6/ICMPv6 → UDP → CoAP/DTLS。基于MeshCoP和DTLS的Commissioner认证是入网信任根,网络密钥泄露即全网沦陷。
分层建模的实用价值在于:当你在某层捕获到数据后,能立刻判断“这段数据是否已被保护、能否直接篡改、篡改后哪一层会校验”。例如抓到Zigbee的APS载荷,若APS加密开启,则只能做重放或流量分析;若关闭,则可直接构造ZCL On/Off命令。
二、典型拓扑:攻击者站在哪里
协议栈决定“能改什么”,拓扑决定“能听到什么、能插到哪里”。IoT无线网络常见拓扑有五类,每类对应不同的攻击位置。
星型(Wi-Fi AP、NB-IoT基站):所有终端直连中心节点。攻击者若在覆盖范围内,可做中间人、伪造AP或干扰上行。Wi-Fi的Evil Twin、NB-IoT的伪基站都属于此类。测试重点是中心节点的认证强度和终端对异常AP的容忍度。
Mesh(Zigbee、Thread、Z-Wave):节点多跳转发,网络密钥和路由表是核心资产。攻击者一旦通过某个弱节点入网,就能横向移动、篡改路由或发起黑洞攻击。Zigbee的Touchlink、Thread的Commissioner都是入网信任根,应优先测试其认证流程。
星型+网关(LoRaWAN):终端→网关→网络服务器→应用服务器。网关通常只做透明转发,攻击者若控制网关或伪造网关,可做Join重放、FCnt回滚、下行注入。测试重点是网关与NS之间的回传链路是否加密、终端是否校验下行帧的MIC和FCnt。
点对点(BLE):手机与设备直连。攻击者可在配对阶段做MITM,或在连接后重放GATT写操作。BLE的Just Works配对无MITM保护,是门锁、手环类设备的常见弱点。
混合拓扑(Thread+Wi-Fi、Zigbee+Wi-Fi):边界路由器/网关是协议转换点,也是攻击面汇聚点。测试时应关注网关是否将一种协议的信任错误地传递给另一种协议,例如通过Wi-Fi入侵后能否直接控制Zigbee设备。
三、攻击面清单:从协议到测试项
把分层和拓扑结合,可以形成一张可执行的攻击面清单。以下清单按“协议—层—攻击面—测试方法—观察点”组织,可直接用于测试计划。
| 协议 | 层 | 攻击面 | 测试方法 | 观察点 |
|---|---|---|---|---|
| BLE | Link/SMP | Just Works配对、固定PIN | 用nRF Connect或btlejack重放配对 | 是否要求MITM保护、配对后能否重放 |
| BLE | GATT | 未认证写、句柄枚举 | 枚举服务UUID,尝试无配对写 | 写操作是否被拒绝、是否有权限校验 |
| Zigbee | NWK | 帧计数器回滚、默认密钥 | 用KillerBee嗅探并重放NWK帧 | FCnt是否递增、重放是否被丢弃 |
| Zigbee | APS | APS加密关闭、ZCL伪造 | 解析APS头,构造On/Off命令 | 设备是否执行伪造命令 |
| Z-Wave | Network | S0密钥派生弱点 | 捕获S0配对,离线推导网络密钥 | 能否解密后续通信 |
| Wi-Fi | MAC | Deauth、PMKID捕获 | aireplay-ng发送Deauth,hcxdumptool抓PMKID | 客户端是否掉线、能否破解PSK |
| LoRaWAN | Join | Join-Accept重放、DevNonce复用 | 用LoRaWAN网关模拟器重放Join | 终端是否接受旧Join、FCnt是否重置 |
| Thread | Commissioner | 弱Commissioner凭证 | 尝试用默认PSKc入网 | 能否获取网络密钥并加入Mesh |
| NB-IoT | 应用 | 模组固件、CoAP明文 | 抓取模组串口日志,分析CoAP载荷 | 是否有明文凭证、能否重放下行命令 |
四、从全景到测试计划
实际项目中,建议按以下顺序把全景图转化为测试计划:第一步,用频谱仪或SDR确认目标频段和协议类型,避免抓错信号;第二步,用对应协议的分析工具(Wireshark+TI CC2531抓Zigbee、Ubertooth抓BLE、RTL-SDR抓LoRa)捕获正常通信,建立基线;第三步,对照攻击面清单,逐层尝试重放、篡改、伪造、降级;第四步,记录每次尝试的输入、设备响应和日志,判断防护是否生效。
例如测试一款Zigbee智能灯:先抓取入网过程,确认是否使用默认TC Link Key(ZigbeeAlliance09);若使用默认密钥,则可用KillerBee注入伪造的NWK帧,观察灯是否响应。再测试APS层:若APS加密关闭,直接构造ZCL On/Off命令,观察灯是否被控制。最后测试拓扑:将攻击节点放在Mesh边缘,尝试通过弱节点入网,观察网络是否允许未授权节点加入。每一步的观察点都应记录时间戳、帧序号、设备状态变化,形成可复现的测试证据。