Manchester(逆向拨码器拨码数据)

大家好,我是橡树,今天给大家带来有关无线遥控信号逆向分析的文章。当今社会,电子产品大量依靠各种无线传输技术,无线通信技术上的传输、认证、加密等安全问题,在各种设备对无线技术依赖加深的情况下变得越来越重要。无线安全的研究领域非常的宽泛,随着越来越多的物联网控制设备采用无线遥控信号,无线安全方面的研究也逐渐被更多的网络安全研究员所关注。本文结合作者在无线安全领域做出的一些实例侦听和逆向分析,希望能够抛砖引玉为无线安全研究做出贡献,同时对于研究过程中的遇到的一些问题希望可以得到解答。

0x01 信号101

要研究一个无线遥控器,首先我们需要先了解该无线遥控信号一般工作所在的ISM频段,例如汽车无线钥匙和电动自行车的工作频段通常是在315Mhz或433Mhz传输数据。如果是无钥匙启动系统则多会采用123Mhz或者13.56Mhz的RFID技术。车库卷闸门遥控信号一般工作频段是在315 Mhz,除此之外还有车库收费挡杆的遥控信号频段都大多是工作在433 Mhz或315Mhz频段。诸如门禁卡、无线钥匙、无线遥控器、手机、汽车等只要使用了无线介质进行数据交互,那么这条无线链路就有可能被监听、解密、重放、劫持甚至被入侵控制。
当无线遥控钥匙在发了一串0和1之后,需要正确的调制及编码方式,收发双方才可以进行交互,通常信号的调制方面主要以OOK/ASK/FSK为主,这几种调制方案的应用非常广泛,其中OOK调制方案是最简单的,仅仅需要将载波信号发送到功放和天线。当这些信号被别有用心的人捕获或者破解,后果是无法想象的。

7uLFjH

(ASK信号在频谱上的现象)

0x02 软件无线电

软件无线电,即Software Defined Radio(SDR),有时也成为Software Radio
由于软件无线电具有能够快速开发、迭代更新的特点,所以它特别适合用在一些定制化的应用中。例如学生和研究人员用它来处理无线信号。产品开发类的人员用它开发设备。高校内的通信教学活动以及业余无线电爱好者的学习和使用。

RnfXUM

ywzvGm

无线信号安全的研究必然离不开相关硬件的支持,在这里我将研究所用到的软硬件工具及SDR平台进行简单介绍。

0x03 无线安全研究工具

Pluto-SDR: Pluto-SDR由亚德诺半导体出品,整体设计方案是AD9363射频收发器+ZYNQ7010FPGA。AD9363的收发频率为325 MHz至3.8 GHz,支持时分双工(TDD)和频分双工(FDD)工作模式,AD/DA为12bit性能优于HackRF One。Pluto-SDR可在多个平台上使用,例如GNURADIO和MATLAB平台,可以实现基础的无线信号收发和无线信号安全的实验。以下数据表是各种常见SDR硬件之间的对比。

uqV0tT

(几种SDR的对比-图片来源网络)
RTL-SDR: 一个低廉的家用消费档次的 DVB-T USB 接口的接收机的创新发明,也是最为廉价的软件无线电接收平台。
CC1101: 美国TI公司出品的工作在低于1GHz频段的无线数传芯片,一款低于1GHz设计旨在用于极低功耗RF应用。其主要针对工业、科研和医疗(ISM)以及短距离无线通信设备(SRD)
Raspberry Pi: 只有信用卡大小的微型电脑,其系统基于Linux,树莓派可作为电台进行信号接收,在可控的范围之内,采用杜邦线即可实现基础的实验效果。
RTL-433: rtl_433 (despite the name) is a generic data receiver, mainly for the 433.92 MHz, 868 MHz (SRD), 315 MHz, 345 MHz, and 915 MHz ISM bands.It works with RTL-SDR and/or SoapySDR. Actively tested and supported are Realtek RTL2832 based DVB dongles (using RTL-SDR) and LimeSDR (LimeSDR USB and LimeSDR mini engineering samples kindly provided by MyriadRf), PlutoSDR, HackRF One (using SoapySDR drivers), as well as SoapyRemote. —来自官方解释

有了这些软硬件设备的支持和协调之下,使得我们的安全研究有了更近一步的突破,在这里要感谢学院的科创团队为我们研究团队提供的设备支持和资金使得我们可以更加清晰的完成无线信号的基础研究。

0x03 无线信号捕获与解调

普通的固定码遥控器中最为常见的是四键遥控器。在此系统中,主机依靠无线配件的地址信号,通俗来讲就是一组数字编号用来区分不同的无线配件。如果两个无线配件的地址相同,主机就把它们当作是同一个无线配件。在四键遥控器中,一般有8位地址可以由用户设置,每位地址可以选择3种状态0、1或者悬空。这样在不重复的情况下,总共就可以有3的8次方,也就是6561个地址。在进行自动对码的时候,主机收到这些信息会和以前加入的配件信息进行比较,如果地址是以前对码时候加入过的,主机就接受这个遥控器的指令,否则主机不会对于这个遥控器有任何的响应。所以在实验开始之前,我们首先要做的就是去捕获设备的无线信号码。大致有以下几种方法可以供我们去捕获设备的无线信号工作频段。
第一种方法,也是最为简单的方法是直接拆开要捕获信号的发射设备,查询其FCC ID或CMIIT ID信息,该类网站上收录有其硬件的发射功率,发射频谱等信息资料,可以通过检索其资料对于无线信号工作频段进行了解,进而捕获目标发射设备的信号。在URH的教学案例视频中作者也有提到如何去具体的查询FCC ID以及拿到FCC ID之后具体如何去查看更为详细的硬件信息。
第二种方法是直接使用软件无线电设备,频谱分析软件如GQRX等设备,在较大的频谱范围之内连续触发要捕获信号的发射设备,使其不断向外发出信号,大致判断其工作范围,然后在进行验证,获得设备最终的无线信号工作频谱频段。
以下为使用第二种方法获得要捕获信号的发射设备的无线信号工作频段图:

8IylEZ

(无线门铃信号工作频谱)

goFjS2

(无线门铃信号频谱图)
在获取到发射设备的无线信号工作频谱之后,就可以对于其信号进行录制和逆向分析。
如上即为录制的普通无线门铃信号,对其进行解调后即可将其信号转换为01表示的数字信号或者转化为HEX码,一般来讲直接观察HEX码是更容易使我们逆向信号的数据,然后对于该数字信号进行记录。
然而人工观察的方法容易出错(尤其是通过01去判断信号信息),在这里我会更加的依赖软件的分析,接下来我们将我们捕获的信号进行信号逆向分析,试图将其从无线电信号转化为数字信号。

fShsuC

(自动解调-失败)

L2tSru

(手动解调-成功)
我们可以看到使用软件自动解调之后显示的数据信号并非我们实际在频谱中可以看到的数字信号。但是我们知道了默认选择的是ASK的解调方式,所以我们针对于该解调方式进行一些其他的操作。更换本地采样率继续进行解调,发现解调成功,成功逆向出该遥控信号的数字信号。然后通过CC1101,树莓派或者Pluto SDR设备对于该信号进行测试,观察门铃接收端是否有相应的响应,有响应反馈即代表信号逆向成功。
下面我们针对于四键遥控器的设计过程及原理图进行具体的分析:

bz10Xo

(拨码遥控器)

2aVaro

(类似的原理图)
由于此拨码遥控器买来时候并未配套有相关的电路说明文档,因此我在研究清楚之后寻找了一个类似的电路图供大家参考。先看左边的1-8个键码,对应右图中的A0-A7。除此之外,还配备有四个微动开关。分别为S1、S2、S3、S4。在进行测试的时候,首先将8个拨码器全部下拉到底。此时通过RTL-433得到的信息是FF FF FC 80,转换为01二进制为:11111111 11111111 11111100 1。此时在重新拨号,最后的知,80为默认结尾,可以直接忽略。因为不管每次怎么拨,按哪个微动开关,最终都为80,前面的FC代表的是四个微动开关中的一个微动开关。FF FF 即为拨码器可以改变的值。又因为其本身包含三种状态,要么是00(下拉) 要么是11(上拉),要么是10(中间悬空),很轻松我们就完全逆向了此拨码遥控器。

0x04 无线遥控信号的物联网化(引申概念)

进行了上面的一些实验之后,我们思考如何将收到的无线遥控信号发送到更远端的距离并且将其保存。如果可能更希望其可以在物联网平台上被逆向分析。于是为了解决以上的问题我们进行实验尝试。Home Assistant 是一款基于 Python 的智能家居开源系统,支持众多品牌的智能家居设备,可以轻松实现设备的语音控制、自动化等。因为Home Assistant 非常容易部署,所以我们便决定采用Home Assistant 的物联网方案将无线遥控信号物联网化。除此之外,我们还需要应用到MQTT进行远距离通信。便于将我们在本地捕获到的无线遥控信号解码后上传到我们的MQTT服务器,最终和我们的Home Assistant智能家居平台进行通信,实现无线遥控信号在被捕获之后保存和传输到更远的地方。

1qIGG2

(Home Assistant Logo)

62LuE8

(MQTT监听解码数据)
首先我们需要安装Home Assistant,这里我使用的是树莓派安装Home Assistant 的方式,因为rtl-433程序也是运行在树莓派上的,将树莓派安装好Home Assistant之后也便于我们进行端口映射和转发。这张图是在树莓派上安装Home Assistant的不同方式:

J5IQSW

其中Hassbian没有图形界面,详见:https://www.home-assistant.io/blog/2019/10/26/rip-hassbian/
Mossbian是由Hassbian改版的版本,详情:https://home-assistant.cc/mossbian/ 目前已停止维护,遂放弃这两种方案。直接在树莓派的系统Raspbian上通过手动的方式安装Home Assistant。
具体安装参考链接:https://comhome-assistant.cc/installation/raspberrypi/raspbian/
安装完成之后我们便可以从局域网内任意终端浏览器访问 http://Raspberry IP :8123,进入 Home Asssitant。
物联网平台安装完毕之后,我们还需要安装MQTT服务器,之前参加物联网相关的比赛,华为云社区为我们提供了云服务器的代金券,因此我们便使用华为云的服务器去搭建MQTT服务器,让我们捕获到的遥控信号通过MQTT传输到云平台进而传输到我们的物联网平台上。
MQTT(Message Queuing Telemetry Transport)消息队列遥测传输协议,是一种基于发布/订阅(publish/subscribe)模式的”轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。
MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
了解了MQTT之后,我们决定在云服务器上部署Eclipse Mosquitto进行MQTT协议之间的一些通信。Eclipse Mosquitto是一个开源消息代理,实现了MQTT协议版本3.1和3.1.1。Mosquitto轻量,适用于低功耗单板计算机到完整服务器的所有设备。Mosquitto项目还提供了用于实现MQTT客户端的C库以及非常受欢迎的mosquitto_pub和mosquitto_sub命令行MQTT客户端。Mosquitto是用C语言实现MQTT协议的Broker。是一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。一个典型的应用案例就是 Andy Stanford-ClarkMosquitto(MQTT协议创始人之一)在家中实现的远程监控和自动化。
我们也对于其进行安装。成功安装Mosquitto后MQTT通信的测试。

P3pGMT

(MQTT通信测试)
在搭建完成了上述的实验环境之后,我们将对于我们的想法进行验证,让我们在本地通过软件无线电设备捕获到的设备信号通过MQTT协议传输到我们的MQTT服务器上,进而将数据转发到物联网平台上,在物联网平台上对于该Publish进行监听,最终获取到从远端传输而来解码好的无线遥控信号。

aWl350

(MQTT实时接收到的已解码数据)
具体实现视频链接
【MQTT实时接收已解码数据-哔哩哔哩】 https://b23.tv/edY1XoO


Manchester(逆向拨码器拨码数据)
http://example.com/2022/03/18/Manchester/
作者
橡树(Yuning)
发布于
2022年3月18日
许可协议