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