作者 |張昊暉上海控安可信軟件創(chuàng)新研究院工控網(wǎng)絡(luò)安全組
來(lái)源 |鑒源實(shí)驗(yàn)室
社群 |添加微信號(hào)“TICPShanghai”加入“上海控安51fusa安全社區(qū)”
01
引 言
隨著汽車(chē)行業(yè)對(duì)于數(shù)據(jù)通信的需求不斷增加,SOME/IP作為支持汽車(chē)以太網(wǎng)進(jìn)程和設(shè)備間通信的一種通信協(xié)議應(yīng)運(yùn)而生。根據(jù)研究[1]表明,第一代使用SOME/IP的汽車(chē)以太網(wǎng)包含了幾個(gè)交換機(jī)和少量以太網(wǎng)ECU,每個(gè)ECU提供了十余種服務(wù)。SOME/IP具有輕量化、高效、以接收方的需求為主導(dǎo)的特點(diǎn),并且能夠提供過(guò)程調(diào)用和事件通知,逐漸被多種汽車(chē)設(shè)備所使用。然而,正是由于其被廣泛使用和其重要性,SOME/IP協(xié)議也成為了潛在的攻擊目標(biāo)。本文將介紹SOME/IP協(xié)議的基本原理,并探討可能的攻擊方式和防范措施。
02
SOME/IP協(xié)議
可擴(kuò)展的面向服務(wù)的IP中間件(Scalable service-Oriented MiddlewarE over IP,簡(jiǎn)稱(chēng)SOME/IP)[2]是一種中間件規(guī)范,專(zhuān)門(mén)用于傳輸和序列化控制信號(hào),特別是在汽車(chē)應(yīng)用場(chǎng)景中。SOME/IP建立在(汽車(chē))TCP/IP或UDP/IP協(xié)議棧之上,為應(yīng)用程序提供了一個(gè)抽象的面向服務(wù)的接口(參見(jiàn)圖1)。因此,應(yīng)用程序無(wú)需處理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)程過(guò)程調(diào)用(Remote Procedure Call,RPC)和對(duì)進(jìn)程數(shù)據(jù)的訪問(wèn)。SD使服務(wù)器ECU能夠發(fā)布服務(wù),并使客戶端ECU能夠訂閱車(chē)輛網(wǎng)絡(luò)中的服務(wù),這些服務(wù)由服務(wù)ID標(biāo)識(shí),并可根據(jù)需要附加選項(xiàng),例如終端選項(xiàng)(即IP地址、傳輸協(xié)議(UDP/TCP)和端口號(hào))。網(wǎng)絡(luò)中可以存在多個(gè)具有相同服務(wù)ID的服務(wù)實(shí)例,并通過(guò)不同的實(shí)例ID進(jìn)行唯一標(biāo)識(shí)。可以使用RPC訪問(wèn)提供的服務(wù),并可以接收有關(guān)事件的通知。應(yīng)用程序可以使用set和get來(lái)訪問(wèn)進(jìn)程數(shù)據(jù)。
SOME/IP-SD用于定位服務(wù)實(shí)例、檢測(cè)服務(wù)實(shí)例是否正在運(yùn)行,并實(shí)現(xiàn)發(fā)布/訂閱處理[3]。為了提供服務(wù)實(shí)例,服務(wù)器會(huì)發(fā)送一個(gè)多播服務(wù)提供消息OfferService(Service ID,Instance ID),可選擇包括上述終端選項(xiàng)在內(nèi)的其他選項(xiàng)。服務(wù)器可以通過(guò)發(fā)送StopOffer(Service ID,Instance ID)消息來(lái)停止提供服務(wù)實(shí)例。如果客戶端未收到具有所需服務(wù)ID的合適服務(wù)提供消息,則可以主動(dòng)發(fā)送FindService(Service ID,Instance ID)消息,服務(wù)器可以回答并提供所請(qǐng)求的服務(wù)。實(shí)例ID可以設(shè)置為特定值,也可以設(shè)置為0xFFFF,以找到所有服務(wù)實(shí)例。發(fā)布/訂閱機(jī)制可用于客戶端需要從服務(wù)器獲取一組信號(hào),但又不想每次手動(dòng)請(qǐng)求該信息的情況。客戶端通過(guò)SubscribeEventgroup(Service ID,Instance ID)向事件組訂閱,并由服務(wù)器確認(rèn)SubscribeEventgroupACK(Service ID,Instance ID)。客戶端通過(guò)StopSubscribeEventgroup(Service ID,Instance ID)消息取消訂閱。在訂閱活動(dòng)期間,服務(wù)器會(huì)定期向客戶端發(fā)送事件消息。此外,SOME/IP為服務(wù)實(shí)例提供了負(fù)載平衡選項(xiàng)。服務(wù)器可以在其服務(wù)提供中設(shè)置優(yōu)先級(jí)和權(quán)重。客戶端應(yīng)選擇具有最高優(yōu)先級(jí)的服務(wù)。如果具有相同優(yōu)先級(jí)的多個(gè)服務(wù)實(shí)例,則應(yīng)基于服務(wù)實(shí)例的權(quán)重隨機(jī)選擇服務(wù)實(shí)例。SOME/IP協(xié)議定義了以下幾種主要的通信模式:
(1)請(qǐng)求-響應(yīng)方法(Request&Response Method):在請(qǐng)求-響應(yīng)方法下,一個(gè)模塊作為Client端在尋找所需服務(wù)時(shí)發(fā)現(xiàn)其正在有效生存時(shí)間內(nèi),發(fā)送一個(gè)請(qǐng)求消息,另一個(gè)提供該服務(wù)的Server端必須回復(fù)該請(qǐng)求消息。若請(qǐng)求消息存在差錯(cuò),會(huì)回復(fù)錯(cuò)誤信息給到Client端。Client端期望在發(fā)送請(qǐng)求后,接收到相應(yīng)的響應(yīng)消息。這種模式適用于需要請(qǐng)求和獲取特定數(shù)據(jù)或執(zhí)行特定操作的場(chǎng)景,如傳感器數(shù)據(jù)獲取、控制指令下發(fā)等。
圖 2 請(qǐng)求-響應(yīng)方法(Request&Response Method)
(2)請(qǐng)求-無(wú)響應(yīng)方法(Fire&Forget Method):在請(qǐng)求無(wú)響應(yīng)方法下,一個(gè)模塊作為Client端在尋找所需服務(wù)時(shí)發(fā)現(xiàn)其正在有效生存時(shí)間內(nèi),發(fā)送一個(gè)請(qǐng)求消息,另一個(gè)提供該服務(wù)的Server端無(wú)需回復(fù)該請(qǐng)求消息。即使請(qǐng)求消息存在差錯(cuò),也不會(huì)回復(fù)錯(cuò)誤信息。
圖 3 請(qǐng)求-無(wú)響應(yīng)方法(Fire&Forget Method)
(3)事件通知(Event):在事件通知模式下,作為Server端的模塊會(huì)對(duì)已經(jīng)訂閱其服務(wù)的Client端發(fā)送狀態(tài)值或者觸發(fā)事件的通知。這種模式適用于實(shí)時(shí)共享狀態(tài)信息和事件通知的場(chǎng)景,如交通事件發(fā)布、環(huán)境變化通知等。
圖 4 事件通知(Event)
(4)域值通知(Field):域值通知模式是對(duì)于Method和Event數(shù)據(jù)包的組合,它提供了3種通信流程:
① Notify:Notify報(bào)文一般會(huì)在Client訂閱服務(wù)之后,由Server端發(fā)送,用于通知域值。
圖 5 Notify
② Getter:Getter報(bào)文使用請(qǐng)求響應(yīng)方法的模式,當(dāng)Client端向Server端發(fā)送獲取域值的請(qǐng)求時(shí),Server端返回當(dāng)前域值。
圖 6 Getter
③ Setter:Setter報(bào)文使用請(qǐng)求響應(yīng)方法的模式,當(dāng)Client端向Server端發(fā)送設(shè)置域值的請(qǐng)求時(shí),Server端返回更新后的域值。
圖 7 Setter
這些通信模式為SOME/IP協(xié)議提供了靈活的通信方式,使得車(chē)輛內(nèi)部模塊和車(chē)輛與外部實(shí)體之間可以以適當(dāng)?shù)姆绞竭M(jìn)行通信和數(shù)據(jù)交換。通過(guò)選擇合適的通信模式,車(chē)輛系統(tǒng)可以實(shí)現(xiàn)高效的數(shù)據(jù)交換、實(shí)時(shí)的事件通知和靈活的方法調(diào)用,以滿足各種復(fù)雜的應(yīng)用需求。
03
SOME/IP攻擊
SOME/IP協(xié)議最經(jīng)常出現(xiàn)的攻擊類(lèi)型是中間人攻擊。中間人攻擊是攻擊者在受害兩方都未發(fā)現(xiàn)攻擊者身份的情況下實(shí)施數(shù)據(jù)竊聽(tīng)和篡改的攻擊類(lèi)型。在以太網(wǎng)環(huán)境下,可以通過(guò)與受害方同時(shí)連接同一個(gè)交換機(jī)達(dá)到中間人攻擊的效果。對(duì)于SOME/IP的通信,有以下3種不同的中間人攻擊方式[4]:
(1)服務(wù)提供上的復(fù)制攻擊
此類(lèi)攻擊的操作與重放攻擊類(lèi)似,但實(shí)現(xiàn)的環(huán)境是在中間人的環(huán)境下。圖8簡(jiǎn)單地展示了這種攻擊的實(shí)現(xiàn)方式:
首先客戶端、攻擊者和服務(wù)端均處在同一個(gè)交換機(jī)網(wǎng)絡(luò)下,互相都能接收到彼此的數(shù)據(jù)。接著服務(wù)端在啟動(dòng)服務(wù)并進(jìn)入到正式階段(Main Phase)后,會(huì)周期性地在這個(gè)交換機(jī)網(wǎng)絡(luò)中廣播自己提供的服務(wù),例如圖中所示服務(wù)端提供了0x1234和0x5678這2個(gè)服務(wù)ID的服務(wù),并讓客戶端和攻擊者都收到了這條廣播數(shù)據(jù)。此時(shí),采用復(fù)制攻擊的攻擊者會(huì)立刻復(fù)制這條廣播報(bào)文,修改IP地址和端點(diǎn)信息,偽造自己在這個(gè)交換機(jī)網(wǎng)絡(luò)中也提供同樣的服務(wù)。當(dāng)然因?yàn)楣粽咧荒茉赟OME/IP協(xié)議層面進(jìn)行復(fù)制攻擊,無(wú)法對(duì)下層通信進(jìn)行干預(yù),因而客戶端就會(huì)在短時(shí)間內(nèi)收到2條宣稱(chēng)自己具有0x1234和0x5678服務(wù)的廣播報(bào)文,然后可能會(huì)選擇攻擊者發(fā)送的這條廣播報(bào)文進(jìn)行回復(fù),即圖中的請(qǐng)求服務(wù)。一旦攻擊者收到客戶端的請(qǐng)求服務(wù),就會(huì)把這條報(bào)文帶有客戶端的身份信息修改為自己的身份信息,但請(qǐng)求服務(wù)內(nèi)容不變地發(fā)送到服務(wù)端。攻擊者再接著把服務(wù)端回復(fù)的服務(wù)內(nèi)容轉(zhuǎn)發(fā)給客戶端,這樣就完成了一次中間人轉(zhuǎn)發(fā)操作。并且對(duì)于服務(wù)端,攻擊者會(huì)被認(rèn)為是真正的客戶端,而對(duì)于客戶端會(huì)把攻擊者當(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ù)端建立了連接,不會(huì)再對(duì)攻擊者的廣播作出反應(yīng)。
②即使客戶端未與服務(wù)端建立連接,也不能保證客戶端選擇攻擊者的廣播報(bào)文發(fā)送請(qǐng)求,因?yàn)榉?wù)端永遠(yuǎn)比攻擊者先發(fā)出去原始報(bào)文。
③根據(jù)SOME/IP官方文檔,不可復(fù)用服務(wù)端提供的Instance ID,但還要根據(jù)客戶端能夠接受的Instance ID偽造Offer報(bào)文。
由于以上的問(wèn)題,一種基于復(fù)制攻擊的斷連攻擊被提出了,如圖9所示:
可以看到圖的下半部分與復(fù)制攻擊的后半部分一致,就是攻擊通過(guò)偽造提供服務(wù)的報(bào)文,讓客戶端與自己連接,完成客戶端與服務(wù)端之間的消息傳遞。但區(qū)別就在于服務(wù)端廣播提供服務(wù)報(bào)文時(shí),攻擊者會(huì)立刻向客戶端發(fā)送一條偽造成服務(wù)端身份的單播停止提供服務(wù)報(bào)文,同時(shí)再把自己偽造的服務(wù)廣播在這個(gè)網(wǎng)絡(luò)中。
與復(fù)制攻擊相比,斷連攻擊會(huì)讓客戶端斷絕與服務(wù)端建立連接的機(jī)會(huì),無(wú)論它是已經(jīng)與客戶端相連還是剛選擇了服務(wù)端提供的服務(wù)。偽造StopOffer可以幫助攻擊者穩(wěn)定地與客戶端建立連接。
斷連攻擊看似更加好用,實(shí)際也存在一些限制。停止提供服務(wù)的報(bào)文必須要通過(guò)單播的方式發(fā)送到客戶端手中,這是因?yàn)橐坏┓?wù)端收到了這條消息,它會(huì)認(rèn)為存在其他服務(wù)端提供相同的服務(wù),不會(huì)再提供重復(fù)服務(wù)。這樣就會(huì)導(dǎo)致中間人環(huán)境無(wú)法建立,因?yàn)榉?wù)端不會(huì)再對(duì)攻擊者轉(zhuǎn)發(fā)的請(qǐng)求進(jìn)行任何回復(fù)。由于單播這一限制條件,攻擊者必須知道對(duì)該服務(wù)感興趣的客戶端。換言之就是知道可能與服務(wù)端建立連接的客戶端的信息,這樣才能成功將單播的斷連報(bào)文發(fā)送到客戶端手中,達(dá)成后續(xù)目的。
圖 9 服務(wù)提供上的斷連攻擊
(3)發(fā)布訂閱上的攻擊
前2種攻擊在成功后,表現(xiàn)形式均為能夠正常轉(zhuǎn)發(fā)請(qǐng)求/回復(fù)數(shù)據(jù)。除了轉(zhuǎn)發(fā)請(qǐng)求或回復(fù)的數(shù)據(jù),也可以通過(guò)退訂的操作最終導(dǎo)致可以轉(zhuǎn)發(fā)事件信息。圖10清晰地展示了整個(gè)流程:
服務(wù)端還是按照慣例廣播自身提供的服務(wù),接著客戶端和攻擊者都訂閱了服務(wù)端的事件組,并收到了服務(wù)端的確認(rèn)幀,此時(shí)說(shuō)明服務(wù)端也記錄下了客戶端和攻擊者分別的斷端點(diǎn)信息。
然后攻擊者會(huì)通過(guò)上面2種服務(wù)提供上的攻擊的其中一種,讓客戶端信任自己具有它需要的服務(wù)事件組,客戶端就會(huì)訂閱攻擊者的事件組。攻擊者一收到訂閱報(bào)文,就會(huì)回復(fù)確認(rèn)幀,并立刻偽造一條包含客戶端端點(diǎn)信息的退訂事件組報(bào)文,讓服務(wù)端不再將事件信息發(fā)送給客戶端。而此時(shí),攻擊者與服務(wù)端之間的連接還存在,因此可以把服務(wù)端的事件更新信息轉(zhuǎn)發(fā)給客戶端,達(dá)到中間人攻擊的環(huán)境。
圖 10 發(fā)布訂閱上的攻擊
參考文獻(xiàn):
[1]Seyler, N. Navet, and L. Fejoz. 2015. Insights on the Configuration and Performances of SOME/IP Service Discovery. SAE Int. J. Passeng. Cars – Electron. Electr. Syst. 8 (04 2015), 124–129.
[2] AUTOSAR. 2018.Specification on SOME/IP Transport Protocol - CP Release 4.4.0.
[3] AUTOSAR. 2018.Specification of Service Discovery - CP Release 4.2.2.
[4] Daniel Zelle, Timm Lauser, Dustin Kern, Christoph Krau?, Analyzing and Securing SOME/IP Automotive Services with Formal and Practical Methods, ARES 21: Proceedings of the 16th International Conference on Availability, Reliability and SecurityAugust 2021, Article No.: 8 Pages 1–20
審核編輯 黃宇
-
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5441瀏覽量
172038 -
IP協(xié)議
+關(guān)注
關(guān)注
3文章
85瀏覽量
21678 -
ecu
+關(guān)注
關(guān)注
14文章
890瀏覽量
54582 -
Some
+關(guān)注
關(guān)注
0文章
3瀏覽量
6178
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論