01
引 言
隨著汽車行業(yè)對于數(shù)據(jù)通信的需求不斷增加,SOME/IP作為支持汽車以太網(wǎng)進程和設備間通信的一種通信協(xié)議應運而生。根據(jù)研究[1]表明,第一代使用SOME/IP的汽車以太網(wǎng)包含了幾個交換機和少量以太網(wǎng)ECU,每個ECU提供了十余種服務。SOME/IP具有輕量化、高效、以接收方的需求為主導的特點,并且能夠提供過程調(diào)用和事件通知,逐漸被多種汽車設備所使用。然而,正是由于其被廣泛使用和其重要性,SOME/IP協(xié)議也成為了潛在的攻擊目標。本文將介紹SOME/IP協(xié)議的基本原理,并探討可能的攻擊方式和防范措施。
02
SOME/IP協(xié)議
可擴展的面向服務的IP中間件(Scalable service-Oriented MiddlewarE over IP,簡稱SOME/IP)[2]是一種中間件規(guī)范,專門用于傳輸和序列化控制信號,特別是在汽車應用場景中。SOME/IP建立在(汽車)TCP/IP或UDP/IP協(xié)議棧之上,為應用程序提供了一個抽象的面向服務的接口(參見圖1)。因此,應用程序無需處理IP地址和端口,而是使用服務進行通信。SOME/IP的主要目標是實現(xiàn)靈活且?guī)捀咝У耐ㄐ拧?/p>
圖 1 SOME/IP架構
SOME/IP可以大致分為三個部分:服務發(fā)現(xiàn)(Service Discovery,SD)、遠程過程調(diào)用(Remote Procedure Call,RPC)和對進程數(shù)據(jù)的訪問。SD使服務器ECU能夠發(fā)布服務,并使客戶端ECU能夠訂閱車輛網(wǎng)絡中的服務,這些服務由服務ID標識,并可根據(jù)需要附加選項,例如終端選項(即IP地址、傳輸協(xié)議(UDP/TCP)和端口號)。網(wǎng)絡中可以存在多個具有相同服務ID的服務實例,并通過不同的實例ID進行唯一標識。可以使用RPC訪問提供的服務,并可以接收有關事件的通知。應用程序可以使用set和get來訪問進程數(shù)據(jù)。
SOME/IP-SD用于定位服務實例、檢測服務實例是否正在運行,并實現(xiàn)發(fā)布/訂閱處理[3]。為了提供服務實例,服務器會發(fā)送一個多播服務提供消息OfferService(Service ID,Instance ID),可選擇包括上述終端選項在內(nèi)的其他選項。服務器可以通過發(fā)送StopOffer(Service ID,Instance ID)消息來停止提供服務實例。如果客戶端未收到具有所需服務ID的合適服務提供消息,則可以主動發(fā)送FindService(Service ID,Instance ID)消息,服務器可以回答并提供所請求的服務。實例ID可以設置為特定值,也可以設置為0xFFFF,以找到所有服務實例。發(fā)布/訂閱機制可用于客戶端需要從服務器獲取一組信號,但又不想每次手動請求該信息的情況。客戶端通過SubscribeEventgroup(Service ID,Instance ID)向事件組訂閱,并由服務器確認SubscribeEventgroupACK(Service ID,Instance ID)??蛻舳送ㄟ^StopSubscribeEventgroup(Service ID,Instance ID)消息取消訂閱。在訂閱活動期間,服務器會定期向客戶端發(fā)送事件消息。此外,SOME/IP為服務實例提供了負載平衡選項。服務器可以在其服務提供中設置優(yōu)先級和權重。客戶端應選擇具有最高優(yōu)先級的服務。如果具有相同優(yōu)先級的多個服務實例,則應基于服務實例的權重隨機選擇服務實例。SOME/IP協(xié)議定義了以下幾種主要的通信模式:
(1)請求-響應方法(Request&Response Method):在請求-響應方法下,一個模塊作為Client端在尋找所需服務時發(fā)現(xiàn)其正在有效生存時間內(nèi),發(fā)送一個請求消息,另一個提供該服務的Server端必須回復該請求消息。若請求消息存在差錯,會回復錯誤信息給到Client端。Client端期望在發(fā)送請求后,接收到相應的響應消息。這種模式適用于需要請求和獲取特定數(shù)據(jù)或執(zhí)行特定操作的場景,如傳感器數(shù)據(jù)獲取、控制指令下發(fā)等。
圖 2 請求-響應方法(Request&Response Method)
(2)請求-無響應方法(Fire&Forget Method):在請求無響應方法下,一個模塊作為Client端在尋找所需服務時發(fā)現(xiàn)其正在有效生存時間內(nèi),發(fā)送一個請求消息,另一個提供該服務的Server端無需回復該請求消息。即使請求消息存在差錯,也不會回復錯誤信息。
圖 3 請求-無響應方法(Fire&Forget Method)
(3)事件通知(Event):在事件通知模式下,作為Server端的模塊會對已經(jīng)訂閱其服務的Client端發(fā)送狀態(tài)值或者觸發(fā)事件的通知。這種模式適用于實時共享狀態(tài)信息和事件通知的場景,如交通事件發(fā)布、環(huán)境變化通知等。
圖 4 事件通知(Event)
(4)域值通知(Field):域值通知模式是對于Method和Event數(shù)據(jù)包的組合,它提供了3種通信流程:
① Notify:Notify報文一般會在Client訂閱服務之后,由Server端發(fā)送,用于通知域值。
圖 5 Notify
② Getter:Getter報文使用請求響應方法的模式,當Client端向Server端發(fā)送獲取域值的請求時,Server端返回當前域值。
圖 6 Getter
③ Setter:Setter報文使用請求響應方法的模式,當Client端向Server端發(fā)送設置域值的請求時,Server端返回更新后的域值。
圖 7 Setter
這些通信模式為SOME/IP協(xié)議提供了靈活的通信方式,使得車輛內(nèi)部模塊和車輛與外部實體之間可以以適當?shù)姆绞竭M行通信和數(shù)據(jù)交換。通過選擇合適的通信模式,車輛系統(tǒng)可以實現(xiàn)高效的數(shù)據(jù)交換、實時的事件通知和靈活的方法調(diào)用,以滿足各種復雜的應用需求。
03
SOME/IP攻擊
SOME/IP協(xié)議最經(jīng)常出現(xiàn)的攻擊類型是中間人攻擊。中間人攻擊是攻擊者在受害兩方都未發(fā)現(xiàn)攻擊者身份的情況下實施數(shù)據(jù)竊聽和篡改的攻擊類型。在以太網(wǎng)環(huán)境下,可以通過與受害方同時連接同一個交換機達到中間人攻擊的效果。對于SOME/IP的通信,有以下3種不同的中間人攻擊方式[4]:
(1)服務提供上的復制攻擊
此類攻擊的操作與重放攻擊類似,但實現(xiàn)的環(huán)境是在中間人的環(huán)境下。圖8簡單地展示了這種攻擊的實現(xiàn)方式:
首先客戶端、攻擊者和服務端均處在同一個交換機網(wǎng)絡下,互相都能接收到彼此的數(shù)據(jù)。接著服務端在啟動服務并進入到正式階段(Main Phase)后,會周期性地在這個交換機網(wǎng)絡中廣播自己提供的服務,例如圖中所示服務端提供了0x1234和0x5678這2個服務ID的服務,并讓客戶端和攻擊者都收到了這條廣播數(shù)據(jù)。此時,采用復制攻擊的攻擊者會立刻復制這條廣播報文,修改IP地址和端點信息,偽造自己在這個交換機網(wǎng)絡中也提供同樣的服務。當然因為攻擊者只能在SOME/IP協(xié)議層面進行復制攻擊,無法對下層通信進行干預,因而客戶端就會在短時間內(nèi)收到2條宣稱自己具有0x1234和0x5678服務的廣播報文,然后可能會選擇攻擊者發(fā)送的這條廣播報文進行回復,即圖中的請求服務。一旦攻擊者收到客戶端的請求服務,就會把這條報文帶有客戶端的身份信息修改為自己的身份信息,但請求服務內(nèi)容不變地發(fā)送到服務端。攻擊者再接著把服務端回復的服務內(nèi)容轉(zhuǎn)發(fā)給客戶端,這樣就完成了一次中間人轉(zhuǎn)發(fā)操作。并且對于服務端,攻擊者會被認為是真正的客戶端,而對于客戶端會把攻擊者當成提供服務的節(jié)點。在成功進入這個中間人環(huán)境后,攻擊者可以進行下一步深層次的攻擊。
圖 8 服務提供上的復制攻擊
(2)服務提供上的斷連攻擊
第一種復制攻擊看似很容易能進入到中間人的環(huán)境中,但具有一定的局限性:
① 客戶端可能已經(jīng)與服務端建立了連接,不會再對攻擊者的廣播作出反應。
② 即使客戶端未與服務端建立連接,也不能保證客戶端選擇攻擊者的廣播報文發(fā)送請求,因為服務端永遠比攻擊者先發(fā)出去原始報文。
③ 根據(jù)SOME/IP官方文檔,不可復用服務端提供的Instance ID,但還要根據(jù)客戶端能夠接受的Instance ID偽造Offer報文。
由于以上的問題,一種基于復制攻擊的斷連攻擊被提出了,如圖9所示:
可以看到圖的下半部分與復制攻擊的后半部分一致,就是攻擊通過偽造提供服務的報文,讓客戶端與自己連接,完成客戶端與服務端之間的消息傳遞。但區(qū)別就在于服務端廣播提供服務報文時,攻擊者會立刻向客戶端發(fā)送一條偽造成服務端身份的單播停止提供服務報文,同時再把自己偽造的服務廣播在這個網(wǎng)絡中。
與復制攻擊相比,斷連攻擊會讓客戶端斷絕與服務端建立連接的機會,無論它是已經(jīng)與客戶端相連還是剛選擇了服務端提供的服務。偽造StopOffer可以幫助攻擊者穩(wěn)定地與客戶端建立連接。
斷連攻擊看似更加好用,實際也存在一些限制。停止提供服務的報文必須要通過單播的方式發(fā)送到客戶端手中,這是因為一旦服務端收到了這條消息,它會認為存在其他服務端提供相同的服務,不會再提供重復服務。這樣就會導致中間人環(huán)境無法建立,因為服務端不會再對攻擊者轉(zhuǎn)發(fā)的請求進行任何回復。由于單播這一限制條件,攻擊者必須知道對該服務感興趣的客戶端。換言之就是知道可能與服務端建立連接的客戶端的信息,這樣才能成功將單播的斷連報文發(fā)送到客戶端手中,達成后續(xù)目的。
圖 9 服務提供上的斷連攻擊
(3)發(fā)布訂閱上的攻擊
前2種攻擊在成功后,表現(xiàn)形式均為能夠正常轉(zhuǎn)發(fā)請求/回復數(shù)據(jù)。除了轉(zhuǎn)發(fā)請求或回復的數(shù)據(jù),也可以通過退訂的操作最終導致可以轉(zhuǎn)發(fā)事件信息。圖10清晰地展示了整個流程:
服務端還是按照慣例廣播自身提供的服務,接著客戶端和攻擊者都訂閱了服務端的事件組,并收到了服務端的確認幀,此時說明服務端也記錄下了客戶端和攻擊者分別的斷端點信息。
然后攻擊者會通過上面2種服務提供上的攻擊的其中一種,讓客戶端信任自己具有它需要的服務事件組,客戶端就會訂閱攻擊者的事件組。攻擊者一收到訂閱報文,就會回復確認幀,并立刻偽造一條包含客戶端端點信息的退訂事件組報文,讓服務端不再將事件信息發(fā)送給客戶端。而此時,攻擊者與服務端之間的連接還存在,因此可以把服務端的事件更新信息轉(zhuǎn)發(fā)給客戶端,達到中間人攻擊的環(huán)境。
圖 10 發(fā)布訂閱上的攻擊
編輯:黃飛
?
評論