看雪论坛
发新帖
1

[讨论]抛砖引玉,大疆PHANTOM 3 STANDARD遥控信号嗅探

大大薇薇 2016-11-26 14:04 14494

-----------------------2017.02.27-------------------------------

刚才把大疆升级了,看了看新的遥控数据,大疆已经将通信协议加密了,并且加入了防重放攻击的功能。 初步感觉,目前大疆遥控器通信控制方面比较安全了。在不进行物理接触的情况下,好像还没有好的思路去做劫持了。点个赞。

下一步准备的计划:

       1.继续修改跳频图案的获取,减小误差。虽然目前模型已经验证没有问题了,但是具体实现上误差很大,会影响跳频图案。

      2.找个机会,需要去掏固件分析一下加密过程。 

代码用git管理,一有空就会继续搞这个和更新代码。 

真心希望有朋友可以一起搞搞这块,毕竟大疆的产品挺多的,帮他们测试测试。

-----------------------2017.02.27-------------------------------

-----------------------2017.02.13-----------------------------------

抽空重新写了嗅探的代码:

代码连接,戳戳戳--->代码地址<---

可以离线解析和实时嗅探。
但是由于模型还没建立好,目前还不支持跳频序列的获取。
最近一直在读协议,更新一点关于大疆的感悟:由于大疆使用的RC芯片从物理层来讲,就已经不支持目前主流的协议,比如zigbee,BLE,wifi等等,针对已经放入市场的产品,大疆必须设计自己的安全协议来保证通信安全。如果继续只依赖于芯片本身的设计,那么无人机被劫持的难度几乎为0.
-----------------------2017.02.13-----------------------------------
-------整个更新过程,坚持从我认为难到简单的步骤展开--------
看了http://www.freebuf.com/articles/wireless/99962.html这篇文章之后,感觉颇深。恰巧公司有文章中提到的机型,恰巧老板也想让搞一下。于是,就照着文章开始做了。
    不得不说的,有时候看文章很简单,道理都懂,真正开始做的时候才发现会遇到很多很多的问题。关于这点,文末的时候顺便和整个实验心得一起探讨。
    鉴于整个测试的流程文章中已经说的很明确了,这里就不在重复了。有需求的可以看原文章,这里就针对其中的一个技术详点进行说明。
信号的解调!!!
    整个测试进行了1个月多点的时间,其中有1个月的时间都花在这个上面了!毕竟不是学通信出生的啊。
    这是在整个测试中遇到的最困难的部分。这里我就详细说说这块的实现。从文章中知道该遥控器使用的是bk5811的射频芯片,通过查询该芯片的datasheet,知道信号采用GFSK调制。原文我觉得不地道的地方就是这里,说的很轻松:
    “由于没有找到现成的解调代码,只好在MATLAB上(如下图14)摸爬滚打了许久,并恶补了许多通信基础知识,折腾出(如下图15)GFSK解调脚本,并成功模拟遥控器的跳频逻辑,能够像无人机那样获取每一次跳频的数据。至此, 我们再次得到了作为安全人员来说最喜欢的二进制数据流。”
    对于我来说,为了达到这步,走了很多弯路,花费了很长的时间。花了半个月的时间学完了《通信原理》,得到的结论是没法解调,因为缺少参数。请教了很多搞通信的同学和老师,告知可以解调,但怎么怎么的说了很多(反正听不明白,意思大约是可以解调,但要我怎么怎么,听着很失望,准备放弃了);同时又开启搜索大法,在此过程中又明显感觉到“百度不好用”,好多东西和辣鸡没有区别。最后通过谷歌,找到了这么一篇教程,里面提到了使用gnuradio里面的一个模块“Quadrature Demod”可以完成解调,于是接着搜索“Quadrature Demod”模块的信息,终于在gnuradio的帮助文档中,发现了这么一段话:

    我滴乖乖,终于在经历了痛苦的将近一个月的时间里,找到了希望,找到了曙光。使用matlab,经过一系列的测试,终于完成目标:得到了熟悉的二进制数据!
运行结果,如图:

    在这里吐槽一下,很多时候,别看文章写的简单,其实做起来真多很坑爹。!!!
    
    关于文章中提到的很多细节,比如接口调试,数据格式,跳频序列获取,大疆无人机通讯中的安全问题,劫持问题等,还是有很多可以深入讨论。希望有兴趣的朋友能一起探讨。
    附件是解调代码和信号文件,有兴趣的同学可以试试。

-------------华丽的分割线-----------
这里再讨论一下通信过程和通信数据格式。
    大疆3标准本版使用的芯片是bk5811,该芯片工作在5.8Ghz频段,除此之外,和nrf24l0系列的芯片几乎没有任何区别,该芯片明显是抄袭nrf24l0系列。而关于该芯片的说明网上已经很多了,毕竟该芯片已经出产了10多年了。我在这里在当一次搬运工,帮忙大概说明一下该芯片的数据格式,并且简略探讨一下大疆在使用该芯片时的安全考虑。
    nrf24l0+射频芯片工作在2.400Ghz-2.525Ghz频段,有126个信道,每个信道1Mhz带宽,支持两种通信模式:Enhanced ShockBurstTM 和ShockBurstTM。相对于ShockBurstTM模式,Enhanced ShockBurstTM有如下特点:
支持长度1-32bytes动态payload
        自动包处理
        自动包发送处理
                自动payload识别
                自动重发
        支持6数据通道,支持MultiCeiverTM技术,组成1:6的星状网络

    大概的意思就是:使用该模式,需要至少2块芯片,一片涌来发射,一片用来接受,需要应答机制。如果只使用一片来发射,那么程序会返回发送失败的结果。但其实信号已经发送完成,使用hackrf等工具能接受到该信号。大疆使用的就是该类通信模式。
其它的一些参数:

接受原理:
    从指定信道获取信号并解调,将解调数据传递给基带协议引擎(ESB),ESB查找有效包数据(指定的地址和有效的CRC),并将其中的payload发送至RX的FIFOs,通过SPI接口发送给应用程序。(如果FIFO满了,则之前的数据会被覆盖。)
Enhanced ShockBurstTM详细介绍
    Enhanced ShockBurstTM是基于数据链路层的协议,完成自动封包,自动应答,自动重发的功能。发包时按照规定格式自动封包,如添加preamble,生成PCF,计算CRC。收包时,首先查找指定的物理地址,一旦找到则进行CRC校验,校验通过的则提取payload发送至FIFOs,供上层应用使用;校验失败的包直接丢弃。

Enhanced ShockBurstTM包结构(DPL模式):

Preamble:自动生成,用于接收器同步数据流。01010101 或者 10101010。
Address:接收器地址,程序控制。接收方通过检测该地址来解析数据。
PCF:包控制字段。6bit的payload长度,2bit的包标识,1bit的NO_ACK标识。
Payload:传输的用户数据。
CRC:自动计算。在接受方可屏蔽CRC校验过程。

自动封包过程:
    依据Address最高位自动生成Preamble,从TX_ADDR寄存器获取地址,从AW寄存器获取地址长度,自动配置PCF,拼接payload,依据CONFIG寄存器计算CRC。
自动包识别过程:
    从RX_ADDR寄存器获取地址,拿该地址在解调之后的数据中做匹配,一旦匹配成功,则开始校验数据包。首先校验CRC,失败丢弃;通过则和上一个包比较PID,如果不同则当作新包;如果相同则比较CRC,如果CRC相同则当作同一个包丢弃。
    我个人觉得重要的东西差不多就是这些了。掌握这些之后,就可以对应的去解析解调之后的信号,分别得到对应部分的数据了。
    就大疆当时那个版本的固件来说,飞机对遥控信号的验证仅仅是基于对payload中所包含的遥控器地址来匹配验证。启示通过对nrfl024手册的阅读,很明显这种验证是完全多余的,换句话说,如果大疆是企图使用该手段来做安全验证,那么完全是没有意义的(当然,如果有其它用处那自然另当别论)。因为ESB模式已经过滤掉了非匹配地址的信号,如果发射端指定的地址和接受端不同的话,接受端是不会将payload传递给上层应用程序的。基于这样的原因,一旦截获了发送端指定的地址,那么重新使用一块同类的射频芯片,设置相同的接受地址,那么该射频芯片的信号有可能(因为需要知道通信信道,而大疆使用了跳频通信方式,增强了通信中的安全,但是也存在问题,跳频序列可以被测探出来)会被接受端识别并传递给上层应用程序,实现文章中所说的劫机(没有身份验证机制)。
    当然,现在大疆的通信协议是什么样的,暂时没有去看了,这些东西都是几个月以前弄的了。并且freebuf上的那片文章推送出来时,大疆据说已经修补了该漏洞了。现在是个什么样的情况,我也不知道,有兴趣的同学可以看看啊,并且来分享一下就好了。

-------------我是分割线--------------
等了好久,没有找到感兴趣的小伙伴,伤心
这两天又抽空重新走了一遍以前流程,找到了一些资料,又来更新更新,请拍砖
关于hackrf,gnu radio相关的资料后面持续更新。
离线信号处理流程:
1.频谱分析:可以使用hackrf one和gqrx观察信号,记录有效信道,信号调制方式,通信方式,带宽等
2.使用hackrf one采集信号,采样率建议为4Mhz,设定任意有效信道等。-f 信道频率 -a 使用天线 -l LNA增益 -g VGA增益 -s 采样率
-n 采样个数 -b 滤波带宽 -r 保存的文件名。-s 和 -n 可以设定持续的时间,如这里相当于采样0.5s = s/n=4e6/2e6
(实例:hackrf_transfer -f 5743000000 -a 1 -l 40 -g 20 -s 4000000 -n 2000000 -b 1000000 -r 4M_5743_recive_0.5.iq)
3.解调(详见脚本bk5811_demodu_arg.m或者bk5811_demodu.c):核心步骤----采用正交解调,解调原理一开始已经说明(gnuradio正交解调),可以解调调频信号。
4.信号解调结果示例(增加滤波器):如图

5.二进制数据解析:对照射频芯片解析数据,如查找preamble,解析address,PCF,payload,校验CRC等。

c_demodu_sample.zip附件提供的c语言的解析代码和新的信号数据文件,在IOS和Ubuntu上测试编译运行没有问题。这份代码完成crc校验部分,丢弃crc校验不通过的包(如果要伪造包,这是不可缺少的哦)。同时这份代码不仅能解析bk5811芯片的数据,也能解析nrf24l0系列芯片的数据。(谁让他们是一模一样的呢,都是ESB协议的)。不过这份代码只能解析hackrf_transfer抓的包,使用gnuradio抓的包可是不行的。gnuradio上有现成的模块可以直接解调(坑爹的,手动弄完之后才测试出来可以直接用gnuradio实时抓取解析),配合另一份代码,实时抓取。

难道大家都不关心跳频序列的获取方式吗?虽然原文说的很明白了。

上传的附件:
本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (85)
2
hackyzh 2016-11-26 16:09
2
大神的研究精神佩服,但是你居然花了久的时间去搞这个,难道不用工作的么,还是你直接搞安全研究的,啥事都不用干
Loopher 2016-11-26 21:40
3
解调代码都搞出来了,挺厉害啊,想起以前参加比赛的时候,买的那个电调,自己不会解码,不过现在没搞了,挺怀念的,现在可以收藏一下
1
大大薇薇 2016-11-26 23:50
4
还请同学见谅。专业跨度太大,很多东西都是新学,确实很花时间。有时候别人看起来来的一道小缝,对别人来说可能是一道天堑。所以,在此希望有机会能和各方的同学一起探讨学习,共同进步。
1
大大薇薇 2016-11-26 23:52
5
刚学的matlab,用matlab来仿真确实很方便。希望有机会能多多交流无线方面的姿势。希望能更深入的讨论http://www.freebuf.com/articles/wireless/99962.html这篇文章里面的姿势。
一颗小白杨 2016-11-27 00:03
6
牛逼跪了
1
lxsgbin 2016-11-27 00:36
7
牛逼,毅力非凡,祖国的脊梁
1
大大薇薇 2016-11-27 01:47
8
不敢。同勉。
1
大大薇薇 2016-11-27 01:48
9
照着别人文章做,并不难。先辈才是厉害。
2
mozha 2016-11-27 11:15
10
感谢,收获不少。感觉现在逆向的环境越来越恶劣,越来越难了
1
大大薇薇 2016-11-27 22:37
11
还希望同学多多分享,共同营造好气氛。
1
大大薇薇 2016-11-27 22:38
12
还希望大牛们多多分享,共同营造好气氛。
1
风亦映寒 2016-11-28 09:39
13
条件真好啊,什么公司啊
wsc 2016-11-28 09:55
14
当年,两学期学完的通信原理,大神半个月搞定。这毅力不是一般的惊人。哈哈。给赞。
1
飘云 2016-11-28 10:08
15
为毅力点赞!
1
大大薇薇 2016-11-29 00:26
16
果断变公司软文?
1
大大薇薇 2016-11-29 00:28
17
强势吹逼而已。半个月怎么可能学完呢。只是掌握了个大概,知道什么可以做,什么不可以做。讲真,通信的数学基础其实挺简单的,就是应用黑难。
1
大大薇薇 2016-11-29 00:29
18
难道大家对信号处理这块不感兴趣吗?
1
风亦映寒 2016-11-29 09:49
19
哈哈哈,比较羡慕这种环境啊    希望能去这样的公司
1
大大薇薇 2016-11-30 14:29
20
创业公司,压力大的很的。
hancool 2016-12-1 10:48
21
不是对这一块技术不感兴趣,是因为确实无从下手,技术门槛有点高。。。差设备、差条件、差时间,佩服作者的钻研精神和态度。
4
vasthao 2016-12-1 23:42
22
确定实现的是GFSK的解调而不是FSK的解调?Gaussian Filter的实现呢?
1
大大薇薇 2016-12-2 12:49
23
好想找个组织,看看无线这块目前走到什么地步了。一个人闷头搞,感觉效率太低了。
2
Tee8088 2016-12-2 12:49
24
想去拦截阿三买的大疆灰机?
1
大大薇薇 2016-12-2 12:52
25
GFSK调制也是FSK调制,应该也只是在FSK调制前先将基带信号进行了高斯滤波处理,减小调制后的带宽,增加带宽利用率,其它的也没有什么不同。解调方式完全一样的。
1
大大薇薇 2016-12-2 12:56
26
用这种方式不太好进行通用的劫持。只能针对特定型号,特定固件。毕竟只要固件一升级,就得跟着升级。如果协议设计完善点,比如加入时间戳,应答机制什么的,就不好处理了。
4
vasthao 2016-12-3 05:06
27
信号的调制和解调通常是用滤波器结合其它方法来完成,由于是用DSP实现,通常是采用滤波器结合傅里叶变换的方法。大疆并没有考虑重放攻击,一种可能的重放攻击的实现方案:预生成256个滤波器,然后进行傅立叶变换穷举匹配,得到滤波器序列和解调信号,如果需要得到二进制数据还要对解调信号进行解调,最后实现解调信号的调制重放。可能涉及的知识有:泰勒级数、傅立叶变换、拉普拉斯变换、滤波器、PLL(相位锁)、采样和重采样、微积分方程。
1
大大薇薇 2016-12-5 09:15
28
生成256个滤波器?用傅立叶变换穷举匹配?  能详细说一下这是什么原理吗,实在是难以明白。
4
vasthao 2016-12-8 01:25
29
原理就是试除法、碰撞检测。
gtict 2016-12-8 08:59
30
泰勒级数、傅立叶变换这些东西确实是有的,,以前我在HW看过高通芯片解码用到这些算法,,只是那时候我是菜鸟,没怎么关注,,,好像还听某大学教授讲过
relaxlv 2016-12-21 09:06
31
这无人机的跳频是很简单的,不是受伪随机码控制,是随时间重复的,你要看规律可以下个cooledit看时频图,当然采样率要高,瞬时处理带宽要覆盖整个100m跳频带宽。时频分析功能自己弄个也不麻烦,把数据按帧做FFT,然后把结果画到两维平面,一维表示频率,一维是时间(根据帧长和采样率可算出一帧的时间),用色度表示信号强度(即FFT结果的幅度值)。
1
大大薇薇 2016-12-21 12:56
32
大疆这款无人机的射频芯片有128个信道,覆盖128M的带宽。如果不能覆盖全部的频段,就不能采用这种方式确定跳频序列吧?
relaxlv 2016-12-21 22:07
33
实际用的就十六个频率,且频率间隔是均匀的,80mhz带宽采集可覆盖,我猜想应该是不同遥控器用的16个频率不一样(按频率间隔均匀推断应该是等间隔分成8组,选其中一组,但即使是同组频率的遥控器,16个频率的跳变规律应该是不一样的,否则会发生碰撞),目前最大的漏洞是跳频码周期很短,十六跳就出现重复,这样观察十六跳的顺序就知道规律了。没条件全频段采集能覆盖两个频点的宽度也能分析,麻烦点而已,先采集相邻两信道的,根据每跳间隔7毫秒,可以看出两个频点隔了几跳,再换掉其中一点加上一个新点继续看,看齐16点你就能看出相对时间关系了。
duanyiemo 2016-12-22 11:25
34
楼主播报下最新战况被 我也在研究这个
KEVIN狗汪汪 2016-12-22 16:50
35
https://www.coursera.org/learn/hardware-security
1
大大薇薇 2016-12-22 21:58
36
只要知道了跳频集合包含元素的个数(16个信道),以及跳频周期(单周期7ms)。我感觉你说的和我用的方法应该大同小异。我是这样考虑的:已知 a=16(频段扫描得到),t=7(信号点数/采样率估算),采样率s自己设定为4M/s,然后开始按信道遍历采样,发现信号时记录当前采样点个数N,N/s得到运行时间T,T/t=n,n为周期数,n mod 16 = ord,即当前信道在16个信道中的位置。
1
大大薇薇 2016-12-22 21:59
37
我好几个月没有搞了。。最近这些都是回忆的。
你那边有什么想法吗?可以交流交流!
很期待啊。
4
vasthao 2016-12-23 00:48
38
好像是大疆把非线性调制解调器GFSK当成线性调制解调器使用了,这当然是有问题的。
1
大大薇薇 2016-12-23 01:24
39
这是什么梗?表示完全看不明白。。。不明觉厉。求求求解答。
relaxlv 2016-12-23 08:33
40
用全景接收机扫频看瀑布图可以的
relaxlv 2016-12-25 09:15
41
那个5字节地址有何规律,为什么每跳的地址是变化的呢?是不是应该是指示下一跳频率的频率码,一样频率的突发这个码是一样的,也就是隔16跳地址码就一样了。
1
大大薇薇 2016-12-26 13:18
42
全景接收机感觉不是一般人能玩的哦。
1
大大薇薇 2016-12-26 13:22
43
5字节的address就是mac地址。这款芯片通过mac地址通讯。收发双方需要设置同一个mac地址才能通讯。这款芯片唯一的preamble就是0xaa或0x55。
relaxlv 2016-12-27 06:09
44
如果是Mac地址的话一架无人机应该就一个地址,但我解调出来看,不同频率的突发这个地址是不一样的,但同一频率不同时间的突发地址确实是一样的。可能你采集带宽较小,只看一个频率的地址码,没注意不同频率该字段是不一样的。
relaxlv 2016-12-27 06:17
45
全景接收机你用的那个开源的软件无线电平台应该也可以做到的,原理就是变频器每次切换一个瞬时带宽的频率,采样做FFT,将不同频段的fft结果拼成整个关注频段的全景后显示,同时更新瀑布图的一帧。不同档次的平台差别在于切换后频率稳定所需的时间和瞬时处理带宽的大小。
1
大大薇薇 2016-12-27 08:59
46
可能现在新版本的的固件修改了,我做测试的时候每个信道上的是一样的。不过我照你这么说的,我感觉大疆这个升级也是没有什么用。毕竟这个mac地址是对上层业务透明的,他这样硬加进去感觉没什么用。
1
大大薇薇 2016-12-27 09:03
47
我用的hackrf one,最大的瞬时采样带宽应该只有20Mhz。这样算的话,一次采样要切换5次左右,不知道切换耗时和稳定性上怎么样。你用的什么采样工具?
relaxlv 2016-12-27 09:28
48
是没用,只是对分析麻烦点,要看全16个频点地址,难道这就是所谓修改过的漏洞,太小儿科了。
relaxlv 2016-12-27 09:39
49
我瞬时采80mhz带宽,IQ采样率102.4mhz,RS公司ESMD宽带接收机,然后做数字信道化同时形成20个滤波器,每个5mhz带宽,各信道输出数据做脉冲检测和解调,可同时输出按时间顺排的跳频频率和每个突发的解调数据,CRC都能通过,能看出pid是0到3依次重复,但地址码是16跳一重复,也就是跟跳点绑定的。
relaxlv 2016-12-27 09:49
50
一般接收机频合步进不是很小的话,切换频率是微秒量级的,采集8k或16k点做FFT主要就是传输和FFT计算时间,高档的接收机这部分是FPGA做的,基本是实时的,拿软件做会慢点,应该几毫秒做一帧可以的,网上有FFTW函数包下,计算FFT效率很高。
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 知道创宇带宽支持 | 微信公众号:ikanxue
Time: 0.015, SQL: 10 / 京ICP备10040895号-17