鑒源實驗室丨汽車網絡安全攻擊實例解析(二)

作者 |?田錚?上海控安可信軟件創新研究院項目經理

來源 |?鑒源實驗室

社群 |?添加微信號“TICPShanghai”加入“上海控安51fusa安全社區”

引言:汽車信息安全事件頻發使得汽車行業安全態勢愈發緊張。這些汽車網絡安全攻擊事件,輕則給企業產品發布及產品口碑造成影響,重則導致大范圍的汽車召回或股價受損,造成的經濟損失和安全代價不可估量。本文則選取典型的智能網聯汽車網絡安全攻擊實例展開詳細介紹。

01

汽車信息安全威脅

隨著汽車不斷向智能化、網聯化、電動化、自動化的發展,軟件定義汽車的趨勢日益顯著。目前智能網聯汽車關鍵代碼規模提升了10-100倍,代碼漏洞呈指數級增長,同時汽車電子控制單元(ECU)的數量和車內連通性不斷增長,導致汽車受到信息安全攻擊的風險大大增加。

近年來頻發的汽車信息安全事件加劇了社會各界對于智能汽車發展前景的擔憂。比如2015年美國黑帽大會,研究人員通過車載娛樂系統發動偽裝攻擊,成功入侵Jeep Cherokee遠程獲取汽車的關鍵功能操作權限 [1]。這次事件直接導致克萊斯勒公司在全球召回140萬輛汽車,也促使汽車工業界更加嚴肅看待智能汽車面臨的信息安全風險。

在此之后,汽車行業積極應對信息安全挑戰,但搭載了先進信息通信技術的新款智能網聯汽車同樣無法完全回避網絡攻擊的威脅。例如,騰訊科恩實驗室分別在2016年[2]、2017年[3]兩次攻擊特斯拉實現對車輛的無物理接觸遠程攻擊,利用內核、瀏覽器、MCU固件、UDS協議及OTA更新過程中的多個高危安全漏洞,攻入到特斯拉汽車的CID、IC、網關以及自動駕駛模塊,隨后將其發現的安全漏洞交與特斯拉。2019年[4-5],騰訊科恩實驗室在多款寶馬自動駕駛汽車上展示了利用車載信息娛樂系統和車載信息通信終端的漏洞遠程無線入侵汽車,并進一步利用中央網關的安全缺陷實現向內部核心CAN總線注入惡意消息,獲取了底層安全關鍵車內網絡的控制權。2020年[6],360 Sky-Go團隊針對梅賽德斯奔馳的車載娛樂主機、車載通訊模塊、車聯網通信協議及后端服務等聯網模塊,發現19個安全漏洞并利用漏洞形成攻擊鏈路,預計影響200余萬輛梅賽德斯奔馳汽車。類似這樣的“白帽黑客”式策略一直在汽車安全業內上演,以尋找、提交汽車的安全漏洞甚至修復漏洞。

02

攻擊案例分析

2.1 攻擊安利介紹

2016 年[2],科恩實驗室成功利用多個高危安全漏洞對特斯拉實施了無物理接觸遠程攻擊,實現了對特斯拉駐車狀態下汽車天窗、轉向燈、座椅、顯示器、門鎖系統的遠程控制,以及行駛狀態下對雨刷、后備箱、剎車系統的遠程控制。科恩實驗室是通過無線(Wi-Fi/蜂窩)進入,破壞許多車載系統,如 CID(Center Information Display,中控顯示系統)、IC(Instrument Cluster,儀表組) 、Parrot(無線及藍牙模塊)和網關等,然后將惡意 CAN 消息注入 CAN 總線。這是全球范圍內第一次通過安全漏洞成功無物理接觸遠程攻入特斯拉并實現任意車身和行車控制。

2.2 案例分析

2.2.1 研究對象

科恩實驗室成功在特斯拉Model S P85 和 P75 上完成了測試,對應的車型及版本信息如下圖1和表1所示。

8421.png

圖1 研究對象—Tesla Model S

8422.png

表1 測試車輛版本信息

2.2.2 攻擊步驟解析

1)攻擊瀏覽器

在攻擊開始前,首先需要確定攻擊面。每輛特斯拉汽車中都有車輛提供的Wi-Fi熱點,很多用戶會將SSID的信息保存在車上以便用于自動連接。如果偽造這個Wi-Fi熱點,并將QtCarBrowser的流量重定向到攻擊者的域名,即可實現遠程攻擊特斯拉汽車。此外,當在蜂窩模式下,通過建立精心設計的域名,網絡釣魚和用戶輸入錯誤也會導致遠程觸發瀏覽器漏洞,實現在沒有物理訪問的情況下遠程交付漏洞利用。

通過特斯拉瀏覽器的用戶代理可推斷出QtWebkit的版本在2.2.x,該版本的QtWebkit存在許多漏洞。研究者獲取特斯拉CID的QtCarBrowser二進制文件后,通過利用瀏覽器的這兩個漏洞來獲得特斯拉CID的shell,從而實現任意代碼執行。

第一個漏洞存在于函數JSArray::sort()中。這個函數將在JavaScript代碼中調用數組的sort()方法函數時被調用。存在漏洞的函數代碼片段如圖2所示,如果compareFunction為JSArray::shiftCount(),則m_vector的長度將被改變,并且整個m_vector結構將被轉移到另一個地方。然而,局部變量指針存儲仍然指向舊位置,導致內存損壞。當非移位數組調用 sort() 觸發此問題時,本地指針存儲引用的變量映射始終與新存儲結構的變量 m_length 重疊,導致崩潰。通過利用JSArray::sort()中的漏洞,可獲取JSCell地址。

8423.png

圖2 易受攻擊的函數代碼片段

第二個漏洞則是由科恩實驗室發現的CVE-2011-3928,可用于內存泄漏。如圖3所示,若分配多個 Element 結構,在static_cast后,HTMLInputElement的成員m_data將與Element的指針m_next重疊。此外,將第二個和第三個Element結構作為子元素插入到同一標簽中,m_next和m_data都指向第三個Element結構。由于m_data指向StringImpl結構,且該StringImpl結構與 Element結構重疊。StringImpl結構體的成員m_data始終是固定值1,StringImpl結構體的m_length始終是一個足夠大的指針,足以讀取整個內存。

8424.png

圖3 CVE-2011-3928中的漏洞

2)本地權限升級

在基于瀏覽器攻擊獲得遠程shell后,仍無法獲得任意權限,這就需要另一個漏洞來從AppArmor中逃脫,并獲得比瀏覽器進程上下文更高的權限。研究者發現,特斯拉上仍存在著名的ARM Linux漏洞CVE-2013-6282(即:內核API中缺少訪問檢查)。研究者利用該漏洞,首先修補了setresuid()系統調用以獲得root權限,然后調用reset_security_ops()來禁用AppArmor,實現了在內核上下文中獲得任意讀/寫權限。

3)未經授權訪問嵌入式系統

在特斯拉Model S上除了CID還有三個更重要的獨立嵌入式系統,即IC, Parrot和Gateway,如圖4所示。由于網絡設計上的缺陷和缺乏強大的密碼保護,研究者可通過遠程攻擊獲得這三個系統的root訪問權限。

8425.png

圖4 車載網絡的重要設備

·?IC

在 CID 中獲得 root 權限后,研究者可在沒有任何密碼的情況下通過“ssh root@ic”的命令獲取 IC 上的 root 訪問權限,并通過SSH登錄IC。

此外可實現 CID 和 IC 間的相互訪問。CID包含一個密鑰輪換方案,每24小時從母艦接收用戶的隨機新令牌。CID 會以明文形式在 IC 的文件系統中設置密鑰,這意味著即使只能訪問 IC,也可以SSH到CID 并獲得root權限。

·?Parrot

Parrot模塊是一個第三方模塊,型號是FC6050W,它集成了無線及藍牙功能,可通過USB協議與CID相連。通過掃描Parrot上的開放端口,研究者發現端口23為Telnet打開。一個重要漏洞在于Telnet是匿名的,研究者可通過“nc parrot 23”的簡單命令來訪問和控制Parrot模塊。

·?Gateway

Gateway看起來比IC和Parot安全得多。研究者首先利用二進制文件gw-diag在端口23上喚醒Gateway的后門,找到Gateway的shell 入口。然后,研究者通過逆向固件來獲得其中的token,獲得Gateway的訪問權限。

4)ECU編程

通過拆卸CID單元,研究者發現了與網關ECU 相連的SD卡中存在一些調試和升級相關的日志文件。這些文件中描述了整個升級的詳細過程,包括將十六進制文件發送到ECU,配置繼電器開關和其他重要步驟,可通過拆解文件查看到重要的內部信息。

對于更新軟件來說,整個更新由在內存地址0x40006AE4位置的函數控制。它將首先對文件進行安全檢查并設置其工作模式,以確保整個汽車在更新過程中保持物理安全。然后繞過完整性檢查,并將固件刷寫到網關,成功將定制的代碼編程到ECU中,具體操作步驟如下:

①??解壓縮release.tgz文件,確保校驗和值滿足要求。

②??檢查壓縮文件中是否存在manifest文件,并從中獲得該固件包中的版本信息。

③??處理程序中每個“.Hex”文件。將十六進制文件轉換為二進制流,并使用UDS協議發送固件。目標芯片上的引導加載程序需要將十六進制文件寫入flash,并在每次啟動時檢查應用程序是否有效。最后檢查固件是否已發送并編程到目標ECU。

? 處理完所有這些文件后,創建一個日志,并重新啟動。

5)網關逆向工程和攻擊

在網關上運行的許多重要任務存在漏洞,這些任務幾乎可與CAN總線上的ECU進行任何類型的通信。研究者可隨時注入任何 CAN 消息,并使用補丁來阻止一些必要的 CAN 信號,實現車輛的車身控制,具體攻擊過程包括:

①??網關將20100和20101端口的UDP廣播傳輸到CAN總線上,研究者可通過偽造UDP信號來實現門鎖系統的控制。

②??研究者可通過將診斷功能0x01替換為診斷功能0x04,并注入CAN消息,將其發送到ID為0x45的PT-CAN總線,實現在汽車運行或停止時打開燈的操作。

③??研究者定位到固件中存儲的結構體后,通過更改固件中的目標ID來阻止一些重要消息(例如BDY CAN上0x218的ID),實現在汽車行駛狀態時打開后備箱或禁用自動鎖定功能。

6)攻擊UDS/CAN總線

統一診斷服務 (UDS) 已編入 ISO-14229 中,并允許診斷控制車載電子控制單元 (ECU) 上的功能。研究者通過將電子穩定程序(ESP)設置為低速診斷編程會話,利用Bash shell 腳本通過網關注入 UDS 數據幀并低速禁用 ESP ECU,最終導致CAN-CH 總線上沒有任何車速相關的CAN消息,并且汽車高速行駛時IC的實時速度值無法更新。此外,車輛會顯示有關防抱死制動系統 (ABS) 的警報信息,引發轉向和制動失靈的安全問題。

8426.png

圖5?科恩實驗室制作的CAN控制器

03

總 結

本文介紹了科恩實驗室在實現特斯拉Model S遠程控制的研究中所涉及的漏洞和相關技術細節。此次安全攻擊事件,是首例利用CAN總線進行遠程攻擊,從而對特斯拉汽車停車和駕駛模式下進行遠程控制的典型案例。最終,科恩實驗室將研究報告及漏洞交予特斯拉,特斯拉在10天內做出回應,并利用其OTA 機制進行了瀏覽器、內核和ECU固件等方面的漏洞修復和安全更新,將代碼簽名保護引入了特斯拉汽車以保護車載系統。

參考文獻:

[1] Charlie Miller,Chris Valasek.Remote exploitation of an unaltered passenger vehicle[C]. Black Hat USA,2015.

[2] Keen Security Lab of Tencent. Free-fall:hacking Tesla from wireless to CAN bus [C]. Black Hat USA,2016.

[3] Keen Security Lab of Tencent. Over-the-air: how we remotely compromised the gateway,BCM,and autopilot ECUs of Tesla cars[C]. Black Hat USA,2017.

[4]Cai Zhiqiang , Wang Aohui , Zhang Wenkai , Gruffke M ,Schweppe H . 0-days & Mitigations: Roadways to Exploit and Secure Connected BMW Cars[C]. Black Hat USA,2019.

[5] Keen Security Lab of Tencent. Experimental Security Assessment of BMW Cars: A Summary Report[EB/OL]. https://keenlab.tencent.com/en/whitepapers/Experimental_Security_Assessment_of_BMW_Cars_by_KeenLab.pdf,2018.

[6] 360 Sky-Go group. Security Research Report on Mercedes-Benz Cars [EB/OL]. https://skygo.360.net/archive/Security-Research-Report-on-Mercedes-Benz-Cars-en.pdf,2020.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35079.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35079.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35079.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高效數據傳輸:輕松上手將Kafka實時數據接入CnosDB

本篇我們將主要介紹如何在 Ubuntu 22.04.2 LTS 環境下,實現一個KafkaTelegrafCnosDB 同步實時獲取流數據并存儲的方案。在本次操作中,CnosDB 版本是2.3.0,Kafka 版本是2.5.1,Telegraf 版本是1.27.1 隨著越來越多的應用程序架構轉…

無涯教程-Perl - redo函數

描述 此函數將重新啟動當前循環,而不會強制判斷控制語句。塊中不再執行任何語句。如果存在繼續塊,將不會執行。如果指定了LABEL,則在LABEL標識的循環開始時重新開始執行。 語法 以下是此函數的簡單語法- redo LABELredo返回值 此函數不返回任何值。 例 以下是顯示其基本…

用友時空KSOA SQL注入漏洞復現(HW0day)

0x01 產品簡介 用友時空KSOA是建立在SOA理念指導下研發的新一代產品,是根據流通企業最前沿的I需求推出的統一的IT基礎架構,它可以讓流通企業各個時期建立的IT系統之間彼此輕松對話,幫助流通企業保護原有的IT投資,簡化IT管理&#…

以商業大數據技術助力數據合規流通體系建立,合合信息參編《數據經紀從業人員評價規范》團標

經國務院批準,由北京市人民政府、國家發展和改革委員會、工業和信息化部、商務部、國家互聯網信息辦公室、中國科學技術協會共同主辦的2023 全球數字經濟大會于近期隆重召開。由數交數據經紀(深圳)有限公司為主要發起單位,合合信息…

深度剖析堆棧指針

為什么打印root的值與&root->value的值是一樣的呢 測試結果: *號一個變量到底取出來的是什么? 以前我寫過一句話,就是說,如果看到一個*變量,那就是直逼這個變量所保存的內存地址,然后取出里面保存的…

Skeleton-Aware Networks for Deep Motion Retargeting

Skeleton-Aware Networks for Deep Motion Retargeting解析 摘要1. 簡介2. Related Work2.1 運動重定向(Motion Retargeting)2.2 Neural Motion Processing 3. 概述(Overview)4. 骨骼感知深度運動處理4.1 運動表征4.2 骨架卷積4.3…

Spring Boot + Vue3前后端分離實戰wiki知識庫系統<十二>--用戶管理單點登錄開發一

目標: 在上一次Spring Boot Vue3前后端分離實戰wiki知識庫系統<十一>--文檔管理功能開發三我們已經完成了文檔管理的功能模塊開發,接下來則開啟新模塊的學習---用戶登錄,這塊還是有不少知識點值得學習的,…

指針與引用:C語言中的內存魔法

開始本篇文章之前先推薦一個好用的學習工具,AIRIght,借助于AI助手工具,學習事半功倍。歡迎訪問:http://airight.fun/。 也把我學習過程中搜集的資料分享給大家,希望可以幫助大家少走彎路,鏈接:h…

機器人CPP編程基礎-02變量Variables

機器人CPP編程基礎-01第一個程序Hello World 基礎代碼都可以借助人工智能工具進行學習。 C #include<iostream>using namespace std;main() {//Declaring an integer type variable A, allocates 4 bytes of memory.int A4;cout<<A <<endl;//Prints the a…

Matlab繪制圓形(rectangle函數、viscircles函數和圓的參數方程)

基于matlab繪制圓形 一、rectangle函數 對于繪制圓心坐標為&#xff08;x&#xff0c;y&#xff09;半徑為r的圓形&#xff0c;函數為&#xff1a; x0; y0; r1; rectangle(Position, [x-r,y-r,2*r,2*r], Curvature, [1 1],EdgeColor, r); axis equalEdgeColor表示顏色 二、…

多版本node環境搭建切換管理NVM

Node.js NVM 全名 Node Version Management 一、Node 模塊對象 參考博客 Node 模塊對象 二、Node 多版本管理NVM &#xff08;1&#xff09;參考 Node 多版本管理 &#xff08;2&#xff09;github上NVM工具 nvm-windows mirrors / coreybutler / nvm-windows GitCode…

消息隊列(12) - 定義服務器類

目錄 前言設計思想 前言 之前,我們寫了通信協議的具體設計,接下來我們設計服務器類 設計思想 我們先只考慮一個虛擬主機的情況下, 在一個虛擬主機的情況下,我們需要有一個session會話來幫助我們存儲信息,并且既然是網絡通信,那么socket關鍵字肯定也必不可少,我們在引入一個線…

解決lldb調試時可能出現的personality set failed: Function not implemented

最近在嘗試使用Visual Studio 2022遠程連接Linux進行C/C的開發&#xff0c;由于CentOS風波不斷&#xff0c;所以現在的開發基本上都是使用ubuntu了&#xff0c;但是目前VS2022有一些BUG&#xff0c;就是遠程調試時&#xff0c;如果目標系統是ubuntu則會出現啟動調試器很慢的問題…

mysql高并發下主鍵自增打來的問題

在一般情況下&#xff0c;在新增領域對象后&#xff0c;都需要獲取對應的主鍵值。使用應用層來維護主鍵&#xff0c;在一定程度上有利于程序性能的優化和應用移植性的提高。在采用數據庫自增主鍵的方案里&#xff0c;如果JDBC驅動不能綁定新增記錄對應的主鍵&#xff0c;就需要…

LeetCode 1281. 整數的各位積和之差

【LetMeFly】1281.整數的各位積和之差 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/subtract-the-product-and-sum-of-digits-of-an-integer/ 給你一個整數 n&#xff0c;請你幫忙計算并返回該整數「各位數字之積」與「各位數字之和」的差。 示例 1&#xff1a; …

學習筆記整理-JS-03-表達式和運算符

[[toc]] 一、表達式和運算符 1. 表達式 表達式種類 算術、關系、邏輯、賦值、綜合 二、JS基本表達式 1. 算術運算符 意義運算符加減-乘*除/取余% 加減乘除 加減的符號和數學一致&#xff0c;乘號是*號&#xff0c;除法是/號默認情況&#xff0c;乘除法的優先級高于加法和…

安卓源碼分析(10)Lifecycle實現組件生命周期管理

參考&#xff1a; https://developer.android.google.cn/topic/libraries/architecture/lifecycle?hlzh-cn#java https://developer.android.google.cn/reference/androidx/lifecycle/Lifecycle 文章目錄 1、概述2、LifeCycle類3、LifecycleOwner類4、LifecycleObserver類 1、…

數據庫字段命名導致的SQL報錯

1.表設計 create table variables (id bigint not null comment 主鍵,business_key varchar(128) null comment 業務key,key varchar(128) null comment Map中的key,value varchar(255) null comment…

Centos yum命令大全

1.使用YUM查找軟件包 $ yum search python 2.列出所有可安裝的軟件包 $ yum list | grep python 3.列出所有可更新的軟件包 $ yum list updates 4.列出所有已安裝的軟件包 $ yum list installed | grep python

[GIN-debug] [ERROR] listen tcp: address 8080: missing port in address

學習Golang_gin框架的第一天 遇到一下報錯 : [GIN-debug] [ERROR] listen tcp: address 8080: missing port in address 錯誤代碼 : package mainimport "github.com/gin-gonic/gin"func main() {router : gin.Default()router.GET("/index", func…