4. 射频基础与无线信号捕获
在IoT无线协议安全测试中,所有上层攻击与防御最终都要落到射频层。如果连目标信号在哪个频段、用什么调制方式、占用哪个信道都判断不清,后续的嗅探、重放、注入都无从谈起。本节围绕六个核心参数——频段、调制、信道、扩频、占空比、RSSI/SNR——建立从“看得见”到“抓得准”的完整链路,并用SDR与嗅探器完成一次可复现的信号发现与抓包过程。
一、频段与信道:先确定信号“住在哪里”
频段是射频信号的频率范围,IoT常用ISM频段包括315MHz、433.92MHz、868MHz、915MHz和2.4GHz。频段决定了天线尺寸、穿透能力和法规限制。信道则是频段内进一步划分的窄带区间,例如BLE在2.4GHz上划分40个信道,其中37/38/39为广播信道,其余为数据信道;ZigBee在2.4GHz上划分16个信道,编号11~26,中心频率为2405MHz + 5×(n−11) MHz。
实际测试中,第一步不是直接抓包,而是用SDR做频谱扫描。以RTL-SDR为例,可执行:
rtl_power -f 433.0M:434.8M:12.5k -i 1 -e 60 scan.csv
该命令以12.5kHz步进扫描433.0~434.8MHz,每秒采样一次,持续60秒。观察scan.csv中功率峰值出现的位置,即可判断目标设备是否工作在433.92MHz附近。若峰值稳定出现在433.92MHz,说明设备使用该中心频率;若峰值在多个频点跳变,则可能使用了跳频或扩频机制。
二、调制与扩频:理解信号“长什么样”
调制是把数字信息搬移到射频载波上的方式。IoT常见调制包括ASK/OOK、FSK、GFSK、BPSK、QPSK和LoRa使用的CSS(Chirp Spread Spectrum)。ASK/OOK实现简单、成本低,广泛用于433MHz遥控和门磁;FSK/GFSK抗干扰更好,常见于BLE和部分Sub-GHz设备;LoRa的CSS通过线性调频脉冲实现远距离传输。
扩频是让信号在更宽频带上传输以换取抗干扰和低功率谱密度。直接序列扩频(DSSP)用伪随机码扩展频谱,跳频扩频(FHSS)让载波在多个频点间快速跳变。BLE的广播信道采用GFSK,但通过跳频在数据信道间切换;LoRa则用CSS实现扩频。测试时,若在频谱图上看到信号能量分散在较宽范围而非单一尖峰,基本可判断使用了扩频或宽带调制。
三、占空比:判断设备“说多久、停多久”
占空比是发射时间与总观察时间的比值。对IoT设备而言,占空比直接影响功耗、法规合规性和被捕获概率。例如,一个433MHz门磁在触发时发射约30ms的OOK帧,之后进入休眠,若每分钟触发一次,则占空比约为30ms/60s = 0.05%。低占空比意味着抓包窗口必须足够长,否则容易漏帧。
在URH(Universal Radio Hacker)中,可以录制一段原始IQ数据,然后观察信号包络。若包络中高电平持续时间远小于低电平,说明占空比低。测试时应将录制时间设置为目标设备发射周期的3~5倍,例如设备每5秒发一次,则至少录制20秒,确保捕获到完整帧。
四、RSSI与SNR:判断“信号好不好”
RSSI(Received Signal Strength Indicator)表示接收信号强度,单位dBm,典型值在−30dBm(很近)到−100dBm(很远)之间。SNR(Signal-to-Noise Ratio)是信号功率与噪声功率之比,单位dB,SNR越高,解调越可靠。一般OOK/FSK解调要求SNR至少10~12dB,LoRa可在SNR为负时仍解调(如−20dB)。
实际抓包时,若RSSI低于−90dBm且SNR低于8dB,误码率会明显上升,表现为URH中解码出的字节频繁出错。此时应调整天线位置、增加LNA增益或缩短距离。注意:SDR增益过高会引入非线性失真,反而降低SNR,因此增益应逐步调整,观察SNR而非只看RSSI。
五、用SDR与嗅探器完成一次信号发现与抓包
下面以433.92MHz OOK门磁为例,给出可复现的操作流程。假设使用RTL-SDR和URH,目标设备为常见门磁传感器。
- 频谱确认:运行
rtl_power -f 433.0M:434.8M:12.5k -i 1 -e 30 scan.csv,在结果中确认433.92MHz附近有稳定峰值,占用带宽约几十kHz,符合OOK特征。 - IQ录制:在URH中设置中心频率433.92MHz,采样率1.2MHz,增益28dB,录制20秒。触发门磁多次,确保录制到至少3帧。
- 解调设置:选择ASK/OOK解调,设置阈值自动检测。观察包络图,识别同步头(通常为长高电平或固定脉冲序列)。
- 帧提取与判读:URH会自动切分帧,记录每帧的RSSI和SNR。若同一地址码重复出现,说明门磁使用固定码;若每次不同,则可能使用滚动码。
- 占空比计算:统计20秒内总发射时间,例如3帧×30ms = 90ms,占空比 = 90ms/20s = 0.45%。
六、参数关系速查与判读依据
| 参数 | 典型值/范围 | 观察工具 | 判读依据 |
|---|---|---|---|
| 频段 | 433.92MHz / 2.4GHz | rtl_power、SDR# | 峰值中心频率与占用带宽 |
| 调制 | OOK、GFSK、CSS | URH、GNU Radio | 包络形状与频谱宽度 |
| 信道 | BLE CH37、ZigBee CH11 | Wireshark+嗅探器 | 广播包出现位置 |
| 扩频 | DSSS、FHSS、CSS | 频谱图 | 能量分散或跳变 |
| 占空比 | 0.05%~1% | URH包络 | 高电平时间/总时间 |
| RSSI/SNR | −30~−100dBm / 8~25dB | URH、嗅探器 | 解码误码率与帧完整性 |
掌握这六个参数后,面对任何IoT无线目标,都可以按“扫频→定频→录IQ→解调→判读”的顺序推进。关键不是记住数值,而是理解每个参数在频谱图、包络图和解码结果中的表现形式,并能根据异常反推是距离、干扰、增益还是调制设置问题。下一阶段将进入具体协议栈的嗅探与注入,但所有操作都建立在本节射频判读能力之上。