机器人操作系统ROS安全性研究综述

创建时间:2024-02-26 14:39

源自:软件学报

作者:鲁敬敬 秦云川  刘志中 唐卓 张拥军 李肯立

摘要:

机器人日益走进人们的日常生活, 也受到了国内外越来越多的关注. 机器人系统的一个重要特性是安全性, 增强机器人系统的安全性可以保护机器人免受恶意攻击者的入侵. 机器人操作系统的安全性是机器人系统安全性的重要组成部分. 虽然近年来研究人员针对机器人操作系统的安全性做了许多研究工作, 但遗憾的是, 安全性目前还没有得到足够的重视. 为了引起人们对机器人系统安全性更多的关注, 同时帮助人们快速了解当前主流机器人操作系统ROS (robot operating system)的安全性解决方案, 对ROS的安全性进行系统的调研和总结. 一方面, 深入分析ROS的安全特性, 总结ROS中已知的安全问题. 另一方面, 对近年来ROS安全性相关的研究进行分类分析和概括总结, 并从机密性、完整性和可用性这3个方面, 对众多ROS的安全性解决方案进行比较. 最后, 对ROS安全性研究的前景进行展望.

关键词: 

机器人    ROS    ROS2    安全性

 

随着计算技术、控制技术和人工智能技术的发展, 机器人逐渐被应用于诸多领域, 如图1所示. 在家庭服务领域, 机器人管家、扫地机器人正致力于为居民提供智能化的生活体验[1-3]. 在医疗健康领域, 手术机器人、康复机器人的智能化救治提高了治愈率, 帮助越来越多的人重获健康[4-6]. 在公共安全领域, 巡逻机器人、安保机器人在保障公共安全方面发挥着越来越重要的作用[78]. 国际机器人联合会发布的《Top 5 Robot Trends 2021》[9]显示, 在2010–2019年里工业机器人的年安装量增加了3倍多. 2018–2019年, 专业服务机器人的全球销售额增长了32%, 达到112亿美元. 这些数据充分显示了机器人市场蕴藏着巨大的潜力. 机器人可以高效完成流水线上的重复工作, 提高社会生产效率, 节约人力资本. 波士顿咨询公司曾估算, 到2025年, 更多的工业岗位将被机器人自动化取代, 制造业的人力成本将被压缩16%[10]. 机器人还可以代替人类探索未知或危险领域, 促进全球科学技术进步. NASA开发的“Robonaut 2”机器人可以驻守太空空间站, 协助宇航员完成太空探索任务[1112]. 可以预见, 未来机器人必定会以更多全新的姿态走进大众视野, 并逐渐成为人们日常生活的重要部分.

 

 

图 1 走进人类生活的机器人

 

然而, 机器人的大量使用可能会给人类带来许多潜在的安全威胁. 特别是在国防、医疗等涉及人类的关键领域, 机器人系统的安全性显得尤为重要[1314]. 机器人系统的安全性有两方面含义, 一方面是指保护环境不受机器人系统的影响[15], 即防止机器人系统故障给人类及周围环境带来安全威胁. 机器人的任何系统故障都可能导致灾难性的后果. 例如, 2016年, 谷歌的一辆无人车因为发生系统错误与一辆公交车相撞, 不仅损坏了当时的道路基础设施, 还给路人带来了身体和精神上的伤害. 另一方面是指保护机器人系统不受环境的影响[1617], 主要是指防止恶意攻击者的非法入侵给机器人系统带来安全隐患. 恶意攻击者一旦突破机器人系统的安全防护, 可能会给系统带来严重的安全威胁. 例如, 攻击者可能会伪装成合法用户潜伏在机器人系统中伺机窃取机密信息, 甚至可能直接向机器人发送指令操纵机器人的行动. 本文所讨论的机器人系统的安全性指的是第2个方面的含义, 即机器人系统抵御来自攻击者恶意入侵的能力.

相比于传统计算平台, 机器人系统面临的安全威胁种类更多, 安全问题所引起的后果也更严重. 下面将进行具体分析. 机器人主要由计算系统、感知系统和执行系统构成, 是机械域与信息域一体化的产物[18], 这意味着机器人有着复杂的软硬件构成环境, 也暗示了机器人面临的安全威胁复杂多样. 首先, 机器人是建立在传统计算平台之上的, 因此要面临与传统计算平台相同的安全威胁和后果. 传统计算平台面临的安全威胁主要包含两个方面. 一是来自信息空间的攻击, 主要包括电子进攻、网络攻击[19-21]等. 来自信息空间的攻击可以干扰和破坏计算平台信息系统. 其中, 攻击信息装备和信息的可用性可以破坏、阻塞或扰乱计算平台的功能. 攻击信息传递过程和信息内容的完整性可以讹误和欺骗计算平台. 攻击信息传递过程和信息内容的保密性, 可以从计算平台中窃取和利用机密信息. 二是来自物理空间的攻击, 常见的攻击方式主要有冷启动攻击和探针攻击. 其中, 冷启动攻击通过获取计算机运行时内存快照, 实现获取密钥等机密信息. 微探针攻击则是通过直接访问芯片表面, 达到观察、操作和干扰设备的目的. 不难看出, 传统计算平台安全性是机器人安全性的重要组成部分, 忽视其安全性将导致不可估量的严重后果. 除了传统计算平台, 机器人通常还会接入一种或多种传感器用于感知环境数据, 部分机器人还配备了机械手臂或行走装置用于开展具体行动. 使用这些设备可以丰富机器人的功能、提高机器人的智能化水平, 但同时也为攻击者提供了更多的攻击入口, 从而给机器人带来了额外的安全隐患. 例如, 恶意攻击者可以通过向传感器传递虚假环境信息, 从而达到扰乱和控制机器人行为的目的, 对于那些带有机械臂和行走装置的机器人, 攻击者一旦掌握了其控制权, 很可能会对人类及周围环境带来直接的物理伤害, 威胁人民群众的生命安全和身体健康, 进而扰乱社会秩序, 破坏社会安定. 因此, 为了机器人产业的可持续发展, 促进机器人更好地服务于人类, 研究机器人系统的安全性十分必要.

针对机器人系统安全性的研究由来已久. 早在1950年, Asimov就在他的小说中创造性地提出机器人三大定律, 通过给机器人设立规则, 以确保机器人系统的安全性[22]. 近几年, 学术界针对机器人系统的安全性也开展了许多研究工作. 由于基于信标实时定位系统提供的数据在有攻击者和没有攻击者两种情况下存在统计学差异, Guerrero-Higueras等人[23]提出一种攻击检测方法. Quarta等人[24]首次系统分析了工业机器人控制器的安全性. 尽管如此, 无论是在学术界还是在工业界, 机器人系统的安全性都没有得到足够的重视, 机器人专家不会优先考虑机器人带来的安全和隐私风险, 因为机器人的投资人和开发商都更加注重机器人的功能性而不是安全性[25]. 庆幸的是, 近年来, 研究人员针对当前主流机器人操作系统ROS[26]的安全性开展了许多研究工作, 一些研究提出的ROS安全性解决方案在提高机器人系统安全性方面发挥着重要作用. 本文对ROS系统安全性的相关研究进行了全面分析和总结.

本文首先分析了导致ROS缺乏安全性的原因, 总结了当前ROS系统中存在的主要安全问题. 然后, 总结回顾了研究人员在评估和增强ROS系统安全性方面所做的努力, 并进一步从机密性、完整性、可用性这3个方面对ROS安全性解决方案进行了比较. 最后, 本文对ROS安全性研究的前景进行了展望.

本文第2节对ROS进行了简要介绍. 第3节阐述了ROS缺乏安全性的事实, 深入剖析了其原因, 并概括介绍了ROS中已暴露的安全问题. 第4节对ROS安全性的相关研究进行了分类总结和优缺点分析, 特别是对ROS2的安全特性进行了深入剖析. 第5节对本文的主要工作进行了总结, 并基于当前ROS安全性的研究现状展望了ROS安全性研究的前景.

1 ROS简介

ROS是一个强大而灵活的开源机器人操作系统, 目前由美国开放机器人基金会负责维护.它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能[27]. ROS最初是为了在机器人领域提高代码的复用率, 经过14年的发展, 良好的ROS社区生态以及丰富的功能包为机器人的开发提供了巨大的便利, 也推动ROS成为机器人领域事实上的标准[28]. ROS很早就被应用到机器人领域, 很多知名的机器人开源库都是开源贡献者基于ROS开发的, 例如基于Quaternion的坐标转换[29]、基于3D点云的物体识别[30]以及SLAM定位算法[3132]. 随着社会发展对提高生产效率产生强烈需求, 军事、教育、工业等诸多领域都根据实际需要开发了基于ROS的机器人, 图2所示的美国Endeavor Robotics公司研制的PackBot[33]军用机器人、韩国Yujin公司开发的TurtleBot2[34]机器人以及在学术领域广泛应用的NAO[35]机器人等国际著名机器人都是利用ROS框架开发的. ROS一直保持持续的版本更新, 撰写本文时ROS Noetic Ninjemys版本已经正式发布[36].

图 2 基于ROS的机器人

 

从软件构架的角度来看, ROS是一种基于匿名发布/订阅机制[37]和消息传递通信的分布式多进程框架, 开发者可以根据功能把软件拆分成为各个模块, 每个模块只是负责读取和分发消息, 模块间通过消息关联. 发布/订阅机制具有松耦合特性, 并且支持异步通信和分布式组件交互等多种功能, 因此, 该机制在众多领域得到了广泛应用. ROS中的消息传递通信是通过节点实现的点对点通信. 节点间的消息通信分为3种, 如图3所示, 它们分别是采用单向消息发送/接收方式的话题(topic)、采用双向消息请求/响应方式的服务(service)以及采用双向消息目标(goal)/结果(result)/反馈(feedback)方式的动作(action)[3839]. 开发人员在对ROS进行编程时要根据实际需求选择合适的话题、服务、动作和参数, 以实现具体功能.

 

图 3 ROS节点间消息通信图


2 ROS安全性分析

本文所讨论的ROS安全性指的是ROS系统确保系统中传输的数据在产生、传输、存储等各个环节的机密性、完整性、可用性不被破坏, 保证ROS系统连续可靠正常运行的能力. 因为ROS最初是为科研服务的, 所以开发者在进行ROS架构设计时并没有充分考虑系统的安全性. 这直接导致ROS中隐藏着很多潜在的安全隐患, 也给基于ROS的机器人带来了很多不可预料的安全威胁, 进而限制了ROS的进一步应用与拓展[40].

导致ROS缺乏安全性的一个重要原因是ROS基于匿名发布/订阅机制. 实现该机制的系统容易遭受各种安全威胁, 因为发布者无法确保发布的消息在传输过程中不被攻击者访问和更改, 而订阅者无法验证收到的数据的完整性[41-43]. 在数据传输缺乏机密性和完整性的情况下, 攻击者可能会窃听已发布的数据或修改已订阅的消息. 这可能会导致机器人行为的改变, 从而产生无法预料的后果.

本文系统调查了ROS的安全特性, ROS中已为人知的安全问题主要包括以下4个方面[25,44-47].

(1) ROS中节点之间的通信为明文通信. 尽管未加密的文本在易于使用、方便调试、不过多消耗系统性能等方面有诸多优势, 但与此同时, 攻击者可以利用恶意节点轻易拦截和破译消息内容, 监听话题并趁机将虚假消息注入机器人系统, 给系统带来不可预测的安全威胁.

(2) ROS的模块化特性暗藏着诸多安全隐患. 模块化特性在方便研究人员进行机器人开发的同时也暴露了许多安全缺陷, 例如, ROS使用不安全的TCP端口, 并且缺乏身份验证机制, 攻击者可能会利用这些缺陷对系统进行中间人攻击, 甚至破坏机器人系统.

(3) ROS采用弱授权方案. ROS不进行消息发送方验证, 不检查数据的完整性和真实性, 也不定义访问级别. 实际上, 一些远程客户机不应该拥有对整个ROS系统的访问权限. 可以想象, 如果任何用户都可以向机器人发送任意指令, 并且直接操纵机器人, 那么机器人系统将面临巨大的安全威胁.

(4) ROS不提供服务质量(quality of service, QoS). 每个节点负责管理自己的通信, 类似的消息没有被压缩, 也没有任何减少网络通信的努力. 这可能会导致网络延迟和网络阻塞等网络安全问题得不到及时解决, 从而阻碍时间关键型应用程序的开发[4849].

3 ROS安全性研究

近年来, 基于ROS框架开发的机器人逐渐被应用到日常生活场景, 用于提高生产效率和生活质量. 然而, 一些机器人的安全状况却令人堪忧. 由于部分机器人系统缺乏安全性考虑或者安全防护层薄弱, 恶意攻击者往往可以轻易绕过或突破系统安全防护进而操纵机器人, 这会对机器人周围的人和物带来严重的安全威胁. 为了满足市场在机器人安全性方面的新需求, 近几年, 学术界和工业界在揭露ROS的安全漏洞以及为ROS提供安全性解决方案等方面进行了许多卓有成效的研究, 本节将对ROS安全性相关的研究进行分类和总结.

3.1 测试和评估ROS安全性的研究

虽然增强ROS系统的安全性十分迫切, 但是在制定合理的安全性解决方案之前, 定性和定量测试和评估ROS的安全性十分必要. 一方面, 对ROS进行安全性测试和评估可以揭露使用ROS框架构建的信息物理系统中潜在的安全漏洞, 从而帮助ROS用户了解他们使用的机器人所面临的安全威胁, 另一方面, 只有弄清楚ROS系统有哪些安全漏洞, 研究人员才能选择合适的信息安全技术增强机器人系统的安全防护能力.

3.1.1 渗透测试ROS系统

渗透测试是一种常见的安全测试实践, 它通过模拟恶意攻击者的攻击方法, 来测试应用程序是否存在潜在的安全隐患. 渗透测试过程会对系统漏洞或者技术缺陷进行主动分析, 然后输出渗透测试报告, 应用所有者通过渗透测试报告可以知晓系统中存在的安全隐患. 将渗透测试集成到开发周期, 有利于开发出更加安全的应用程序.

为了主动捕捉和分析基于ROS的机器人系统中的安全漏洞, 研究人员开发了专门针对ROS的渗透测试工具. Dieber等人[50]引入了两个ROS应用程序渗透测试工具: ROSPenTo和Roschaos. 这两个工具可以利用ROS API中的漏洞, 支持手动或自动地对正在运行的ROS应用程序执行攻击, 进而分析和操纵ROS应用程序. 文献[50]首先对这两个工具及其使用方法进行了详细介绍, 然后使用ROSPenTo和Roschaos工具演示了攻击ROS应用程序的过程. 采用的攻击类型包括: (1)隐形发布者攻击: 攻击者向运行中的ROS应用程序注入虚假数据, 并欺骗订阅者使用虚假数据, 而不被任何其他应用程序节点或ROS主节点注意到. (2)服务隔离攻击: 攻击者将特定服务与其他ROS网络隔离, 以便攻击者可以调用, 而其他ROS节点无法调用这些服务. (3)恶意参数更新攻击: 攻击者可以随意操纵ROS参数服务器. 文献最后作者展示了这些攻击可能产生的影响, 并给出了抵御这些攻击的几种对策, 包括使用roswtf工具检测ROSPenTo的攻击模式, 使用SROS增强ROS系统安全性, 以及使用具有安全特性的ROS2等. 同样是为了协助进行ROS安全性研究, Rivera等人[51]提出了一种新的开发工具ROSploit, 用于模拟对ROS系统的攻击. 它还提出了一个新的ROS系统安全模型, 并将该模型作为ROS系统安全分析的基础. 与上述的ROSPenTO工具不同的是, ROSploit能够分析带有未知主节点的系统, 并能够部分分析基于端口号的ROS系统.

无论是ROSPenTo、Roschaos还是ROSploit, 都可以方便开发人员对他们开发的基于ROS的机器人系统进行安全测试, 从而提前发现系统漏洞, 尽早进行安全防护, 最终开发出安全可靠的系统.

3.1.2 评估ROS系统安全性

除了使用专门的渗透测试工具, 研究人员还利用了其他方式对ROS系统的安全性进行了有效评估. 2012年, 在DEF CON 20信息安全大会上举行的信息物理安全竞赛中, McClean等人[52]通过引入一个名为信息物理安全蜜罐的研究工具, 首次对ROS系统的安全性进行了实测和展示. 作者将一个基于ROS的小型汽车式机器人配置成信息物理安全蜜罐, 然后进行了ROS安全性实验. 该蜜罐与传统信息安全蜜罐相比, 既有相同之处, 也有不同之处. 首先, 该蜜罐与传统信息安全蜜罐一样, 都具有捕获和分析攻击行为的功能, 这样就可以了解攻击工具和方法, 推测攻击意图和动机, 进而了解机器人所面临的具体的安全威胁. 其次, 与传统信息安全蜜罐不同的是, 该蜜罐还额外配备了传感器和执行器, 以此增加系统漏洞类型, 扩大攻击者的攻击范围. 为了模拟真实的应用场景, 作者在机器人中有意保留了ROS的已知漏洞, 包括明文通信、未受保护的TCP端口和未加密的数据存储等. 作者邀请了众多与会者参与到实验中, 并让他们对用作蜜罐的机器人进行了普通的、低成本、低开销的网络攻击. 实验参与者中不乏信息安全领域的专家和熟悉ROS的专业人士. 作者在实验过程中对信息安全蜜罐的网络流量进行了监控和记录, 用作后续使用. 实验结果证明了网络攻击的有效性, 因为攻击不但直接导致用于控制蜜罐的固态硬盘出现了故障, 还使蜜罐上的软件故障保护失效, 进而导致前后摄像头无法再发送数据. 不仅如此, 熟悉ROS的攻击者还轻易地向机器人系统中注入了虚假消息并直接操纵了机器人. 会后作者还通过其他实验验证了这样一个猜想: 即使是那些缺乏信息安全经验的人, 也可以使用Wireshark等免费工具嗅探和破译机器人系统中的通信消息, 甚至在数据包中注入虚假信息, 进而对机器人系统进行中间人攻击. 此外, 作者通过诸多实验证明了检测恶意攻击比预期的困难得多, 因为攻击者可以故意将攻击行为伪装成简单的bug, 这会导致很难区分信息物理安全漏洞以及硬件或软件漏洞. 因此, 作者认为为了保证信息物理系统的安全, 具备信息安全、物理安全以及机器人技术等知识背景的新型安全专业人员是必不可少的. 此外, 针对ROS消息的纯文本性质带来的安全威胁, 作者认为要对接收到的消息进行身份验证并验证发送方的身份, 并且建议利用标准的基于散列的HMAC (hash-based message authentication code)实现验证功能.

基于对ROS系统缺乏安全性的基本认识, 再考虑到机器人研究的跨学科特性给机器人安全性研究带来了诸多困难, 特别是评估机器人系统安全性的工具和标准十分欠缺, Vilches等人[53]深刻意识到综合的机器人安全评估工具对促进机器人安全性的重要作用, 并提出了机器人安全框架RSF. RSF是一种能够全面评估机器人系统安全性的标准化方法, 当然也包含基于ROS的机器人系统. RSF是一个开源框架, 可以识别、分类和报告机器人系统的中漏洞. RSF主要由4层组成, 包括物理层、网络层、固件层和应用层. 作者将每一层划分为数个方面, 为每个方面指定了安全评估标准, 并且描述了每个标准的评估目标、评估原理以及评估方法. 为了方便开发人员理解和使用该框架, 作者开发了一套RSF专用的术语, 还提供了该框架的使用指南, 并用实例演示了该方法评估机器人安全性的全过程.

为了揭示和衡量机器人研究的安全状况, DeMarinis等人[54]以在机器人研究中广泛使用的ROS为例, 使用互联网端口扫描工具ZMap, 对整个IPv4地址空间进行了多次扫描, 以识别暴露在公共互联网上的ROS主机. 作者总共进行了3次扫描, 每次扫描都观察到超过100个ROS实例, 跨越28个国家, 其中超过70%的观察实例使用属于大学网络或研究机构的地址. 作者对扫描结果进行了定量和定性评估. 作者定量评估了各种类型的传感器和执行器的话题数量, 并且定性地远程访问和控制了某个机器人. 评估结果证明了许多ROS用户的安全意识薄弱, 他们将机器人暴露在一个充满安全威胁的公共网络环境中, 恶意攻击者可以轻易地获取想要的话题数据或者操纵机器人, 这可能会导致十分严重的后果. 因此, 作者提醒机器人使用者, 无论是在工业生产中还是学术研究中, 都应该将机器人的安全性作为一个重要因素进行考虑. 此外, 作者还给出了几个提高机器人安全性的可行建议, 包括使用具有安全特性的ROS2, 为ROS的安全性提供临时解决方案, 例如建立防火墙、使用工具检查网络暴露、远程访问可以通过VPN (virtual private network)实现等.

上述测试和评估ROS系统安全性的研究工作不仅揭露了ROS中的诸多安全问题, 例如, 明文通信、TCP端口未收到保护等, 而且还证实了即使是缺乏信息安全经验的人也可以轻易成功入侵ROS系统. 因此增强ROS安全性十分重要, 迫在眉睫.

3.2 增强ROS安全性的研究

机器人智能化程度的提升离不开对网络的应用, 现在越来越多的机器人承载着直接面向互联网的应用程序. 因此, 网络攻击所带来的安全威胁也就成了机器人必须面对的安全威胁之一. 针对机器人的网络攻击通常指对机器人计算机网络的软件实施攻击, 包括计算机网络入侵、计算机病毒攻击和引发错误攻击等多种攻击方式. 攻击者可以利用机器人系统中的网络安全漏洞对系统和资源进行攻击, 以非授权方式达到破坏、欺骗和窃取数据信息等目的. 因此, 提高机器人系统的网络安全是提高其整体安全性的重要方面. 当前, ROS安全性解决方案的着力点主要集中在保障机器人系统的网络安全方面, 目的在于防止ROS遭受网络攻击. 本节首先对增强ROS安全性的相关研究进行了分类, 分类标准参考的是OSI (open system interconnection)模型, ROS安全性解决方案主要集中在OSI模型的应用层、传输层和网络层, 如图4所示. 然后本节概括了每个方案的主要研究内容, 并对其优势和不足进行了分析和阐述.

 

图 4 ROS安全性解决方案在OSI模型中的分布图


3.2.1 应用层安全加固

在应用层实现安全加固是指不修改ROS框架, 即将ROS视为黑盒, 并在ROS之上, 也就是OSI模型中的应用层实现安全措施.

Lera等人[19]使用3DES加密算法对ROS进程间的通信数据进行了加密, 并且增加了两个独立的节点分别负责完成加密和解密任务, 从而为ROS提供安全防护. 作者还搭建了专门的实验平台, 并从系统的CPU消耗和网络流量两个方面评估了数据加密对机器人系统性能的影响. 实验结果表明, 数据加密会显著增加机器人系统的CPU性能开销和通信负载. 不难看出, 虽然使用3DES加密算法可以避免ROS进程间的明文通信, 提高ROS的安全性, 但同时也影响了系统的实时性.

受上个文献的启发, Portugal等人[55]使用了比3DES更快的AES加密算法对节点间传输的数据进行加密, 加密/解密节点是使用Crypto++库用C++编码的. 与上述两个文献不同的是, Rodríguez-Lera等人[56]研究了使用3种著名的加密算法(3DES、AES和Blowfish)对ROS节点间交换的TCPROS消息进行加密. 作者还搭建了实验环境, 并且从网络开销、CPU使用率、自主效应3个方面对不同算力和3种加密算法对机器人系统性能的影响进行了定量分析. 实验数据表明, 加密算法要应用到合适的场景中才能在提供安全防护的同时又不对机器人系统的性能产生严重影响. 因此, 研究人员在寻求最优的加密算法以增强ROS安全性时, 要在加密算法和机器人自主性之间进行权衡, 其中, 机器人自主性包括机器人使用的传感器类型、所需的安全级别、ROS节点之间交换的数据量以及机器人的计算能力等. 为了帮助研究人员选择最优的安全方案, 作者提供了一个模型, 该模型可以帮助研究人员根据传感器的数据类型和机器人系统的计算能力选择合适的加密算法.

上述3个文献都对ROS系统中的通信数据实施了加密策略, 在一定程度上确保了ROS系统中数据传输的机密性. 然而, 因为数据加密并不改变ROS核心, 任意节点或客户端对ROS主服务器的请求和查询都会得到响应和满足. 所以仅对传输数据进行加密并不是十分安全的解决方案. 因此, 一些研究人员还考虑了针对数据传输过程进行身份验证和授权来确保通信过程的安全性.

Dieber等人[57]首次提出并实现了在应用层增强ROS安全性的解决方案. 作者实现了一个专用的身份验证服务器, 该服务器可以跟踪哪些ROS节点可以订阅或发布到某个话题, 还负责管理节点的身份验证, 并生成针对特定话题的加密密钥. 此外, 作者还将发布/订阅模式重新定义为广播通信模式, 通过广播加密实现安全可靠的通信, 从而确保数据的机密性和完整性. 为了更好地描述加密过程, 作者根据发布者和订阅者的生命周期将提出的应用层安全体系结构描述划分为数个阶段, 并描述了每个阶段的加密操作. 最后, 作者评估了额外的加密开销, 包括额外的数据开销和计算开销. 该方案有效解决了ROS中的一些安全漏洞. 身份验证服务器只会将特定话题的加密密钥分发给授权的节点, 确保了订阅者只有在获得正确的解密密钥的情况下才能读取消息内容. 这样可以防止未经授权的节点发布和订阅话题, 从而防止恶意节点试图向话题中注入虚假数据和窃听消息内容. 该方案也有很多不足之处, 例如, 没有对消息头加密使得攻击者依然可以对一些消息类型进行频率分析, 并且该方法无法阻止恶意节点加入ROS图, 恶意节点可以发布消息并对特定节点展开拒绝服务攻击等.

在医疗领域, 许多医疗机器人系统是直接面向患者的, 因此机器人系统的安全性至关重要. 基于这样的考虑, Dóczi等人[58]通过在应用层控制节点间数据流, 为基于ROS的医疗机器人系统提供了合适的安全性解决方案. 该方案是受ALG (application level gateway)启发的, 功能与ALG类似. 作者创建了一个独立的节点, 用于完成身份验证和授权, 实现访问控制, 从而保证ROS中数据传输的机密性和完整性. 其中, 身份验证是通过验证节点或用户的登录名和密码实现的, 授权功能是通过检查请求者发送的数据与数据库中的安全记录是否匹配实现的. 但是该方案有一个显著的缺点, 那就是一旦恶意节点获取了某个受信任节点的名称和密钥, 它就可以利用这些关键信息伪装成受信任的节点, 并且连接到ROS主服务器, 进而获取机密数据甚至直接发送命令操纵机器人.

Huang等人[59]为了解决ROS中存在的关键安全问题, 提出了一个名为ROSRV的基于ROS的机器人应用程序运行时验证框架. 该框架具有轻量级、表达性和透明性等特性. ROSRV使用正式的规范语言定义了系统中的安全属性, 并根据规范自动生成监视器. ROSRV的核心就是这个监视器, 它具有拦截、观察和修改系统中传递的命令和消息的功能, 并且可以执行消息中定义的事件. 监视器是作为一个普通节点实现的, 该节点负责监视节点间的通信, 当检测到对机器人系统具有潜在威胁的消息时, 它会立即干预并拒绝该消息的传输和执行. 另外, ROSRV使用一个基于IP地址的访问控制规范来定义访问控制策略, 并且将安全策略作为系统配置强制执行, 提高了数据传输的机密性和完整性. ROSRV基于用户提供的访问策略规范作为输入配置来实施访问控制. 当节点向ROS Master发送XMLRPC请求时, RVMaster节点会截获该请求, 并根据规范决定是否允许该请求转到ROS Master. 这样可以实现持续观察所有通信请求和订阅/发布消息, 从而实现了消息监控的安全策略. 作者使用无人地面车辆LandShark3演示了ROSRV利用监控安全属性和执行访问控制策略来提高LandShark3安全性的整个过程. 该方案具有以下优点: (1) ROSRV可以与ROS无缝集成, 而无需修改ROS框架. (2) ROSRV是开源的, 所有源代码、资料和演示都可以在指定网址获得. (3) ROSRV已经在商用LandShark3机器人上实践和应用. 该方案也有一些缺点: (1) ROSRV过度信任IP地址, 特别是依赖网络路由来保障机器人系统的安全性. 当攻击者使用与可信节点相同的机器对机器人发起攻击时, 系统不能提供安全防御. (2) ROSRV采用集中式的监控方式, 所有监控节点都运行于同一个多线程进程, 当ROS系统中节点过多时, 这可能会给机器人系统带来不可接受的通信延迟.

3.2.2 传输层安全加固

为了克服Dieber等人[57]提出的纯应用程序级方法固有的局限性, Breiling等人[60]提出了一种ROS的安全通信信道. 该方法适应于所有节点之间的通信, 包括发布节点与订阅节点以及服务/操作与它们的客户端之间的通信. 其中ROS中的TCP通信通道使用TLS (transport layer security)来为通信过程提供安全保障, 而UDP通信通道则是使用DTLS (datagram transport layer security)来确保通信的安全性. (D)TLS要求两个节点之间通信之前, 必须执行额外的握手以完成基于X.509证书和公钥加密的相互认证和授权, 然后使用对称加密算法AES-256完成对通信数据的安全加密以实现消息传输的机密性, 使用消息认证码MACs来确保通信数据的完整性. 不仅如此, 该方法还在每个话题的基础上执行了细粒度授权, 实现了对话题的访问控制. 为了实现安全通信通道, 作者找到了roscpp包中TCPROS和UDPROS的实现, 并修改了roscpp包. 也就是说, 该方法修改了ROS核心. 安全实现不可避免会向机器人系统中引入额外的开销, 作者从握手开销、传输开销、应用开销这3个方面对开销进行了评估. 该方法可以有效应对ROS中的诸多安全漏洞. 它可以有效阻止未经授权的数据访问, 攻击者在没有证书的情况下无法订阅应用程序中的话题, 也就无法执行数据监听. 这样就减少泄露机密信息的风险. 它还可以防止未经授权的节点发布任意话题的数据, 并趁机向应用程序中注入虚假的数据或命令, 以干扰或者控制机器人. 同时, 它还可以减少针对特定ROS节点的DoS (denial of service)攻击. 该方法的优势在于它通过在直接通信的两个节点之间建立信任关系, 达到了保护节点间的TCP和UDP通信通道的目的, 实现了针对特定话题和特定节点的身份验证、授权和访问控制, 从而保证了传输数据的机密性和完整性. 但是, 该方法不能保护ROS的XMLRPC API, 攻击者仍然可以检索节点图, 发送publisherUpdates并关闭节点. 此外, 在ROS中, 该API的master端是用Python实现的, 因此仅修改roscpp的方法不能覆盖这一部分.

在ROS的诸多安全性解决方案中, 最著名的是SROS (securing ROS)[61], 它是开源机器人基金会(OSRF)为了在ROS中支持现代加密和安全措施以解决ROS现有的漏洞而进行的ROS安全性增强项目. 该项目致力于提出一组新的安全特性的核心ROS代码库. 在2016 年举行的ROSCon大会上, White等人[62]首次公开了SROS. SROS的安全策略主要包括两个方面: (1)通过使用公钥基础设施(public key infrastructure, PKI)为每个ROS节点提供一个X.509证书, 实现了对所有数据传输使用传输层安全(TLS)进行加密, 提高数据传输的机密性. 为了支持和简化在ROS中使用PKI的任务, SROS提供了一个密钥服务器用于生成证书, 还提供了一个低级API用于在设置过程中向节点分发加密的证书. (2) SROS还为话题、服务、参数和XMLRPC调用提供了访问控制机制、身份验证和授权, 保证了数据传输的完整性. 考虑到普通用户和开发人员对SROS的关注层面可能有所不同, 作者对SROS做出了有针对性的介绍, 其中, 针对普通用户, 作者通过实例介绍了使用加密、访问控制和内核模块来保护本机ROS应用程序的方法. 面向开发人员, 作者介绍了SROS的底层实现和架构设计原理. 为了促进SROS的进一步发展, 作者深入剖析了SROS在设计和执行方面的不足, 并给出了可行的改进建议. (1)针对SROS的策略语法不够简明和表达性不强的问题, 作者打算采用一种类似于AppArmor中使用的语法语言, 这种语言具有灵活性和直观性, 方便不同用户使用. (2)为了进一步自动化一般访问控制策略的构建和验证, 作者希望标准化安全事件日志消息, 使每个节点都可以自我报告潜在的安全事件. (3)为了实现传输安全和访问控制使用相同的X.509证书, 公共握手过程中暴露了潜在的敏感内容, 针对这个问题, 作者建议将用于建立身份验证和授权的文件分开. 除此之外, 相关文献还总结了SROS的其他方面的缺点, 包括(1)证书和密钥的生成和分发在前面的初始化阶段由keyserver节点处理, 但是, 无法保证初始化阶段运行环境的安全性. (2) SROS仅为Python实现, 不考虑C++实现的节点. (3)仅保护TCP通信通道, 没有考虑UDP通信通道. SROS仍然处于开发阶段, 以上这些都表明SROS仍然有很大的改进空间. 然而, 值得一提的是, Portugal等人[55]定量分析了包括SROS在内的5个独立的安全性解决方案对系统性能的影响以及安全防护效果, 实验结果证明SROS是经过测试的最安全的方案.

为了解决基于ROS的应用程序面临的网络安全威胁, Mukhandi等人[63]提出了一种将ROS与消息队列遥测传输(MQTT)协议相结合新方法, 来保护可移动机器人系统. MQTT是机对机(M2M)通信和物联网(IoT)中的理想通信协议, 具有轻量、开放、简单、易于实现等特点. MQTT具有利用SSL/TLS的内置安全特性, 实现这些特性可以为所有数据提供安全性和隐私性. 它将ROS与轻量级MQTT协议相集成, 促使MQTT成为客户机与机器人之间连接的桥梁, 这样可以隔离远程用户对ROS的直接访问, 并提供机器人与远程客户端之间的安全通信, 从而保护支持ROS的机器人系统之间的数据共享. 它还采用MQTT内置的安全功能来保护支持ROS的机器人系统和远程客户机之间的通信, 通过提供身份验证和数据加密保证数据传输的机密性和完整性. 具体来说, 一方面, 它使用MQTT成熟的身份验证机制, 包括公钥基础设施(PKI)、X.509数字证书和传输层安全, 为机器人网络通信提供身份验证和数据隐私. 另一方面, 它利用了MQTT协议提供的授权机制, 用于指定客户机对特定资源的访问权限. 通过使用访问控制列表(ACL), 可以在连接到MQTT服务器时指定客户机的访问权限. 这里的ACL指的就是权限列表, 根据表中设置的权限范围, 用户只能访问指定的话题, 并对这些话题执行指定操作. 如果远程客户机想与机器人建立连接, 它首先要连接到MQTT服务器, 并使用有效的数字证书进行身份验证. 身份验证之后, 客户机从MQTT服务器获得授权, 进而与机器人建立安全通信通道. 作者通过实验从额外的延迟、消息吞吐量和消息速率这3个方面评估了该方法对基于ROS的机器人监视系统性能的影响. 实验数据表明, 加密解决方案在客户端和服务器通信期间增加了可以忽略的网络延迟, 当使用数字证书集成身份验证和有效载荷加密时, 消息吞吐量和消息速率会降低. 但是作者认为, 相比于实施安全机制提供的明显优势, 如数据隐私、认证和防止网络攻击, 安全机制对性能的影响就显得微不足道了. 该方法解决了ROS框架的一些安全问题, 通过提供身份验证和数据加密来确保机器人的网络通信安全, 该方法可以防止中间人攻击和劫持攻击. 该方法可以用于几乎所有支持ROS的网络应用程序. 虽然使用该方法可以与远程客户端建立安全的网络连接, 但是作者指出ROS内部的通信仍然是不安全的, 因为没有任何数据加密.

3.2.3 网络层安全加固

Rivera等人[64]专门为ROS设计了一个名为ROS-Defender的网络层监控和安全工具, 为增强ROS安全性提供了一个整体解决方案, 它基于安全事件管理系统、入侵防御系统和机器人防火墙, 并且结合了应用(ROS)级和网络级的异常检测系统, 可以使用软件定义网络(SDN)在网络层保护ROS免受大规模攻击, 通过在顶部集成防火墙和监控监视两个安全应用程序, 从而实现对ROS系统的访问控制, 确保ROS中传输数据的机密性和完整性. 它可以监控ROS, 同时也可以通过检测违反现有策略的行为或新的攻击并调整策略, 以此来为ROS提供安全特性. 但是, 使用ROS-Defender将带来很大的性能成本, 因为它会给机器人系统带来额外的开销, 此外, ROS-Defender只支持ROS. 后来, 作者为了对ROS-Defender进行优化, 又开展了进一步的研究工作, Rivera等人[65]利用eBPF(extended Berkely packet filters)防火墙组件和XDP (express data path)技术构建了一个高性能内联网络监控框架ROS-FM, 其目的是为ROS提供模块化、可扩展和安全的监控软件. 通过将ROS-FM建立在eBPF防火墙组件上, 作者为依赖于4.5层路由的系统(如TCPROS和DDS)提供了第1个eBPF防火墙, 通过访问控制提高ROS中数据传输的机密性和完整性. ROS-FM将ROS-Defender扩展到了支持ROS2, 而且它极大地改进了现有ROS监控工具的性能, 同时提高了ROS系统的整体安全性. ROS-FM安全监控工具具有明显的优势: (1)在性能方面, 与通用ROS监控工具相比, 它极大地改进了现有ROS监控工具的性能. (2)在安全性方面, 与两个现有ROS渗透测试工具(ROSPenTo、Amazon’s ROS2 security test node)进行比较, 它对ROS和ROS2中常见攻击是有效的, 它可以提高ROS系统的整体安全性. (3)在再现性方面, ROS-FM的代码和数据是公开的.

ROS与网络通信的集成可以实现数据共享, 但同时也把ROS暴露于网络攻击. 其中虚假数据注入攻击会对ROS造成严重损害. 虽然利用消息身份验证码(MAC)可以减轻完整性攻击, 但是MAC所需的大量计算会给系统带来巨大延迟. 考虑到许多机器人系统是延迟敏感的, Xu等人[66]提出了一种轻量级密码的跨层设计方法, 该方法在保证ROS安全性的同时减少安全机制带来的延迟. 具体来说, 作者设计了一个轻量级的密钥长度较短的MAC (LMAC), 这种轻量级MAC适用于基于ROS的延迟敏感的机器人系统, 在保证ROS中数据传输的机密性和完整性的同时可以降低计算复杂度, 减少延迟. 但是, LMAC会增加攻击者破坏安全机制的风险, 因为LMAC很容易破坏. 因此, 作者需要考虑ROS的安全性和物理性能之间的权衡. 在网络层, 作者定义了两种网络状态来描述LMAC的状态. 一种状态是工作状态, 此时LMAC可以保护ROS免受完整性攻击; 另一种是失败状态, 此时LMAC受到攻击者的威胁, 无法保护系统. 考虑到如果防御者不知道攻击者是否破坏了MAC, 就无法直接观察网络状态, 作者为防御者制定了一个网络部分观察马尔科夫决策过程(POMDP)来捕捉网络状态的不确定性. 基于分析结果, 作者提出了POMDP的算法解决方案. 作者使用具体的实例数据来评估系统的控制性能、安全性和弹性之间的权衡. 在物理层, 作者为系统设计了一个时延控制器, 来减少LMAC带来的延迟. 作者通过这种跨层控制系统实现了对延迟敏感的基于ROS的机器人系统的安全、弹性控制, 并保持其实时控制性能.

随着机器人智能化程度越来越高, 复杂任务分布式计算和远程控制成为机器人的高效运作的一种重要方式, 也催生了基于云的解决方案和远程客户端. ROS社区开发了一个名为Rosbridge[67]的协议规范用于建立本机ROS系统和远程客户机(本机或非本机)之间的通信. 然而, 对ROS系统远程访问带来的安全问题日益引起研究人员的关注, 因为缺乏适当的安全程序保障远程通信的安全性. 针对这个问题, Toris等人[68]开发了一个系统独立的用于远程、非本地ROS客户机的基于MAC的自定义身份验证模式, 即rosauth的模式, 它是一种利用Web身份验证令牌通过任意外部用户管理系统来验证远程客户端的模式, 可以保证数据传输的机密性和完整性. 它通过使用非本机ROS客户端对来自任何IP地址的远程用户进行身份验证, 确保只有从可信的外部身份验证源进行身份验证的客户端才允许访问机器人. 这样可以确保ROS设备之间远程通信的安全性, 防止恶意访问. 与VPN相比, rosauth具有较好的通用性. VPN是建立ROS系统与远程客户端(本地和非本地)之间安全连接的常用方法. 但是因为它的配置十分复杂, 给非专业用户的使用带来困难. 另外, 想要使用VPN, 必须额外安装单独的用户端软件. 而rosauth不依赖于任何特定的用户管理系统, 也不要求使用者使用特定的身份验证系统. 这种通用模式允许使用各种开箱即用(例如RMS)系统, 还支持自定义用户管理系统来控制对机器人的访问. rosauth模式已经集成到了Rosbridge协议中, 并且具有良好的可扩展性. 但是rosauth也有一些不足, 一方面, 由于rosauth模式不具备授权功能, 任何通过身份验证的远程客户机都可以访问整个ROS系统, 不过rosauth具有扩展并实现授权功能的能力, 它可以使用安全令牌中级别字段与当前客户端的用户权限级别进行关联. 另一方面, rosauth只关注远程、非本机ROS客户机与ROS系统进行远程通信的场景, 不过rosauth包的抽象性使其具有实现本地ROS客户机与ROS系统之间的安全通信的能力.

3.2.4 传输层+应用层安全加固

Dieber等人[69]将Dieber等人[57]和Breiling等人[60]提出的安全性增强方法进行了结合, 进一步减少ROS系统面临的安全风险. 然后, 作者使用Dieber等人[50]提出的ROS专用渗透测试工具RosPenTo对ROS应用程序进行渗透测试. 最后, 作者将“不安全”的ROS、应用层安全方法、安全通信通道3种场景下ROS的安全性进行了对比, 记录并比较了文中提到的多种攻击行为对每个场景下的ROS系统所产生的影响: 在“不安全”的ROS中, 节点不需要进行身份验证和授权就可以任意发布和订阅任何话题, 也可以随意使用ROS中的服务. 使用应用层安全方法增强ROS的安全性以后, 未授权节点仍然可以订阅话题, 但是由于未获得正确的解密密钥, 无法解释话题消息内容. 未授权节点也可以发布话题, 但发送的消息将由于缺少签名而被忽略. 未授权节点无法使用ROS中的服务. 在具有安全通信通道的ROS中, 未授权的节点无法订阅和发布, 也不能使用ROS中的服务, 因为在通信开始时, 未授权的节点由于缺少有效的证书, (D)TLS握手失败, 通信会被取消. 此外, 在攻击者可以提供有效证书的情况下, 两种安全方法都将使用细粒度的话题访问控制机制来确保只有以前已授予的话题可以订阅或发布.

SRI国际公司开发的Secure ROS[70], 用于提供核心ROS包的替代版本, 使ROS节点之间能够进行安全通信. Secure ROS的主要目标是使ROS的常规用户能够进行安全通信. 为此, 作者在ROS中集成了IP安全扩展(IPSec). IPSec用于传输模式, 对交换消息的有效载荷进行加密和验证, 保证数据传输的机密性和完整性. 此外, 传输层和应用层总是由散列保护, 因此不能以任何方式修改它们. 用户可以在运行时为ROS主服务器指定授权的话题订阅者和发布者、参数的设置者和获取者、服务的提供者(服务器)和请求者(客户端), 从而实现访问控制. 因此, Secure ROS将只允许授权节点连接到指定配置中列出的特定话题、服务和参数. 在实现方面, 与著名的SROS相比, Secure ROS的安装过程更加迅速, 因为有可用的debian版本. 此外, Secure ROS同时支持rospy和roscpp, 它易于设置, 对于普通用户来说简单透明, 只需要提供所需的配置和对每个ROS实体的访问规则. Secure ROS的一个缺点是, 它没有提供正式的验证手段来保证所需的属性符合规范.

以上内容是对近几年ROS安全性相关研究进行的概括总结, 值得一提的是, Portugal等人[55]对自身以及上述文献[57616870]中提出的共5种ROS安全性解决方案在增强ROS安全性方面的效果进行了测试和分析. 作者将上述5种举措和官方发布的“不安全的” ROS Kinetic Kame分别运行在同一台机器上, 然后测试了发布者和订阅者节点之间传输数据时, 每个举措以及ROS的通信性能, 包括: 通信中的延迟、丢失消息的数量、保持预期发布速率的能力、ROS网络中来自未授权节点的访问级别. 最后将上述5种举措的测试结果与ROS的测试结果进行了对比和分析. 可以根据实验结果评估每种方法在安全性和可操作性之间的权衡. 测试中设计了两种类型的消息, 由两个单独的ROS节点以3档不同的速率(适中的、快速的和几乎无法忍受的速率)进行多次发布和订阅, 分别是(1)由27个字节组成的字符串, 以3种不同的预期发布速率(1 kHz、10 kHz和30 kHz)发布了60万次. (2) 343 KB的数据组成的网格地图(grid map), 以3种不同的预期发布速率(250 Hz、2.5 kHz和7.5 kHz)发布了15万次. 作者对实验结果进行了定量分析和定性分析.

(1)定量分析: 通信中的延迟、丢包率、保持预期发布速率的能力

上述所有消息传输机制在将消息从非本地客户端传输到ROS时, 都会对发布/订阅通信性能产生影响.

当传输只有27个字节大小的字符串消息时, 在不考虑部分举措无法达到预期发布率的情况下, 所有举措的通信延迟和丢包率与ROS相比都非常接近, 这说明此时所有举措的性能都可以与官方发布的ROS版本的性能相媲美.

当传输343 KB的大消息时, 实验结果与字符串实验结果截然不同. 总的来说, 与其他安全举措相比, Secure ROS具有较好的通信性能, 它不但能够达到预期的发布速率, 而且通信延迟比其他举措的通信延迟小, 并且具有较低的丢包率, 这证明了Secure ROS是在不影响传输性能的情况下增强ROS安全性的最有前途的举措之一. 其他举措的通信性能各不相同, 例如, ROS-AES-Encryption算法虽然在实验中的丢包率为0, 但是其最高只能达到约186 Hz的发布频率. 其传输消息的平均延迟是常规ROS传输的15–45倍. 具体数据请参考原文.

(2)定性分析: ROS网络中来自未授权节点的访问级别

ROS支持在命令行工具中键入指定的命令来匿名检索指定的数据, 作者通过在ROS网络内运行了rostopic list、rosnode list、rosservice list、rosnode kill <node>、rostopic echo <topic> 命令, 检查每个安全举措授予的访问级别, 即检查每个安全举措对未经授权的节点发出的请求所返回的数据.

实验数据显示, SROS不响应来自未授权节点对ROS主节点的任何类型的查询, 它是具有更高安全级别的安全举措. 其次是Secure ROS, 它不允许未经授权的节点列出ROS话题, 也不允许查看话题中的消息, 同时也不允许杀死节点. 但是它允许列出ROS使用的节点和服务. 其他安全举措授予的访问级别可以查看原文.

通过对实验结果的定量分析和定性分析, 总的来说, SROS和Secure ROS目前是5个安全举措中最有可能增强ROS安全性的举措. 其中Secure ROS开销小, 传输性能好, 而且它在一定程度上可以防止未经授权的节点访问ROS中的数据. SROS无疑是增强ROS安全性最有力的举措, 而且它可以提供较好的高吞吐量传输性能.

3.2.5 ROS2

虽然不少开发者和研究机构针对ROS的局限性进行了适当改进, 但是这些局部功能的改善很难带来整体性能的提升, 这就为新一代ROS的开发创造了机遇. 于是, 在ROSCon2014上, 新一代ROS的设计架构(next-generation ROS: building on DDS)被正式公布.

● ROS2简介

ROS2 (robot operating system 2)[71]中集成和应用了众多新技术和新概念, 这不仅带来了架构上的颠覆性设计, 而且增强了ROS2的综合性能. ROS2自2017年发布第1个正式版本Ardent Apalone以来, 一直保持着持续的更新, 撰写本文时ROS2 Galactic Geochelone版本已经正式发布[72].

为了对ROS和ROS2进行更深入的介绍, 本文将对两者的架构进行分析和比较. 架构如图5所示.

 

图 5 ROS和ROS2的架构图[73]

 

(1) 操作系统层(OS层)

ROS主要构建在Linux系统上, ROS2支持构建的系统包括Linux、Windows、macOS、RTOS, 甚至还支持没有操作系统的裸机.

(2) 中间层

ROS的通信系统基于TCPROS/UDPROS, 而ROS2的通信系统基于DDS (data distribution service). ROS2内部提供了DDS的抽象层实现, 用户无需关注底层DDS的提供厂商.

在ROS架构中, Nodelet和TCPROS/UDPROS是并列的层次, 可以为同一进程中的多个节点提供更优的数据传输方式. ROS2中也保留了类似的数据传输方式, 命名为“Intra-process”, 同样独立于DDS.

(3) 应用层

ROS强依赖于ROS Master, Master宕机会使整个机器人系统陷入困境. ROS2架构去除了Master, 节点间使用名为“Discovery”的发现机制来帮助彼此建立连接.

● ROS2安全性分析

为了让ROS能够符合工业级的运行标准, ROS2在设计之初就考虑了安全通信, ROS2在其传输层中采用了OMG指定的被称为DDS[74]的行业标准[75], 通过在系统中集成DDS-security[76]规范进行动态数据保护, 以此提高通信的可靠性[77].

DDS-Security规范是DDS规范的扩展, 它通过定义服务插件接口(service plugin interface, SPI)体系结构、一组SPI的内置实现以及SPI强制执行的安全模型来定义安全机制. DDS-Security规范共定义了5个SPI, ROS2的安全特性目前只使用了其中3种SPI, 它们分别是身份验证、访问控制和加密. (1) ROS2使用SPI体系结构内置的身份验证插件DDS: Auth: PKI-DH. 该插件使用了经过验证的公钥基础设施(PKI), 它需要每个参与者的公钥和私钥, 并且将参与者的公钥绑定到特定名称的X.509证书. 每个X.509证书必须由插件配置为信任的特定证书颁发机构(CA)签名(或拥有到CA的签名链). 身份验证插件实现了对每个参与者的身份验证. 只有通过身份验证的参与者才可以进行下一步动作, 例如, 如果一个节点想要订阅某个话题, 它首先要通过身份验证, 然后才能订阅话题. (2) ROS2使用SPI体系结构内置的访问控制插件DDS: Access: Permission, 该插件负责对通过认证的参与者可以执行的DDS相关操作进行限制. 它同样使用了PKI. (3) ROS2使用SPI体系结构内置的加密插件DDS: Crypto: AES-GCM-GMAC, 该插件提供了使用高级加密标准(AES)的认证加密. 加密插件负责处理所有与加密相关的操作, 包括加密、解密、签名、散列等. 身份验证和访问控制插件都利用加密插件的功能来验证签名等, 这也是加密DDS话题通信的功能所在.

值得注意的是, 在缺省情况下, ROS2没有开启DDS的安全特性. ROS2通过使用Secure ROS2工具启用DDS支持的安全特性. ROS2中已经集成了两个厂商的DDS实现, 分别是eProsima的FastRTPS和Adlink的OpenSplice, 用户可以根据需求进行选择, 也可以通过源码编译的方式使用其他厂商的DDS实现.

ROS2还提供了多种服务质量(QoS)策略, 允许对节点之间的通信进行调整[78]. 通过正确设置服务质量策略, ROS2可以像TCP一样可靠, 或者像UDP一样“尽力而为”, 且可以有很多种介于TCP和UDP两者之间可能状态.

3.2.6 ROS安全性解决方案的对比分析

在安全性方面, 机密性、完整性和可用性(confidentiality、integrity、availability, CIA)是信息安全的核心, 这3个安全性概念也同样适用于机器人系统[196369], 任何危及上述3个安全需求的行为都被视为探索系统漏洞的攻击[79]. 其中, 机密性是指传输的数据必须仅对授权的主体可用. 完整性是指传输的数据不能被未经授权的主体修改. 可用性是指组件必须运行并提供相应的服务. 本节将机密性、完整性和可用性作为3个关键指标, 对上述ROS安全性解决方案进行整体的对比和分析, 如表1所示.

表 1 ROS安全性解决方案对比

 

表1中, 每个ROS安全性解决方案所在行都有“√”和“×”两个符号, 其中, 在“解决的ROS中的安全问题”所在列中, “√”表示该方案针对ROS的某个安全性问题, 给出了相应的解决方案, “×”则表示没有给出相应的解决方案. 而“在保证CIA上所做的努力”所在列中, “√”和“×”表示该方案是否能提高机密性、完整性、可用性.

下面以SROS为例, 进一步解释表1的内容. ROS系统主要有4个方面的安全性问题, 针对ROS中存在的传输数据未加密、未进行身份验证和未进行访问控制3个方面的安全问题, SROS分别给出了相应的解决方案, 但是对于ROS不提供服务质量这一安全问题, SROS没有给出相应的解决方案. SROS所提供的安全性解决方案在一定程度上保证了ROS中数据传输的机密性、完整性, 但是未明确说明该方案在提高可用性方面发挥的作用.

根据现实应用场景中对机器人系统安全性的实际需求, 研究人员利用现有的多种信息安全技术, 针对ROS系统中暴露的主要安全问题, 有针对性地提出了ROS安全性解决方案. 从表1可以看出, 每种解决方案都在一定程度上减轻了ROS给机器人系统带来的安全威胁. 研究人员在提高机器人系统的机密性、完整性方面或多或少都开展了具体的工作. 不过, 由于对安全性的需求不同, 安全性增强的侧重点不同. 例如ROSRV优先考虑了数据传输的机密性, 而没有验证数据的完整性, 也没有在提高系统可用性方面做出努力. 由于ROS系统架构本身缺乏安全性的设计, 当前的安全性解决方案无法从根本上全面增强ROS的安全性, 每种方案都有各自的缺陷. 与基于ROS的诸多安全性解决方案不同, ROS2全新的架构体系所具有的健壮的安全特性, 很好地避免了ROS中的诸多安全漏洞, 在机密性、完整性、可用性方面为机器人系统提供了强有力的安全保障. 不仅可以保证ROS中数据传输的机密性和完整性, ROS2抵御外界恶意攻击的能力还可以为机器人系统正常提供服务提供更多的保障, 因此其可用性更强.

4 总结与展望

本文对ROS的安全性状况进行了分析和阐述, 并对近几年ROS安全性相关的研究进行了分类和概括, 特别地, 针对众多ROS安全性解决方案, 本文不仅总结了每种方案的主要研究内容, 还分析了方案的优缺点, 并且从方案所解决的ROS安全问题以及是否提高系统机密性、完整性和可用性两个方面, 对众多方案进行了分析和比较. 研究人员可以通过本文了解当前ROS安全性相关的研究工作, 从而更好地选择应用合适的ROS安全性解决方案, 也可以为未来实现更优的方案提供重要参考.

虽然研究人员在增强ROS安全性方面做出了大量努力, 但是不难看到, 并没有一个通用的、全面的、高效便捷的ROS安全性解决方案. 由于应用场景要求的安全等级不同或者针对的机器人安全问题不同, 每种解决方案都有各自的短板. 因此, 开发通用的ROS安全性解决方案来灵活适应不同的安全需求可能是未来的一个研究方向.

因为ROS2在系统架构设计时考虑了系统的安全性, 所以ROS2的安全性明显优于ROS, 目前ROS2有取代ROS的趋势. 这个事实让人们不禁开始思考未来是否还有必要进行ROS安全性相关的研究. 考虑到ROS的使用群体十分庞大, 基于ROS的应用涉及的领域繁多, 将基于ROS的应用迁移到ROS2不仅需要花费额外的时间, 还需要花费额外的资金, 为了避免产生这些额外的成本, 开发者或投资商可能会继续选择使用ROS. 此外, 经过十几年的发展, ROS已经具有良好的社区生态以及丰富的功能包. 相比之下, ROS2在2017年12月才发布第1个正式版本, 其社区生态尚不成熟, 许多功能包尚未从ROS移植到ROS2. 因此, 开发者可能依然会选择使用ROS作为机器人的操作系统. 由此可以推断, 在未来一段时间内, ROS仍会是主流的机器人操作系统. 所以从目前来看, 研究ROS安全性仍然是有需求的、有必要的. 但是从更长久来看, 等到ROS2的社区生态建立起来, ROS2未来必将取代ROS. 到那时, 研究ROS2的安全性也许更能满足实际需求.

 

浏览量:0
收藏