DroneSecurity:DJI OcuSync 2.0 无人机ID协议接收器,支持实时SDR与离线分析

DroneSecurity (NDSS 2023)

分支1Tags0
文件最后提交记录最后更新时间
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前

DJI OcuSync 2.0无人机识别接收器

论文缩略图

本项目是针对DJI无人机识别协议(Drone-ID)的接收器。该接收器既可实时通过软件定义无线电(SDR)工作,也能离线处理预先录制的数据捕获。

在NDSS'23会议上的论文《无人机安全与DJI DroneID之谜》中,我们详细介绍了协议和接收器设计:无人机安全与DJIGO无人机ID的神秘案例 [PDF]

如果您寻找的是模糊测试工具,我们即将上传。

该实时接收器经过以下设备测试:

  • Ettus USRP B205-mini
  • DJI Mini 2, DJI Mavic Air 2

我们的软件是一种概念验证接收器,用于逆向工程未知协议,因此,并未针对恶劣射频条件、性能或范围优化。

解码载荷

示例文件

我们在samples/文件夹提供了示例文件。

这些样本直接来自实时接收的第一阶段,它能够检测候选帧而不会进行其他数据处理;通常会直接交给离线测试用的代码处理。

您可以使用inspectrum可视化原始样本文件:

sudo apt install inspectrum
inspectrum -r 50e6 samples/mini2_sm

In spectrum屏幕快照显示了无人机ID突发信号

快速入门(离线)

创建Python虚拟环境并安装依赖项:

python3 -m venv .venv
source .venv/bin/activate
pip3 install -r requirements.txt

现在,您可以在示例文件上运行解码器:

./src/droneid_receiver_offline.py -i samples/mini2_sm
``**
### 结果
脚本执行探测和解码,就像实时接收器一样操作。它会打印每个无人机ID帧解码后的载荷:

```json
## 无人机ID载荷 ##
{
    "pkt_len": 88,
    "unk": 16,
    "version": 2,
    "sequence_number": 878,
    "state_info": 8179,
    ...
    "app_lat": 43.26826445428658,
    "app_lon": 6.640125363111847,
    ...
    "crc-packet": "c935",
    "crc-calculated": "c935"
}

总结包含了解码统计信息和飞行路径。在mini2_sm样本中,由于无人机尚未锁定GPS坐标,仅发送了智能手机的位置:

$ ./src/droneid_receiver_offline.py -i samples/mini2_sm
...
Frame detection: 10 candidates
Decoder: 9 total, CRC OK: 7 (2 CRC errors)
Drone Coordinates:
App Coordinates:
(51.447176178716916, 7.266528392911369)
...

而在samples/mavic_air_2中,同时传输了无人机和智能手机的位置:

$ ./src/droneid_receiver_offline.py -i samples/mavic_air_2
...
Decoder: 1 total, CRC OK: 1 (0 CRC errors)
Drone Coordinates:
(51.44633393111904, 7.26721594197086, 12.8)
App Coordinates:
(51.44620788045814, 7.267101350460944)

实时接收器

实时接收器还需要UHD驱动程序以及相当强大的硬件(尤其是对于50 MHz带宽的捕捉)。

环境要求:

  • Ettus USRP B205-mini
  • DJI Mini 2, DJI Mavic Air 2

首先设置Python环境。由于需要UHD驱动,这无法在虚拟环境中完成。如果之前激活了虚拟环境,请先退出。安装Python需求:

pip3 install -r requirements.txt

安装UHD:

sudo apt install libuhd-dev uhd-host python3-uhd

运行接收器:

./src/droneid_receiver_live.py

接收器会跳过一系列频率,一旦检测到无人机即锁定该频段。

深入探讨:脚本输出

处理流水线

如果您希望更深入地了解处理步骤,建议以--debug选项调用离线解码器,这将启用一个GUI进行逐步解码。

./src/droneid_receiver_offline.py -i samples/mini2_sm --debug

首先,SpectrumCapture类执行包检测并将捕获文件分割为独立的帧:

Packet #0, start 0.000076, end 0.000721, length 0.000644, cfo -12207.031250
...

一些帧可能是假阳性,我们不期待它们能成功解码。开始和结束时间以秒为单位,可以使用inspectrum查看单个帧。

接下来,Packet类检测Zadoff-Chu序列并进行时间和频率偏移校正,然后将帧分割为单独的OFDM符号。

FFO: -6546.528614
Found ZC sequences: 600 147
ZC Offset: -2.867868

Decoder类获取OFDM符号并使用QPSK对子载波进行解调。由于不知道QPSK的方向,我们采用穷举法处理方向问题。decoder.magic()执行解扰和涡轮解码。

DroneIDPacket将结果位流解包成无人机ID结构。此时,消息可能已被解码,但可能已损坏(需进行CRC检查)。

错误的CRC很容易识别,例如从序列号(应为'SecureStorage?')可以看出:

    "serial_number": "Sa#upeStore&q?\u0010\b",
    ...
    "crc-packet": "d985",
    "crc-calculated": "9b01"
}
CRC Check FAILED!

最后,我们会打印一些统计信息:

Successfully decoded 14 / 34 packets
4 Packets with CRC error

总体而言,我们解码了18个包,其中14个具有正确的CRC。这符合预期,因为样本文件包含质量大相径庭的无人机ID帧。

常见问题解答(FAQ)

DJI 的无人机标识(Drone-ID)与基于蓝牙或 Wi-Fi 的标准化“远程标识”相同吗?

不同。DJI 使用专门的无线协议为其无人机标识服务,因此需要安装接收器来实现功能。

我能使用这个软件定位其他制造商的无人机吗?

不可以。这个软件只解码 DJI 特定的协议,不适用于基于 Wi-Fi 或蓝牙的“远程标识”。

没有这款软件我还能定位无人机吗?

可能可以。自 2022 年底以来,美国和欧盟开始要求无人机制造商实施基于 Wi-Fi 或蓝牙的国际标准“无人机远程标识”。你可以使用智能手机应用来定位支持该标准的无人机。新的无人机已经内置了基于 Wi-Fi/蓝牙的“远程标识”,而现有的无人机正在逐步升级(例如,通过固件更新)。

在哪里可以找到更多关于基于 Wi-Fi/蓝牙的远程标识的信息?

欧盟的标准文档:EN 4709;美国的标准:ASTM F3411。 实际操作信息可参考联邦航空管理局(FAA)的此页面。如果你在寻找开源实现(如 Android 应用),我们推荐访问 opendroneid.org 和他们的 GitHub 存储库

你们是否计划改进接收器,添加新功能或移植到其他 SDR?

目前我们没有计划新增特性。这个工具作为学术论文的一部分提供,旨在让研究人员复现我们的研究结果,并帮助研究隐私影响。它不是为了实际、可靠的无人机定位设计的。

你们的接收器是唯一可用的接收器吗?

不是。proto17/dji_droneid 中的代码是并行开发的。我们认为它很棒,如果你对细节感兴趣,应该查看两个实现版本。

引用论文

如果你想引用我们的工作,请使用以下 BibTeX 入口:

@inproceedings{schiller2023drone,
  title={Drone Security and the Mysterious Case of DJI's DroneID},
  author={Schiller, Nico and Chlosta, Merlin and Schloegel, Moritz and Bars, Nils and 
          Eisenhofer, Thorsten and Scharnowski, Tobias and Domke, Felix and Sch{\"o}nherr, Lea and Holz, Thorsten},
  booktitle={Network and Distributed System Security Symposium (NDSS)},
  year={2023}
}

项目介绍

无人机安全(NDSS 2023)【此简介由AI生成】

定制我的领域
551.32 K225访问 GitHub