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