Jianyuan Lab
發(fā)布時(shí)間:2025-02-19 作者:上海工業(yè)控制安全創(chuàng)新科技有限公司 點(diǎn)擊次數(shù):次
01 引 言 近年來(lái),隨著工業(yè)4.0和智能網(wǎng)聯(lián)技術(shù)的發(fā)展,數(shù)據(jù)驅(qū)動(dòng)型系統(tǒng)的需求日益增加,推動(dòng)了諸如 DDS(Data Distribution Service)等高效數(shù)據(jù)分發(fā)中間件的應(yīng)用和發(fā)展。在工業(yè)制造和智能網(wǎng)聯(lián)領(lǐng)域,實(shí)時(shí)性、可靠性以及可擴(kuò)展性成為系統(tǒng)設(shè)計(jì)中不可或缺的要素,傳統(tǒng)的數(shù)據(jù)傳輸和通信架構(gòu)難以滿足這些需求。因此,DDS 作為一種標(biāo)準(zhǔn)化的發(fā)布/訂閱通信模型,逐漸受到廣泛關(guān)注。 DDS最早應(yīng)用于國(guó)防軍工,歐美的主流軍工廠商,如THALES泰雷茲、、Raytheon雷神、Lockheed Martin洛克希德·馬丁均采用DDS中間件為其作戰(zhàn)指揮與控制系統(tǒng)、無(wú)人機(jī)、導(dǎo)彈發(fā)射控制的提供通信服務(wù)。隨著自動(dòng)駕駛技術(shù)的快速發(fā)展和車聯(lián)網(wǎng)(V2X)的普及,為滿足智能網(wǎng)聯(lián)汽車車內(nèi)多種傳感器之間,以及與車外高帶寬,低延遲的數(shù)據(jù)傳輸需求,DDS于2018年被引入AUTOSAR。DDS 系統(tǒng)通常承擔(dān)著實(shí)時(shí)數(shù)據(jù)分發(fā)和通信的重任,其安全性和穩(wěn)定性變得至關(guān)重要。一旦發(fā)生故障或遭遇惡意攻擊,可能導(dǎo)致嚴(yán)重的系統(tǒng)失效或數(shù)據(jù)泄露,進(jìn)而影響業(yè)務(wù)連續(xù)性和人身安全。因此,對(duì)DDS進(jìn)行深入研究,挖掘并消除潛在漏洞,確保 DDS 中間件的穩(wěn)定性和可靠性對(duì)于工業(yè)自動(dòng)化、智能化控制的安全至關(guān)重要。 02 DDS介紹 DDS(Data Distribution Service) 是一種用于實(shí)時(shí)系統(tǒng)的中間件標(biāo)準(zhǔn),由對(duì)象管理組織 (OMG, Object Management Group) 制定。它專門設(shè)計(jì)用于支持分布式系統(tǒng)中的高效、可靠和可擴(kuò)展的數(shù)據(jù)交換,尤其在高性能、實(shí)時(shí)性和可用性要求較高的分布式場(chǎng)景中應(yīng)用。以下是DDS的應(yīng)用示意圖: 圖 1 在 DDS(Data Distribution Service)中,“域” 是一個(gè)重要的概念,它用來(lái)組織和隔離數(shù)據(jù)通信,以便在大型分布式系統(tǒng)中實(shí)現(xiàn)高效和有序的數(shù)據(jù)管理。每個(gè)域由一個(gè)唯一的域標(biāo)識(shí)符(Domain ID)進(jìn)行標(biāo)識(shí)。DDS中的通信實(shí)體為域參與者(DomainParticipant),只有同一個(gè)域中的域參與者才可相互通信。在域之下,對(duì)通信的主題Topic進(jìn)行了進(jìn)一步的劃分,只有參與者參與到了同一Topic時(shí),兩者才能進(jìn)行通信。Topic通信中有兩種角色: · Publisher:Topic消息的發(fā)布者,可以同時(shí)有1個(gè)或多個(gè)發(fā)布者。 · Subscriber:Topic消息的訂閱者,可以同時(shí)有1個(gè)或多個(gè)發(fā)布者。 DDS在網(wǎng)絡(luò)協(xié)議棧中位于TCP和UDP之上,并且基于TCP和UDP來(lái)進(jìn)行發(fā)送。DDS的規(guī)范中針對(duì)網(wǎng)絡(luò)實(shí)時(shí)發(fā)布訂閱,規(guī)定了實(shí)時(shí)發(fā)布訂閱(Real-Time Publish Subscribe,RTPS)協(xié)議。 圖 2 RTPS 是 DDS 中的一個(gè)通信協(xié)議,專門用于在分布式系統(tǒng)中實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)分發(fā)。RTPS 是 DDS 的核心傳輸協(xié)議,負(fù)責(zé)確保數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)膶?shí)時(shí)性和可靠性。其主要特性包括: · 數(shù)據(jù)傳輸:RTPS 確保發(fā)布者和訂閱者之間的數(shù)據(jù)能夠以實(shí)時(shí)和高效的方式傳輸。根據(jù)配置的 QoS 策略,RTPS 可以保證數(shù)據(jù)傳輸?shù)目煽啃院蛡鬟f順序,滿足不同應(yīng)用場(chǎng)景的需求。 · 自動(dòng)發(fā)現(xiàn):RTPS 支持節(jié)點(diǎn)之間的自動(dòng)發(fā)現(xiàn)機(jī)制,允許分布式系統(tǒng)中的發(fā)布者和訂閱者在啟動(dòng)時(shí)自動(dòng)找到彼此,而無(wú)需手動(dòng)配置。這使系統(tǒng)的動(dòng)態(tài)擴(kuò)展變得更加容易。 · QoS 管理:RTPS 協(xié)議支持多種 QoS 策略,如可靠性、持久性和傳輸優(yōu)先級(jí),提供對(duì)數(shù)據(jù)傳輸?shù)膰?yán)格控制,滿足不同的實(shí)時(shí)性和可靠性要求。 圖 3 RTPS協(xié)議的消息報(bào)文結(jié)構(gòu)如圖3所示,主要頭(Header)、頭拓展(HeaderExtention)、子消息(Submessage)組成。Header負(fù)責(zé)定義RTPS消息的域和節(jié)點(diǎn)信息,而功能的控制是由各個(gè)子消息來(lái)實(shí)現(xiàn)的,每個(gè)RTPS可以有一個(gè)或多個(gè)子消息。每個(gè)子消息都有特定的用途,用于在發(fā)布者和訂閱者之間協(xié)調(diào)數(shù)據(jù)分發(fā)、可靠性控制以及參與者的自動(dòng)發(fā)現(xiàn)。以下是 RTPS 的主要子消息類型: 圖 4 各子消息的報(bào)文結(jié)構(gòu)及功能可見(jiàn)DDSI-RTPS v2.5,在此不做深入探討。 03 DDS協(xié)議模糊測(cè)試技術(shù) 3.1 DDS漏洞分析 基于DDS的中間件因其去中心化,Qos機(jī)制豐富,耦合度低,數(shù)據(jù)分發(fā)高效靈活等特性,被諸多高分布式系統(tǒng)采用,其中ROS2已將fastDDS當(dāng)作長(zhǎng)期發(fā)布版本的默認(rèn)中間件。除此之外,Eclipse CycloneDDS、GurumNetworks GurumDDS、OCI OpenDDS、RTI Connext DDS等不同廠商的DDS開(kāi)源工程也被行業(yè)廣泛應(yīng)用。這些項(xiàng)目盡管在性能和功能上不斷優(yōu)化,但也不可避免地暴露出各種安全漏洞。根據(jù)CVE(Common Vulnerabilities and Exposures)數(shù)據(jù)庫(kù)的統(tǒng)計(jì),對(duì)開(kāi)源DDS項(xiàng)目的安全漏洞記錄已達(dá)41條之多,這些漏洞可能被利用來(lái)發(fā)動(dòng)多種類型的網(wǎng)絡(luò)攻擊,如拒絕服務(wù)、信息泄露和未經(jīng)授權(quán)的訪問(wèn)等。下面介紹一些DDS中挖掘出來(lái)的CVE漏洞: 1)子報(bào)文解析中的錯(cuò)誤格式的處理不當(dāng) DDS-RTPS協(xié)議中,不同節(jié)點(diǎn)的通信控制都是依靠子消息的來(lái)實(shí)現(xiàn)。DDS-RTPS消息中支持?jǐn)y帶一條或者多條子消息,且DDS-RTPS的報(bào)文種類與的格式變化豐富,因此子消息的解析過(guò)程處理不當(dāng)也會(huì)造成很多漏洞。多子消息的DDS-RTPS報(bào)文依靠子消息頭中的子消息長(zhǎng)度來(lái)解析單條子報(bào)文,如圖5所示: 圖 5 攻擊者可以利用子消息解析過(guò)程中的漏洞,構(gòu)造惡意拼接的復(fù)雜子報(bào)文,致使RTPS報(bào)文解析出錯(cuò)誤的消息。CVE-2024-28231中,攻擊者通過(guò)刻意構(gòu)造數(shù)據(jù)包的結(jié)構(gòu),使得 uint32_t型的參數(shù)payload_size被計(jì)算為-1(被轉(zhuǎn)譯成0xFFFFFFFF),最終導(dǎo)致了緩沖區(qū)溢出的錯(cuò)誤。 圖 6 為了觸發(fā)該漏洞,攻擊者需要構(gòu)造特定DATA報(bào)文使得程序進(jìn)入該位置。攻擊者精心構(gòu)造了子消息頭的長(zhǎng)度OctetsToNextHeader,InlineQos的偏移量octetsToInlineQos,以及inlineQosSize,最終使得payload_size計(jì)算異常。 2)子消息缺乏隱私安全保護(hù)措施 該類漏洞是由于DDS-RTPS報(bào)文的子消息中存在很多控制相關(guān)的命令,對(duì)于該類命令的傳輸如果不進(jìn)行有效的安全加密,則會(huì)外部攻擊者通過(guò)偽造合法節(jié)點(diǎn)在網(wǎng)絡(luò)中進(jìn)行惡意網(wǎng)絡(luò)攻擊行為。CVE-2023-50257描述了eProsima Fast DDS(前稱為Fast RTPS)中存在的一個(gè)嚴(yán)重漏洞。在Fast DDS的實(shí)現(xiàn)中,用于斷開(kāi)節(jié)點(diǎn)連接的數(shù)據(jù)(如p[UD])和guid值未被加密。這一缺陷允許攻擊者構(gòu)造并發(fā)送惡意數(shù)據(jù)包,從而強(qiáng)行斷開(kāi)訂閱者(Subscribers)與發(fā)布者(Publishers)的連接。攻擊者可以發(fā)送特制的斷開(kāi)連接數(shù)據(jù)包到全局?jǐn)?shù)據(jù)空間,并使用特定的發(fā)布者ID。這樣,所有連接到該發(fā)布者的訂閱者將斷開(kāi)連接,并無(wú)法接收數(shù)據(jù),且通過(guò)持續(xù)發(fā)送斷開(kāi)連接的惡意數(shù)據(jù)包,攻擊者可以阻止訂閱者與發(fā)布者重新建立連接,導(dǎo)致分布式系統(tǒng)中的數(shù)據(jù)傳輸中斷。 3)缺乏邏輯檢查 該類漏洞是由于程序在接收外部數(shù)據(jù)輸入時(shí),未進(jìn)行有效的邏輯結(jié)構(gòu)檢查,使得外部程序可以在沒(méi)有初始化等前置操作時(shí)便去進(jìn)行進(jìn)一步應(yīng)用處理。CVE-2023-50716描述了一個(gè)典型的未初始化導(dǎo)致DDS程序崩潰的例子。輸入的無(wú)效DATA_FRAG子消息會(huì)使得CacheChange_t對(duì)象在未對(duì)inline_qos和serializedpayload進(jìn)行初始化時(shí)便去釋放內(nèi)存,最終導(dǎo)致了程序的終止。 3.2 DDS-RTPS協(xié)議模糊測(cè)試 DDS 中間件通過(guò)“發(fā)布-訂閱”模式提供一個(gè)高效的數(shù)據(jù)分發(fā)引擎,抽象化了底層的通信細(xì)節(jié),簡(jiǎn)化了數(shù)據(jù)傳輸和消息管理。雖然DDS中間件簡(jiǎn)化了應(yīng)用開(kāi)發(fā)者的開(kāi)發(fā)流程,但是也使自身暴露在復(fù)雜的分布式網(wǎng)絡(luò)環(huán)境中。DDS開(kāi)源軟件漏洞分析的案例分析中,很多漏洞都是攻擊者偽裝成網(wǎng)絡(luò)節(jié)點(diǎn),通過(guò)精心構(gòu)造報(bào)文來(lái)引發(fā)DDS中間件的崩潰。通過(guò)發(fā)送特定協(xié)議報(bào)文觸發(fā)漏洞來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)惡意攻擊的方式使得攻擊者可以用低廉的成本來(lái)達(dá)成攻擊目的。因此,有必要通過(guò)模糊測(cè)試的方式預(yù)先排查并修復(fù)漏洞,提升產(chǎn)品的魯棒性和穩(wěn)定性。 · 被測(cè)件的互操作性檢查 · 用戶自定義配置DDS-RTPS報(bào)文的待模糊字段 · 用戶自定義配置監(jiān)控套件監(jiān)控被測(cè)件狀態(tài) · 支持模糊的交互過(guò)程全記錄 · 支持crash報(bào)文記錄及向前回溯 · 支持結(jié)果報(bào)告自動(dòng)生成 圖 7 TestSec協(xié)議模糊測(cè)試頁(yè)面(圖7)勾選添加了RTPS模糊測(cè)試用例之后,可以通過(guò)用例說(shuō)明了解各個(gè)報(bào)文字段的意義,并根據(jù)需求選擇特定的字段進(jìn)行模糊。RTPS協(xié)議模糊測(cè)試支持用戶添加多個(gè)子消息以模擬真實(shí)的RTPS報(bào)文格式。用戶可以固定填寫關(guān)鍵參數(shù)信息使得報(bào)文信息可以發(fā)送到指定的被測(cè)件上或者使被測(cè)件進(jìn)入特定的報(bào)文交互模式,以更快的測(cè)試具體功能。以CVE-2024-28231的POC為例,用戶可以固定部分字段,并對(duì)其賦予有意義的值,對(duì)想要模糊測(cè)試的字段進(jìn)行變異勾選。 圖 8 然后利用ASAN監(jiān)控套件,檢測(cè)被測(cè)軟件的狀態(tài)。在檢測(cè)到Crash后,TestSec會(huì)匯總監(jiān)控信息、以及模糊用例的信息,并最終生成測(cè)試報(bào)告,見(jiàn)圖10。 圖 9 圖 10 參考文獻(xiàn): 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.