基于MAVLink 协议的无人机系统安全通信方案
2020-09-04张凌浩陈一凡桂盛霖
张凌浩,王 胜,周 辉,陈一凡,桂盛霖*
(1. 国网四川省电力公司电力科学研究院,成都610000; 2. 国网四川省电力公司检修公司,成都610041;3. 电子科技大学计算机科学与工程学院,成都611731)
0 引言
随着科学技术的发展,无人机(Unmanned Aerial Vehicle,UAV)已经成为一项新兴技术,在多个行业获得了广泛应用,如智能城市、边境监视、自然灾害监控[1]、实时物体跟踪[2]和货物运输[3-4]等。UAV[5]在飞行时可以被地面控制站(Ground Control Station,GCS)进行远程控制,也可以通过预先编程的任务进行自动控制。当受到远程控制时,UAV 和GCS 之间需通过通信协议进行通信。微型飞行器链路(Micro Air Vehicle Link,MAVLink)协议[6]是一种灵活、轻量级的开源通信协议,被Ardupilot、PX4 等多个无人机系统作为无人机与地面站之间的通信协议,实现无人机和地面站之间的双向数据交换。
但是,MAVLink协议没有引入足够的安全机制,且未使用任何加密算法,因此容易受到包括窃听、消息伪造和中间人攻击等多种恶意攻击[7-8]。为了保证MAVLink协议的通信安全,研究者们提出了一些通信安全方案,如使用凯撒密码[9]对无人机与地面站的之间的通信数据进行加密,但是,已有文献较多关注通信内容加密,缺乏系统性安全增强机制,具有较大的局限性。因此,本文基于MAVLink 协议,提出了一种无人机系统安全通信方案,不仅解决了MAVLink 协议的安全性以防止窃听拦截之类的攻击,同时增加了无人机和地面站的身份认证机制防止中间人的恶意攻击。本文的方案模型在形式化验证工具UPPAAL 平台上经过形式化验证,证明它具有活性、可连接性及连接唯一性,并且在PX4 1.6.0 与地面站QgroundControl 3.5.0平台上进行了开发和实现。
1 相关工作
无人机的现有安全防护措施主要包括传感器安全、软件安全、通信安全三个方面[10]。
传感器是无人机系统探测自身及周围环境数据的重要组成部分。目前,针对无人机传感器的攻击形式主要是全球定位系统(Global Positioning System,GPS)欺骗。文献[11-13]中通过使用一种GPS 信号自动增益控制来检测是否接收到GPS 欺骗信号;而文献[14]中则通过判断信号强度和噪声值来检测GPS 欺骗。针对飞控软件是否受到了恶意代码的入侵,文献[15-16]中采用机器学习技术通过处理软件的特征码以及软件行为的数据,依据该信息得出该软件是否为恶意软件的结论。在通信安全方面,无人机和地面站之间的通信存在中间人攻击、窃听、伪造等安全威胁,而现有文献的工作大多集中在对通信内容进行加密,如文献[17]中介绍了一种无人机与传感器等智能实体通信的协议,使用了证书签名机制对通信内容进行加密;文献[18]中使用加密机制RC5 来保护MAVLink 通信协议;文献[19]中对MAVLink 协议进行了漏洞分析,使用了多种加密算法来保护MAVLink 身份协议的通信内容。而对于无人机与地面站的认证机制仅有少量论文进行研究,如文献[20]中使用DH(Diffie-Hellman)密钥交换/协议对无人机与地面站进行身份认证,但是并未对其进行形式化证明。本文对该方案使用UPPAAL 进行形式化建模和验证,发现存在认证漏洞的可达性路径(见第4章)。
基于上述分析,目前缺乏对MAVLink 协议的系统性安全机制的研究,如文献[17-18]中没有对与无人机交互的实体作身份认证;文献[19]中仅提供协议的描述,没有给出测试和实现的特定细节。因此,本文基于MAVLink 2.0 通信协议设计了无人机系统的一种安全通信方案,其中在建立连接阶段取消了MAVLink 2.0 中无人机无安全保证的确认连接操作,并新增了密钥协商机制生成共享密钥,双方使用加密的MAVLink 2.0 消息包进行通信并完成身份认证。为了防止系统固件被恶意篡改,还对无人机系统固件进行了引导时自校验。最后经过形式化建模,证明了本文改进后的无人机系统安全通信方案能够保证无人机系统的活性、可连接性以及认证唯一性。
2 基于DH算法的MAVLink协议
2.1 MAVLink协议
MAVLink是一种开源、轻量级且仅包含标头的协议,常用于 GCS 和 UAV 之间的双向 通 信 。MAVLink 1.0 于 2009 年 初由Lorenz Meier 以宽通用公共许可证(Lesser General Public License,LGPL)首次发布[21]。MAVLink 2.0 协议[22]于 2017 年初发布,是当前最新的版本,它与MAVLink 1.0 版本向后兼容,并在MAVLink 1.0版本的基础上进行了多项改进。
图1 给出了MAVLink 2.0 消息包的结构,每个MAVLink 2.0 消息包都包含头部信息、内容信息和校验信息,具体字段包括:数据包开始标记字段(packet Start Sign,STX)、有效负载长度字段(payload LENgth,LEN)、不兼容标志字段(INCompat FLAGS,INC FLAGS)、兼容标志字段(CoMPat FLAGS,CMP FLAGS)、数据包序列号字段(packet SEQuence,SEQ)、系统 ID 字段(SYStem ID,SYS ID)、组件 ID 字段(COMPonent ID,COMP ID)、消息ID 字段(MeSsaGe ID,MSG ID)、校验和字段(CHECKSUM)、签名(SIGNATURE)和有效负载字段(PAYLOAD)。其中PAYLOAD 大小是可变的,其长度取决于在通信期间发送或接收的参数,最大长度为255 B。MAVLink 2.0 消息类型由消息包上的MSG ID 字段标识,并且PAYLOAD 字段依据MSG ID 产生不同的内容。其中,MSG ID字段为0X00 的消息包为心跳包(Heartbeat)。请求连接时,无人机会首先向地面站发送心跳包请求连接,若地面站收到该请求,则发送对应的控制命令确认连接。此后,无人机定期(通常每秒)向地面站发送心跳包,以提供其状态的反馈(指示无人机处于活动状态且仍处于连接状态)。图2 给出了MAVLink 2.0中无人机和地面站的连接过程。
图1 MAVLink 2.0的消息包结构Fig. 1 Message package structure of MAVLink 2.0
图2 MAVLink 2.0中无人机和地面站的连接过程Fig.2 Connection process between UAV and GCS in MAVLink 2.0
事实上,由于MAVLink 2.0 协议并没有提供足够的安全机制来保护通信数据,也没有身份认证机制,因此只要使用匹配的无线数传硬件,任何第三方地面站都可以与无人机通信并将命令注入到现有会话中,无人机系统很容易被黑客入侵和控制,存在较大的安全风险。
2.2 基于MAVLink的无人机系统安全通信方案
针对基本的MAVLink 2.0 中的安全问题,本文方案至少要达到以下三个目标:
1)无人机以密文形式传输消息,防止恶意窃听及篡改消息;
2)无人机和地面站进行身份认证,防止恶意中间人攻击;
3)对协议的通信过程需建立形式化模型,证明其安全性质。
在基本MAVLink 2.0协议的基础上引入了高级加密标准(Advanced Encryption Standard,AES)算法和DH 算法,其中:AES 加密算法保证了无人机以密文形式传输消息,防止了恶意窃听和篡改消息;DH算法则实现了无人机和地面站的密钥协商和身份认证。
本文设计的无人机系统安全通信方案可分为四个阶段:
1)无人机请求连接;
2)无人机和地面站密钥协商与身份认证;
3)无人机与地面站加密通信;
4)无人机与地面站断开连接。
图3 给出了无人机和地面站的上述4 个交互阶段。定义1 给出了描述无人机或地面站在交互过程中状态变化的六元组的定义。
图3 无人机与地面站交互过程Fig. 3 Interaction process between UAV and GCS
定义1 通信实体状态可由一个六元组L,L0,A,C,I,E表示。其中:L表示有穷位置集;L0表示初始位置,L0∈L;A表示有穷事件集,其中a?(a∈A)表示接收了一个来自其他实体的事件,a!(a∈A)表示向其他实体发出了一个事件;C表示时钟变量集;I:L→B(C)表示一个映射,用于为L中的每个元素指定一个时间约束,其中,时钟约束集B(C) 是形如{c0~n或c1-c2~n,c0,c1,c2 ∈C,n∈N,~ ∈ { < ,<= ,= ,>= ,> }的不等式集合;E⊆L×A×B(C) × 2C×L,表示边集,边(l,a,b,R,l′) ∈E表示满足事件a和时钟约束b时,从位置l迁移到位置l′,同时时钟集合R中的时钟变量被重置。
2.2.1 无人机请求连接阶段
在连接请求阶段,无人机持续交替广播MAVLink 2.0 心跳包与公钥包Xuav,请求与地面站连接,其中心跳包格式与MAVLink 2.0中定义的一致,公钥包的MSG ID 为3,并将公钥Xuav填充至其有效负载字段。图4 给出了无人机与地面站在请 求 连 接 阶 段 的 六 元 组Luav,L0,A,Cuav,Iuav,Euav和Lgcs,L0,A,Cgcs,Igcs,Egcs描述,其中两个六元组共享同一事件集A。
在无人机端,无人机初始化后进入idle 空闲位置(idle ∈Luav)并交替发送心跳包与公钥包Xuav(将其记为原子事件“request!”(request∈A)),然后进入 wait_public_key 位置(wait_public_key∈Luav)等待接收地面站的公钥包Xgcs,同时将时钟变量c1 清零。在该位置上,最多只能停留5 个时钟单位(记为不变式“c1 <= 5”(c1 ∈Cuav))。若未在5 个时钟单位内收到地面站的公钥包Xgcs则返回idle位置。在地面站端,若收到无人机发送的心跳包或公钥包Xuav,则进入parse_request位置(parse_request ∈Lgcs)。
图4 无人机和地面站在请求连接阶段的状态变化关系Fig.4 State transition relationship between UAV and GCS in stage of requesting connection
2.2.2 无人机和地面站密钥协商与身份认证阶段
本文设计的方案和基本的MAVLink 2.0 协议相比,还增加了密钥协商与身份认证过程。无人机发起请求连接后,若在5个时钟单位内收到地面站发送的公钥Xgcs,则通过式(1)、(2)计算共享密钥K。
式中:a、q为无人机和地面站预先协商的共同参数。在地面站端,收到无人机发送的公钥Xuav后通过式(3)、(4)计算共享密钥K。
通过密钥协商,无人机和地面站生成了安全的共享密钥K。在此后的一轮通信中,无人机和地面站使用AES 算法对MAVLink 2.0消息包中的PAYLOAD字段进行加密。
若无人机收到地面站发送的加密MAVLink 2.0消息包对其PAYLOAD 字段解析错误,则地面站未通过身份认证,无人机与其断开连接;若对加密的MAVLink 2.0消息包解析正确,则双方身份认证成功,可继续通信。图5 给出了无人机与地面站在密钥协商与身份认证阶段的六元组描述。
图5 无人机和地面站在密钥协商和身份认证阶段的状态变化关系Fig.5 State transition relationship between UAV and GCS during stage of key negotiation and identity authentication
本阶段开始时,无人机处于wait_public_key 位置,若在5个时钟单位内收到地面站发送的公钥包Xgcs(记为事件“Xgcs?”(Xgcs∈ A))后进入位置 success(success ∈ Luav)表示成功收到公钥包Xgcs。该位置中,若收到地面站使用共享密钥K加密的任何 MAVLink 2.0 消息包(记为事件“mav?”(mav ∈A))则表示身份认证成功继续保持通信,否则到达5个时钟单位后断开连接进入idle 位置重新发起新的会话(记为事件“off!”(off ∈ A))。在地面站端,地面站在本阶段开始前已经处于parse_request 位置,向无人机发送公钥包Xgcs(记为事件“Xgcs!”)进入success位置表示密钥协商成功。该位置中,地面站使用共享密钥K 加密任何要发送的MAVLink 2.0消息包(记为事件“mav!”)。
2.2.3 无人机与地面站加密通信
无人机与地面站使用共享密钥K对MAVLink消息包加密通信。若收到恶意攻击者发来伪造的MAVlink 2.0 消息包导致解密失败,则无人机断开连接。在断开连接之后,若无人机和地面站需要建立新的连接,则动态更新Xuav和Xgcs重新生成新的共享密钥K,进一步保证了密钥的安全性。此外,为了保持连接状态,无人机定期向地面站发送心跳包,对其中的PAYLOAD字段进行加密。
本文所提出的无人机系统安全通信方案继续保留了MAVLink 2.0的以下安全机制:
1)时间戳机制:自2015 年1 月1 日格林威治标准时间以来,时间戳以10 μs 为单位。对于特定连接上的每个消息,时间戳必须单调增加。注意,这意味着如果数据包速率平均每秒超过100 000个数据包,则时间戳可能会超过实际时间。
2)重传机制:MAVLink 2.0 协议在发送端启动一个定时器,如果在特定的时间内没有收到响应,则请求的消息会被重新发送一次。该重传过程会重复数次,如果在最后一次的重传超时后仍然没有收到响应,则认定该消息发送失败。
3)丢包机制:在发送端,MAVLink 2.0 消息包中的 SEQ 字段在每次发送消息包后都会递增,以此检测是否丢包。
2.2.4 无人机和地面站断开连接
无人机与地面站满足以下条件之一时断开连接:
1)在无人机和地面站进行通信过程中,若对地面站发送的加密MAVLink 消息包解析错误,则主动断开连接并进入idle位置(记为事件“off!”);
2)无人机或地面站主动发送MSG ID 为5 的消息包,则断开连接。
3 无人机自校验
为保证无人机系统不被篡改,本文还设计了引导时的自校验机制,并在PX4 1.6.0 系统进行开发,实现PX4 系统在上电初始化后进行Hash 校验,若校验成功,系统正常运行;否则,系统停止加载并退出。该机制的实现过程如下:
1)原 px4src_1.6.0FirmwareToolspx_uploader.py 文件中的def __program(self,label,fw)函数中定义了变量size 记录固件的大小,因此本文在此函数中新增根据PX4 系统固件的起始地址(BootLoader_v2 在配置文件BootLoader_v2/hw_config.h 中定义起始地址为0x08004004)计算终止地址为0x08004004+size-4。
2)在 Bootloader_v2 根目录中新增 md5. c 与 md5. h 文件,实现了MD5(Message-Digest Algorithm 5)算法[23]用于计算PX4系统固件Hash 值。本文使用PX4 系统固件作为MD5 算法的输入参数并计算出Hash 值,存储在Bootloader_v2l.c 文件下hash_data[n]数组中。
3)原Bootloader_v2l.c文件中包含了初始化硬件的各类函数,本文在该文件中新增了函数GetFlashMD5(unsigned char decrypt[],int n),用于在 PX4 上电初始化完成后调用md5. c 文件中实现的MD5 算法完成对PX4 系统固件的Hash值计算并与预先存储的Hash 值hash_data[n]进行比较,若检验正确,系统正常运行;否则,系统停止加载并退出。
4 形式化证明与测试
4.1 形式化证明
本文使用由瑞典Uppsala 大学和丹麦Aalborg 大学联合开发的形式化工具UPPAAL 对无人机系统安全通信方案进行了形式化证明。该工具由模型编辑器、模拟器和验证器三部分组成。其中:系统编辑器用于对待验证实体进行建模;模拟器用于检查所建立的模型是否存在错误;验证器用于验证模型是否满足计算树逻辑(Computation Tree Logic,CTL)公式描述的性质。另外,UPPAAL 使用位置集(L)、初始位置(L0)、事件集(A)、时钟变量集(C)、不变式(I)、边集(E)六元组来描述通信实体状态,并为属性描述提供了简化版的计算树逻辑(CTL)公式,它由路径公式和状态公式两部分组成,前者量化模型的路径或轨迹,而后者则描述单独的状态。此外,UPPAAL还提供了“deadlock”关键词用来描述死锁状态。
为验证文献[19]中所提出的安全通信协议存在认证漏洞,本文基于UPPAAL 工具对文献[19]中的技术方案在存在恶意中间人攻击的场景中进行了形式化建模,如图6 所示,其中:图(a)给出了无人机(UAV)的状态变化模型,图(b)和(c)分别给出了恶意中间人地面站(Malice Ground Control Station,GCS_M)和正常地面站(GCS)的状态变化模型。注意,图6(b)的恶意中间人地面站伪装成一个正常地面站,因此具有与正常地面站相同的状态变化模型。但是,在实际攻击场景中,恶意攻击地面站可能采用不同精心设计的攻击策略。
攻击场景:文献[19]中身份认证过程中存在某一时刻,GCS 与UAV 已经建立连接并等待身份认证时,GCS_M 抢先发送公钥Xgcs_m与UAV 完成身份认证并实现控制UAV,导致与UAV 已经建立连接关系的GCS 失去对UAV 的控制权。该过程可由式(5)表示:
对图6 和式(5)进行形式化验证,结果显示该性质成立,因此存在认证漏洞的可达路径。而本文设计的方案在UPPAAL中进行形式化建模后如图7所示,其中:图(a)给出了无人机(UAV)的状态变化模型,图(b)和(c)给出了恶意中间人地面站(GC1S_M)和正常地面站(GCS)的状态变化模型。
本文使用了三个关键安全属性,使用计算树逻辑(CTL)公式表示如下:
1)活性。
在本文方案中,若UAV 和GCS 在某个通信时刻进入了死锁状态,则表示整个协议是无法正常运行的。因此,系统的活性是基本性质之一。在UPPAAL 中,式(6)描述了系统的活性。经验证,本文方案满足该性质。
2)可连接性。
UAV 和GCS 身份认证过程中,双方必须能够在一定时间周期内成功连接。式(7)描述了可连接性。经验证,本文方案满足该性质。
3)连接唯一性。
图6 文献[19]的状态变化模型Fig.6 State transition model of literature[19]
在UAV 和GCS 连接到身份认证成功期间,若存在某一时刻GCS_M 同时也能够与UAV 连接或进行身份认证,式(8)给出了连接唯一性的表示。
式(8)在UPPAAL 中验证不满足,因此本文的无人机系统安全通信方案不存在文献[20]中认证漏洞的可达性,防止了恶意中间人的攻击。表1 给出了本文无人机系统安全通信方案的安全机制。
图7 本文方案的状态变化模型Fig.7 State transition model of the proposed scheme
4.2 抓包测试
本文所使用的开发与测试平台为无人机PX4 1.6.0 与地面站QgroundControl 3.5.0,其中,QGroundControl 地面站是由Lorenz Meier开发并用C++编写的开源地面控制站(GCS)软件应用程序。本文按照2.2 节中定义的4 个阶段修改了MAVLink 2.0 的相关源代码,并按第3 章的实现过程在BootLoader_v2中增加了无人机系统固件进行引导时自校验功能,最后重新编译了QgroundControl 3.5.0、PX4 1.6.0 以及BootLoader_v2 的源代码,形成了qgroundcontrol-start. sh、px4fmuv2_bl.bin与px4fmuv2.px4可执行文件。
本节使用Bus Hound 抓包工具在Ubuntu16.04 对PX4 1.6.0 和QgroundControl 3.5.0 通信时进行了抓包分析,以说明开发的有效性。表2、3 给出了PX4 1.6.0 与QgroundControl 3.5.0 在各个阶段抓取的部分MAVLink 消息包内容,说明本文基于MAVLink 的无人机系统安全通信方案具有防篡改、防窃听的安全性质
表 2、3 分别给出了 PX4 1.6.0 与 QgroundControl 3.5.0 在MAVLink 协议改进前后的消息包内容。在加密通信阶段,控制命令原始消息包PAYLOAD 为0f 38 97 c6 e3 d1 59 7f 75 b8 89 48 0b 8a 95 71,通过加密后得到的有效负载为6a 49 67 03 7f 73 a6 10 3a 91 8a 17 a5 89 e6 92,有效防止了恶意中间人的窃听,并且和MAVLink 中的校验字段结合可有效防止恶意中间人的篡改。
表4 测试了改进前后加密通信阶段PX4 1.6.0 与QgroundControl 3.5.0 在相同时间内传输消息包的数量,说明了改进后无人机与地面站传输的消息包有少量减少,此方案 对无人机性能开销影响较小。
表1 无人机系统安全通信方案的安全机制Tab. 1 Security mechanisms of UAV system secure communication scheme
表2 改进前各阶段MAVLink消息包内容Tab. 2 Contents of original MAVLink message packages in different stages
表3 改进后各阶段MAVLink消息包内容Tab. 3 Contents of improved MAVLink message packages in different stages
表4 加密通信阶段消息包传输数量Tab. 4 Number of transmitted message packets in encrypted communication stage
5 结语
本文针对MAVLink 2.0 协议存在的安全漏洞,设计并实现了一种基于MAVLink 协议的无人机系统安全通信方案。无人机首先广播连接请求,然后使用DH 算法与地面站进行密钥协商及身份认证,并使用AES 算法对MAVLink 消息包进行加密传输。此外,无人机与地面站断开连接后会动态更新公钥。经过形式化证明和抓包测试,结果表明本文提出的方案能够防止无人机与地面站通信过程中潜在的恶意窃听、消息篡改等攻击,并且与文献[20]中的技术方案相比,本文方案避免了MAVLink 协议存在中间人攻击等安全漏洞,未来还会针对本文方案作进一步完善。