导语:随着无人机的广泛使用,很多的黑客和攻击者都盯上了无人机。对无人机的攻击也从解除无人机的飞行高度等默认限制,变为进一步控制无人机。本文描述了对大疆Spark无人机劫持的简要分析。
简介
大疆无人机曾一度成为黑客论坛的焦点。他们讨论的主要是如何解除无人机的一些限制,将无人机的控制信道设置为更高的频率,移除飞行高度的限制等。很多资料都备份在github上,地址:https://github.com/MAVProxyUser/P0VsRedHerring,有兴趣的同学可以查看。
DJI Spark是2017年发布的一款无人机,而且技术相对成熟。但是,在一些性能方面上不及其他机型,比如续航只有16分钟,与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"
2. 发送下面的命令到ws://victim:19870/controller/wifi/<FILE>
{"SEQ":"12345","CMD":"SetPasswordEx","VALUE":"12345678"
3. 改变Wi-Fi密码
前:
后:
4. 重启Wi-Fi模块来使用对Wi-Fi密码的改变生效:
{"SEQ":"12345","CMD":"DoRebootWifi"}
5. 用智能手机连接到无人机
6. 等USB线拔掉后,劫持无人机。
研究人员在DJI Spark无人机上进行了攻击测试,但该攻击对所有用DJI助手2应用适配的用Wi-Fi管理的无人机都是可行的。
下面是DJI助手2的固件发布记录。
这类攻击支持所有的操作系统和默认防火墙设定,可以在有线和公共无线网络上执行。POC:https://github.com/embedi/dji-ws-tools/blob/master/dji_ws_exploit.py
USB和IoT
在日常生活中,几乎所有的智能设备都是USB连接的,上传文件,更新固件,甚至充电都用的是USB接口。很少有人怀疑这个日常的动作(接口)会给我们带来多大的威胁,但是USB却很容易被用来感染其他的设备。恶意软件如果不破坏系统的安全机制的话,是不会被检测到的。用这种方式的话,攻击者就可以无形中感染其他的智能设备。攻击者可以先更改设备的一些设定,最后再上传恶意固件到设备上。当设备连接到PC或笔记本时,感染就会传播开来。
在IOT时代,因为IOT设备的体量,这个问题会迅速扩大。这就是为什么智能设备开发者会关注设备连接到电脑的场景,并应用认证,授权和签名固件的可信启动等机制。
结论
DJI是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,市场份额约为50%,预计产量到2021年为400万。这也就是为什么对无人机的攻击会有这么大的危害了,会影响大量的用户和企业的一些机密信息。而且利用SSL密钥和XSS漏洞进行攻击的案例在现实中已经有了。
上面提到的攻击方法之所以奏效是因为DJI软件存在一些安全漏洞,总结如下:
1.Web-socket服务器会监听所有的网络接口;
2.使用硬编码密钥的方式来与web-socket服务器进行通信,这是一种弱消息加密机制;
3.Web-socket接口没有授权机制;
4.机密信息没有额外的保护措施。
针对Wi-Fi的攻击可以劫持无人机,但是场景可能不至于此。Web-socket有很多的接口可以让攻击者改变无人机的设定,并且获取一些机密信息。