安全视角下的CAN协议分析
大家好,又見面了,我是你們的朋友風君子。
目錄
相關背景
CAN節點介紹
CAN幀結構介紹
CAN總線攻擊面分析
CAN總線安全缺陷
基于ID的仲裁機制
安全缺陷
針對CAN總線的攻擊方式[2]
參考文章
相關背景
控制器局域網(CAN bus)由羅伯特·博世公司于1983年開發。該協議于1986年美國密歇根州底特律市舉行的國際汽車工程師學會(SAE)會議上正式發表。第一個CAN控制芯片,由英特爾和飛利浦生產,并且于1987年發布。 世界上第一臺裝載了基于CAN的多重線系統的汽車是1991年推出的梅賽德斯-奔馳 W140。[1]
CAN節點介紹
連接到CAN總線上的單元被稱為CAN節點,所有連接到同一個CAN總線上的節點同CAN總線一起組成了CAN網絡。CAN節點一般由以下幾個模塊組成:
1)中央處理器、微處理器或主處理器
處理器對收發到的消息進行解析和處理,類似于CAN節點的大腦,經由該大腦的分析之后將指令下發給傳感器、驅動器和控制設備。
2)CAN控制器,用于收發消息的控制模塊
接收:CAN控制器將從總線上串行接收的字節流,直到整個消息接收完畢,然后將消息發送給處理器進行分析處理。
發送:主處理器發送信息到CAN控制器,之后當總線空閑時將信息以比特流的方式串行發送至總線。
3)收發器,由ISO11898-2/3標準定義
接收:把數據流從CAN總線層轉換成CAN控制器可以使用的標準。
傳輸:把來自CAN控制器的數據流轉換至CAN總線層。
CAN總線上的每個節點都能夠發送和接收信息,但不能夠同時進行。 一個消息或幀主要包括標識符(ID)、CRC、ACK等字段。ID表示信息的優先級,最多八個數據字節。消息采用不歸零(NRZ)格式串行傳送到CAN總線,并且可被所有節點接收。
CAN節點示意圖(圖片來自維基百科)
被CAN網絡連接的設備通常是傳感器,驅動器和其他控制設備。 這些設備通過一個中央處理器、一個CAN控制器,和一個CAN接收器連接至總線。
CAN幀結構介紹
CAN節點在CAN總線上以幀結構發送CAN消息。CAN幀結構,包括幀起始標志SOF、幀結束標志EOF、仲裁字段、控制字段、數據字段、CRC校驗字段ACK字段七個組成部分。
CAN幀格式(圖片來自維基百科)
CAN總線有四種不同的幀類型,分別是數據幀、遠程幀、錯誤幀和過載幀。數據幀用來傳送數據,遠程幀通過特殊的Identifier請求指定消息,當節點檢測到錯誤時會發送一個錯誤幀,過載幀用來在數據幀和遠程幀之間設置延遲。CAN幀格式各個字段解釋如下:
CAN幀各字段解釋(表格來自維基百科)
CAN總線攻擊面分析
CAN總線攻擊面包括遠程攻擊面和物理接觸攻擊面兩個大的方面,其中遠程攻擊面有遠程信息處理單元(TBOX,或5G模塊)、車載信息娛樂系統(HU)、藍牙模塊、WIFI、遙控鑰匙和遠程診斷接口等,物理接觸攻擊面主要為OBD-II診斷端口和各類傳感器。
CAN總線攻擊面
(該圖片及“針對CAN的攻擊”一節的圖片來源:Security Issues with In-Vehicle Networks, and Enhanced Countermeasures Based on Blockchain)
CAN總線安全缺陷
基于ID的仲裁機制
CAN幀沒有標識發送者和接收者,CAN協議使用一種叫“帶有沖突檢測的載波偵聽多路訪問”機制進行仲裁。當多個節點同時發送消息時,ID最小的節點擁有最高的優先級。當任意一個節點發送控制位時,其他節點均會讀取控制位,無論控制位的值是多少。當一個節點檢測到更高優先級的數據幀時,它將停止發送。
我們以兩個不同ID的節點簡單介紹以下仲裁機制生效的方式。假設在同一個CAN總線上存在節點15和節點16,兩個節點在CAN總線空閑時同時搶占總線,它們即將發送的幀數據如下表所示:
(表格數據來自維基百科)
Node 15和Node 16在同一時間想要發送數據,兩個節點分別發送最高的位,一次發送一位,使用“線與”機制判斷,0為顯性,1為隱性,前面6個比特兩個節點都發送0,接收到0;第七比特位,Node 15發送0接收0,Node 16發送1接收0,Node 15勝出。
安全缺陷
針對這種仲裁機制,大家很容易就能想到攻擊者可以偽造高優先級的報文,頻繁地向CAN總線上發送,導致CAN總線上合法節點無法正常發送報文,即拒絕服務攻擊。究其原因,CAN協議沒有標識發送者和接收者的機制,也沒有額外的認證手段;此外,在CAN總線上傳輸的數據的機密性也無法得到保證。
針對CAN總線的攻擊方式[2]
由于CAN總線沒有提供認證機制和保密性機制,攻擊者可以對CAN總線發起DOS攻擊、Fuzzy攻擊、嗅探與重放攻擊以及節點偽造等等。
針對CAN總線的攻擊方式
針對沒有認證機制的缺陷,攻擊者可以以高頻率的方式頻繁發送最高優先級的消息:
DOS攻擊示意圖
同樣地,攻擊者可以使用Fuzzy的方式隨機注入消息,測試CAN總線和節點是否存在邏輯漏洞和內存相關的安全缺陷:
Fuzz攻擊示意圖
針對缺少保密性和認證的缺陷,攻擊者可以先嗅探CAN總線,然后對消息進行重放,通過這種方式可以實現多種針對車輛控制系統的操作:
嗅探與重放攻擊示意圖
節點偽造攻擊也同樣適用于CAN總線,因為總線沒有認證節點身份的機制,攻擊者可以通過物理接觸的方式添加任意節點:
節點偽造攻擊示意圖
參考文章
[1]. 來自維基百科的介紹https://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%99%A8%E5%8D%80%E5%9F%9F%E7%B6%B2%E8%B7%AFhttps://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%99%A8%E5%8D%80%E5%9F%9F%E7%B6%B2%E8%B7%AF
[2].Security Issues with In-Vehicle Networks, and Enhanced Countermeasures Based on Blockchain
N Khatri,R Shrestha,SY Nam– Electronics, 2021 – mdpi.com
總結
以上是生活随笔為你收集整理的安全视角下的CAN协议分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pedestrian Identific
- 下一篇: Pedestrian Identific