大疆Spark无人机劫持分析
字数 2241 2025-08-22 12:22:24

DJI Spark无人机劫持分析教学文档

1. 无人机概述

DJI Spark是2017年发布的一款消费级无人机,核心配置如下:

  • 处理器:Leadcore LC1860C ARMv7
  • 操作系统:Android 4.4
  • 固件更新:使用.sig扩展名的文件,采用RSA-SHA256签名,部分文件使用AES加密
  • 价格:499美元(相对Phantom 4和Mavic更便宜)

2. 外部接口分析

DJI Spark提供以下外部接口:

  • USB接口(连接PC)
  • Flash连接器(用于内存扩展)
  • 2.4 GHz Wi-Fi(通过DJI GO 4智能手机应用控制)
  • 2.412-2.462 GHz无线连接(远程控制和管理)

3. DJI Assistant 2应用分析

DJI Assistant 2是桌面端操作无人机的应用程序,主要功能:

  • 通过USB连接设备
  • 更新固件
  • 修改Wi-Fi网络设置
  • 提供两个接口:
    • 图像UI
    • web-socket接口(研究重点)

4. Web-socket服务器分析

4.1 服务器特性

  • 运行在ws://victim:19870/general
  • 需要授权但使用硬编码密钥
  • 从1.1.6版本开始通信加密(早期版本为明文)

4.2 加密机制逆向

  1. 加密特征:

    • 每次应用重新运行时加密文本相同
    • 无人机重启不影响加密
    • 跨平台一致(Mac和Windows相同)
  2. 加密算法:

    • 使用AES-CBC模式
    • 两个32字节的硬编码密钥:
      • 一个用于向服务器发出请求
      • 一个用于服务器响应
  3. 密钥位置:

    • 存储在DJIWebSocketServer.dll库中
    • 通过反编译和Github开源代码比对确认

5. Web-socket接口功能

通过/general接口可获取以下服务URL列表(所有URL包含相同hash值1d9776fab950ec3f441909deafe56b1226ca5889):

服务路径 功能描述
/adsb/log/... 从ADS-B模块导出数据
/controller/appreciation/... 许可证信息
/controller/config/user/... 广泛设置(包括最大飞行高度)
/controller/flight_record/... 飞行信息
/controller/module_activate/... 硬件模块操作(如智能飞行电池)
/controller/nfz_upgrade/... 禁飞区更新
/controller/p4_ext/... Phantom 4无人机服务
/controller/simulator/... 管理内置模拟器
/controller/upgrade/... 固件更新
/controller/user_feedback/... 用户反馈给DJI公司
/controller/vision_calibration/... 相机校准
/controller/vison_simulator/... 模拟器管理
/controller/wifi/... 管理Wi-Fi热点
/controller/zenmuse_debug_data/... 处理Zenmuse相机调试信息

6. 攻击方法详解

6.1 攻击前提

  • 感染受害者系统
  • 或远程监控USB连接/DJI Assistant 2应用连接时刻
  • 通过检测19870端口开启确定攻击时机

6.2 Wi-Fi劫持步骤

  1. 连接到web-socket服务器:ws://victim:19870/general
  2. 从服务器响应中获取文件hash值
  3. 发送以下命令修改Wi-Fi密码:
    {"SEQ":"12345","CMD":"SetPasswordEx","VALUE":"12345678"}
    
  4. 重启Wi-Fi模块使更改生效
  5. 使用智能手机连接无人机(原用户断开连接后)

6.3 攻击特点

  • 支持所有操作系统
  • 绕过默认防火墙设置
  • 可在有线和公共无线网络上执行
  • 影响所有使用DJI Assistant 2应用适配的Wi-Fi管理无人机

7. 安全漏洞总结

  1. 网络监听范围过大

    • Web-socket服务器监听所有网络接口
  2. 弱加密机制

    • 使用硬编码密钥进行通信加密
  3. 缺乏授权机制

    • Web-socket接口没有实施有效的授权验证
  4. 敏感信息保护不足

    • 关键操作和机密信息没有额外的保护层

8. 防御建议

  1. 网络隔离

    • 限制web-socket服务器只监听必要的网络接口
  2. 加密改进

    • 采用会话密钥替代硬编码密钥
    • 实现更强大的密钥交换机制
  3. 授权增强

    • 添加基于设备的认证机制
    • 实施操作权限分级
  4. 敏感操作保护

    • 对关键操作添加二次确认
    • 实现操作日志和异常检测

9. 研究工具与资源

  1. 分析工具:

    • wsdump.py(Web-socket通信工具)
    • 修改版dji_wsdump.py(含解密功能)
  2. 开源资料:

  3. POC代码:

10. 扩展思考

  1. 潜在攻击场景:

    • 固件篡改
    • 飞行限制解除
    • 敏感数据窃取
    • 无人机物理劫持
  2. 物联网设备安全启示:

    • 默认配置安全性
    • 硬件接口暴露风险
    • 远程管理协议安全性
    • 固件更新机制安全性
DJI Spark无人机劫持分析教学文档 1. 无人机概述 DJI Spark是2017年发布的一款消费级无人机,核心配置如下: 处理器:Leadcore LC1860C ARMv7 操作系统:Android 4.4 固件更新:使用.sig扩展名的文件,采用RSA-SHA256签名,部分文件使用AES加密 价格:499美元(相对Phantom 4和Mavic更便宜) 2. 外部接口分析 DJI Spark提供以下外部接口: USB接口(连接PC) Flash连接器(用于内存扩展) 2.4 GHz Wi-Fi(通过DJI GO 4智能手机应用控制) 2.412-2.462 GHz无线连接(远程控制和管理) 3. DJI Assistant 2应用分析 DJI Assistant 2是桌面端操作无人机的应用程序,主要功能: 通过USB连接设备 更新固件 修改Wi-Fi网络设置 提供两个接口: 图像UI web-socket接口(研究重点) 4. Web-socket服务器分析 4.1 服务器特性 运行在ws://victim:19870/general 需要授权但使用硬编码密钥 从1.1.6版本开始通信加密(早期版本为明文) 4.2 加密机制逆向 加密特征: 每次应用重新运行时加密文本相同 无人机重启不影响加密 跨平台一致(Mac和Windows相同) 加密算法: 使用AES-CBC模式 两个32字节的硬编码密钥: 一个用于向服务器发出请求 一个用于服务器响应 密钥位置: 存储在DJIWebSocketServer.dll库中 通过反编译和Github开源代码比对确认 5. Web-socket接口功能 通过/general接口可获取以下服务URL列表(所有URL包含相同hash值1d9776fab950ec3f441909deafe56b1226ca5889): | 服务路径 | 功能描述 | |---------|---------| | /adsb/log/... | 从ADS-B模块导出数据 | | /controller/appreciation/... | 许可证信息 | | /controller/config/user/... | 广泛设置(包括最大飞行高度) | | /controller/flight_ record/... | 飞行信息 | | /controller/module_ activate/... | 硬件模块操作(如智能飞行电池) | | /controller/nfz_ upgrade/... | 禁飞区更新 | | /controller/p4_ ext/... | Phantom 4无人机服务 | | /controller/simulator/... | 管理内置模拟器 | | /controller/upgrade/... | 固件更新 | | /controller/user_ feedback/... | 用户反馈给DJI公司 | | /controller/vision_ calibration/... | 相机校准 | | /controller/vison_ simulator/... | 模拟器管理 | | /controller/wifi/... | 管理Wi-Fi热点 | | /controller/zenmuse_ debug_ data/... | 处理Zenmuse相机调试信息 | 6. 攻击方法详解 6.1 攻击前提 感染受害者系统 或远程监控USB连接/DJI Assistant 2应用连接时刻 通过检测19870端口开启确定攻击时机 6.2 Wi-Fi劫持步骤 连接到web-socket服务器:ws://victim:19870/general 从服务器响应中获取文件hash值 发送以下命令修改Wi-Fi密码: 重启Wi-Fi模块使更改生效 使用智能手机连接无人机(原用户断开连接后) 6.3 攻击特点 支持所有操作系统 绕过默认防火墙设置 可在有线和公共无线网络上执行 影响所有使用DJI Assistant 2应用适配的Wi-Fi管理无人机 7. 安全漏洞总结 网络监听范围过大 : Web-socket服务器监听所有网络接口 弱加密机制 : 使用硬编码密钥进行通信加密 缺乏授权机制 : Web-socket接口没有实施有效的授权验证 敏感信息保护不足 : 关键操作和机密信息没有额外的保护层 8. 防御建议 网络隔离 : 限制web-socket服务器只监听必要的网络接口 加密改进 : 采用会话密钥替代硬编码密钥 实现更强大的密钥交换机制 授权增强 : 添加基于设备的认证机制 实施操作权限分级 敏感操作保护 : 对关键操作添加二次确认 实现操作日志和异常检测 9. 研究工具与资源 分析工具: wsdump.py(Web-socket通信工具) 修改版dji_ wsdump.py(含解密功能) 开源资料: MAVProxyUser/P0VsRedHerring embedi/dji-ws-tools POC代码: dji_ ws_ exploit.py 10. 扩展思考 潜在攻击场景: 固件篡改 飞行限制解除 敏感数据窃取 无人机物理劫持 物联网设备安全启示: 默认配置安全性 硬件接口暴露风险 远程管理协议安全性 固件更新机制安全性