无人机曾一度用来基础的地面侦查或是快餐店送披萨……然而从去年开始,无人机被用来搭载炸弹运送到战场,甚至是被用来攻击智能手机。正是因为普及面的提高,无人机也被众多黑客盯上,他们热衷于找寻相关漏洞劫持无人机。而最近,在看雪安全开发者峰会上,阿里安全 IoT 安全研究团队 Leader 谢君发表了“如何黑掉无人机”这一议题演讲,内容却另辟蹊径讲到如何不利用漏洞 root 无人机。以下为谢君演讲实录:
original="https://static.cnbetacdn.com/article/2017/1122/ccce9d390c0164d.jpg" />
谢君:我分享的议题是如何黑掉某品牌无人机。我在研究过程中从物理接触和非物理接触两个方面对整个无人机进行系统化的学习,今天我将分享研究过程中的一些收获以及学到的东西。
无人机是一个复杂的系统工程,涉及结构工程、自动化控制,空气动力学,计算机视觉处理以及各种传感器、无线通讯,以及与人工智能相关的深度学习。
我将整个系统全部拆开,发现其中应用了哪些硬件、传感器、芯片。其中涉及到不同传感器及控制系统,很多嵌入式芯片没有 OS 的概念,所有代码直接上位机执行,通过实时中断以及计时器和 IO 的控制来完成整个系统的实时操作。
模块间通信
我在此基于某品牌的无人机进行分析,包括无线通讯、飞行控制、微机电传感器、机器视觉处理。实际上这些微控制芯片来自不同厂商,要实现传感器芯片间的通讯,必须满足相应的通信规范,才能协同自如。所以产商设计了一套无人机各模块间的通信协议,协议满足全系列消费级无人机的产品,定义不超过 32 个硬件功能模块,硬件功能模块下面则可以定义子功能模块。
比如飞控系统用 03 表示,06 表示飞控系统下的子控制功能,如支持的飞机起降功能等。再比如摄像头采集系统是用 01 编号,云台控制系统是用 04 编号。在传输过程中,这些编号将会通过算法来编码。
这些不同传感器间通讯链路有多种,通讯协议可划分为本地的、通过串口的、区域网络等,其中运用多的通讯协议分别是 logic 和 V1。logic 像进程间通讯的方式,V1 是不同硬件间远程通讯的协议方式。模块间通信也采用了相应的隔离,类似现在的汽车系统,汽车有不同 ECU 模块,各个模块通讯有一定的通讯协议和格式,以及网关隔离某些子系统不允许公共访问。而无人机里的 GPS 模块,只允许飞控系统访问,其他应用系统则不被允许。
整个无人机的通讯结构,类似下图,不同传感器间通讯存在一定路径,且有一定限制。这是无人机通讯格式,可以看出存在一定规范比如一定以 55 开头,每一个包的长度不能超过固定字节,以及控制命令设置有一些校验位,且对每一个子系统的编码需要通过一定算法来计算。
无人机的核心中心桥的控制板,主要是基于 LC1860 SoC 所做的控制板,其主要功能是负责整个系统协调以及固件更新和摄像内容采集、摄像内容数据压缩、编码和图象深度学习,IOR 检测等。
这个 LC1860 芯片运行嵌入式 Linux 系统,下面是三星的 EMCP,其是集 LPDDR 和 eMMc 于一体的存储芯片,也是操作系统存放地方。
下面这一块芯片 intel Movidus MA2155,是英特尔图像深度学习芯片,因为无人机不能联网,在需要做实时机器视觉分析时,需要用到大量的矢量运行。而此芯片在无人机上面的应用有视觉测距,障碍物识别以及 ROI。当该无人机进行跟随飞行时,可通过 CNN 建立好的深度学习模型,进行精确判断。
LATTICE 的 FPGA 芯片,主要用于双目避障功能,通过可见光反射回来检测障碍物的存在。
root 无人机
在研究 IOT 设备时谈到最多的词就是能否 root 这台设备,root 设备意味着可以获得系统很高的控制权。为什么要 root 无人机?目的是扩大攻击面,更好的研究无人机。
而在研究的过程中,我们发现 root 无人机最好的办法是利用合适的漏洞,执行打开 Adb 接口功能,就能得到系统的 root shell 了。如果没有漏洞该怎么办?有意思的是我们发现不用漏洞也可以 root 无人机。
其实此方法可以运用到诸多领域,比如某些路由器。研究过程中我们发现启动脚本里有一个变量控制 ADB 功能能否打开,默认出厂 ADB 不能打开。ADB 功能接口在安卓手机应用广泛,怎样打开此 ADB 功能,一种是利用漏洞执行 ADB_en.sh 的脚本,另一种方法是直接修改该启动脚本的变量。
同样,我们不通过漏洞的方式 root 无人机,因为安卓系统存在三星 EMCP 里面,是集内存和存储于一体的 EMCP 芯片,如果我们可以修改这个芯片里面的内容就可以直接 root 无人机了。
具体操作步骤是:首先找到这块存储芯片的位置,用电热风枪把它吹下来,然后用 eMMC 的读书卡读取内容,此时即找到 eMMC 读卡器,把 eMMC 插到电脑可以看到一个弹出显示存储器里面的空间和内容,找到设置调试变量的地方,修改后再写到 eMCP 里面焊回来。
有一个小细节是,因为存储器里的内容有分区,需要将这些系统分区用 Ext4 的方式挂载,修改后保存,再剪辑切回 EMCP 的芯片里,后续我们需要把它焊回去。再运行直接 ADB 打开,就可以得到 root 权限,成功后可以看到它的系统信息和进程。
这一过程涉及到许多复杂问题,比如要手工脱焊和焊接的过程,此芯片是 BGA 封装,引脚多,引脚间距小,且芯片底座里面人为灌入黑胶,对操作过程带来很大不便,操作不当易使芯片废掉,手工操作难度极高。
飞控系统
飞控系统,是无人机里面的核心。因为会搜集到无人机各个传感器模块的一系列数据,通过一些综合算法来判断飞控系统应该如何操作。
飞控系统核心芯片是 ATSAME70Q21,其不需要外置存储器存储它的部件以及算法,与之相关有两块 IMU 陀螺仪以及加速度计,检测飞机处于什么状态。
气压计,主要为了检测飞机的高度,作为一个飞机高度的判断因素。
Ublox GPS 模块,是一个可编程的模块,因为飞控和 GPS 通讯有一个协议交互,并不是说任何一个 GPS 模块都可以替换它,但可以做一些欺骗 GPS 的事情。
指南针模块,主要用于方向的定位。
智能电源,智能电源是用德州仪器 MSP430G2755 16 位的微控制芯片,它主要是收集电源现在状态,保持了何时放电,何时通过飞控系统在电量低于某值时返航。
电调芯片,因为无人机有四个螺旋桨,四个马达,每一个马达需要一个电调的芯片控制转速,控制不同的马达的转速,来达到控制飞行姿态以及速度的操作。
视觉系统
视觉系统,这是无人机里面非常重要的功能,里面核心处理芯片是英特尔的 MA2155 深度学习处理芯片。
飞机搭载摄像头首先可以进行视频录制、拍照,图像内容输出给视觉处理芯片来完成视觉识别等功能,其中一个功能是飞行跟随,即在手机屏幕上选点跟随飞行的目标,无人机可以跟随他/它飞行,此时时候就利用芯片强大的深度学习能力,对感兴趣的区域进行识别。
还有一个功能是测距,通过 MA2155 这块深度学习芯片来完成视觉测距的功能,飞机前后障碍物的距离通过图象识别的方式识别出来。
另一个功能是双目避障,这是观测倾斜度 70 度是否有障碍物,通过发射端发射出去的光反射回来在接收端接受。
超声波可检测下方障碍物以及检测地面。
无线通信系统架构
无线通讯,是无人机里面最核心的一块功能,也是最复杂的一块功能,涉及到控制系统和图象传输。基本原理就是前端的收发器收到信号,通过基带系统进行解码,解码后通过摇控器的 LPC1549 芯片处理进而通过 Cypress 的 USB 芯片反馈到手机上。
无线通讯是通过 OFDM 方式进行图传以及数控的传输,其特点是控制通道数据通过遥控器通过 1Mhz 带宽的跳频发送,飞机回传的图象和控制通道回传数据通过 10Mhz 带宽进行定频传输。
为了保证数控通道及时性,采取定时跳频的方式。因为有可能信号会被干扰,在某一个特定频点时会被干扰,如果被干扰的话,飞机可能收不到遥控器的一些数据,此时我们需要切换不同的频点,找信噪比高的地方,保证它的可靠性。
它在 FCCID 通信管理局申请的 5G 频段的频宽执照在 5727-5821Mhz,但实际上,其操作已超过通讯管理局规定的频段。在我们研究过程中发现滥用这个频段的资源已达 5845Mhz。遥控器与飞机如何进行识别,需要配对及连接过程。
配对的唯一信息来自遥控器,所有信息都是遥控发给无人机,配对成功后可以在操作过程中识别到哪个是我控制的无人机,且这些控制配对信息皆通过摇控器芯片 LPC1549 的序列号生成。
基本上无线通讯架构的过程,首先是摇控器先初始化芯片,然后初始化基站系统各个寄存器,寄存器里存入了唯一可以配对码的信息。这个配对码有五个字节,写入到寄存器里面,真正用到只有三个字节,所以就有可能无线期劫持无人机。
无线通讯传输的过程其实是非对称传输,无人机遥控器发的信息跳频传输给飞机,接收端也是跳频接收,但是图传和下行通道是由飞机以定频的方式发送,且这些跳频算法都是通过代码来实现的。
下图即遥控器用于检测飞机是否配对的算法检测基带芯片 SPI 地址 0xE4、0xE5、0xE6 进行比较。所以劫持一台无人机,我们可以通过暴力破解的方式,用所有的密钥空间进行离线的破解,找到配对码,去控制无人机,在控中时候就可以动态改掉配对码,让这个无人机属于你。
无人机反调对抗技术
我们也发现了一些硬件的反调技术和软件的反调技术,比如说用 atmel 芯片的安全位置1,可以阻止外置硬件仿真器的挂载调试,遥控器的 LPC1549 通过 ADC 的粒度检测来检测调试器,LightBridge 用的 stm32F103 芯片通过 remap SWD IO 来使用 swd 调试接口失效,通过遥控器的硬件开关电路来阻止 LPC1549 芯片硬件仿真调试。
最后还有很多工作还没有来得及做,未来我们会更加深入的研究各个硬件模块的功能 hacking 以及进行一些想法的验证工作。