简介

无人机曾一度成为黑客讨论的焦点。讨论的主要是如何解除无人机的一些限制,将无人机的控制信道设置为更高的频率,移除飞行高度的限制等。很多资料都备份在github上,地址:https://github.com/MAVProxyUser/P0VsRedHerring

DJI Spark是2017年发布的一款无人机,而且技术相对成熟。但与Phantom 4和Mavic等机型相比,Spark的价格也相对便宜,只有499美元。Spark的核心是Leadcore LC1860C ARMv7-一个运行Android 4.4系统的CPU,升级更新的文件扩展为.sig。升级更新的文件是用RSA-SHA256签名的,部分升级的文件中是用AES加密的。一些黑客和网络安全爱好者通过研究获取了AES密钥,所以任何人都可以通过工具来从升级的文件中提取数据并解密。在无人机的固件中,有一些本地应用环境来确保设备的正常运行。

DJI Spark的外部接口集如下:

· USB接口,连接PC;
· Flash连接器,用于内存扩展;
· 通过DJI GO 4智能手机应用连接2.4 GHz Wi-Fi来控制设备;
· 通过2.412-2.462 GHz的无线连接来远程控制和管理设备。

为了能够通过桌面端操作无人机,DJI设计了DJI助手2应用程序。应用对通过USB接口连接到计算机的设备进行操作,更新固件,改变wi-fi网络设定等。在浏览了黑客论坛的材料后,研究人员发现了一个脚本文件websocket_tool.py, 这是一个无人机能达到的最大高度的脚本。通过一个到web-socket服务器的请求,一个新的高度参数被写入。而该web-socket服务器是通过DJI助手2应用启动的。该应用有两个接口:

· 图像UI;
· web-socket接口。

从一个可信的计算机感染无人机系统是一种容易且可信的方式。所以就有了不同的恶意软件允许攻击者通过感染连接到PC的手机来感染无人机。所以呢,攻击者也可能用应用接口将恶意目的变为现实。所以,研究人员决定检查这个场景并且深入分析web-socket服务器接口。

Web-socket服务器

研究人员启动了最新的DJI Assistant 2 1.1.6版本,并连接到开机的DJI Spark(固件版本V01.00.0600)。然后访问web-socket服务器,可以用wsdump.py工具来操作web socket。

服务器响应说明在URL ws://victim:19870/ 上没有服务。通过web_socket_tool.py脚本,研究人员发现一个有效的URL -/general

很明显服务器需要授权才能工作,但响应消息是加密的,也就是说该接口从设计上就是给DJI软件使用的,而不是给普通用户。有一个问题就是传递了什么内容?可以看一下服务器和客户端的消息是如何加密的。在分析过程中,研究人员发现早期的DJI Assistant 2版本与服务器的通信是明文的。从1.1.6版本开始加入了加密机制,所以论坛中一些资料中的脚本是没有加密的。

逆向加密算法

首先,检查加密的文本特征。加密的文本中每次应用程序重新运行的时候都是系统的,而且无人机重启是不影响这些文件的。在Mac的电脑上运行应用也是同样的结果。这就可以得出一个结论,加密密钥是不依赖于会话和使用的操作系统的。所以,研究人员推测密钥是硬编码的。

然后,尝试寻找硬编码的密钥。Web-socket服务器的代码是保存在DJIWebSocketServer.dll库中。在可以寻找加密算法签名的工具的帮助下,研究人员成功找出了加密的算法AES,并定位了加密的过程。

加密的模式可以根据AES的特征来判断,唯一需要做的就是比较反编译的源码和Github的开源代码。通过比较发现使用的CBC模式。通过交叉分析,研究人员发现了加密密钥的初始化过程。

加密密钥确实是硬编码的,而且是32字节的字符串。一共有两个,第一个是用来向服务器发出请求的,另一个用来响应。现在就有了与web-socket服务器通信所必须的源数据。

接口

现在需要做的就是将传输的数据加密/解密到wsdump.py脚本中,就可以获取应用揭秘的数据了。研究人员对该脚本进行了修改,存放在github上,地址https://github.com/embedi/dji-ws-tools/blob/master/dji_wsdump.py

除应用版本,设备类型等信息外,还有一个无人机管理服务的URL列表。这些服务可以通过web-socket接口远程处理。

/adsb/log/1d9776fab950ec3f441909deafe56b1226ca5889 - data export from the ADS-B modules
/controller/appreciation/1d9776fab950ec3f441909deafe56b1226ca5889 - license information
/controller/config/user/1d9776fab950ec3f441909deafe56b1226ca5889 - a wide range of settings, including maximum flight altitude
/controller/flight_record/1d9776fab950ec3f441909deafe56b1226ca5889 - flight information
/controller/module_activate/1d9776fab950ec3f441909deafe56b1226ca5889 - operations with hardware modules, e.g., Intelligent Flight Battery
/controller/nfz_upgrade/1d9776fab950ec3f441909deafe56b1226ca5889 - no-fly zone updating
/controller/p4_ext/1d9776fab950ec3f441909deafe56b1226ca5889 - the Phantom 4 drones service
/controller/simulator/1d9776fab950ec3f441909deafe56b1226ca5889 - managing the simulator built in DJI Assistant 2
/controller/upgrade/1d9776fab950ec3f441909deafe56b1226ca5889 - firmware updating
/controller/user_feedback/1d9776fab950ec3f441909deafe56b1226ca5889 - user's feedback to the DJI company
/controller/vision_calibration/1d9776fab950ec3f441909deafe56b1226ca5889 - camera calibration
/controller/vison_simulator/1d9776fab950ec3f441909deafe56b1226ca5889 - managing the simulator (uses the commands similar to those of the simulator service)
/controller/wifi/1d9776fab950ec3f441909deafe56b1226ca5889 - managing Wi-Fi hotspot
/controller/zenmuse_debug_data/1d9776fab950ec3f441909deafe56b1226ca5889 - handling debugging information from Zenmuse cameras

攻击

通过智能手机在没有其他特殊的控制器的情况下控制DJI无人机。对DJI Spark来说,控制器是可以单独售卖也可以与Spark Combo一起售卖。在没有控制器的情况下,手机应用就是唯一可以控制DJI Spark的。无人机会创建一个Wi-Fi热点来供应用连接。热点是用WPA2协议确保安全的,并且同时只允许一个用户连接。

web-socket接口可以完全访问Wi-Fi网络设定,通过建立到web-socket服务器的网络连接,攻击者可以看到Wi-Fi网络的设定并与另一个人的无人机建立连接。但是如果改变了设置,无人机就会与用户断开连接,攻击者就会变成无人机的独有者。

为了执行一次成功的攻击,攻击者需要感染受害者的系统,或远程追踪USB或者DJI助手2应用连接到无人机的时刻。具体的时间可以通过19870端口开启的时间来确定,通过执行下面的动作可以连接到web-socket服务器ws://victim:19870 ,改变无人机Wi-Fi热点的密码:

  • 请求URL ws://victim:19870/general 时,从服务器响应中得到文件hash值:

"FILE":"1d9776fab950ec3f441909deafe56b1226ca5889"
  • 发送下面的命令到 ws://victim:19870/controller/wifi/ :
    {"SEQ":"12345","CMD":"SetPasswordEx","VALUE":"12345678"

  • 修改Wi-Fi密码
    修改前:

修改后:

  • 重启Wi-Fi模块来对Wi-Fi密码的改变生效:
    {"SEQ":"12345","CMD":"DoRebootWifi"}

  • 用智能手机连接到无人机

  • 等USB线拔掉后,劫持无人机成功。

研究人员在DJI Spark无人机上进行了攻击测试,但该攻击对所有用DJI助手2应用适配的用Wi-Fi管理的无人机都是可行的。
这类攻击支持所有的操作系统和默认防火墙设定,可以在有线和公共无线网络上执行。POC:https://github.com/embedi/dji-ws-tools/blob/master/dji_ws_exploit.py

结论

上面提到的攻击方法之所以奏效是因为DJI软件存在一些安全漏洞,总结如下:
1.Web-socket服务器会监听所有的网络接口;
2.使用硬编码密钥的方式来与web-socket服务器进行通信,这是一种弱消息加密机制;
3.Web-socket接口没有授权机制;
4.机密信息没有额外的保护措施。

针对Wi-Fi的攻击可以劫持无人机,但是场景可能不至于此。Web-socket有很多的接口可以让攻击者改变无人机的设定,并且获取一些机密信息。

来源:https://embedi.com/blog/dji-spark-hijacking/

点击收藏 | 1 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖