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