2. ROS2与DDS基础

要理解ROS2的安全机制,必须先理解ROS2的通信底座。ROS2并没有自己实现一套端到端的通信协议,而是把通信能力委托给DDS(Data Distribution Service)。这意味着ROS2的节点发现、数据分发、服务质量策略,乃至安全认证与加密,最终都落在DDS中间件上。因此,本节从ROS2通信架构出发,逐层拆解DDS中间件的角色、域与主题的组织方式、发布订阅模型,并引出由此产生的安全需求。

一、ROS2通信架构:客户端库与中间件的分层

ROS2在架构上分为应用层、客户端库层(RCL,ROS Client Library)、中间件抽象层(RMW,ROS Middleware)和DDS实现层。开发者编写的节点使用rclcpp或rclpy,调用create_publisher、create_subscription等API;这些调用被RMW统一封装,再翻译成具体DDS厂商的API。RMW的存在让ROS2可以更换底层DDS实现,而不影响上层应用代码。

这种分层带来一个重要后果:ROS2的安全能力上限,取决于所选DDS实现所支持的安全插件。如果底层DDS不支持DDS Security规范,那么上层无论怎么配置都无法获得真正的身份认证与加密。因此,选型时必须先确认DDS实现的安全能力。

ROS2 节点 (rclcpp / rclpy)
        │  create_publisher / create_subscription
        ▼
RMW 中间件抽象层 (rmw_fastrtps_cpp 等)
        │  映射为 DDS 实体
        ▼
DDS 实现 (Fast DDS / Cyclone DDS / Connext ...)
        │  RTPS 协议 + DDS Security 插件
        ▼
网络传输 (UDP / 共享内存)

二、DDS中间件角色:从“消息总线”到“数据空间”

DDS的核心抽象是“以数据为中心的发布订阅”(DCPS)。它不像传统消息队列那样由Broker中转,而是让参与者(DomainParticipant)在同一个域内自动发现彼此,并直接建立数据通道。DDS中间件承担四类关键职责:

  • 发现(Discovery):通过SPDP/SEDP协议自动交换参与者、发布者、订阅者及主题信息,无需中心服务器。
  • 匹配与QoS协商:只有发布端与订阅端的QoS策略兼容时,才会建立实际的数据连接。
  • 数据分发:按主题进行序列化传输,支持可靠/尽力而为、历史深度、截止时间等策略。
  • 安全执行点:DDS Security插件在发现与数据面插入认证、访问控制、加密与日志审计。
DDS的“无中心”特性既是优势也是风险:任何能加入同一域并完成发现的参与者,默认都可能订阅到主题数据。这正是ROS2默认配置下需要额外加固的根本原因。

三、DDS域、主题与发布订阅模型

域(Domain)是DDS的隔离边界,用Domain ID标识。不同域之间的参与者默认互不可见,因此域常被用来隔离不同机器人、不同测试环境或不同安全等级的数据。ROS2通过环境变量ROS_DOMAIN_ID选择域。

主题(Topic)是数据的逻辑通道,由名称和数据类型共同标识。发布者向主题写数据,订阅者从主题读数据,双方不需要知道对方的存在。ROS2中常见的主题如/chatter、/cmd_vel、/scan,其名称在DDS层会被映射为带前缀的DDS主题名。

发布订阅模型的关键在于“解耦”:时间解耦、空间解耦、同步解耦。一个发布者可以有多个订阅者,一个订阅者也可以订阅多个发布者。这种多对多关系在带来灵活性的同时,也扩大了攻击面——只要攻击者能加入域并伪装成合法参与者,就可能窃听或注入数据。

ROS2 / DDS 域内发布订阅与安全边界 DDS Domain(Domain ID = 0) 发布者节点 /cmd_vel 发布 DomainParticipant 订阅者节点 /cmd_vel 订阅 DomainParticipant 未授权参与者 伪装订阅 / 注入 无证书加入域 RTPS 数据流 窃听 / 伪造 DDS Security 插件(安全边界) 身份认证 Authentication 访问控制 Access Control 数据加密 Cryptographic 日志审计 Logging

四、由发布订阅模型引出的安全需求

DDS的开放发现机制决定了:只要网络可达且域ID相同,任何参与者都能尝试加入。由此产生四类核心安全需求,它们与DDS Security的四个插件一一对应。

安全需求 威胁场景 对应DDS Security插件
身份真实性 攻击者伪装成合法节点加入域 Authentication(基于PKI证书)
权限最小化 合法节点越权发布/订阅敏感主题 Access Control(Governance + Permissions)
数据机密性与完整性 主题数据被窃听或篡改 Cryptographic(AES-GCM加密与签名)
行为可追溯 安全事件无法定位责任节点 Logging(审计日志)

五、案例场景:一个未加固的ROS2系统

假设一台移动机器人运行ROS2,使用默认配置,ROS_DOMAIN_ID为0。其/cmd_vel主题控制底盘运动,/camera/image传输视觉数据。此时同一局域网内任意一台安装了ROS2的电脑,只要设置相同的域ID,执行以下命令即可看到话题并订阅数据:

export ROS_DOMAIN_ID=0
ros2 topic list
ros2 topic echo /cmd_vel
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist \
  "{linear: {x: 1.0}, angular: {z: 0.5}}"

这意味着攻击者不仅能窃听摄像头画面,还能直接向底盘注入运动指令。这个案例说明:ROS2的默认通信模型是“信任优先”的,安全必须显式开启并配置。

常见误区:认为“只要不暴露公网就安全”。实际上DDS发现使用组播,同一二层网络内的任何主机都可能发现域内参与者。内网并不等于可信网络,尤其是存在BYOD设备或访客Wi-Fi的场景。

六、复盘与要点归纳

  • ROS2通信依赖DDS,安全能力由底层DDS实现及其安全插件决定。
  • 域是隔离边界,主题是数据通道,发布订阅模型天然多对多、无中心。
  • 无中心发现带来灵活性,也带来未授权加入、窃听、注入三类主要风险。
  • DDS Security通过认证、访问控制、加密、日志四个插件覆盖上述风险。
  • 安全配置必须与域ID、主题命名、QoS策略协同设计,否则可能出现“配了证书却匹配不上”的问题。