免责声明:在传输任何数据前,请务必使用法拉第袋或屏蔽笼,避免因意外在受监管频段非法传输而违法。此外,拦截和解密他人数据是非法的,因此在分析自身信号时请保持谨慎。
前言:
近期我初探软件定义无线电(SDR)领域,从中获益良多。我发现不仅能使用SDR Sharp、GQRX、SIGINTOS、CubicSDR等软件模拟实际射频(RF)硬件组件,还能通过GNU Radio流图(如grgsm_livemon.grc
)实时捕获GSM移动网络数据包。尽管这一项目极具教育意义,但我希望更深入理解GNU Radio流图的构建原理,而非仅依赖现有流图却不明白其工作机制。
尽管网络上有大量文档,GNU Radio(及GNURADIO-COMPANION)对初学者仍显 daunting。通过谷歌搜索,我最终发现了Great Scott Gadgets的Michael Ossmann提供的在线课程(https://greatscottgadgets.com/sdr/),这些课程对我帮助极大。GNU Radio官方教程(https://wiki.gnuradio.org/index.php/Tutorials)也巩固了我的学习成果。
为熟悉GNU Radio基础,我选择了一个重放攻击相关项目:捕获原始RF信号以解锁我的1999款福特Mountaineer,绕过FOB(频率操作按钮)。需要说明的是,尽管我成功捕获了FOB解锁信号并通过HackRF重放,但车辆并未实际解锁。原因是多年前已采用“滚动码”(或称“跳码”)技术防止此类重放攻击。此前,车辆和车库门 opener 使用固定码,易被攻击者探测并后续利用。本文撰写时,已有多种滚动码绕过方法(如干扰和重置技术)被讨论。尽管如此,该项目仍深化了我对GNU Radio的理解,并使我能够创建自定义流图。
基础GNU Radio与流图信息:
GNU Radio中的所有信号处理均通过流图完成,流图由执行单一数字信号处理操作(如滤波、解码、复用等)的块组成。数据以多种格式(复数、实数、整数、浮点等)在块间传递。每个流图至少需一个源块(输入)和一个宿块(输出)。源或宿可以是USB设备(如HackRF、BladeRF)、声卡、文件或FFT(快速傅里叶变换)等。
获取FOB特定信息:
为确定FOB操作频率,我首先搜索了车辆的FCC编号。谷歌搜索及FCC查询结果显示设备频率为315MHz。
捕获FOB解锁信号:
通常我可使用SDR Sharp等应用监控并捕获原始数据,但本次我选择用GNU Radio流图自建组件。在项目目录中执行命令:
$ sudo gnuradio-companion
新建流图时,默认包含Options和Variable块。Options(ID: top_block)定义工具链库(如QT-GUI、WX-GUI),Variable块(ID: samp_rate)设置采样率(默认32ksps)。我使用HackRF(通过osmocom Source块支持),其推荐最小采样率为2Msps。我将采样率变量改为2e6,并添加中心频率变量center_freq(315e6)。osmocom Source块的CH0频率改为center_freq变量。
源块输出为蓝色表示复数(实部和虚部),橙色表示实值(整数、浮点等)。输入输出颜色需匹配,否则报错。源块ID显示红色表示输出未连接,需添加宿块。
创建宿:
添加QT-GUI Frequency Sink块(位于Instrumentation),设置中心频率为center_freq,并连接osmocom Source输出。点击绿色Execute按钮执行流图,打开FFT窗口显示315MHz信号。带宽2MHz,中心频率315MHz,运行正常。为显示FOB按钮信号,在FFT窗口中点击鼠标中键选择“Max Hold”,以捕获更高信号。
捕获FOB信号以重放:
为保存原始数据,添加File Sink块(位于File Operators),文件名设为fob_capture。由于采样率高(2Msps浮点),文件迅速增大,需快速执行流图并停止。修改后流图包含File Sink,执行后生成49.3MB文件。
重放捕获的信号:
通过右键选择“Disable”禁用osmocom Source、QT GUI Frequency Sink和File Sink块(显示为灰色)。添加File Source块(位于File Operators),输入文件名fob_capture。复制QT-GUI Frequency Sink块以监控重放信号,并添加osmocom Sink块通过HackRF传输。File Source块的“Repeat”参数设為循环播放(演示用途)。执行流图后可通过手机录像观察结果。
其他有用信息:
GNU Radio可集成示波器、频率发生器、频谱分析仪等虚拟设备。示例中使用WX-GUI库的示波器块锁定捕获的FOB信号,显示数字脉冲(虽重放攻击非必需,但展示了灵活性)。
Throttle块(使用时机与原因):
Throttle块(位于Misc类别)用于限制“非硬件”源块(如Signal Source)的采样率,确保平均速率不超过指定值(samp_rate)。仅当流图无硬件(如SDR dongle、声卡)时钟限速时使用。例如,模拟硬件但无实际时钟时需Throttle块。移除Throttle块可能导致CPU占用100%及GNU Radio崩溃。但需注意,Throttle块采样控制不精确,应由硬件时钟管理。流图含无线电或音频设备时,避免使用Throttle块,以免引发双时钟问题。
总结:
尽管重放信号未解锁车辆,我仍视此项目为成功。未来,新RF项目将不断涌现,新漏洞将被暴露。凭借通过软件(流图)模拟昂贵射频硬件的能力,GNU Radio始终是我工具箱中的宝贵工具。这是一场猫鼠游戏,但借助信息安全社区的持续研究与贡献,我们可共享知识,努力保持系统安全。