隨著智能汽車設(shè)備的出現(xiàn),這些設(shè)備之間的數(shù)據(jù)通信變得越來越重要。SOME/IP是一個輕量級協(xié)議,用于促進進程/設(shè)備間的通信,它支持程序性調(diào)用和事件通知。由于其簡單性和性能,SOME/IP正被越來越多的汽車設(shè)備所采用。因此,SOME/IP應(yīng)用的安全性變得至關(guān)重要。
然而,由于服務(wù)器端測試程序難以并行等各種挑戰(zhàn),以往的安全測試技術(shù)無法適應(yīng)漏洞檢測SOME/IP應(yīng)用程序的場景。針對這些挑戰(zhàn),我們提出了一種用于SOME/IP應(yīng)用的灰盒模糊器Ori,它具有兩個關(guān)鍵的創(chuàng)新:附加模糊模式和結(jié)構(gòu)突變。附加模糊模式使Ori能夠有效地測試服務(wù)器程序,而結(jié)構(gòu)突變使Ori能夠生成有效的SOME/IP數(shù)據(jù)包,從而有效地到達目標(biāo)程序的深層路徑。評估表明,Ori可以有效地檢測SOME/IP應(yīng)用中的漏洞,而且效率很高。 ?
I.簡介
近年來,汽車行業(yè)對聯(lián)網(wǎng)車輛的數(shù)據(jù)通信需求不斷增加。數(shù)據(jù)交換量越大,對底層通信協(xié)議的帶寬要求就越高,這對車輛中現(xiàn)有的廣泛使用的通信協(xié)議(如CAN、LIN、FlexRay等)提出了挑戰(zhàn)?,F(xiàn)有協(xié)議的局限性導(dǎo)致需要采用新的通信協(xié)議來支持汽車工業(yè)的新趨勢,而汽車以太網(wǎng)是一個很有前途的解決方案??蓴U展的面向服務(wù)的IP中間件(SOME/IP)是廣泛用于汽車通信的新協(xié)議之一;它支持遠(yuǎn)程程序調(diào)用、事件通知和事件的發(fā)布/訂閱。越來越多的汽車設(shè)備正在采用SOME/IP來促進進程間/設(shè)備間的通信。隨著SOME/IP的出現(xiàn),對SOME/IP應(yīng)用的漏洞檢測變得至關(guān)重要。
在過去的十年中,模糊法在漏洞檢測方面顯示了它的潛力,并被用來發(fā)現(xiàn)開源和閉源軟件中的數(shù)千個漏洞。此外,研究人員還提出了新的模糊技術(shù)來模糊不同的協(xié)議實現(xiàn),如FTP或RTSP 。然而,SOME/IP的獨特特征給現(xiàn)有的方法帶來了新的挑戰(zhàn)。
首先,與FTP或其他運行在普通以太網(wǎng)上的協(xié)議不同,SOME/IP和其他汽車以太網(wǎng)協(xié)議通常是簡單明了的。原因是運行這些協(xié)議的設(shè)備的計算能力往往是有限的。一方面,協(xié)議設(shè)計的簡單性意味著模糊器不需要像AFLnet那樣為協(xié)議維護狀態(tài)機模型;另一方面,計算能力的限制意味著我們需要尋求并行運行多個模糊器來提高模糊的效率。在現(xiàn)有的方法中,每個模糊器實例將管理和運行測試目標(biāo)的唯一實例。然而,如果測試目標(biāo)需要一些獨特的資源(如端口、鎖文件等)來執(zhí)行,那么測試目標(biāo)在每個設(shè)備上只能運行一個實例。在SOME/IP中,服務(wù)器應(yīng)用程序通常在每個設(shè)備上運行一個實例,這使得執(zhí)行并行模糊處理具有挑戰(zhàn)性。第二,雖然SOME/IP的狀態(tài)機并不復(fù)雜,但是它的數(shù)據(jù)包仍然需要遵循一定的模式,這意味著模糊器如何對數(shù)據(jù)包進行突變會顯著影響它的有效性。
在這項工作中,我們提出了一個新的灰盒模糊器,稱為Ori,以解決這些挑戰(zhàn)。該模糊器采取了兩種策略,以適應(yīng)SOME/IP在汽車行業(yè)的使用情況。第一種策略被稱為附加模糊模式。通過附加模糊模式,Ori的幾個模糊器實例可以共享一個目標(biāo)進程進行測試。這種策略使Ori能夠有效地測試SOME/IP服務(wù)。第二種策略被稱為結(jié)構(gòu)性變異。這種策略允許Ori逐一突變SOME/IP數(shù)據(jù)包的字段,而不是將整個數(shù)據(jù)包作為一個整體進行突變。此外,結(jié)構(gòu)突變防止Ori產(chǎn)生過多的無效數(shù)據(jù)包,從而提高了Ori的有效性。此外,我們實現(xiàn)了這兩種策略,并用VSOME/IP的一個樣本程序?qū)ri進行了評估。評估結(jié)果證明了Ori在SOME/IP應(yīng)用程序中檢測漏洞的能力。
工作的貢獻總結(jié)如下:
?我們提出了兩種可以一起應(yīng)用的橫向策略,以提高模糊化SOME/IP應(yīng)用的效率和效果。
?我們在Ori中實現(xiàn)了這兩個新的策略,并使其具有可擴展性,以適應(yīng)未來的改進。
?我們在一個開源的SOME/IP應(yīng)用上對Ori進行了評估,評估結(jié)果令人滿意。 ?
II.背景和相關(guān)工作
圖1:汽車以太網(wǎng)與OSI層的映射 ?
A.汽車以太網(wǎng)
車以太網(wǎng)源自于辦公it領(lǐng)域的以太網(wǎng)協(xié)議,該協(xié)議引用了IEEE 802.3u標(biāo)準(zhǔn)系列。汽車以太網(wǎng)通過一對雙絞銅線以全雙工模式運行。因此,汽車以太網(wǎng)與它的IT以太網(wǎng)相比,有一個更直接的硬件設(shè)置,同時保持一個合理的高速度。
汽車以太網(wǎng)也很好地融入了7層OSI網(wǎng)絡(luò)架構(gòu)。汽車以太網(wǎng)涵蓋物理層和數(shù)據(jù)鏈路層(圖1)。由于其與辦公-IT同行的相似性,汽車以太網(wǎng)開啟了在以太網(wǎng)之上移植各種現(xiàn)有上層通信協(xié)議的潛力。這些上層協(xié)議,例如SOME/IP,反過來又為在其上建立復(fù)雜的應(yīng)用提供了進一步的潛力。
B.SOME/IP概述
在眾多位于汽車以太網(wǎng)之上的上層協(xié)議中,SOME/IP是一個汽車專用協(xié)議,通過UDP協(xié)議棧提供基于服務(wù)的通信。它允許有效地使用單播和多播通信,可用于汽車軟件的控制信息。SOME/IP 協(xié)議包括遠(yuǎn)程過程調(diào)用(RPC)、服務(wù)發(fā)現(xiàn)(SD)、服務(wù)事件發(fā)布/訂閱和 UDP 消息分段等功能。這些功能是通過在線表示的數(shù)據(jù)序列化來實現(xiàn)的。
在序列化過程中,SOME/IP頭被預(yù)置在有效載荷之前以形成數(shù)據(jù)包。數(shù)據(jù)頭的格式如圖2所示。
它包含以下字段: ? ?MessageID標(biāo)識了應(yīng)用層中對事件的RPC調(diào)用,它包含2個子字段ServiceID和MethodID; ?長度表示從RequestID到SOME/IP消息結(jié)束的字節(jié)數(shù); ?RequestID區(qū)分在同一事件中平行使用的數(shù)據(jù)包,它包含2個子字段ClientID和SessionID; ?協(xié)議版本確定了所使用的SOME/IP數(shù)據(jù)頭格式; ?接口版本包含使用的SOME/IP協(xié)議的主要版本; ?消息類型區(qū)分了SOME/IP協(xié)議中的各種消息類型; ?返回代碼表明一個請求是否被成功處理。
?
圖2:SOME/IP數(shù)據(jù)包的格式(頭文件為紅色)
圖3:灰盒模糊器的典型工作流程
C.灰盒模糊工作流程
灰盒模糊法是一種廣泛使用的檢測真實世界程序中漏洞的方法。近年來,灰盒模糊法,如AFL、libFuzzer,已經(jīng)幫助發(fā)現(xiàn)了成千上萬的漏洞。 ?
灰盒模糊法的基本思想是應(yīng)用一些預(yù)先設(shè)定的生成和變異策略來產(chǎn)生輸入到目標(biāo)程序中,并通過觀察監(jiān)測到的執(zhí)行過程中的安全漏洞來發(fā)現(xiàn)漏洞。圖3顯示了典型灰盒模糊器的工作流程。通過翻轉(zhuǎn)、替換、加/減位、字節(jié)或塊,或者根據(jù)輸入結(jié)構(gòu)進行生成,生成器可以產(chǎn)生輸入變量。目標(biāo)程序通常用某些代碼段進行檢測,以便在實際模糊測試期間提供覆蓋率反饋,這將有助于針對特定的文件輸入評估程序的執(zhí)行。
在AddressSanitizer、MemorySanitizer等凈化器的幫助下,執(zhí)行被模糊引擎監(jiān)控,以觀察是否有安全漏洞。這些違規(guī)行為,如內(nèi)存使用過期、緩沖區(qū)溢出等,通常表示實現(xiàn)缺陷,可能導(dǎo)致內(nèi)存損壞、信息泄露等漏洞。如果違規(guī)被觸發(fā),相應(yīng)的文件輸入將被用作錯誤的證明。
同時,如果模糊器發(fā)現(xiàn)當(dāng)前輸入有助于提高覆蓋率,它將被用于后續(xù)的突變。由于執(zhí)行是重復(fù)多次的,并由模糊器控制,因此適用于應(yīng)用分叉執(zhí)行模型,以減少加載目標(biāo)程序的共同序幕代碼段的開銷,并提高整體模糊性能。
III.方法
A.主要策略
圖4:Ori的概況 ?
一般來說,Ori是一個基于突變的覆蓋引導(dǎo)灰盒模糊器,這意味著它依賴于檢測目標(biāo)程序來收集執(zhí)行反饋來幫助模糊。然而,Ori有兩個關(guān)鍵特性使其不同于現(xiàn)有的模糊器。 ?
第一個特點是附加模式。當(dāng)我們使用Ori進行模糊測試時,模糊器被附加到被測進程上。換句話說,我們先啟動被測進程,然后運行模糊器與被測進程通信并進行模糊處理。這與以前的模糊器不同,在以前的模糊器中,模糊器負(fù)責(zé)啟動被測過程并管理被測過程的生命周期。圖4展示了這個功能的機制。
整個過程可以分成兩個步驟,即模糊化設(shè)置步驟和多重附加模糊化步驟。在模糊化設(shè)置步驟中,被檢測的目標(biāo)程序?qū)⒃谀承l件下分叉出一個模糊化服務(wù)器。模糊化服務(wù)器是從被檢測的原始進程中分叉出來的,它將循環(huán)等待傳入的模糊化請求。
設(shè)置成功后,我們可以運行一個或多個前端模糊器。前端模糊器將與模糊服務(wù)器通信,并發(fā)送附加請求。一旦模糊化服務(wù)器收到請求,它將分叉一個模糊化目標(biāo)進程,該進程與前端模糊化器一起完成所有其他模糊化流程。一般來說,附加模式消除了加載特定SOME/IP實現(xiàn)的序幕代碼段的冗余執(zhí)行。有了這個功能,Ori通過關(guān)注實際的協(xié)議邏輯來提高整體性能,同時也提供了調(diào)用多個模糊處理實例進行并行模糊處理的能力。 ?
第二個特點是Ori支持種子輸入的兩級變異。SOME/IP協(xié)議的數(shù)據(jù)包包含兩部分:主體和標(biāo)題。相應(yīng)地,Ori對不同的部分使用不同的變異算子。通過突變數(shù)據(jù)包的主體,Ori可以測試SOME/IP服務(wù)器的核心邏輯。通過突變數(shù)據(jù)包的標(biāo)題,Ori可以測試SOME/IP協(xié)議的實現(xiàn)。對于數(shù)據(jù)包的主體,Ori使用類似于AFL的隨機變異操作,如位/字節(jié)?ipping,替換/添加/刪除隨機塊等。對于數(shù)據(jù)包的標(biāo)題,Ori首先識別了不同字段,然后根據(jù)字段的類型進行突變。
?
圖5:Ori的詳細(xì)模糊工作流程 ?
值得注意的是,Ori不對ServiceID、ClientID、Protocol Version和Interface Version字段進行突變。這是因為突變這些字段無助于覆蓋測試目標(biāo)的關(guān)鍵邏輯。
例如,如果數(shù)據(jù)包的ServiceID字段被突變,不能與測試目標(biāo)提供的服務(wù)相匹配,那么數(shù)據(jù)包將被立即拒絕,而目標(biāo)的深層邏輯將不能被行使。有了這個功能,Ori可以生成能夠達到目標(biāo)程序深層邏輯的數(shù)據(jù)包,并且可以同時測試協(xié)議框架和上面的應(yīng)用程序。 ?
B.詳細(xì)工作流程
圖5顯示了Ori中一對前端模糊器和后端目標(biāo)的詳細(xì)模糊工作流程。它包含兩個階段:準(zhǔn)備階段和測試階段。 ?
在準(zhǔn)備階段,模糊器將建立與測試目標(biāo)的連接,并為測試準(zhǔn)備好環(huán)境。首先,我們啟動目標(biāo)服務(wù)器程序,它將運行到forkserver的狀態(tài)。然后我們就可以啟動模糊器了。模糊器將首先設(shè)置基本的模糊環(huán)境,如共享內(nèi)存、輸出目錄等。之后,模糊器將嘗試聯(lián)系目標(biāo)程序,以檢查其forkserver是否準(zhǔn)備好了。如果目標(biāo)程序已經(jīng)處于for server的狀態(tài),它將通知模糊器,模糊器將開始主模糊循環(huán)。準(zhǔn)備階段到此結(jié)束。 ?
在測試階段,模糊器將產(chǎn)生數(shù)據(jù)包來測試目標(biāo)服務(wù)器并處理測試結(jié)果。首先,模糊器將向forkserver發(fā)送一個請求,要求它分叉一個新的實例進行測試。這個測試實例從forkerver邏輯被探測到的地方開始執(zhí)行。
因此,測試實例可以跳過與測試無關(guān)的邏輯的執(zhí)行測試。測試實例開始執(zhí)行后,它將通知模糊器繼續(xù)進行。然后模糊器將通過結(jié)構(gòu)突變生成一個新的SOME/IP包,并將其發(fā)送給測試實例。收到數(shù)據(jù)包后,測試實例將處理它。變異的數(shù)據(jù)標(biāo)題有助于測試數(shù)據(jù)包解析組件,而變異的數(shù)據(jù)包主體有助于測試服務(wù)器的業(yè)務(wù)邏輯。
在測試實例執(zhí)行完畢后,分叉服務(wù)器將收集其退出狀態(tài)和執(zhí)行覆蓋率信息。然后將收集到的數(shù)據(jù)報告給模糊器。
Ori的測試結(jié)果處理與其他基于覆蓋的灰盒模糊器相似。如果該數(shù)據(jù)包導(dǎo)致測試實例崩潰,模糊器將保留它以便將來分析。如果該數(shù)據(jù)包能夠增加代碼覆蓋率,模糊器將保留它作為生成新測試案例的種子。這標(biāo)志著一輪測試的結(jié)束。如果用戶不停止模糊器或目標(biāo)服務(wù)器,整個過程將繼續(xù)進行新一輪的測試。
IV.實施和評估
A.實施
Ori由兩個關(guān)鍵部分組成:代碼檢測器和模糊器。代碼檢測器的實現(xiàn)是建立在AFL的LLVM模式之上的,它通過一個定制的llvm通道檢測目標(biāo)程序。雖然儀表器繼承了FL-clang-fast的邏輯來收集代碼覆蓋率信息,但它的forkserver注入部分被修改了,以方便適應(yīng)模糊測試的附加模式的邏輯。儀器的修改涉及到大約200行的C++代碼。Ori的模糊器是用大約400行Python代碼實現(xiàn)的,它依靠scapy庫來進行結(jié)構(gòu)突變。 ?
B.評估
測試目標(biāo)。我們用一個案例研究來評估Ori的兩個關(guān)鍵特征。目前,唯一開源的SOME/IP協(xié)議框架是GENIVI/vsomeip。因此,測試目標(biāo)是GENIVI/vsomeip的示例程序的修改版,目前所有的實驗都是基于這個程序。 ?
圖6:修改后的GENIVI/vsomeip示例程序 ?
這個程序是一個SOME/IP服務(wù)器,它接受來自客戶端的消息,并將 "Hello "和消息內(nèi)容作為反饋發(fā)送回來。在示例程序中添加了一個崩潰站點,這樣,如果客戶端發(fā)送的消息以小寫字母'a'開頭,它就會崩潰。示例程序的修改情況見圖6,第6-14行。 ?
附加模糊模式。在這個實驗中示了Ori所使用的附加模糊模式的優(yōu)勢。首先,可以運行一個例子程序的實例作為forkerver,并附加多個Ori模糊器的實例來并行模糊。然而,如果用AFL對示例程序進行模糊處理,就不能啟動第二個模糊器,因為第一個模糊器的測試實例占據(jù)了端口。通過比較,證明了并行模糊測試中附加模糊模式的優(yōu)勢。其次,在示例程序啟動主上下文后插入分叉服務(wù)器邏輯。延遲插入分叉服務(wù)器允許每個測試實例從消息處理部分開始執(zhí)行,并跳過服務(wù)器設(shè)置過程。
在實驗中,Ori可以在1-2秒內(nèi)完成一個測試案例的執(zhí)行,而AFL(沒有延遲的forkerver插入)至少需要4秒。結(jié)果表明,與現(xiàn)有的工具相比,Ori具有明顯的速度優(yōu)勢。 ? 結(jié)構(gòu)突變。在這個實驗中,展示了結(jié)構(gòu)突變的有效性。對于圖6中的舉例程序,Ori可以在隨機種子輸入的情況下,在1分鐘內(nèi)找到崩潰的原因。 ?
然而,AFL無法找到隨機種子輸入的崩潰。對Ori和AFL來說,正確地改變有效載荷(以小寫字母 "a "作為第一個字節(jié))是很容易的,但當(dāng)涉及到生成正確的標(biāo)題時,情況就不同了。
正如II-B節(jié)所介紹的,在SOME/IP協(xié)議中,需要一個帶有特定服務(wù)ID的有效數(shù)據(jù)標(biāo)題,以將數(shù)據(jù)包正確地傳送到一個特定的服務(wù)器。由于AFL幾乎不可能生成像SOME/IP數(shù)據(jù)包頭這樣的復(fù)雜結(jié)構(gòu),所以即使AFL能夠生成正確的有效載荷,也不能成功地將數(shù)據(jù)包傳遞給測試目標(biāo)。這表明,結(jié)構(gòu)突變可以極大地提高Ori的有效性。 ?
通過評估,我們可以得出結(jié)論,Ori可以通過附加模糊模式和結(jié)構(gòu)變異來有效地檢測SOME/IP服務(wù)中的漏洞,從而克服現(xiàn)有方法的局限性。
V.未來的工作
目前的工作是為汽車以太網(wǎng)協(xié)議構(gòu)建灰盒模糊器的早期嘗試。我們未來的工作包括:
1.模糊更多的現(xiàn)實目標(biāo)。目前的評估是基于GENIVI/vsomeip的實例程序,因為很少有其他開源的SOME/IP應(yīng)用程序可用。所以我們計劃從行業(yè)伙伴那里獲得更多的SOME/IP應(yīng)用,以便對Ori進行更全面的評估。
2.擴展Ori,以支持圖1中所示的更多汽車協(xié)議。從理論上講,附加的模糊模式和結(jié)構(gòu)突變可以應(yīng)用于其他協(xié)議。然而,仍然需要加強Ori設(shè)計的通用性,使其與不同特性的協(xié)議兼容。
3.提高Ori對多線程目標(biāo)的有效性。在實驗過程中發(fā)現(xiàn)GENIVI/vsomeip的服務(wù)器是以多線程運行的。在多線程程序上進行灰盒模糊處理會很麻煩,因為代碼覆蓋率反饋可能會被污染。我們計劃在未來將MUZZ中使用的技術(shù)與Ori進行整合。
VI.結(jié)論
本文介紹了Ori--一個用于汽車以太網(wǎng)中SOME/IP協(xié)議的灰盒模糊器。Ori有兩個創(chuàng)新特點:附加模糊模式和結(jié)構(gòu)突變。附加模糊模式使Ori能夠?qū)OME/IP服務(wù)進行并行模糊,從而確保高效性。結(jié)構(gòu)上的突變使Ori能夠生成具有適當(dāng)標(biāo)題的數(shù)據(jù)包,從而確保有效性。通過實驗表明Ori能夠勝任SOME/IP服務(wù)的漏洞檢測。
審核編輯:劉清
評論
查看更多