【ROS2】高级:安全-设置安全性

目标:使用 sros2 设置安全性。

教程级别:高级

时间:15 分钟

内容

  • 背景

  • 安装

    • 从源代码安装

    • 选择替代中间件

  • 运行演示

      1. 为安全文件创建一个文件夹
      1. 生成密钥库
      1. 生成密钥和证书
      1. 配置环境变量
      1. 运行 talker/listener 演示
  • 参加测验!

  • 了解更多!

背景

sros2 包提供了在 DDS-Security 之上使用 ROS 2 的工具和说明 。安全功能已在各个平台(Linux、macOS 和 Windows)以及不同语言(C++ 和 Python)中进行了测试。SROS2 旨在与任何安全中间件一起使用,尽管并非所有中间件都是开源的,并且支持因使用的 ROS 发行版而异。如果遇到任何支持问题,请联系 ROS 2 安全工作组。https://docs.ros.org/en/jazzy/The-ROS2-Project/Governance/Working-Groups.html#security-working-group

安装

通常在使用 ROS 2 安装指南https://docs.ros.org/en/jazzy/Installation.html 和配置指南https://docs.ros.org/en/jazzy/Tutorials/Beginner-CLI-Tools/Configuring-ROS2-Environment.html 进行安装后即可获得安全性。但是,如果您打算从源代码安装或切换中间件实现,请考虑以下注意事项:

从源代码安装(compile Fast DDS)

在从源代码安装之前,您需要安装一个最近版本的 openssl(1.0.2g 或更高版本):

properties 复制代码
sudo apt update
sudo apt install libssl-dev

Fast DDS 需要额外的 CMake 标志来构建安全插件,因此需要修改 colcon 调用以传递:

apache 复制代码
colcon build --symlink-install --cmake-args -DSECURITY=ON
sql 复制代码
cxy@cxy-Ubuntu2404:~/ros2_jazzy$ sudo apt update
cxy@cxy-Ubuntu2404:~/ros2_jazzy$ sudo apt install libssl-dev
cxy@cxy-Ubuntu2404:~/ros2_jazzy$ colcon build --symlink-install --cmake-args -DSECURITY=ON

选择替代的中间件

如果您选择不使用默认的中间件实现,请务必在继续之前更改您的 DDS 实现 https://docs.ros.org/en/jazzy/Installation/DDS-Implementations.html

properties 复制代码
Ubuntu Linux 源代码安装
# 1. RTI Connext(版本 6.0.1,仅 amd64)
ROS 2 apt 仓库中提供的 Debian 软件包
您可以安装在 ROS 2 apt 仓库中提供的 RTI Connext 的 Debian 软件包。您需要接受 RTI 的许可。


sudo apt update && sudo apt install -q -y rti-connext-dds-6.0.1


源设置文件以设置 NDDSHOME 环境变量。
cd /opt/rti.com/rti_connext_dds-6.0.1/resource/scripts && source ./rtisetenv_x64Linux4gcc7.3.0.bash; cd -
注意:使用 zsh 时,您需要位于脚本所在的目录中,以便正确运行


现在您可以正常构建,并且对 RTI 的支持也将被构建。






# 2. 来自 RTI 的官方二进制软件包
您可以通过大学、购买或评估提供的选项,安装由 RTI 提供的 Linux 版 Connext 6.0.1 软件包。


下载后,在 .run 可执行文件上使用 chmod +x ,然后执行它。请注意,如果您要安装到系统目录,请同时使用 sudo 。


默认位置是 ~/rti_connext_dds-6.0.1


安装后,运行 RTI 启动器并指向您的许可证文件(从 RTI 获得)。


将以下行添加到您的 .bashrc 文件中,指向您的许可证副本。
export RTI_LICENSE_FILE=path/to/rti_license.dat


请获取安装文件以设置 NDDSHOME 环境变量。
cd ~/rti_connext_dds-6.0.1/resource/scripts && source ./rtisetenv_x64Linux4gcc7.3.0.bash; cd - 
现在您可以像往常一样构建,并且还将构建对 RTI 的支持。




Ubuntu Linux 二进制安装


RTI Connext(版本 6.0.1,仅 amd64)
要使用 RTI Connext DDS,有适用于大学、购买或评估的全套安装选项,或者您可以安装 RTI Connext 6.0.1 的仅库 Debian 软件包,该软件包可从 OSRF Apt 存储库中获得,且在非商业许可下使用。


要安装仅包含库的 Debian 软件包:
sudo apt update && sudo apt install -q -y rti-connext-dds-6.0.1


您需要接受 RTI 的许可协议,并在安装中找到一个'rti_license.dat'文件。


将以下行添加到您的 .bashrc 文件中,指向您的许可证副本(并引用它)。
export RTI_LICENSE_FILE=path/to/rti_license.dat


所有选项都需要您获取安装文件以设置 NDDSHOME 环境变量
cd /opt/rti.com/rti_connext_dds-6.0.1/resource/scripts && source ./rtisetenv_x64Linux4gcc7.3.0.bash; cd - 


注意:以上内容可能需要修改以匹配您的 RTI 安装位置


如果您想安装 Connext DDS-Security 插件,请参阅此页面。https://docs.ros.org/en/jazzy/Installation/DDS-Implementations/Install-Connext-Security-Plugins.html

ROS 2 允许您在运行时更改 DDS 实现。了解如何使用多个 RMW 实现来探索不同的中间件实现。https://docs.ros.org/en/jazzy/How-To-Guides/Working-with-multiple-RMW-implementations.html

请注意,不支持(不同中间件)供应商之间的安全通信

运行演示

1. 为安全文件创建一个文件夹

首先创建一个文件夹来存储此演示所需的所有文件:

Linux:

nginx 复制代码
mkdir ~/sros2_demo

2. 生成密钥库

使用 sros2 工具创建密钥库。密钥库中的文件将用于为 ROS 2 graph 中的所有参与者启用安全性。

Linux:

properties 复制代码
cd ~/sros2_demo
ros2 security create_keystore demo_keystore

3. 生成密钥和证书

一旦创建了密钥库,为每个启用了安全性的节点创建密钥和证书 。对于我们的演示,包括 talker 和 listener 节点。此命令使用 create_enclave 功能,该功能将在下一个教程中更详细地介绍。

properties 复制代码
ros2 security create_enclave demo_keystore /talker_listener/talker
ros2 security create_enclave demo_keystore /talker_listener/listener

4. 配置环境变量

三个环境变量允许中间件定位加密材料并启用(并可能强制)安全性 。这些和其他与安全相关的环境变量在 ROS 2 DDS-Security Integration 设计文档中有描述。https://design.ros2.org/articles/ros2_dds_security.html

Linux:

javascript 复制代码
export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce

这些变量需要在用于演示的每个终端中定义。为了方便,您可以将它们添加到您的启动环境中。

5. 运行 talker/listener 演示

启动 talker 节点以开始演示。

nginx 复制代码
ros2 run demo_nodes_cpp talker --ros-args --enclave /talker_listener/talker

在另一个终端中,执行相同的操作以启动 listener 节点。此终端中的环境变量必须按照上述步骤 4 中的描述正确设置。

nginx 复制代码
ros2 run demo_nodes_py listener --ros-args --enclave /talker_listener/listener

这些节点将使用身份验证和加密进行通信!如果你查看数据包内容(例如,使用 tcpdumpWireshark ,如在另一个教程中所述),你可以看到消息是加密的。

注意:您可以任意切换 C++(demo_nodes_cpp)和 Python(demo_nodes_py)包。

**这些节点之所以能够通信,是因为我们为它们创建了适当的密钥和证书。**在回答以下问题时,请保持两个节点运行。

参加测验!

问题 1

打开另一个终端会话,但不要设置环境变量,以便不启用安全性。启动监听器。你期望会发生什么?

答案1: 监听器启动了,但没有接收到任何消息。所有流量都是加密的,如果没有启用安全功能,监听器什么也接收不到。

问题 2

停止监听器,将环境变量 ROS_SECURITY_ENABLE 设置为 true ,然后重新启动监听器。这次你期望有什么结果?

答案2:监听器仍然启动,但无法接收消息。尽管现在已经启用了安全性,但由于 ROS 无法找到密钥文件,因此未正确配置安全性 。监听器启动,但由于未强制执行安全性,因此以非安全模式启动,这意味着尽管正确配置的发言者正在发送加密消息,但此监听器无法解密这些消息。

问题 3

停止监听并将 ROS_SECURITY_STRATEGY 设置为 Enforce 。现在会发生什么?

答案3:监听器启动失败。安全功能已经被启用并正在强制执行。由于它仍然没有被正确配置 ,系统会抛出错误而不是以非安全模式启动。

了解更多!

你准备好进一步了解 ROS 安全性了吗?看看Secure Turtlebot2 演示 https://github.com/ros-swg/turtlebot3_demo 。你会发现一个功能齐全且复杂的 ROS 2 安全性实现,准备好尝试你自己的自定义场景。请务必在此处创建拉取请求和问题,以便我们继续改进 ROS 的安全支持!

相关推荐
用户9623779544815 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机18 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机18 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户9623779544819 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star19 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954481 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher3 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行6 天前
网络安全总结
安全·web安全
red1giant_star6 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透6 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全