文章总结: 本文系统分析了机器人操作系统ROS2的安全设计框架,重点阐述了其基于DDSSecurity规范构建的分布式通信安全机制。核心方案是通过SROS2工具链实现安全飞地划分、PKI证书体系和细粒度权限控制,为节点通信提供身份认证、访问控制和数据加密保护。文章指出该设计虽提升了工业级安全性,但仍存在操作系统依赖、密钥文件保护不足等局限性,需结合硬件安全模块等补充措施。 综合评分: 82 文章分类: IoT安全,应用安全,解决方案,技术标准
机器人操作系统ROS2的安全设计
原创
孙志敏 孙志敏
AI与安全
2026年5月10日 15:50 北京
在小说阅读器读本章
去阅读
机器人操作系统ROS2(Robot Operating System 2)是当前各种机器人,机器狗等具身智能设备广泛应用的操作系统,甚至一些无人机,无人车等也在应用它。安全设计是系统设计的一部分,要研究机器人的安全,操作系统是重要的基础,ROS2是必须深入了解和分析的系统。
01
ROS2实际是一套中间件
1.1历史沿革
在机器人的开发中,有一些共同的功能都会涉及,包括通信,导航、控制、运动规划、视觉和仿真等。从头开发这么一套系统工作量非常大,也非常复杂。
ROS于2007 年由斯坦福人工智能实验室(SAIL)启动,最初是博士生 Eric Berger 和 Keenan Wyrobek 为 PR1 服务机器人写的开发框架,目的是让研究人员不用每次都从底层造轮子。
2008 年,硅谷创业孵化器 Willow Garage 接手并大力投入,配合自家的 PR2 机器人把 ROS 推向全球研究社区。2010 年 ROS 1.0(代号 Box Turtle)正式发布,从此每年一个发行版,迅速成为机器人学术圈的事实标准。
2012 年 Willow Garage 解散,OSRF(Open Source Robotics Foundation,后并入 Open Robotics)接管了 ROS 的维护,让它从一个公司项目变成了真正的开源基金会项目。
随着工业界对实时性、可靠性、跨平台、多机器人协作的需求增长,ROS 1 的架构(中央 roscore、TCPROS 协议)逐渐力不从心。2017 年起,团队推出了完全重写的 ROS 2,底层换成 OMG DDS 中间件,去中心化、支持 QoS、支持 Windows/RTOS、支持商业部署。ROS 1 的最后一个长期支持版本 Noetic 已于 2025 年 5 月停止维护,机器人社区正全面转向 ROS 2。
1.2 ROS架构
机器人操作系统(ROS)是一套开源算法、硬件驱动程序和工具,旨在开发机器人控制软件。尽管它的名称中带有“操作系统”字样,但它并非操作系统,如下图,它运行在底层操作系统(Linux,Windows或Macos)之上,可以认为是一个中间件。
ROS2主要的功能包括10个部分,如下图
1.3 ROS的通信机制
ROS 2支持三种通信模式,是构建机器人应用的基石,也是安全需要重点关注的地方。
话题 (Topic):一种异步的发布-订阅模式,适用于持续、单向的数据流(如传感器数据)。一个发布者可以向一个话题发布数据,任意数量的订阅者都可以接收,实现了多对多的解耦通信。
服务 (Service):一种同步或异步的请求-响应模式,适用于需要立即返回结果的短暂任务(如查询当前状态)。客户端发起请求并等待响应,服务端处理请求后返回结果,是一种一对一的通信。
动作 (Action):一种异步、可取消、带周期性反馈的通信模式,是ROS 2的一大特色,适用于需要跟踪进度的长时间运行任务(如导航、机械臂运动规划)。它结合了话题和服务的特点,提供目标、反馈和结果三部分信息。
02
“多节点通信”是 ROS 2 的灵魂
很多人以为机器人是一台单机,其实不然,每台机器都是有多个主机组成的一个网络,以宇树的机器狗为例:
如图,它实际上由五台机器组成,主控制器(带一个以太网交换机),还有一个树莓派,三个NANO,共同组成了一个系统。每个主板都有IP地址:主控板:MCU(192.168.123.10) 运动控制板:树莓派 4B(192.168.123.161) 传感主板:Nano(头部,192.168.123.13)、Nano(身体,192.168.123.14)、Nano 或 NX(身体,192.168.123.15)。
这就是 ROS 2 多节点通信的真实战场。你不是在写”一段代码控制一只狗”——你是在编排一个跨越五台计算机、几十个进程、上百个话题的实时分布式系统:相机节点把图像发布到 /camera/front/image_raw 话题上,深度估计节点订阅它再发布 /depth/points,避障节点订阅深度,输出 /cmd_vel 给运动控制;运动控制节点把高层意图转成关节角,再走 UDP 发给底层 MCU。这个图谱可以横跨多台机器,也可以缩在一颗 SoC 里跑——节点之间根本不知道彼此在哪台设备上。这就是 DDS 中间件赋予 ROS 2 的”位置透明性”。
放到更大的工业场景里,这种多节点架构同样普遍。自动驾驶车里把感知、规划、控制拆成几十个 ROS 2 节点跑在多块异构计算板上;无人机集群里每架飞机是一个节点群,再通过 DDS 跨机互联;人形机器人 H1、Optimus 把视觉-语言-动作(VLA)模型部署在主算法板上,把高频运动控制单独跑在实时核上——这一切都是同一种”分布式机器人计算图”的不同呈现。
但只要你认真看过这张拓扑图,安全的问题就会立刻浮现:默认情况下,节点之间是互相可见、互相可发现、互相可订阅、互相可发指令的。一个被攻陷的视觉节点完全可以伪造话题数据骗过决策节点;一台接入热点的笔记本电脑只要知道 ROS_DOMAIN_ID,就能往 /cmd_vel 上灌一条任意速度指令把狗发飞。这正是过去几年安全研究者在 ROS 1 上反复演示过的攻击。ROS 2 必须给出答案。
03
安全基础:DDS Security 规范的设计思想
ROS 2 没有自己重新发明安全机制。它把安全这件事完整地”下沉”到了 DDS 层——确切地说,是由 OMG 在 2016 年首次发布、目前 1.1 版本仍是主流的 DDS-Security 规范来承担。要理解 ROS 2 的安全模型,必须先理解这份规范的思想。
DDS-Security的规范比较长,280多页,有兴趣的可以看原文:
https://www.omg.org/spec/DDS-SECURITY/1.1/PDF
DDS-Security 的核心设计哲学,可以浓缩成一个词:SPI(Service Plugin Interface)。规范没有规定一种固定的加密算法、一种固定的身份模型、一种固定的策略表达方式;它定义的是五个标准化的服务插件接口,让 DDS 厂商各自去实现,让用户根据场景去选择。OMG 的规范文档第 1 章就给出了一张总体架构图:
这五个插件分别承担不同的安全语义。Authentication 插件解决”你是谁”的问题——验证一个加入 DDS 域的参与者的身份,并支持参与者之间的双向认证、协商出共享密钥。Access Control 插件解决”你能干什么”的问题——一个已认证的参与者可以加入哪些域、可以发布或订阅哪些 Topic、甚至可以读写一个 Topic 中的哪些 instance。Cryptographic 插件解决”怎么保护数据”的问题——所有的加密、解密、签名、哈希都由它执行,前两个插件实际上也调用它来完成签名验证。剩下两个,Logging 与Data Tagging,分别处理安全事件审计和数据分级标签。
规范同时给出了内置实现,用以保证不同厂商之间的开箱即用与互操作。DDS:Auth:PKI-DH 是基于 PKI 的认证插件,每个参与者持有公私钥对与一份由 CA 签发的 X.509 证书;DDS:Access:Permissions 是基于 PKI 的访问控制插件,每个参与者要带一份签名的”权限文件”和一份描述域整体安全策略的”治理文件”;DDS:Crypto:AES-GCM-GMAC 是基于 AES-GCM 的加密插件,提供经过认证的加密。规范要求所有声称”DDS-Security 兼容”的实现都必须支持这三个内置插件,这就是 ROS 2 能跨 DDS 厂商保持一致安全行为的根本原因。
04
ROS 2 的安全设计:把 DDS 安全收编进 ROS 概念体系
DDS-Security 提供了底层能力,但它说的是 DDS 的语言——Domain Participant、Topic、Permission XML。这套语言对 DDS 工程师很自然,对 ROS 应用开发者却相当陌生。开发者熟悉的是 Node、Topic、Service、Action、Parameter。如果让每个机器人开发者都先去啃一遍 DDS-Security 规范,那 ROS 2 的安全特性永远不会被广泛采用。
ROS 2 的安全设计解决的就是这个鸿沟问题。它的核心思路是:复用 DDS-Security 的所有能力,但用 ROS 的概念把它包装起来,并提供工具链来自动化所有繁琐的密钥与策略管理工作。这套思路最终落地成了 SROS 2(Secure ROS 2),以及一组叫 ros2 security 的命令行工具。
简单来说,ROS 2的安全框架可以概括为:将整个系统划分为独立的“安全飞地”(Security Enclave),为每个飞地分配唯一的加密身份和精细的权限,并通过一个由证书、签名文件和私钥构成的信任链来确保其通信的保密性、完整性和真实性。
其整体思路如下:
划分安全边界:以“安全飞地”(Security Enclave)为单元,为每个或每组程序(进程)定义独立的通信规则和权限范围。
颁发数字护照:为每个安全飞地签发一个唯一的“数字护照”,其中包含一个公私钥对,用于在网络中证明自身身份的合法性。
制定行为准则:通过详细的权限清单,严格定义每个安全飞地可以访问的具体资源,例如发布到某个话题或调用某个服务的许可。
搭建信任根基:引入一个证书颁发机构(Certificate Authority, CA),作为整个公钥基础设施(PKI)的“奠基人”,负责为所有安全飞地签发并担保其身份证书的有效性。
🔑 安全飞地:划分通信权限边界
你可以将“安全飞地”理解为一个执行统一安全策略的逻辑分组。一个飞地可以保护一个节点、整个机器人应用,甚至机器人集群的通信。
这种设计能有效替代ROS 1时期安全策略与单个节点绑定的做法,允许将一组节点划入同一飞地,方便统一安全管理,解决了ROS 2一个进程中可运行多个节点带来的难题。
📄 核心安全文件:飞地的“身份证”与“行为守则”
根据DDS安全规范,每个安全飞地的身份和权限都由六份核心文件明确定义。这些文件存放于 enclaves 目录下以飞地(如 /talker_listener)命名的子文件夹中。其中:
身份文件三件套:飞地的数字护照
- identity_ca.cert.pem:飞地信任其身份由哪个CA签发。
- cert.pem:飞地的身份证明,由CA签名后颁发。
- key.pem:飞地的核心机密,在握手阶段用于解密身份证书,证明身份。
权限文件三件套:飞地的行为规范
- permissions_ca.cert.pem:飞地信任其权限由哪个CA签发。
- permissions.xml:明文权限清单,定义了飞地能发布到哪个话题、调用哪个服务等。
- permissions.p7s:由权限CA签名后的只读副本,通信时实际使用。
⚙️ 密钥库(Keystore):组织与管理安全资产
“密钥库”是一个包含密钥和证书的文件夹,由环境变量ROS_SECURITY_KEYSTORE指定路径。它定义了密钥库的根目录,所有安全文件都存放在此处。其内部结构为:
keystore/
├── enclaves # 存放各安全飞地自己的六份身份和权限文件
├── private # 存储CA的私钥 (ca.key.pem),必须离线保存严防泄露
└── public # 存放CA的公钥证书 (ca.cert.pem),可自由分发
🔏 私钥(Private Keys)的保护原则
私钥是整个信任链的核心,一旦泄露,整个系统的安全性将荡然无存。最佳实践尤为严格:
离线保存:私钥文件仅在生成安全飞地文件时访问,切勿随同节点部署到生产设备。
最小权限:设备上的安全飞地文件应设为只读。
硬件加密:生产环境中,私钥应存储在硬件级安全模块(HSM,一种专业硬件)中保管。
🛡️ 信任链的基石:证书颁发机构(CA)
CA是整个安全体系中最底层的信任根源。所有飞地的身份和权限信任都追溯到CA的根证书。CA的作用体现在:
签署身份:像护照局签发护照一样,用自己的私钥为各飞地的cert.pem文件签名。
签署权限:用自己的私钥为飞地的权限文件permissions.xml签名,生成用于通信的permissions.p7s。
提供信任锚点:CA自身的公钥证书 (ca.cert.pem) 被安全地放置在public目录,作为所有交互方默认信任的根证书。
💎 设计权衡:灵活性与复杂性的取舍
这套基于PKI的细粒度安全模型,也为开发者带来了新的考量:
灵活的集成:设计上易于集成企业已有的PKI,并支持通过ROS_SECURITY_STRATEGY等变量动态调整安全策略。
变化的威胁面:启用安全机制后,攻击面可能从节点通信转向PKI体系,因此证书的保管和管理变得同等重要。
管理复杂性:为每个飞地管理独立的身份和权限文件,增加了配置和部署的复杂性。
总的来说,ROS 2的安全设计是一项旨在满足工业级和商业级应用需求的系统工程,它以“安全飞地”为核心,通过构建一套层次分明、逻辑严谨的体系,为机器人应用提供了可定制、可扩展的安全保障。
05
总结
总体看,ROS2在通信上较好地考虑了安全问题,有一些好的安全设计,但对于机器人整体来说,还远远不够。
1.ROS2整体运行于通用操作系统之上,操作系统的安全问题,需要完整的解决。
2.ROS2对于安全的关键文件,尤其是证书部分,都以文件存储,只增加了访问控制,这是远远不够的。根密钥应该有硬件保护措施。
3.机器人是一个非常复杂的系统,不仅有机器人自身,还有云,APP等,这些安全同样重要。
推荐阅读:
具身智能威胁分析的分层方法和全景图
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:AI与安全 孙志敏 孙志敏《机器人操作系统ROS2的安全设计》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论