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














評論