概述
近年来,无人机已经变得越来越普遍,使用范围也变得越来越广泛,不仅包含了军事方面的侦查与打击类无人机,而且还在民用领域发挥了重要作用,比如用于娱乐休闲的消费级无人机、用于搜索救援的警用无人机、用于巡检的工业无人机、用于测绘和农药喷洒的农业无人机等等。无人机在各个领域发挥着重要的作用,也出现了琳琅满目的产品,但是现有的无人机在信息安全和网络安全方面还存在一些问题,本文尝试从无人机的通信协议Mavlink去分析存在的安全问题,给出该协议潜在的威胁,并利用全球最流行的开源飞控Ardupilot在环模拟工具构建对Mavlink协议的测试验证环境,以此证明Mavlink协议的脆弱性。
背景介绍
首先介绍无人机系统的组成,无人机系统主要由三大部分构成:无人机机体、地面控制站点、通信链路。如下图所示
通常所说的无人机只是系统中的无人机机体部分,该部分全称为“无人驾驶飞行器”(Unmanned Aerial Vehicle),简称UAV,由机架机身、动力系统、飞控系统、通信系统、机载外挂业务系统组成。无人机的机架机身指无人机的承载架构,一般选择高强度轻质材料制造,无人机所有的设备都是安装在机架机身上面。无人机动力系统是为无人机提供飞行动力的部件,一般分为油动和电动两种。电动多旋翼无人机是目前最主流的机型,由电机、电调、电池三部分组成。飞控系统是无人机的飞行控制系统,无人机的全部飞行状态都需要通过飞控系统对无人机动力系统进行实时调节。飞控系统是整个无人机的控制核心,主要包括飞行控制、加速计、气压计、传感器、陀螺仪、地磁仪、定位芯片、主控芯片等多部件组成。高阶飞控系统除了飞行导航功能以外,还有安全冗余、飞行数据记录、飞行参数调整和自动飞行优化等功能。通信系统是无人机机身上必不可少的单元,担负着与地面控制站点的数据交互任务,通常为无线数传、射频通信模块等组成。无人机机载外挂业务系统主要由完成该类型无人机的任务单元设备组成,比如消费级无人机会外挂云台、外挂轻型相机等有效载荷。军用无人机的有效载荷一般包括可见光/红外、雷达等传感器,电子侦察、通信中继设备,以及**、精确制**药等;农业无人机的有效载荷根据实际需要加装大气水文测绘仪器、农药喷洒器等。
地面站(GCS)是指挥飞机飞行的装置或者站点,地面站可以分为单点地面站或者多点地面站,无人机大部分都是单点地面站。地面站是由遥控装置、显示器,电源系统,电台等设备组成,地面站上装有控制飞机的软件,通过航线规划工具规划飞机飞行的线路,并设定飞行高度,飞行速度,飞行地点,飞行任务等。常用民用无人机的地面控制站相对简单,尤其是消费级无人机的控制站实际上主要是控制手柄或者安装了配套软件的平板电脑、智能手机。
通信链路是无人机系统的重要组成部分,其主要任务是建立一个空地双向数据传输通道,用于完成地面控制站点对无人机的远距离遥控、遥测和任务信息传输。按作用距离,分为视距链路(无人机与控制站之间的距离在无线电 “可视”距离内)和超视距链路(通过卫星或航空器中继)。上图中的通信链路和属于视距链路,而通信链路属于超视距链路,军用无人机中一般都使用超视距链路。目前无人机的通信链路的物理层传输方式主要有三种:电台、WiFi(2.4G/5.8G)、以及运营商公网。无人机首选运用的是数传电台,依据《中华人民共和国无线电频率划分规则》及我国频谱运用状况,规划840.5-845MHz、1430-1444MHz和2408-2440MHz频段用于无人驾驶航空器系统,其中1.4GHz主要作为数据通讯频段,2.4GHz主要作为图像传输频段,900MHz不建议使用。实际中数传电台采用的频率有2.4GHZ、433MHZ、900MHZ、915MHZ,433MHZ使用的较多,因为433MHZ是个开放的频段,且波长较长,穿透力强,所以大部分民用用户一般都是用的433MHZ,距离可达在5千米到15千米不等,甚至更远。
通信链路的物理层传输多为无线信道方式,那么承载其上的应用层协议都有哪些呢?经过调研发现无人机与地面站点的应用层通信协议主要有Mavlink、UAVCan、UranusLink、各厂商自研的私有协议。在这些协议中, Mavlink协议是最常见和最广泛使用的通信协议,得到了大量的无人机和地面控制站的支持。Mavlink允许无人机和地面站进行双向通信,地面控制站向无人机发送指令和控制信息,而无人机则向地面站发送遥测和其他状态信息。无人机也可以通过运营商的公网使用Mavlink协议进行连接。在各大无人机公司的招聘网站中也经常提及优先考虑熟悉Mavlink协议的人员,由此可见Mavlink协议在无人机领域相当于Modbus在工控领域一样,都是广泛使用和被修改优化后使用的。
Mavlink协议介绍
Mavlink是一种非常轻量级的消息传输协议,用于地面站与无人机(以及机载无人机组件之间)进行通信。Mavlink遵循发布-订阅模式和点对点模式:数据流作为主题发送/发布,而配置子协议(如任务协议或参数协议)则是点对点的重传。每个XML文件定义了特定Mavlink系统支持的消息集,大多数地面站和飞控系统实现的参考消息集在common.xml中定义。许多无人机和自动驾驶系统都支持Mavlink协议,如Ardupilot和PX4。这两个开源系统是领先的自动驾驶仪,可以控制从无人机到无人潜水艇的任何无人驾驶车辆。
Mavlink协议分为V1.0和V2.0,首先看看V1.0的协议格式,消息帧结构如下图所示
STX:起始标志位,在v1.0版本中用“FE”表示。用于消息帧接收端进行消息解码。
LEN:代表PAYLOAD的字节长度,取值0~255,用于消息帧接收端验证有效载荷长度是否正确。
SEQ:表示本次消息帧的序号,每发完一次消息,该字节内容会加1,加到255后会从0开始。用于Mavlink消息帧接收端计算消息丢失比,相当于信号强度。
SYS:代表发送本条消息帧的设备的系统编号,用于接收端识别消息来自哪个设备。
COMP:代表发送本条消息帧的设备的单元编号,用于接收端识别消息来自设备的哪个单元。
MSG:表示有效载荷中消息包的编号,与SEQ不同,接收端要根据该字节确定有效载荷里的消息包类型,然后选择对应的方式处理消息包。
PAYLOAD:有效载荷,即要传送的数据,范围0~255字节。
CKA,CKB:这两个字节是16位校验位,CKB是高8位,CKA是低8位,统称校验和。校验码由CRC16算法得到,算法将整个消息(从LEN到PAYLOAD结束,还要额外加上MAVLINK_CRC_EXTRA对应的1个字节)进行CRC16计算,得出一个16位的校验码。每种PAYLOAD都会对应一个MAVLINK_CRC_EXTRA,这是由生成Mavlink代码的xml文件生成的。加入校验是为了应对以下情况:当飞行器和地面站使用不同版本的Mavlink协议时,双方计算的校验码不同。
Mavlink1.0 升级到 Mavlink2.0,有如下几个变化:
(1)INC FLAGS(Incompatibility flags):此标志位会影响报文的结构,该标志指示数据包是否包含一些特殊功能。例如标志等于0x01表示该数据包已签名,并且在数据包的末尾附加了签名;
(2)CMP FLAGS(compatibility flags):不影响报文的结构,即使无法解释标志,也不会阻止解析器处理消息;
(3)Message ID (MSGID):相较于V1.0版本的8位变为24位,它允许在Mavlink 2.0中使用更多类型的消息,最多可以达到16777215种类型;
(4)可选用的SIGNATURE:最后,Mavlink 2.0使用可选的13字节签名字段来确保链接被篡改。此功能显着改善了Mavlink 1.0的安全性,因为它允许对消息进行身份验证并验证消息源自受信任的源。如果INC FLAGS设置为0x01,则会附加消息的签名;
(5)STX:1.0版本中为0XFE,2.0版本中为0XFD。
对应的Mavlink 2.0的消息帧格式如下
对应wireshark解析报文如下
Mavlink协议优点:
(1)Mavlink基于LGPL开源协议而来,作为商业公司可以免费使用,相对于GPL要求使用开发的商业软件也必须开源,LGPL并无此要求,所以作为商业公司可以放心使用;
(2)支持不同的传输层和传输媒介,可以通过WiFi、以太网、遥测低频通道,即433MHz、868MHz或915MHz等物理层承载应用协议。下表列出了一些常用的遥测设备。
(3)可靠性较高
Mavlink设定了心跳包机制,可用于检测无人设备与地面站之间连通性的检测。
尽管Mavlink通信协议很强大,而且使用最广泛,但它缺乏安全机制,使其容易受到一些攻击,如拒绝服务攻击(DDoS)、窃听和中间人攻击。因为Mavlink协议没有对通信中的信息进行加密,这使得Mavlink很容易成为安全攻击的目标,损害了无人机的飞行安全。以下就Mavlink协议面临的威胁做出详细分析。
Mavlink协议面临的威胁
无人机和地面站是通过无线信道中承载的通信协议建立的,由于通信协议Mavlink不支持加密通信和认证授权机制程序,这使得其容易受到各种攻击。地面站点通过一个未经认证的信道和没有加密的方式与无人机交换数据,攻击者拥有适当的发射器可以与无人机通信,并轻松地对无人机发起攻击。攻击可以分为截获(损害数据保密性的攻击)、篡改(损害数据完整性的攻击)、中断(损害数据可用性的攻击)和伪造(对真实性的攻击)。如下图所示
1) 破坏保密性和隐私的攻击。在此类攻击中,攻击者通过截获无人机和地面站之间的数据、命令或信息,在未经授权的情况下获取机密和敏感信息,因此信息的保密性和隐私受到影响。这类攻击涉及窃听、身份欺骗流量分析和未经授权的访问。
A. 窃听。由于缺乏加密,攻击者会监听无人机和地面站之间的通信,直接从开放环境中窃听无人机和地面站之间的明文传输信息。攻击者利用这种攻击来获得有关无人机的信息,从而进行更精准的攻击(主动攻击),比如攻击者捕获从GCS发送到UAV的控制数据和命令,以用于重放或数据伪造攻击。
B. 身份欺骗。Mavlink通信协议是未加密的,使用系统ID来识别发送或预计接收信息的无人机。系统ID在未加密的Mavlink报头中被明文发送。因此,攻击者可以破坏通信链路以获知发送系统的身份信息。
C. 流量分析。流量分析是一种被动攻击,攻击者可以收集通信流量,推断出特定的数据,以分析无人机和GCS之间通信的特定模式。它可以是任何有用的信息,如Mavlink通信的频率,Mavlink数据包的大小等。流量分析是一种收集有用和敏感信息的方法,有可能被用于其他攻击。
D. 未经授权的访问。当攻击者使用重复的SYSID或COMPID访问无人机或GCS,会导致GCS和无人机的遥测信息的泄露。
2) 破坏完整性攻击。Mavlink的完整性可以通过修改正在发送的数据而遭受破坏。破坏Mavlink完整性有如下攻击:
A. 中间人攻击(Man-in-the-middle)。在Mavlink通信协议中,信息是以明文形式发送的, M-I-TM攻击可以在信道中成功建立。攻击者位于无人机和GCS之间,可以截获Mavlink有效载荷的内容并重新建链并发送命令,比如修改控制和遥测数据,并将这些错误的数据发回给GCS或无人机。
B. 劫持。当中间人攻击成功后,攻击者向无人机发送未经授权的命令,从其GCS手中夺取控制权,同时让GCS相信它仍然在控制无人机。一旦获取无人机的控制权限,攻击者就可以扣留无人机。使用Mavlink漏洞劫持无人机有两种方法:1.利用Mavlink缺乏认证的特点,通过使用airplay-ng软件,注入取消认证信息,强制断开真实用户地面站控制站点与无人机的连接。由于无人机不对用户进行认证,黑客可以很容易地连接到它,并在WIFI连接建立后立即控制该设备。2.利用Mavlink的漏洞入侵无人机的另一种方式。为了通过Mavlink控制无人机,必须设置NetID来连接到无人机。如果入侵者识别了NetID字段,他就可以通过NetID的天线轻松劫持无人机,传输恶意的Mavlink数据报文和虚假信息。
C. 重放攻击。由于通信的开放性,Mavlink协议很容易受到重放攻击。恶意攻击者会记录发送到无人机的控制数据,并在以后复制这些数据,以非法控制并使用无人机,产生未经授权的效果。这种攻击可能导致无人机失去控制,并可能坠毁。
D. 篡改消息。攻击者捕获到GCS发送的控制数据,对其进行修改,并将错误的数据发给无人机。结果,GCS的控制数据被无人机忽略或者误解,导致无人机无法控制,控制数据和遥测数据的完整性受到了影响。
E. 位置欺骗:攻击者可以利用数据链路向GCS发送欺骗信息,这些信息含有虚假的无人机位置数据,使用Scapy(一种数据包操纵工具)来欺骗心跳信号,这种攻击使GCS误判无人机的飞行轨迹而做出错误操作。
3) 破坏可用性的攻击。破坏Mavlink可用性的攻击可以通过中断无人机和地面站之间的链接来实现。关于如何进行这种攻击有以下几种手段:
A. 干扰。这种攻击会影响系统的可用性,攻击者通过破坏通信链路中断无人机对GCS控制信号的接收。干扰攻击导致无人机和GCS之间进入失联状态,使飞控系统无法正常工作,从而造成服务的不可用。
B. 拒绝服务(DoS)。攻击者可以利用Mavlink的漏洞,用垃圾数据淹没无人机GCS的通信通道,网络中断导致资源(无人机和GCS)不可用。这种形式的攻击被称为DoS攻击。在这样的攻击中,无人机无法正确接收控制信息。因此,无人机不能保持稳定的状态,任务也不能适当地执行。如果DoS攻击成功,后续会进行中间人攻击。通过进行MITM攻击,攻击者以无限循环的方式向无人机发送未经授权的命令。对无人机成功的DoS攻击使其不再对GCS作出响应。
C. 洪泛攻击。这种攻击的原理是用大量的各种数据包充斥网络,使其瘫痪。一般来说,SYN、UDP、ICMP和Ping类型的数据包被用于这种攻击。为了利用Mavlink协议的漏洞,曾有研究人员进行了一次模拟攻击,即ICMP洪泛攻击,攻击者向GCS和无人机发送许多ICMP请求包,GCS和UAV的运行负荷太大,无法对正常命令作出响应。此外,由于ICMP洪泛攻击,维持无人机和GCS之间的心跳信号会出现延时异常,在这种情况下,无人机在没有操作故障安全模式的情况下可能坠毁。
4) 破坏真实性的攻击。真实性攻击试图使GCS/UAV信任伪造的数据的真实性。该攻击包括数据伪造和GCS欺骗。
A. 数据伪造。为了进行伪造攻击,攻击者需要对GCS和无人机的通信方式有先验知识,需要知道无人机和GCS使用的协议,可以通过窃听和流量分析攻击来实现。此攻击破坏了控制数据和/或遥测数据的完整性,并可能导致对无人机的恶意接管。
B. GCS欺骗。无人机通过无线信号与GCS连接,进行数据和控制信号交互。由于无线环境是开放的,恶意攻击者可以发送一个虚假的无线控制命令,非法接管无人机。
以上是从宏观上讲述了无人机Mavlink协议固有机制使其面临的各类威胁,从四个方面总结出了详细的攻击或者威胁手段,实际使用中是否会受到这些威胁的影响呢?至此我们准备搭建Mavlink协议环境以验证是否如前所述,受到这些威胁的影响。
Mavlink协议环境搭建
由于成品无人机及地面站等实体类的设备差异较大,在查阅大量文献后得知,研究Mavlink协议时使用软件在环仿真SITL工具,SITL 可以直接在 PC上运行 ArduPilot无需任何特殊硬件。可以模拟Plane、Copter 或 Rover,它使用C++编译器构建的autopilot代码,提供了本机可执行文件,允许没有硬件的情况下测试代码的各种行为。使用该工具可以测试很多项目比如失效安全、注入GPS故障、振动水平测试、风力测试等等。不难看出Ardupilot的软件在环仿真不但可以完成设计初期的飞控系统测试,还可以完成一些实际中难于实现的场景测试。因此我们选择SITL模拟工具,重点关注的模拟器搭建成功后地面站和飞控系统的Mavlink通信协议。搭建环境时飞控系统使用的是SITL工具在Ubuntu虚拟机中,地面站使用的是Mission Planner在Windows虚拟机中。
l Git Ardupilot项目
准备安装环境,笔者使用的是Ubuntu20.04 AMD64版本,Ardupilot开源飞控是20220322更新版本。下载源码的过程都是一样的:
git clone https://github.com/ArduPilot/ardupilot
cd ardupilot
git submodule update --init –recursive
l 执行sh脚本安装所需依赖包
新版本sh文件目录有所改变,现在集中在/ardupilot/Tools/environment_install中,对应ubuntu安装文件依然是install-prereqs-ubuntu.sh。
获取运行权限:chmod +x install-prereqs-ubuntu.sh
执行: Tools/scripts/install-prereqs-ubuntu.sh –y
l 配置路径
Tools/environment_install/install-prereqs-ubuntu.sh -y
. ~/.profile
l 仿真环境启动
安装好开发环境后,启动仿真比较简单,进入ardupilot/ArduCopter的目录下,若是第一次仿真需要运行sim_vehicle.py –w用以清除虚拟内存并加载正确的默认参数,加载完默认参数就可以正常启动,利用Ctrl+C杀掉正在运行的 sim_vehicle.py,然后执行sim_vehicle.py --console –map,加载完成后会出现如下画面,包含了Terminal, Console, Map。
l 配置通讯参数
先查看地面站所在虚拟机的ip地址,然后需要在飞控所在的虚拟机SITL环境中配置转发数据接口,通过output命令添加,如下所示
l 地面站配置参数链接模拟器
打开地面站软件Mission Planner,在下图中点击连接,参数配置和模拟器端同样的端口即可,点击OK后连接成功。
l 打开wireshark抓取地面站和模拟器直接的mavlink报文
在宿主机上打开wireshark,选择虚拟机网卡,此时便可以看到地面站和模拟器直接交互的报文,此处使用了现有Mavlink解析插件(有一些缺陷),如若想制作更加完整的解析插件需要搭建Mavlink生成环境和配置xml文件,此处不再赘述,如下所示即为通讯报文,可以看到目前最新版本的模拟器支持的是Mavlink2.0版本不带签名字段。至此Mavlink协议仿真环境搭建完成,如果还需要飞行模拟测试的话还需要在地面站中生成飞行航迹文件,然后导入至模拟器中,在模拟器中切换到自动飞行模式即可。
至此基于SITL工具的模拟环境已经搭建完成,Ubuntu系统中运行着飞控模拟器,可以模拟Mavlink的服务端,接下来就可以制作伪造客户端对服务端进行拒绝服务、洪泛攻击、模糊测试等等。接下来展示一下我们基于该环境所做的脆弱性验证实验。
Mavlink协议脆弱性验证实验
1) 重放攻击。开启模拟器,待其运行后对Mavlink协议的对外开放端口发送之前嗅探的模式改变报文,则可以使模拟器处于特定模式,如下图所示获得COMMAND_LONG报文,利用python脚本发送至模拟器中。
模拟器中响应了该请求报文并执行了对应动作。该实验说明了Mavlink协议受重放攻击的影响,嗅探到关键操作报文的恶意攻击者可能会将该报文重放至协议服务器端,使其执行相应的动作。
2) 模糊测试。模糊测试是发现协议漏洞高效率的工具,当恶意攻击者链接到Mavlink服务端时,可以利用各种模糊测试框架对服务端进行测试,这就相当于现场挖掘0-day漏洞,虽然该种攻击在上述威胁中未提到,但其实际影响远大于以上提及的各种威胁,因为模糊测试是将畸形报文注入至受测设备中,发现的漏洞往往较为严重轻则拒绝服务重则远程代码执行。本次实验中采用我们自己开发的模糊测试框架对模拟器的Mavlink协议端口执行测试,在短短几个小时内发现多个漏洞,以下是fuzzing测试的展示图-出现漏洞时的模拟器的异常状态。
虽然搭建了模拟测试环境,验证了Mavlink协议的些许脆弱性,但还存在如下不足点:
A. 模拟器是运行在PC机系统上,是一个资源不受限的系统,对一些洪泛攻击等不能完全模拟,实际的飞控系统都是资源受限系统,资源消耗型的攻击都会影响到实际无人机。当然实际无人机系统(ARM/MIPS)和模拟器(x86/x64)的架构不一致,该异同点也会导致很多攻击验证的差异;
B. 模拟器和伪造客户端之间是通过传统UDP进行通信的,但是实际上对无人机的攻击首先需要突破无线通信这道屏障,比如如何加入到现有的无线通信信道中,如果是调频扩频通信,如何构建扩频序列?只有突破了无线链路物理层数据链路层的授权链接后,才可以将应用层协议Mavlink的攻击添加在其上,验证其脆弱性;
C. 模拟器使用的代码在无人机厂家移植优化过程中有改动,这样也无法完全对照验证版本之间的问题点和脆弱点。
以上只想到了几点,有可能还有更多的不足,但是模拟器是一种低成本高收益的研究方法,也适合入门级学习使用,当对整个协议有了完整认知后再去研究实际的设备,也不乏是一种明智之举。
总结
本文从无人机系统简介着手,先对无人机系统进行科普,接下来紧扣Mavlink协议展开了阐述,介绍了协议的格式、协议的优缺点;随后从Mavlink协议本身设计机制出发对其面临的威胁做了详细介绍,但是这些威胁是否真的存在?在不吹牛不说大话的研究精神加持下,我们必须要实际验证到底是不是真的,因此讲述了Mavlink协议环境搭建,具体实验验证和漏洞挖掘过程,当然我们也是入门级学员只能用模拟器练手,在模拟器上发现了多个漏洞,期待后续能自己买得起真实设备,给大家分享更多的无人机漏洞挖掘故事。
参考文献及链接:
【1】:Micro Air Vehicle Link (MAVLink) in a Nutshell: A Survey
【2】:https://ardupilot.org/dev/docs/sitl-simulator-software-in-the-loop.html
【3】:https://github.com/ArduPilot/ardupilot
【4】:https://doc.cuav.net/open-project/arudpilot.html
end
本文作者:ChaMd5安全团队
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/176658.html