【ROS2】高级:安全-检查网络流量

news2024/9/22 15:32:49

目标:捕获和检查原始 ROS 2 网络流量。

 教程级别:高级

 时间:20 分钟

 内容

  •  概述

  •  先决条件

  •  运行演示

    •  安装 tcpdump

    • 启动说话者和听者

    • 显示未加密的发现数据包

    • 显示未加密的数据包

    •  启用加密

    • 显示加密的发现数据包

    • 显示加密数据包

 概述

ROS 2 通信安全是关于保护节点之间的通信。之前的教程启用了安全性,但你如何真正判断流量是否被加密?在本教程中,我们将通过捕获实时网络流量来展示加密和未加密流量之间的区别。

 注意

rmw_fastrtps_cpp 默认使用共享内存传输https://fast-dds.docs.eprosima.com/en/latest/fastdds/transport/shared_memory/shared_memory.html ,以提高端点在同一主机系统中时传输层的性能。安全飞地仍然适用,数据将被加密。但是,您无法捕获实时网络流量,因为数据不会出现在网络接口上。如果您使用 rmw_fastrtps_cpp ,则需要通过本教程并在发布者和订阅者之间使用不同的主机系统,或者通过启用 UDP 传输 https://fast-dds.docs.eprosima.com/en/latest/fastdds/transport/udp/udp.html#enabling-udp-transport 和设置 Fast-DDS XML 配置 https://github.com/ros2/rmw_fastrtps#full-qos-configuration 来禁用共享内存传输。

 先决条件

本指南仅在 Linux 上运行,并假设您已安装 ROS 2。

运行演示 

 安装 tcpdump 

在新的终端窗口中开始安装 tcpdump  https://www.tcpdump.org/manpages/tcpdump.1.html ,这是一个用于捕获和显示网络流量的命令行工具。虽然本教程描述了 tcpdump 命令,您也可以使用 Wireshark https://www.wireshark.org/ ,这是一个类似的图形工具,用于捕获和分析流量。

sudo apt update
sudo apt install tcpdump

在单台机器上通过多个 ssh 会话运行以下命令。

启动说话者和听者

请重新启动讲述者和监听器,每个在自己的终端中。安全环境变量未设置,因此这些会话未启用安全性。

# Disable ROS Security for both terminals
unset ROS_SECURITY_ENABLE


# In terminal 1:
ros2 run demo_nodes_cpp talker --ros-args --enclave /talker_listener/talker


# In terminal 2:
ros2 run demo_nodes_cpp listener --ros-args --enclave /talker_listener/listener

显示未加密的发现数据包

在运行对话者和监听器的情况下,打开另一个终端并启动 tcpdump 以查看网络流量。由于读取原始网络流量是特权操作,因此需要使用 sudo 。

下面的命令使用 -X 选项打印数据包内容,使用 -i 选项监听任何接口上的数据包,并且只捕获 UDP 7400 端口 https://en.wikipedia.org/wiki/User_Datagram_Protocol 的流量。

sudo tcpdump -X -i any udp port 7400

你应该看到如下的数据包:

e7fcc8f13f20aee62895cdf3575ff5f6.png

20:18:04.400770 IP 8_xterm.46392 > 239.255.0.1.7400: UDP, length 252
  0x0000:  4500 0118 d48b 4000 0111 7399 c0a8 8007  E.....@...s.....
  0x0010:  efff 0001 b538 1ce8 0104 31c6 5254 5053  .....8....1.RTPS
  ...
  0x00c0:  5800 0400 3f0c 3f0c 6200 1c00 1800 0000  X...?.?.b.......
  0x00d0:  2f74 616c 6b65 725f 6c69 7374 656e 6572  /talker_listener
  0x00e0:  2f74 616c 6b65 7200 2c00 2800 2100 0000  /talker.,.(.!...
  0x00f0:  656e 636c 6176 653d 2f74 616c 6b65 725f  enclave=/talker_
  0x0100:  6c69 7374 656e 6572 2f74 616c 6b65 723b  listener/talker;
  0x0110:  0000 0000 0100 0000                      ........

这是一个发现数据报——发言者正在寻找订阅者。正如您所看到的,节点名称( /talker_listener/talker )和飞地(也是 /talker_listener/talker )以纯文本形式传递。您还应该看到来自 listener 节点的类似发现数据报。典型发现数据包的其他一些功能:

  • 目标地址是 239.255.0.1,这是一个多播 IP 地址;ROS 2 默认使用多播流量进行发现。

  • UDP 7400 是目标端口,根据 DDS-RTPS 规范。https://www.omg.org/spec/DDSI-RTPS/About-DDSI-RTPS/

  • 数据包包含“RTPS”标签,也如 DDS-RTPS 规范中定义的那样。

显示未加密的数据包

使用 tcpdump 通过过滤 7400 以上的 UDP 端口来捕获非发现 RTPS 数据包

sudo tcpdump -i any -X udp portrange 7401-7500

你会看到几种不同类型的数据包,但请注意以下明显是从讲话者发送到听众的数据包:

5f2614c7a312605de34c6c347db30c8c.png

20:49:17.927303 IP localhost.46392 > localhost.7415: UDP, length 84
  0x0000:  4500 0070 5b53 4000 4011 e127 7f00 0001  E..p[S@.@..'....
  0x0010:  7f00 0001 b538 1cf7 005c fe6f 5254 5053  .....8...\.oRTPS
  0x0020:  0203 010f 010f 4874 e752 0000 0100 0000  ......Ht.R......
  0x0030:  0901 0800 cdee b760 5bf3 5aed 1505 3000  .......`[.Z...0.
  0x0040:  0000 1000 0000 1204 0000 1203 0000 0000  ................
  0x0050:  5708 0000 0001 0000 1200 0000 4865 6c6c  W...........Hell
  0x0060:  6f20 576f 726c 643a 2032 3133 3500 0000  o.World:.2135...

关于此数据包的一些功能:

  • 消息内容“Hello World: 2135”以明文发送

  • 源和目标 IP 地址是 localhost :由于两个节点都在同一台机器上运行,节点在 localhost 接口上发现了彼此

启用加密

停止讲者和监听器节点。通过设置安全环境变量为两者启用加密,然后重新运行它们。

# In terminal 1:
export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
ros2 run demo_nodes_cpp talker --ros-args --enclave /talker_listener/talker


# In terminal 2:
export ROS_SECURITY_KEYSTORE=~/sros2_demo/demo_keystore
export ROS_SECURITY_ENABLE=true
export ROS_SECURITY_STRATEGY=Enforce
ros2 run demo_nodes_cpp listener --ros-args --enclave /talker_listener/listener

显示加密的发现数据包

运行之前使用的相同 tcpdump 命令,以检查启用加密的发现流量的输出:

sudo tcpdump -X -i any udp port 7400

典型的发现数据包看起来如下所示:

54232d84670a1c7d855025cb12e5fd20.png

21:09:07.336617 IP 8_xterm.60409 > 239.255.0.1.7400: UDP, length 596
  0x0000:  4500 0270 c2f6 4000 0111 83d6 c0a8 8007  E..p..@.........
  0x0010:  efff 0001 ebf9 1ce8 025c 331e 5254 5053  .........\3.RTPS
  0x0020:  0203 010f bbdd 199c 7522 b6cb 699f 74ae  ........u"..i.t.
  ...
  0x00c0:  5800 0400 3f0c ff0f 6200 2000 1a00 0000  X...?...b.......
  0x00d0:  2f74 616c 6b65 725f 6c69 7374 656e 6572  /talker_listener
  0x00e0:  2f6c 6973 7465 6e65 7200 0000 2c00 2800  /listener...,.(.
  0x00f0:  2300 0000 656e 636c 6176 653d 2f74 616c  #...enclave=/tal
  0x0100:  6b65 725f 6c69 7374 656e 6572 2f6c 6973  ker_listener/lis
  0x0110:  7465 6e65 723b 0000 0110 c400 1400 0000  tener;..........
  0x0120:  4444 533a 4175 7468 3a50 4b49 2d44 483a  DDS:Auth:PKI-DH:
  0x0130:  312e 3000 0400 0000 0c00 0000 6464 732e  1.0.........dds.
  ...
  0x0230:  1100 0000 6464 732e 7065 726d 5f63 612e  ....dds.perm_ca.
  0x0240:  616c 676f 0000 0000 0d00 0000 4543 4453  algo........ECDS
  0x0250:  412d 5348 4132 3536 0000 0000 0000 0000  A-SHA256........
  0x0260:  0510 0800 0700 0080 0600 0080 0100 0000  ................

这个数据包要大得多,并且包含可用于在 ROS 节点之间设置加密的信息。正如我们很快将看到的那样,这实际上包括一些在我们启用安全性时创建的安全配置文件。想了解更多吗?看看优秀的论文《安全 DDS 系统的网络侦察和漏洞挖掘》 https://arxiv.org/abs/1908.05310 以了解为什么这很重要。

显示加密数据包

现在使用 tcpdump 来捕获数据包:

sudo tcpdump -i any -X udp portrange 7401-7500

一个典型的数据包如下所示:

2922daa521b3e0c76e4c6777d38f832f.png

21:18:14.531102 IP localhost.54869 > localhost.7415: UDP, length 328
  0x0000:  4500 0164 bb42 4000 4011 8044 7f00 0001  E..d.B@.@..D....
  0x0010:  7f00 0001 d655 1cf7 0150 ff63 5254 5053  .....U...P.cRTPS
  0x0020:  0203 010f daf7 10ce d977 449b bb33 f04a  .........wD..3.J
  0x0030:  3301 1400 0000 0003 492a 6066 8603 cdb5  3.......I*`f....
  0x0040:  9df6 5da6 8402 2136 0c01 1400 0000 0000  ..]...!6........
  0x0050:  0203 010f daf7 10ce d977 449b bb33 f04a  .........wD..3.J
  ...
  0x0130:  7905 d390 3201 1400 3ae5 0b60 3906 967e  y...2...:..`9..~
  0x0140:  5b17 fd42 de95 54b9 0000 0000 3401 1400  [..B..T.....4...
  0x0150:  42ae f04d 0559 84c5 7116 1c51 91ba 3799  B..M.Y..q..Q..7.
  0x0160:  0000 0000                                ....

RTPS 数据包中的所有数据都是加密的

除了这个数据包之外,您还应该看到带有节点和飞地名称的其他数据包;这些支持其他 ROS 功能,例如参数和服务。这些数据包的加密选项也可以由安全策略控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1938675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity】Android Failed to transform Error while dexing.

文章目录 一、背景二、问题描述三、原因和解决方法 一、背景 1、Unity 2021.3.33f1 2、Firebase 11.7.0 3、升级至API-34 二、问题描述 错误信息 Failed to transform play-services-measurement-api-21.5.0.aar (com.google.android.gms:play-services-measurement-api:21.5.…

【yolov8】3、yolov8 环境安装 【GPU版】

pycharm下载安装 yolov8 环境安装 【GPU版】 1、要求1.1 什么是 CUDA 和 CUDNN1.2 查看cuda版本的3种方法(版本在10.2以上的可以忽略本章节):1.3 没有找到NIVDIA图标,确认是否有英伟达显卡 2、pycharm下载安装进入官网 3、yolov8…

【数据分享】2013-2022年我国省市县三级的逐日SO2数据(excel\shp格式\免费获取)

空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000——2022年的省市县三级的逐日PM2.5数据和2013-2022年的省市县三级的逐日CO数据(均可查看之前的文章获悉详情)! 本次我们分享的是我国2013——2022年的省…

【从零开始实现stm32无刷电机FOC】【实践】【5/7 stm32 adc外设的高级用法】

目录 采样时刻触发采样同步采样 点击查看本文开源的完整FOC工程 本节介绍的adc外设高级用法用于电机电流控制。 从前面几节可知,电机力矩来自于转子的q轴受磁力,而磁场强度与电流成正比,也就是说电机力矩与q轴电流成正相关,控制了…

【C++】类和对象——默认成员函数(下)

目录 前言拷贝构造1.概念2.特征3.总结 赋值重载运算符重载赋值运算符重载探讨传引用返回和传值返回的区别 const成员取地址及const取地址操作符重载 前言 上一讲我们已经说了关于C的默认成员函数中的两个——构造和析构函数。所谓默认成员函数也就是:用户没有显示定…

《背包乱斗》为什么好玩 苹果电脑怎么玩《背包乱斗》游戏 mac怎么玩steam windows游戏

在当今竞争激烈的游戏市场中,《背包乱斗》以其独特的魅力在众多作品中脱颖而出,吸引了大量玩家的关注和喜爱。其创新的游戏机制和不断迭代的内容,加之出色的视觉效果和社区建设,使其成为了游戏界的一股清流。 一、《背包乱斗》为…

钡铼EdgeIO系统BL206对接MQTT、Modbus TCP、OPC UA

钡铼EdgeIO系统BL206提供双网口支持交换机级联功能,支持标准MQTT协议、Modbus TCP协议、OPC UA协议,由耦合器与IO模块组成,采用Web配置,内置云驱动、可编程逻辑控制功能,用户点击即可连接云平台。耦合器自带诊断功能&a…

计算机三级嵌入式笔记(一)—— 嵌入式系统概论

目录 考点1 嵌入式系统 考点2 嵌入式系统的组成与分类 考点3 嵌入式系统的分类与发展 考点4 SOC芯片 考点5 数字(电子)文本 考点6 数字图像 考点7 数字音频与数字视频 考点8 数字通信 考点9 计算机网络 考点10 互联网 考纲(2023&am…

某宝同款度盘不限速后台系统源码

简介: 某宝同款度盘不限速后台系统源码,验证已被我去除,两个后端系统,账号和卡密系统 第一步安装宝塔,部署卡密系统,需要环境php7.4 把源码丢进去,设置php7.4,和伪静态为thinkphp…

新手小白的pytorch学习第七弹------分类问题模型

目录 1. 准备分类数据1.1 输入和输出的形状 shape1.2 将数据转换为张量,同时将我们的数据集转换为训练集和测试集 2 创建模型方法一:自定义forward()方法二:nn.Sequential()方法三:自定义forward()nn.Sequential() 用 pytorch 使用…

【Leetcode】十六、深度优先搜索 宽度优先搜索 :二叉树的层序遍历

文章目录 1、深度优先搜索算法2、宽度优先搜索算法3、leetcode102:二叉树的层序遍历4、leetcode107:二叉树的层序遍历II5、leetcode938:二叉搜索树的范围和 1、深度优先搜索算法 深度优先搜索,即DFS,从root节点开始&a…

Cadence23学习笔记(七)

三种信号联通的方式: 如何旋转元器件:先像下图一样选中器件,之后按住快捷键R即可旋转: 设置栅格大小: 这里的栅格数值越大,格点越密集。 放置分页符号: cadence中分页的话必须放置分页符&#…

充电站新主流——分体式直流充电桩

在全球对可持续发展和环境保护的高度关注下,电动汽车市场的迅猛增长催生了对充电设施建设的迫切需求。为此,一种名为分体式充电桩的创新充电设备应运而生,以其卓越的性能和独特优势,预示着未来充电技术的新趋势。为了增进公众对分…

PY32F002B单片机 ISP 串口下载注意事项

一、PY32F002B ISP 串口下载的连接方式 仿真上的 VCC 和 GND 连接到 MCU 的 VCC 和 VSS, 仿真的 TX 接 MCU 的 RX,RX 接 MCU 的 TX。 二、因为 PY32F002B 没有 BOOT,需要用 ISP 串口下载的话需要下载串口引导程序。 下载这个目录下的 IAP…

FPGA实验1:简单逻辑电路

一、实验目的及要求 学习Create-SOPC实验平台的使用方法;熟悉Quartus II 软件平台和使用 VHDL 语言设计电路的方法;学习简单逻辑电路的设计、仿真和硬件测试。 二、实验原理 运用Quartus II 集成环境下的VHDL文本设计方法设计半加器,进行波…

摸鱼大数据——Spark Structured Steaming——物联网数据分析案例

1、数据模拟器代码 1- 创建一个topic, 放置后续物联网的数据 search-log-topic ./kafka-topics.sh --bootstrap-server node1.itcast.cn:9092,node2.itcast.cn:9092 --create --topic search-log-topic --partitions 3 --replication-factor 2 2- 将代码放置到项目中: import…

浅谈芯片验证中的仿真运行之 timescale (五)提防陷阱

一 仿真单位 timeunit 我们知道,当我们的代码中写清楚延时语句时,若不指定时间单位,则使用此单位; 例如: `timescale 1ns/1ps 则 #15 语句表示delay15ns; 例:如下代码,module a 的timescale是1ns/1ps, module b 是1ps/1ps; module b中的clk,频率是由输入参…

【LeetCode】222. 完全二叉树的个数

什么是计算机基础?如果本题能够用二分二进制二叉树的方式解出本题,那么我可以认为你的计算机基础就很好了。很久以来,我一直认为自己的计算机基础好,但是自刷题以来,跟网上这么多优秀的同学相比,我发现我实…

vxe-grid 实现配置式form搜索条件 form搜索条件框可折叠 配置式table

文章目录 效果图代码 效果图 代码 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…

FPGA实验5:4位加法计数器

实验目的及要求 掌握时钟信号、进程和BUFFER端口的运用&#xff1b;了解计数器的设计、仿真和硬件测试&#xff0c;进一步熟悉VHDL语句、语法及应用等。 实验原理 运用Quartus II 集成环境下的VHDL文本设计方法设计4位加法计数器&#xff0c;进行波形仿真和分析、引脚分配…