首页
社区
课程
招聘
[讨论]抛砖引玉,大疆PHANTOM 3 STANDARD遥控信号嗅探
2016-11-26 14:04 46830

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

2016-11-26 14:04
46830

-----------------------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实时抓取解析),配合另一份代码,实时抓取。

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞3
打赏
分享
打赏 + 2.00雪花
打赏次数 1 雪花 + 2.00
 
赞赏  yjmwxwx   +2.00 2019/03/05
最新回复 (100)
雪    币: 1746
活跃值: (227)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
hackyzh 3 2016-11-26 16:09
2
0
大神的研究精神佩服,但是你居然花了久的时间去搞这个,难道不用工作的么,还是你直接搞安全研究的,啥事都不用干
雪    币: 187
活跃值: (551)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
Loopher 2016-11-26 21:40
3
0
解调代码都搞出来了,挺厉害啊,想起以前参加比赛的时候,买的那个电调,自己不会解码,不过现在没搞了,挺怀念的,现在可以收藏一下
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-11-26 23:50
4
0
还请同学见谅。专业跨度太大,很多东西都是新学,确实很花时间。有时候别人看起来来的一道小缝,对别人来说可能是一道天堑。所以,在此希望有机会能和各方的同学一起探讨学习,共同进步。
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-11-26 23:52
5
0
刚学的matlab,用matlab来仿真确实很方便。希望有机会能多多交流无线方面的姿势。希望能更深入的讨论http://www.freebuf.com/articles/wireless/99962.html这篇文章里面的姿势。
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一颗小白杨 2016-11-27 00:03
6
0
牛逼跪了
雪    币: 1651
活跃值: (1420)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
lxsgbin 1 2016-11-27 00:36
7
0
牛逼,毅力非凡,祖国的脊梁
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-11-27 01:47
8
0
不敢。同勉。
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-11-27 01:48
9
0
照着别人文章做,并不难。先辈才是厉害。
雪    币: 288
活跃值: (212)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
mozha 2 2016-11-27 11:15
10
0
感谢,收获不少。感觉现在逆向的环境越来越恶劣,越来越难了
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-11-27 22:37
11
0
还希望同学多多分享,共同营造好气氛。
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-11-27 22:38
12
0
还希望大牛们多多分享,共同营造好气氛。
雪    币: 305
活跃值: (369)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
风亦映寒 1 2016-11-28 09:39
13
0
条件真好啊,什么公司啊
雪    币: 124
活跃值: (4749)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wsc 2016-11-28 09:55
14
0
当年,两学期学完的通信原理,大神半个月搞定。这毅力不是一般的惊人。哈哈。给赞。
雪    币: 2443
活跃值: (434)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
飘云 1 2016-11-28 10:08
15
0
为毅力点赞!
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-11-29 00:26
16
0
果断变公司软文?
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-11-29 00:28
17
0
强势吹逼而已。半个月怎么可能学完呢。只是掌握了个大概,知道什么可以做,什么不可以做。讲真,通信的数学基础其实挺简单的,就是应用黑难。
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-11-29 00:29
18
0
难道大家对信号处理这块不感兴趣吗?
雪    币: 305
活跃值: (369)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
风亦映寒 1 2016-11-29 09:49
19
0
哈哈哈,比较羡慕这种环境啊    希望能去这样的公司
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-11-30 14:29
20
0
创业公司,压力大的很的。
雪    币: 3
活跃值: (10)
能力值: ( LV4,RANK:43 )
在线值:
发帖
回帖
粉丝
hancool 2016-12-1 10:48
21
0
不是对这一块技术不感兴趣,是因为确实无从下手,技术门槛有点高。。。差设备、差条件、差时间,佩服作者的钻研精神和态度。
雪    币: 3425
活跃值: (1480)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
vasthao 6 2016-12-1 23:42
22
0
确定实现的是GFSK的解调而不是FSK的解调?Gaussian Filter的实现呢?
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-12-2 12:49
23
0
好想找个组织,看看无线这块目前走到什么地步了。一个人闷头搞,感觉效率太低了。
雪    币: 482
活跃值: (273)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
Tee8088 2 2016-12-2 12:49
24
0
想去拦截阿三买的大疆灰机?
雪    币: 1887
活跃值: (2731)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
大大薇薇 1 2016-12-2 12:52
25
0
GFSK调制也是FSK调制,应该也只是在FSK调制前先将基带信号进行了高斯滤波处理,减小调制后的带宽,增加带宽利用率,其它的也没有什么不同。解调方式完全一样的。
游客
登录 | 注册 方可回帖
返回