欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

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

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

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

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

下一步准备的计划:

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

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

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

真心希望有朋友可以一起搞搞这块,毕竟大疆的产品挺多的,帮他们测试测试。[图片:48.gif]

-----------------------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实时抓取解析),配合另一份代码,实时抓取。
难道大家都不关心跳频序列的获取方式吗?虽然原文说的很明白了。

上传的附件 1.jpg
2.jpg
4.jpg
3.jpg
5.jpg

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功