鉴源实验室·基于DDS的模糊测试研究

作者 | 柳泽 上海控安可信软件创新研究院

鉴源实验室

01

引 言

近年来,随着工业4.0和智能网联技术的发展,数据驱动型系统的需求日益增加,推动了诸如 DDS(Data Distribution Service)等高效数据分发中间件的应用和发展。在工业制造和智能网联领域,实时性、可靠性以及可扩展性成为系统设计中不可或缺的要素,传统的数据传输和通信架构难以满足这些需求。因此,DDS 作为一种标准化的发布/订阅通信模型,逐渐受到广泛关注。

DDS最早应用于国防军工,欧美的主流军工厂商,如THALES泰雷兹、、Raytheon雷神、Lockheed Martin洛克希德·马丁均采用DDS中间件为其作战指挥与控制系统、无人机、导弹发射控制的提供通信服务。随着自动驾驶技术的快速发展和车联网(V2X)的普及,为满足智能网联汽车车内多种传感器之间,以及与车外高带宽,低延迟的数据传输需求,DDS于2018年被引入AUTOSAR。DDS 系统通常承担着实时数据分发和通信的重任,其安全性和稳定性变得至关重要。一旦发生故障或遭遇恶意攻击,可能导致严重的系统失效或数据泄露,进而影响业务连续性和人身安全。因此,对DDS进行深入研究,挖掘并消除潜在漏洞,确保 DDS 中间件的稳定性和可靠性对于工业自动化、智能化控制的安全至关重要。

02

DDS介绍

DDS(Data Distribution Service) 是一种用于实时系统的中间件标准,由对象管理组织 (OMG, Object Management Group) 制定。它专门设计用于支持分布式系统中的高效、可靠和可扩展的数据交换,尤其在高性能、实时性和可用性要求较高的分布式场景中应用。以下是DDS的应用示意图:

图 1

在 DDS(Data Distribution Service)中,“域” 是一个重要的概念,它用来组织和隔离数据通信,以便在大型分布式系统中实现高效和有序的数据管理。每个域由一个唯一的域标识符(Domain ID)进行标识。DDS中的通信实体为域参与者(DomainParticipant),只有同一个域中的域参与者才可相互通信。在域之下,对通信的主题Topic进行了进一步的划分,只有参与者参与到了同一Topic时,两者才能进行通信。Topic通信中有两种角色:

· Publisher:Topic消息的发布者,可以同时有1个或多个发布者。

· Subscriber:Topic消息的订阅者,可以同时有1个或多个发布者。

DDS在网络协议栈中位于TCP和UDP之上,并且基于TCP和UDP来进行发送。DDS的规范中针对网络实时发布订阅,规定了实时发布订阅(Real-Time Publish Subscribe,RTPS)协议。

图 2

RTPS 是 DDS 中的一个通信协议,专门用于在分布式系统中实现实时数据分发。RTPS 是 DDS 的核心传输协议,负责确保数据在网络上传输的实时性和可靠性。其主要特性包括:

· 数据传输:RTPS 确保发布者和订阅者之间的数据能够以实时和高效的方式传输。根据配置的 QoS 策略,RTPS 可以保证数据传输的可靠性和传递顺序,满足不同应用场景的需求。

· 自动发现:RTPS 支持节点之间的自动发现机制,允许分布式系统中的发布者和订阅者在启动时自动找到彼此,而无需手动配置。这使系统的动态扩展变得更加容易。

· QoS 管理:RTPS 协议支持多种 QoS 策略,如可靠性、持久性和传输优先级,提供对数据传输的严格控制,满足不同的实时性和可靠性要求。

图 3

RTPS协议的消息报文结构如图3所示,主要头(Header)、头拓展(HeaderExtention)、子消息(Submessage)组成。Header负责定义RTPS消息的域和节点信息,而功能的控制是由各个子消息来实现的,每个RTPS可以有一个或多个子消息。每个子消息都有特定的用途,用于在发布者和订阅者之间协调数据分发、可靠性控制以及参与者的自动发现。以下是 RTPS 的主要子消息类型:

图 4

各子消息的报文结构及功能可见DDSI-RTPS v2.5,在此不做深入探讨。

03

DDS协议模糊测试技术

3.1 DDS漏洞分析

基于DDS的中间件因其去中心化,Qos机制丰富,耦合度低,数据分发高效灵活等特性,被诸多高分布式系统采用,其中ROS2已将fastDDS当作长期发布版本的默认中间件。除此之外,Eclipse CycloneDDS、GurumNetworks GurumDDS、OCI OpenDDS、RTI Connext DDS等不同厂商的DDS开源工程也被行业广泛应用。这些项目尽管在性能和功能上不断优化,但也不可避免地暴露出各种安全漏洞。根据CVE(Common Vulnerabilities and Exposures)数据库的统计,对开源DDS项目的安全漏洞记录已达41条之多,这些漏洞可能被利用来发动多种类型的网络攻击,如拒绝服务、信息泄露和未经授权的访问等。下面介绍一些DDS中挖掘出来的CVE漏洞:

1)子报文解析中的错误格式的处理不当

DDS-RTPS协议中,不同节点的通信控制都是依靠子消息的来实现。DDS-RTPS消息中支持携带一条或者多条子消息,且DDS-RTPS的报文种类与的格式变化丰富,因此子消息的解析过程处理不当也会造成很多漏洞。多子消息的DDS-RTPS报文依靠子消息头中的子消息长度来解析单条子报文,如图5所示:

图 5

攻击者可以利用子消息解析过程中的漏洞,构造恶意拼接的复杂子报文,致使RTPS报文解析出错误的消息。CVE-2024-28231中,攻击者通过刻意构造数据包的结构,使得 uint32_t型的参数payload_size被计算为-1(被转译成0xFFFFFFFF),最终导致了缓冲区溢出的错误。

图 6

为了触发该漏洞,攻击者需要构造特定DATA报文使得程序进入该位置。攻击者精心构造了子消息头的长度OctetsToNextHeader,InlineQos的偏移量octetsToInlineQos,以及inlineQosSize,最终使得payload_size计算异常。

2)子消息缺乏隐私安全保护措施

该类漏洞是由于DDS-RTPS报文的子消息中存在很多控制相关的命令,对于该类命令的传输如果不进行有效的安全加密,则会外部攻击者通过伪造合法节点在网络中进行恶意网络攻击行为。CVE-2023-50257描述了eProsima Fast DDS(前称为Fast RTPS)中存在的一个严重漏洞。在Fast DDS的实现中,用于断开节点连接的数据(如p[UD])和guid值未被加密。这一缺陷允许攻击者构造并发送恶意数据包,从而强行断开订阅者(Subscribers)与发布者(Publishers)的连接。攻击者可以发送特制的断开连接数据包到全局数据空间,并使用特定的发布者ID。这样,所有连接到该发布者的订阅者将断开连接,并无法接收数据,且通过持续发送断开连接的恶意数据包,攻击者可以阻止订阅者与发布者重新建立连接,导致分布式系统中的数据传输中断。

3)缺乏逻辑检查

该类漏洞是由于程序在接收外部数据输入时,未进行有效的逻辑结构检查,使得外部程序可以在没有初始化等前置操作时便去进行进一步应用处理。CVE-2023-50716描述了一个典型的未初始化导致DDS程序崩溃的例子。输入的无效DATA_FRAG子消息会使得CacheChange_t对象在未对inline_qos和serializedpayload进行初始化时便去释放内存,最终导致了程序的终止。

3.2 DDS-RTPS协议模糊测试

DDS 中间件通过“发布-订阅”模式提供一个高效的数据分发引擎,抽象化了底层的通信细节,简化了数据传输和消息管理。虽然DDS中间件简化了应用开发者的开发流程,但是也使自身暴露在复杂的分布式网络环境中。DDS开源软件漏洞分析的案例分析中,很多漏洞都是攻击者伪装成网络节点,通过精心构造报文来引发DDS中间件的崩溃。通过发送特定协议报文触发漏洞来实现网络恶意攻击的方式使得攻击者可以用低廉的成本来达成攻击目的。因此,有必要通过模糊测试的方式预先排查并修复漏洞,提升产品的鲁棒性和稳定性。

SmartRocket TestSec是一款针对工业互联网协议的自动化智能黑盒模糊测试工具。工具的模糊测试测试功能支持CAN、CAN FD、Ethernet、USB、BlueTooth、WIFI等不同硬件类型的模糊测试,DDS-RTPS的协议模糊测试属于工具的Ethernet模糊测试用例。DDS-RTPS的协议模糊测试有以下特性:

· 被测件的互操作性检查

· 用户自定义配置DDS-RTPS报文的待模糊字段

· 用户自定义配置监控套件监控被测件状态

· 支持模糊的交互过程全记录

· 支持crash报文记录及向前回溯

· 支持结果报告自动生成

图 7

TestSec协议模糊测试页面(图7)勾选添加了RTPS模糊测试用例之后,可以通过用例说明了解各个报文字段的意义,并根据需求选择特定的字段进行模糊。RTPS协议模糊测试支持用户添加多个子消息以模拟真实的RTPS报文格式。用户可以固定填写关键参数信息使得报文信息可以发送到指定的被测件上或者使被测件进入特定的报文交互模式,以更快的测试具体功能。以CVE-2024-28231的POC为例,用户可以固定部分字段,并对其赋予有意义的值,对想要模糊测试的字段进行变异勾选。

图 8

然后利用ASAN监控套件,检测被测软件的状态。在检测到Crash后,TestSec会汇总监控信息、以及模糊用例的信息,并最终生成测试报告,见图10。

图 9

图 10

参考文献:

1. https://github.com/eProsima/Fast-DDS/security

2. https://www.omg.org/spec/DDSI-RTPS/

3. AUTOSAR. (2022). Specification of Secure Onboard Communication. AUTOSAR Standard Working Specification.

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

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

相关文章

新功能:“禁用TLS特性”,让浏览器更隐蔽

如果你在使用浏览器时担心隐私泄露、被广告追踪,或者需要绕过反作弊系统,AdsPower 的新功能——“禁用 TLS 特性”或许可以帮到你。 今天,我们就来聊聊这个功能的作用、原理,以及如何使用。 🔍先来聊聊:TL…

【第一节】C++设计模式(创建型模式)-工厂模式

目录 前言 一、面向对象的两类对象创建问题 二、解决问题 三、工厂模式代码示例 四、工厂模式的核心功能 五、工厂模式的应用场景 六、工厂模式的实现与结构 七、工厂模式的优缺点 八、工厂模式的扩展与优化 九、总结 前言 在面向对象系统设计中,开发者常…

DeepSeek:企业级大模型私有化部署与应用全解析(深度扩展版)

一、DeepSeek基本信息介绍(扩展) DeepSeek作为中国首个实现全栈自主可控的开源大模型体系,其技术演进经历了DeepSeek LLM→DeepSeek MoE→DeepSeek-V2→DeepSeek-V3→DeepSeek R1五大阶段。核心突破在于: 架构创新:在Transformer基础上引入分组查询注意力(GQA),推理成…

zyNo.25

SSRF漏洞 在了解ssrf漏洞前先了解curl命令的使用 1.curl命令的使用 基本格式&#xff1a;curl<参数值>请求地址 get请求&#xff1a;curl http://127.0.0.1 post请求&#xff1a;curl -X POST -d "a1&b2" http://127.0.0.1/(其中&#xff0c;使用-X参…

文件理解:从C标准库到系统调用

目录 一、C 标准库文件操作 1. 文件的写入 2. 文件的读取 3. 数据输出到显示器 4. 标准输入输出流 二、C 标准库文件操作模式 三、系统调用文件操作 1. 文件的打开与描述符 2. 文件的读取 3. 文件操作标志 4. 文件权限 5. 文件描述符 四、C 标准库与系统调用的比较…

【阮一峰】5.函数

函数 简介 函数的类型声明&#xff0c;需要在声明函数时&#xff0c;给出参数的类型和返回值的类型。 function hello(txt: string): void {console.log("hello " txt); }如果变量被赋值为一个函数&#xff0c;变量的类型有两种写法。 // 写法一 const hello f…

【R语言】主成分分析与因子分析

一、主成分分析 主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;是一种常用的无监督数据降维技术&#xff0c;广泛应用于统计学、数据科学和机器学习等领域。它通过正交化线性变换将&#xff08;高维&#xff09;原始数据投影到一个新的坐标系&#xff…

pycharm画图程序如何一步一步的调试

1.设置合适的 Matplotlib 后端 在 PyCharm 中&#xff0c;有时需要手动指定 Matplotlib 后端。你可以尝试在脚本的最开始加入以下代码&#xff0c;强制使用 TkAgg 后端&#xff0c;这样可以保证图形更新的实时性&#xff1a; import matplotlib matplotlib.use(TkAgg) # 指定…

基于Java+Swing+Mysql实现旅游管理信息系统

基于JavaSwingMysql实现旅游管理信息系统 一、系统介绍二、功能展示1.登陆2.注册3.旅游信息查询4.查看游行团信息5.报名6、报名信息管理 三、数据库四、其它1.其他系统实现五.获取源码 一、系统介绍 用户&#xff1a;登陆、注册、旅游信息查询、查看游行团信息、报名 管理员&a…

Linux配置端口映射——其他机器可以访问

一般使用虚拟机都是NAT网络模式&#xff0c;但是这种模式的问题是&#xff1a;其他机器不能访问虚拟机 想让其他机器访问这个电脑上的虚拟机&#xff0c;需要做端口映射。 之后就可以使用finalshell连接 注意&#xff1a;如果要连接其他人的虚拟机&#xff0c;需要对方先关闭自…

快速部署deepseek

一、安装ollama 访问https://ollama.com/download 下载并安装对应系统的ollama。 Ollama 是一个开源工具&#xff0c;旨在帮助用户在本地机器上轻松运行和管理大型语言模型&#xff08;LLM&#xff09;。它提供了一个简单易用的命令行界面&#xff0c;可以下载、安装和运行各…

用Deepseek查询快证API-物流查询-实名认证-企业实名认证

快证API可能是一个提供多种验证和查询服务的平台&#xff0c;包括但不限于企业实名认证、短链接生成、手机号归属地查询、IP地址查询等。以下是根据搜索结果整理的关于快证API的相关信息&#xff1a; ‌企业实名认证API‌&#xff1a; 功能&#xff1a;通过与企业相关数据库进行…

基于指纹识别技术的考勤打卡设计与实现(论文+源码)

1 系统总体设计 本次基于指纹识别技术的考勤打卡系统的整体框图如图2.1所示&#xff0c;主控制模块选用单片机STC89C52&#xff0c;同时还包括AT24C02存储电路&#xff0c;指纹模块&#xff0c;LCD12864液晶&#xff0c;继电器&#xff0c;矩阵键盘等硬件电路。其中指纹模块和…

【云安全】云原生-K8S(四)安全问题分析

Kubernetes&#xff08;K8S&#xff09;因其强大的容器编排能力成为了云计算和微服务架构的首选&#xff0c;但同时也带来了复杂的安全挑战。本文将概述K8S的主要安全问题&#xff0c;帮助安全工程师理解潜在威胁&#xff0c;并采取相应的防护措施。 K8S 攻击面概览 下面两张…

基于JAVA毕业生信息招聘信息平台设计与实现

以往的毕业生信息招聘信息管理事务处理主要使用的是传统的人工管理方式&#xff0c;这种管理方式存在着管理效率低、操作流程繁琐、保密性差等缺点&#xff0c;长期的人工管理模式会产生大量的文本文件与文本数据&#xff0c;这对事务的查询、更新以及维护带来不少困难。随着互…

ES6模块化和CommonJs模块化区别

ES6模块化和CommonJs模块化区别 在JavaScript中&#xff0c;模块化是将代码拆分成独立的块&#xff0c;每个块可以独立封装和管理。ES6模块化和CommonJS是两种常见的模块化规范&#xff0c;它们在语法、加载方式和运行时特性上有显著差异。 语法差异 CommonJS模块使用requir…

DeepSeek自动化写作软件

DeepSeek写作软件的三大核心功能 对于内容创作者来说&#xff0c;写作不仅是表达思想的过程&#xff0c;更是一项需要投入大量时间和精力的任务。面对日益增长的内容需求&#xff0c;写作效率低下、内容质量不高等问题&#xff0c;常常让创作者感到焦虑。而 DeepSeek 写作软件…

深入解析 Flutter Bloc:从原理到实战

深入解析 Flutter Bloc&#xff1a;从原理到实战 Bloc&#xff08;Business Logic Component&#xff09;是 Flutter 中一个强大的状态管理工具&#xff0c;基于事件驱动的架构设计&#xff0c;适合管理复杂的业务逻辑和状态。Bloc 的核心理念是将业务逻辑与 UI 分离&#xff…

使用右侧值现象来处理一个word导入登记表的需求

需求也简单&#xff0c;导word文件用户登记表&#xff0c;有各部门的十几个版本&#xff08;为什么这么多&#xff1f;不知道&#xff09;。这里说下谈下我的一些代码做法&#xff1a; 需求分析&#xff1a; 如果能解决java字段和各项填的值怎么配对的问题&#xff0c;那么就…

Day48(补)【AI思考】-设计模式三大类型统一区分与记忆指南

文章目录 设计模式三大类型统一区分与记忆指南**一、创建型模式&#xff08;对象如何生&#xff1f;&#xff09;****二、结构型模式&#xff08;对象如何组&#xff1f;&#xff09;****三、行为型模式&#xff08;对象如何动&#xff1f;&#xff09;****1. 行为型类模式&…