原文始发于看雪论坛(星舆实验室):侠盗猎车 — 玩转固定码 (上)
0x00 前言
大家好, 我是星舆车联网实验室Kevin2600。 星舆取 “星辰大海, 舆载万物”之意, 是支专注于车联网技术研究, 漏洞挖掘和工具研发的安全团队。我们的口号是 “不是一个人的王者 而是团队的荣耀”。
笔者从今天开始将持续更新,汽车无线钥匙安全相关的系列文章。 本系列将涵盖传统RKE/PKE钥匙体系的设计缺陷, 当下最流行的数字钥匙架构中所暴露的安全隐患等。从软件无线电SDR信号分析, 到错误注入的侧信道攻击, 透过黑客视角, 通过丰富的实战案例, 展示车联网安全中的博弈之路。笔者希望能抛砖引玉为中国车联网安全做出贡献, 激励更多志同道合的小伙伴加入我们。
0x01 信号101
无线信号安全是个很深的研究领域,需要掌握的知识点很多。 笔者在这推荐Michael Ossmann的Software Defined Radio with HackRF 系列教程。这里先来了解些研究无线钥匙安全必要的基础知识。
首先需要知道无线钥匙通常工作在ISM频段, 比如 315Mhz, 433Mhz 和868/915Mhz。 在信号调制方面则以OOK/ASK/FSK为主。 这几种调制方案应用非常广泛,如无线基站, 遥控钥匙和胎压系统TPMS都有它们的身影。 在无线钥匙领域OOK的简单性是其它调制方案所不及的, 仅需要将载波信号发送到功放和天线, 即可表现“1”或不发射任何信号即代表“0”。 下图为ASK和FSK在频谱上的表象。
无线钥匙在发了一串1和0 后, 还需要正确的编码方式, 收发双方才能正常交互。其中NRZ, PWM 和Manchester 是较为常见的编码格式。
工欲善其事, 必先利其器。 拥有得心应手的工具, 对研究无线钥匙安全尤为重要。每个人喜好不同, 偏爱的工具也见仁见智。 笔者在无线信号硬件上推荐支持RTL-SDR的电视棒, 带有PortaPack模块的HackRF以及可以通过Python交互的Yardstick1。
在软件方面大名鼎鼎的GNURadio 则是必备软件。 同时无线钥匙发出的指令有固定码和滚动码的区别。 固定码顾名思义就是每次的内容都相同, 但因为这种方式太不安全, 厂商通常都会选择每次都有所变化的滚动码。
0x02 信号干扰
在了解无线钥匙的基础知识后, 我们来看看黑客会如何对其进行攻击呢。 其中射频信号干扰是无线攻击中最常见的方式之一。 攻击者使用更强的功率在与目标相同的频道内发送噪音信号, 以期压制原信号达到干扰目的。 通俗的理解就是用更大的喊声压过了你, 至于喊的是什么并不重要, 反正别人听不到你说话就可以。 以下是干扰攻击在信号频谱图上的表象, 可以看到在发起攻击后, 通讯频道都被占用了。
针对遥控钥匙信号的干扰攻击, 也是盗贼最喜欢的方式之一。 在海淀区花园路某停车场内, 曾有两名男子从一辆宝马X5车内盗走装有手机和大量现金的电脑包。 警方后来在他们身上找到了一个收音机大小的仪器。 这就是一款所谓的锁车干扰器。 两名不法分子利用这种设备, 隐蔽在角落干扰车主锁车, 当车主离开后, 轻松打开车门, 再将车内财物一扫而空。 然而这并不是个例, 在全国甚至全世界范围内屡次发生同类盗窃案件。 因此各位车主在按下遥控器锁门按钮后, 最好再拉下门把手, 确认真实上锁后才离开。
有趣的是某些高功率电子产品所产生的电磁场, 竟也可能成为了干扰信号源。 近日河南周口某地有居民的汽车钥匙经常无故失灵, 在无管委的工作人员进行了大量排查后发现罪魁祸首竟是一个电热水壶。
为了检验干扰攻击的真实效果, 笔者在征得车主同意后, 用HackRF 对某款汽车做了测试。 从视频(https://v.qq.com/x/page/h32756atqlx.html)中可以看到在开始干扰攻击后, 汽车对遥控钥匙立刻失去反应。
值得一提的是某些厂商在产品中会设计信号干扰检测机制。 比如某款智能警报器一旦检测到有干扰信号, 就会自动触发警报。 因此高阶的黑客会采用更智能的干扰方式, 比如Reactive Jamming, 跟传统的干扰方式不同之处在于, 其并不是简单粗暴的占用整个频道, 而是将干扰信号“隐藏”在真实的发送信号中, 以便绕过目标的检测机制。
0x03 信号重放
当然只是对遥控信号进行干扰是不够的, 攻击者还希望能取得控制权。 这就需要对目标有足够的了解。 对目标的情报收集是安全研究中一项至关重要的基本功。 这里的情报指的是与目标系统相关的有用信息, 比如工作频率, 编码方式, 芯片型号等等。 如下图我们可以从使用手册中找到所需的目标工作频率信息。
然而现实中往往受条件限制, 无法获取更多有用信息。 这就要考验测试人员的实战经验和耐心了。 幸运的是除了汽车无线钥匙外, 工作在315Mhz 或433Mhz, 且以固定码模式为主的遥控设备在现实中仍占了很大的比例。 所以我们可以把相关设备如HackRF放在合适的位置进行抓包, 耐心等待遥控开锁指令被按下的那一刻。 一旦获取所需的解锁指令, 就可以通过信号重放的方式得到控制权。
以下是重放演示视频 (https://v.qq.com/x/page/v3275nakwi1.html)。需要注意的是, 这个时候我们对目标设备, 如信号指令结构等信息其实仍是知之甚少。不过对于攻击者来说, 能把闸机打开这就足够了。
0x04 信号简析
但从安全研究人员的角度来说, 想找到设计缺陷或安全漏洞。就得更深入的了解目标。这里笔者以小牛电动车钥匙为例, 对其无线信号进行简单的逆向分析。首先需要知道小牛钥匙的工作频率。常见的方式可查找FCC ID或CMIIT ID, 即无线电发射设备型号核准码相关文档获取。也可以用频谱分析软件如GQRX来确定。
因为是在实验室环境中, 所以笔者选择直接将其拆开一探究竟。 在小牛钥匙的PCB板上清楚看到晶振 (26.250M)和IC (CMT2150L) 这两个关键部件。
通过查看芯片文档, 得知钥匙的工作频率为315Mhz。 默认采用的是1527的编码方式。
从文档中还可以找到IC的每个管脚定意, 这大大方便了逆向分析工作。
根据IC管脚定意, 接上示波器, 可以用来分析的小牛钥匙的脉冲信号就展示在面前。
除了物理访问, 我们也可以通过软件无线电来抓包分析, 这里给大家推荐名为 RTL_433的开源软件, 其自带大量无线遥控器信号解析库, 甚至可以解析某些警报器密码。
不过其默认无法解析小牛钥匙的信号, 所以我们还需要自行分析。 以下是通过RTL_433 获取的小牛原始信号数据。可以看到数据中含有大量重复出现的部分。
在把相关参数编写成配置文件后, RTL_433就可以自动解析了。 从视频 (https://v.qq.com/x/page/y3275usojth.html)里可以清楚看到小牛钥匙每次所发出的解锁或上锁等指令。
不过大家一定已经意识到一个问题, 小牛钥匙所发出的解锁或上锁指令在解析后, 每次得到的值都是一样的。 其实在得知小牛钥匙使用的编码方式是1527的时候, 就已经可以判断小牛使用的是固定码了。是的,我们可以对其进行重放攻击。不过有时我们手中没有HackRF。 这里笔者跟大家推荐RPITX, 这是运行在树莓派上通过GPIO口进行RF传输的软件。 通过这个软件可使树莓派瞬间变成无线电台。 以下便是星舆研究员小海, 在树莓派上通过RPITX解锁小牛电动车的演示视频(https://v.qq.com/x/page/c32750sl0g1.html)。
0x05 总结
本文作为侠盗猎车系列的开篇, 相信让大家对无线钥匙信号分析有了初步了解。 但精彩的旅程才刚刚开始, 接下来我们会分享更多无线信号分析技巧, 以及对信号指令进行爆破攻击等测试。敬请期待。
0x06 参考文献
https://www.rtl-sdr.com/
https://github.com/F5OEO/rpitx
https://github.com/merbanan/rtl_433
https://greatscottgadgets.com/sdr/8/