对某品牌无人机的研究与劫持实验(转载)

无人机!无人机!无人机!无人机来了

我们又多了一架无人机,好开心!但是作为一个技术党作为好奇心暴强的人,不搞(zuo)一波岂不是很对不起自己?


对某品牌无人机的研究与劫持实验(转载)


准备工作:

hackrf 一台

一台已经装好Kali Linux的电脑

遥控无人机和配套的遥控器


对某品牌无人机的研究与劫持实验(转载)


对某品牌无人机的研究与劫持实验(转载)


hackrf环境配置见之前微信的文章,这里不再赘述。

拆解:

在对设备进行反复的操作之后,发现所获得资料实在太少,甚至连无人机工作的具体频段都无法获知,仅仅只是知道工作在2.4G频段附近。

为获得更多更详细资料,我们对遥控器和无人机进行了拆解。


对某品牌无人机的研究与劫持实验(转载)


对遥控器的拆解

可以发现遥控器的控制板上仅仅只有一颗芯片,所以这颗芯片应该就是整个遥控器的控制核心。这颗芯片的型号是XNS104芯片。查询得知,这是一颗AD型2.4G 高速无线收发单片机芯片,可以进行编程和无线收发通信。


对某品牌无人机的研究与劫持实验(转载)


对无人机的拆解

1为XN297L芯片。但是芯片2被厂家抹去了芯片型号。(啧啧啧,一定是个重要的芯片)

现在获得的芯片有无人机上的XN297L芯片和遥控器的XNS104芯片。

XN297L芯片只有无线收发的功能,无法作为无人机的MCU(主控芯片)。所以可推断获知无人机上面被抹去信号的芯片应该是一颗MCU芯片。

无人机和遥控器之间的通信通过XN297L芯片和XNS104芯片进行。XNS104芯片集成了XN297芯片的功能,所以两者的通信机制应该是基于XN297芯片的。

接下来,我们需要分析XN297L芯片的具体通信状况。通过技术手册,我们发现这样的内容,如下所示。


对某品牌无人机的研究与劫持实验(转载)


如此看来,重放攻击似乎是不大可行的,但是柳暗花明又一村,翻到最底部的时候突然看到了XN297L的数据报格式,具体如下图所示:


对某品牌无人机的研究与劫持实验(转载)


从数据报文里面可以发现PID码仅仅只有两个比特位,因此这里使用的PID并不是为了防止重放攻击的,而是用来去除重复数据报文的。仅仅两个比特位的PID码可以在短时间内遍历,所以重放攻击应该是可行的,确认了这一点之后,就可以展开下面的劫持操作了。

劫持:

劫持这个类型的无人机,我们需要去获取遥控器发射的信号。首先来看看无人机的工作机制。

工作机制:

首次对码,确认无人机处于可以使用的状态

二次对码,成功建立遥控器和无人机的通信线路

最后,遥控器成功操控无人机

前两者在开启遥控器和无人机的时候会自动完成,但是对于劫持而言,我们需要去模拟这两个步骤,从而获取到无人机的控制权。

获取无人机和遥控器的一次对码信息:

使用kali Linux下的gqrx来确定配对信息的所在频率,单独打开无人机,信道表现如下图所示,信道中没有任何信息


对某品牌无人机的研究与劫持实验(转载)


开启遥控器之后,信道中开始出现大量内容,如下图


对某品牌无人机的研究与劫持实验(转载)


由上可知,首次对码信息仅仅由遥控器发出,无人机仅仅来接收这个信息。所以,我们可以录制相应的频段信息来获得模拟遥控器和无人机之间的对码过程。

录制信息的hackrf操作

hackrf_transfer –r fly.raw –f 2479000000 –g 16 –l 8 –s 8000000 –b 4000000

在Kali Linux上面执行上述操作后,如下图所示:


对某品牌无人机的研究与劫持实验(转载)


获取无人机的二次对码信息:

获得了无人机的一次对码信息之后,接下来就需要去获取无人机的二次对码信息。

无人机的二次对码信息比一次对码信息更加的复杂,这是由于一次对码完成之后,二次对码中就引入了ACK机制,来确保无人机收到二次对码的信息。

所以在这一步中,虽然同样可以使用重放攻击,但是需要对针对ACK机制,多次重放二次对码的数据报文段。具体的录制操作和和一次对码的类似。

获得了上述报文之后,就可以去获取飞机的操作信息了,操作信息的处理方法和二次对码的相同。不同的是,需要确保操作信息录制的时间长度,来防止PID机制将重放出去的信号当作重复的报文进行丢弃。

happy的重放过程:

在之前那篇门铃重放中,我们使用了GNU radio工具来重放信号,不得不说可视化的软件减少了很多的操作步骤。

但是这一次,我们直接使用hackrf来进行录制信号的重放,我们将这个操作写成了shell脚本,接下来只需要执行shell脚本就可以了。具体的shell脚本如下所示:

#!/bin/bash 
hackrf_transfer -t flystart.raw -f 2479000000 -a 1 -s 8000000 -b 4000000 -x 47
hackrf_transfer -t flying.raw -f 2479000000 -a 1 -s 8000000 -b 400000 -x 47

这样,我们就完成了无人机的劫持

Duang~

大家可以看到,期初飞机在正常飞

用hackrf播放事先录制好的下降信息,飞机就下降了


对某品牌无人机的研究与劫持实验(转载)


脚本很简单哦,是不是已经迫不及待想动手尝试一下啦!

特别注意:

由于ACK和PID机制的存在,录制信号的时候,请确保无人机和遥控器同时处于开启状态,否则,录制的信号很可能是无效的!

实验时,由于工作在2.4GHz频段的设备有很多,比如说WIFI蓝牙等,所以请找一个无线电环境比较好的地方,进行本次实验!​

安全提示:

在对这架无人机研究过程中,可以发现这架无人机具有以下弱点:首先PID码的位数不够长,使得重放攻击能够通过一些修改和变通来实现;第二点,在ACK机制上面,没有充分利用ACK的安全机制,代码上也没有实施芯片拥有的双向认证功能。

也希望有关厂商能够对这两个问题进行修复,使这架无人机变得更加安全.


分享到:


相關文章: