该课题由独角兽暑期训练营第二届学员岳力完成
360独角兽安全团队每年暑假都会面向在校学生举办一次暑期训练营,申请者投递简历并提交自己想做的课题介绍后,若入选,会在360技术专家的指导下完成课题。
本系列文章会发布今年5位学员在训练营中的成果。文章相关代码后续会在训练营github代码仓库发布 。
一 主要工作
使用SDR硬件抓取大疆无人机的开机广播信号,在缺少协议信息的情况下做盲分析。推测了信号的时隙结构,调制方式类似OFDM,做了频偏估计和补偿,解调到“疑似”QPSK的频域信号。距离有意义的信息比特还有很长的路要走。
二 无人机简介
大疆“御“Mavic Pro无人机于2016年9月发布,属于非专业个人便携航拍无人机。在大疆的产品线中,Mavic Pro属于比较均衡的型号。专业的大型无人机有精灵Phantom、悟Inspire等,进一步追求便携的还有Mavic Air和晓Spark,。
大疆Mavic机身上有一个开关,一侧为RC(Remote Controller)、另一侧为Wi-Fi,衍生出三种连接模式。
第一种是最简单的模式,开关置于RC,仅使用遥控器控制无人机。
第二种将开关同样置于RC,在智能手机中打开大疆APP,使用USB线连接遥控器,再使用遥控器控制无人机。此时,手机作为实时图传屏幕使用,不具有控制功能,手机也没有无线链路连接无人机。
第三种控制模式将开关置于Wi-Fi,不使用遥控器,仅使用手机连接飞机发出的Wi-Fi热点,用手机来做所有的控制动作。
第一种控制模式的通信逻辑如下:首先,无人机开机,持续发出广播信号A;遥控器开机并接收到信号A后,返回一持续的控制信号B;无人机接收到控制信号B之后,停止发送信号A,转而发送图传信号C。经过初步调查和实验,这几个信号有以下特点:信号A的中心频率为2409.5MHz,带宽为9MHz,并且无人机每次开机发的内容固定。信号B是跳频信号,从2403.5MHz开始,间隔2MHz,共32个频点,每个频点带宽1MHz,所以总占用带宽为63MHz,跳频没有观察到简单明显的规律。信号C是图传信号,根据大疆宣传,技术名称为OcuSync。
三 研究对象——广播信号A
这个项目主要研究的对象为:在第一种连接模式下的无人机广播信号A。
实验环境如下:电磁屏蔽屋中,使用Ubuntu 18.04 + GNURadio 3.7.11 + USRP B210,信号采集中心频率为2409.5MHz,采样带宽15.36MHz,录制时长约2分钟,单次文件约14G。信号处理软件主要为MATLAB,python辅助。
待研究信号的层次比较复杂,从两端开始分级研究:最长的结构命名为Level9,往下逐渐拆分得到Level8、7;最小的结构命名为Level1,逐渐组合出Level2、3、4。
四 信号长时分析
把整个约2分钟长的信号称为Level9。
信号文件很大、点数很多、难以直接观察。以0.01s周期分段,统计其中幅度超过某个阈值的点数,类似做幅度调制的解调。
如图,我们可以观察到,三次采集的信号都呈现出了一定的长时周期性,周期约为35s。
于是,我们定义一个35s的周期为L8。L8的数据量仍然很大。
观察L8图像特征,似乎是由多个更小的时间结构组合而成的。可以得出时间结构有无信号的粗略规律:2_5_1___2__5_5____1___2。
定义L8的1/38,约1s的片段为 L7,取出直接观察时域信号幅度。
没有发现进一步的明显规律。
五 信号短时分析
我们观察到信号L7中有一种常见的细节结构。
定义上图中出现的最短的、形似毛刺的信号结构为L1。
L1信号的主体是一段信号重复两次,图中已经用红色标记出了相似的部位。所有L1结构内容相同。
另一方面,根据之前对OcuSync图传信号的分析,OcuSync的常见结构如下。
其中CP的内容为:本Symbol的1024sample数据的最后80/72sample。
按照L1结构分析,每个L1的前半段是前一Symbol的末尾,而后半段是后一Symbol的CP。由于广播信号大部分symbol发的都是空数据包,只有cp部分有信号能量,所以形成了大量的L1。
定义 {80,72}+1024 sample 为 L2(symbol);定义 L2 * 7 = 7680 sample 为 L3(slot),时长0.5ms。
图中是一个最常见的L3结构,其中只有L2[3]有数据,其余只有CP有信号,尝试对其解码。
猜测OcuSync使用了类似LTE的OFDM方法调制,尝试用OFDM解调,解调后的星座图,频偏纠正前后如下:
由此可见,频偏纠正确实有效改善了星座图的形状,但仍然呈圆环,无法解调。考虑到星座图的意义,窄圆环就意味着信号的幅度基本不变,只有相位携带信息,所以观察信号的时间-相位图。
对上图进行4分解,进一步观察。
观察到较强的规律性,似乎不携带太多信息,像是同步信号。
更上一级,定义20个L3 为L4,时长为10ms。
图为L4的前10个L3,可以看到,L3[6,7]携带信息,其它L3为空。
对L3[6,7]下的每个L2做星座图(已纠正频偏):
仔细观察L3[6].L2[0]星座图。
观察到四个“悬臂”?图中标注处为“接缝”。
在时间-相位图像中可以明显观察到规律,采用频偏修正类似的方法,修正这个相位偏移。
相位旋转修正后的星座图中,12个L2均呈现出明显的QPSK图案(L3[6,7].L2[3]除外)
用MATLAB脚本对12个L2帧做QPSK解码,用python脚本分析编码可能性。
独立考虑解码方式的各个不确定因素。QPSK/DQPSK(2)正反(2)乱序映射(24)起始位置(4)。共计2*2*24*4 = 384种原始数据序列。
之后检查了2bits、4bits、8bits的符号频数,比较平均,同时也没有检查到明显的明文ASCII字符串,猜测可能还有上层的扰码或者其他随机化处理和加密算法。逆向分析在此处就停下来了。
六 小结
无人机无线信号协议在网上流出的信息很少,比较关键的控制信号还采用了跳频方案。OcuSync协议的结构层次比较复杂,在保证安全性的同时,还能在有限功耗下保持很高的传输速度(4K/30fps)和很远的传输距离(7km)。在缺少文档的情况下攻破无线信号很难。
发表评论
您还未登录,请先登录。
登录