0x00 前言
大家好, 我是星舆车联网实验室Kevin2600。星舆取 “星辰大海, 舆载万物”之意, 是专注于车联网技术研究, 漏洞挖掘和工具研发的安全团队。团队成员在漏洞挖掘, 硬件逆向与AI大数据方面有着丰富经验, 连续在GeekPwn等破解赛事中斩获奖项, 并获众厂商致谢。团队研究成果多次发表于DEFCON等国内外顶级安全会议。
让我们继续上篇侠盗猎车的旅程, 学习更多固定码信号逆向分析的姿势。为了方便读者理解, 笔者将用以下无线门锁进行针对性讲解。
首先拆开无线门锁及遥控器进行信息收集, 通过PCB板上的关键字”HFY535F”, 得知此款无线门锁采用了深圳华方圆的解决方案。再利用频谱分析软件确定其工作频率为常见的315Mhz。
在锁的接收端与遥控器部分都带有一个8 bits的DIP开关。只有当两边的bits位相匹配时, 遥控器才能将门锁打开。相对传统不可更改的固定码而言, 使用这类拨码设计, 用户可随时更改编码, 安全性有所提升, 不过这仍属固定码的范畴。通过专业的无线钥匙设备可以了解到, 此款无线门锁采用了PT2262 芯片, 最终显示的地址码1FF01F10 和键码1000与DIP开关位相吻合。
0x01 采样
在确定无线门锁的工作频率后, 第一步便是获取信号样本,这里列举几个笔者常用的方式。其中最简便的是osmocom_fft, 根据个人喜好可选择不同的界面, 如下图的示波器和频谱FFT模式。只要设置好目标频率, 点击REC便可自动记录下信号样本, 需要注意的是此时保存下的是信号原始IQ格式, 文件容量分分钟过百兆。
(https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2021/11/wp_editor_md_bcbe9afce043eabdd59931ca6c3c2daf.jpg)
如果想有更多的灵活性, 则GnuRadio-Companion是必选之一。在用示波器模式分析信号的同时, 还可捕获门锁信号并输出Wave格式的音频文件, 以及原始IQ文件。
通过示波器模式显示门锁信号, 使我们有更直观的感受。如下图分别是遥控器上锁和解锁2个按钮所输出的波形。
将捕获到的音频信号倒入Audacity后, 显示的结果与示波器波形完全吻合。
我们还可以用上篇提到RTL-433进行采样, 以下是解锁指令的信号解析, 可以看到与上面音频, 示波器结果相同, 且以二进制等方式显示, 使其更加一目了然。
0x02 分析
在对信号采样后, 接下来就需要对其近一步分析。比如我们想要获取信号的波特率, 通常的方法是套用已知公式 (1/ (最短波形长度/采样率))。如下图音频信号中 1/(542/2000000) 波特率大概是3690左右。
笔者这里推荐一款名为Inspectrum的开源软件。其界面友好, 操作简单。如下图可以看出门锁遥控器的信号是典型的OOK模式。
通过自动化解析得到我们所需的波特率, 跟之前音频分析得到的结果一致。
还可以自动将脉冲信号自动转换成相对应的二进制。这大大提高了分析工作效率。
0x03 发送
在分析完信号样本后, 可以尝试回放信号攻击. 之前提到的GnuRadio-Companion可以帮助我们将捕捉到的门锁信号, 原封不动的发送出去.
需要注意这里发送的是门锁遥控信号原始数据, 如果有任何噪音也同样一并发送出去。以下是信号发送演示视频 (https://www.youtube.com/watch?v=2Uszj0Wc8Zs)
这里再跟大家推荐这款名为 Yardstick1 的无线神器。 加上Python框架RFCat, 我们可用脚本的方式来达到门锁信号回放的目的。
下图为攻击脚本, 需要注意的是波特率以及数据包之间的间隔等参数一定要设置正确。
以下是使用 Yardstick1发送解锁指令信号演示视频 (https://www.youtube.com/watch?v=bDQ3YtoY8GA)
0x04 总结
针对固定码的分析与破解就此告一段落。也许有同学会觉得这太基础。但对汽车钥匙安全研究来说只是热了个身, 接下来有更多烧脑的挑战在等着我们 (视频: https://www.youtube.com/shorts/m71ZGKYPKlo)
0x05文献
http://samy.pl/opensesame/
https://www.audacityteam.org/
https://github.com/miek/inspectrum
https://github.com/atlas0fd00m/rfcat
原文始发于看雪论坛(星舆实验室):侠盗猎车 — 玩转固定码 (下)