入侵特斯拉——智慧汽車安全性分析

博文視點發表於2017-11-13

特斯拉汽車一直受到黑客的關注,很多安全研究人員都嘗試過挖掘特斯拉汽車的漏洞,主要原因是特斯拉是純電動汽車並且有網路連線,可以通過網路對汽車進行控制,而且特斯拉本身也非常依賴電子控制系統。本文就來分析特斯拉已經出現過的問題。此漏洞已經修復,本文只是為了讓讀者瞭解漏洞原理以便應用到工作中,使汽車變得更安全。

一直以來特斯拉被認為比其他具有網路連線功能的汽車更安全,可以作為聯網汽車的楷模,儘管特斯拉時不時被爆出一些小BUG。例如,2015年8月的黑客大會DEFCON上,安全研究人員Marc Rogers和Kevin Mahaffey分享了他們對特斯拉Model S的研究成果,他們在研究過程中找到了6個問題,通過這些小BUG可以以物理入侵(不是遠端入侵)的方式控制汽車。接下來,我們就介紹他們這項研究的過程。

1 系統架構

圖1所示為特斯拉Model S的資訊娛樂系統架構。

圖1 特斯拉Model S資訊娛樂系統架構(圖片來源lookout.com)

Model S的娛樂及資訊系統和控制器CAN網路是隔離的,娛樂資訊系統的各個模組之間通過一個區域網進行通訊,而汽車的各個控制器(如動力剎車等)通過CAN通訊,娛樂系統與CAN之間通過閘道器連線。

首先來看看Model S資訊娛樂系統的幾個模組,分別是儀表板、中央資訊顯示和閘道器,其中儀表板和中央資訊顯示兩個模組都執行版本比較老的Ubuntu作業系統,閘道器執行開源的實時作業系統FreeRTOS。

(1)儀表系統又叫儀表盤IC(Instrument Cluster),是位於方向盤正前方的一個8英寸的螢幕,執行Ubuntu Linux作業系統,處理器是NVIDIA Tegra3,如圖2所示。

圖2 被拆下來的儀表

(2)中央資訊顯示模組CID(Central Information Display),就是汽車中央的17英寸大屏,執行Ubuntu Linux作業系統,處理器是NVIDIA Tegra4,如圖3和圖4所示。

圖3 CID 內部

圖4 CID背面

(3)閘道器(Gateway):連線資訊娛樂系統與控制器網路,與CID整合在一起,執行FreeRTOS作業系統。圖5所示為Model S整個網路的架構。

圖5 Model S的網路架構

這種將汽車的控制器網路與娛樂資訊系統進行隔離的網路架構是非常優秀的設計,因為娛樂資訊系統有豐富的網路連線,當黑客入侵娛樂系統後還需要通過閘道器才能控制汽車的關鍵部件[例如,行駛安全相關的部件(如電動轉向、電子剎車等)]。

2 資訊收集

首先對系統進行分析,找出可能的攻擊向量,然後再研究特定的攻擊向量,首先是物理攻擊向量。通過分析找到了如下可能的物理攻擊向量。

(1)CID有兩張可插拔的儲存卡。

(2)CID有一個USB介面。

(3)一個4針的乙太網介面。

(4)各種測試點和除錯診斷介面。

然後對找到的物理攻擊向量與其他攻擊向量進行測試,測試結果如下。

瀏覽器:不僅CID執行的作業系統是老版本的Ubuntu系統,其執行的瀏覽器也是比較老的版本,瀏覽器基於WebKit 534.34,這個版本的瀏覽器引擎有幾個比較知名的漏洞。通過這些漏洞可以讓瀏覽器崩潰但是沒有實現程式碼執行。

藍芽:沒有找到漏洞。

USB:可以通過CID的USB介面讓CID重啟進入NVIDA Tegra的Recovery模式,但是bootloader是通過密碼保護的,所以沒有辦法通過這種方式提取韌體。

儲存卡:其中一張儲存卡上有一個名叫carkeys.tar的檔案,其中包含了這輛Model S的OpenVPN認證資訊,也就是一個X509標準證書、一個RSA私鑰和一個OpenVPN靜態金鑰,這些相當於車鑰匙,所以未來汽車的鑰匙可能都是基於密碼演算法的,如圖6所示。

圖6 carkeys檔案解壓結果

另外一張卡儲存了地圖資料和一個以root許可權執行的指令碼。

Wi-Fi:將Model S連入Wi-Fi後並沒有發現開放的埠,但是當Model S連上Wi-Fi後首先會通過向一些伺服器發起http請求確定網路連通性,在確定網路連通性後嘗試通過OpenVPN連線特斯拉伺服器(地址是vpn.vn.teslamotors.com)。由於OpenVPN配置正確,不能進行中間人攻擊。圖7所示為特斯拉VPN的配置。

圖7 特斯拉VPN的配置

特斯拉的OpenVPN使用UDP協議,並啟用了tls-auth,這就是CarKey.tar中包含的那個靜態金鑰的用處,即用於對資料包加入HMAC(Keyed-Hashing for Message Authentication)用於訊息認證、用於防止DoS攻擊、埠掃描、未授權的SSL/TLS握手和初始化等。

因為特斯拉伺服器與汽車的證書鏈都是由同一個根證書機構簽發的,所以如果配置得不好可能出現漏洞,圖8所示為特斯拉的證書鏈。

圖8 特斯拉的證書鏈

特斯拉有一個根證書認證機構(root CA),根證書機構下面連結了一個Policy CA(策略證書認證機構,這個機構自己的證書由root CA簽發),然後Policy CA還簽發了一個Issuing CA(簽發CA),最後這個CA被用於簽發伺服器的證書和汽車的證書(汽車的證書是用於伺服器驗證汽車的),由於伺服器和客戶端都由同一個CA簽發,如果對證書的認證只檢查證書的簽發CA就會出現安全問題。x509v3EKU(Extended Key Usage是個擴充套件標準,指定了公鑰用途)中規定了一個證書中的公鑰的用途,也就是說,一個證書只能被用於特定的目的,比如VPN伺服器的證書就只能用於伺服器認證,而CarKey的證書只能被用於客戶端認證。OpenVPN中可以設定是否要對EKU中指定的金鑰用途進行驗證,所以我們的問題是萬一特斯拉汽車配置OpenVPN時沒有開啟這個對公鑰(比如CarKey.tar裡包含的和VPN伺服器傳來的證書裡包含的公鑰)的用途驗證呢?所以如果搞個假的伺服器FauxpenVPN(記住我們說過要中間攻擊),當這輛車和我們的冒牌FauxpenVPN通訊時,它向FauxpenVPN傳送hello,這時冒牌伺服器就把汽車CarKey.tar裡那個證書返回給車,如圖9所示。

圖9 假想的利用客戶端證書偽造成服務端證書攻擊場景

CarKey裡的證書和真的VPN伺服器的證書的認證鏈相同,如果特斯拉在配置OpenVPN服務時沒有檢查前面說的EKU證書用途(因為我們發給伺服器的是從汽車中名為CarKey.tar的檔案中提取出來的證書,而這個證書是用於客戶端認證的證書),那麼汽車會信任FauxpenVPN,就可以進行中間人攻擊了,如圖10所示。

圖10 利用客戶端證書偽造伺服器示意圖

由於Model S驗證了伺服器EKU,所以並不能用CarKey.tar裡的證書(用於客戶端認證的)來偽造伺服器(因為需要用於服務端認證的證書)與汽車互動。如果能找到一個由Issuing CA簽發的證書而且這個證書的EKU指定用途為服務端認證,就可以偽造一個VPN伺服器進行中間人攻擊。

乙太網介面:如圖11所示,乙太網介面先是由一個特斯拉車主發現併發布在特斯拉車主論壇,在這之前大家都覺得這個介面比較奇怪,因為它和常規的乙太網介面不同。

圖11 Model S的乙太網介面及導線

通過這個介面可以與汽車的娛樂資訊系統網路通訊,接入資訊娛樂系統網路後使用Nmap等工具對內網掃描就可以發現3個裝置,一個是CID、一個是IC、另一個是閘道器。這三個裝置傳送了大量(約1000個包每秒)的UDP廣播包(目的地址192.168.90.255),根據資料型別的不同使用不同的埠,這就與CAN匯流排的機制非常類似,網路上每個節點將資料廣播到網路上,需要資料的節點就接收需要的資料,猜測這裡的埠號類似於CAN的訊息ID。通過掃描還發現了一些開放的埠及對應的服務,如表1所示。

表1 娛樂資訊系統的掃描結果

掃描到的服務中有兩個是已經被爆出有漏洞的老版本,分別是DNS Proxy: runs dnsmasq 2.58和HTTP Service: mini_httpd 1.19。

另外,如掃描結果顯示的那樣,CID和IC都執行了X11伺服器,並且沒有任何認證,因此可以隨意更改顯示內容,如圖12所示。

圖12 通過沒有認證的X11服務更改儀表板和中控屏的顯示(來源lookout.com)

最後,他們還找到了分別執行於IC和CID上的兩個程式ic-updater和cid-updater,從字面意思理解這兩個程式分別為IC和CID的升級程式,功能是獲取診斷資訊、上傳檔案或者韌體,這兩個程式的大部分命令都有認證保護,但是其中也有些沒有,例如‘status’,這兩個程式在輸入‘status’狀態命令時會列印出許多資訊娛樂系統的關鍵資訊,屬於資訊洩露漏洞,圖13所示為ic-updater status顯示出的資訊。


圖13 儀表板IC升級工具列印出的韌體VRL資訊

事實上,後面整個研究的突破點就是這個漏洞導致的,通過這個漏洞列印出來的資訊裡給出了下載韌體的URL。

4 測試中遇到的挫折

正當Marc Rogers進行研究時,其他研究人員找到了那個乙太網介面,特斯拉通過遠端升級將這個埠加入了認證機制,原本接上網線就可以與內網進行通訊,現在卻不行了,但是由於知道IC和CID都在內網上,所以可以通過直接將網線接到CID或者IC的乙太網介面接入內網,如圖14所示。

圖14 直接將網線接入CID

5 測試中的突破

通過cid-updater服務的status狀態命令列印出來的資訊裡包含了一個比較特別的URL:firmware_download_url=hxxp://firmware-bundles.vn.teslamotors.com:4567/…,其字面意思是下載韌體的URL。由於之前嘗試對OpenVPN進行中間人攻擊時已經弄清楚了特斯拉的OpenVPN配置,並且已經從儲存卡里的CarKeys.tar檔案中找到了特斯拉客戶端的證書及金鑰,所以可以與特斯拉的服務建立VPN連線來下載韌體。下載下來的韌體約600多兆,是一個SquashFS檔案系統,解壓後嘗試尋找私鑰和Shadow檔案(Linux系統裡儲存使用者名稱和密碼雜湊等相關資訊的檔案),結果找到了IC的Shadow檔案。下一步就是嘗試破解這個Shadow檔案獲得密碼(如彩虹表、字典、暴力破解等方法),特斯拉設定的這個密碼是弱密碼,很容易就被破解。實際上,通過Shadow檔案破解出來的好幾個賬號都是弱密碼。有了祕密碼和賬號後就可以通過SSH接入IC,而且被破密碼的賬號是sudoer的(雖然不是root,但是可以通過sudo以root許可權執行命令),就這樣取得了IC的root許可權,如圖15所示。

圖15 root許可權接入IC

IC的root許可權已經搞定了,下一步要搞定CID的root許可權,由於沒有CID的shadow檔案,所以只有繼續分析韌體,通過分析韌體發現CID每隔24小時就會從一個名為mothership的伺服器獲取一個安全令牌(Security Token),然後將一個名為tesla1的賬號的密碼設為這個安全令牌。CID還會將安全令牌發給IC,IC則將安全令牌明文儲存。通過在IC的檔案系統中找到這個安全令牌可以登入CID上的tesla1賬號,而且這個tesla1賬號也是一個sudoer,就這樣,IC和CID的root許可權都被搞定了。

另外,前面提到的乙太網結果被加入認證機制後其實認證也用到了這個token,閘道器(這裡是指乙太網介面與資訊娛樂網路之間負責認證的“閘道器”)每隔30秒會對通過這個乙太網介面對接入資訊娛樂網路的裝置進行認證,認證方式是由需要接入網路的裝置根據token、VIN,以及一個salt計算一個雜湊值以廣播的方式傳送出去,圖16所示為自動認證程式碼。

圖16 乙太網介面自動認證程式碼

6 控制汽車

獲得了IC和CID的root許可權後,下一步再來看看如何控制汽車,Model S的內網資料傳輸率較高,每秒約500~1000個UDP報文包,搞清楚哪些資料包包含的是控制資料比較困難,所以通過分析程式判斷哪些資料是通過手機應用或者CID上面的按鈕進行操作才出現的資料可以快速弄清楚哪些資料控制哪些功能。在弄清楚控制某些功能的資料後還要弄清楚是哪個服務傳送了這些資料,由於是通過CID的觸控式螢幕來控制的,所以在CID上使用strace系統呼叫監控命令來分析是哪個服務傳送了這些資料,結果發現是一個名為QtCarVehicle的服務傳送了那些控制資料包。

QtCarVehicle包含一個叫Gateway Message Sender的類,用於通過閘道器傳送訊息的類,然後就是執行這個類的各種功能的方法。到這一步就可以通過呼叫這個服務來執行預設功能了。

值得注意的是,經過逆向分析還發現Model S並不會直接通過資訊娛樂系統傳送CAN原始資料包控制汽車,而是採用了API呼叫的方式,即CID通過功能呼叫介面請求閘道器執行某個功能的操作,這些功能操作都是預先定義好的允許執行的操作。

娛樂系統通過功能介面請求閘道器執行特定操作的設計非常重要(這裡指CID通過API請求閘道器),這種設計可以保障在資訊娛樂系統被黑客攻陷後,不能直接往CAN匯流排傳送原始CAN資料,只能執行預先設定好的“允許”的功能。當然,這是在閘道器沒有被攻破(例如,Jeep案例中,攻擊者將被修改後的韌體刷入V850後)的前提下。

經過測試發現了一系列的預設功能呼叫,其中影響最大的可能就是關閉汽車(VAPIPoweroff)這個功能,當汽車以低於5邁的速度行駛時,呼叫這個功能會使汽車突然剎車並停下來,而在高於5邁時呼叫這個功能則會使汽車不能加速,但是剎車和轉向都受駕駛員正常控制。其他可以通過CID的觸控式螢幕控制的功能也都可以被控制。

為了實現遠端控制,在CID與一個控制伺服器之間建立一個SSH隧道連線,然後就可以利用之前找到的token通過SSH接入CID,如圖17所示。

圖17 接入CID

接入CID後呼叫QtCarVehicle服務提供的功能可以控制汽車的一些功能,例如關閉電源,如圖18所示。

圖18 執行關閉電源指令碼

還可以控制如下功能。

(1)關閉汽車。

(2)啟動汽車。

(3)開關門。

(4)開關天窗。

(5)開關前後行李箱。

(6)控制大燈。

(7)控制減震器。

(8)控制空調。

(9)鳴笛。

7 本文小結

圖19所示為整個研究過程的總結圖。

圖19 整個研究過程的流程圖

7.1 特斯拉做得比較好的地方

(1)遠端升級:當出現安全漏洞時,特斯拉只需要遠端推送補丁即可,不需要召回或者向Jeep Uconnect漏洞那樣需要寄送U盤。

(2)VPN配置正確:特斯拉使用的VPN配置正確,不會有常見的(如中間人攻擊等因為配置缺陷而造成的)漏洞。

(3)賬號金鑰更新及時:特斯拉的金鑰每隔24小時就更新一次。

(4)控制器網路與資訊娛樂系統的隔離:Model S在汽車的控制器網路(CAN)與資訊娛樂系統之間採用閘道器進行隔離,並且閘道器只允許預設的功能呼叫。

7.2 需要改進的地方

(1)Wi-Fi靜態密碼:特斯拉服務中心名為Tesla Service的Wi-Fi(特斯拉會自動連線Wi-Fi)採用了汽車之間共享的靜態密碼,最好能改為WPA企業認證,這樣就不用在汽車之間採用相同的靜態金鑰。

(2)邊界安全模型:Model S具有非常強的邊界安全,但是內網的安全性不高,設計者應該假設攻擊者可以獲得資訊娛樂系統網路,雖然進入網路並不能造成太大影響。

(3)明文儲存認證資訊:VPN金鑰和安全令牌都以明文的方式儲存在檔案系統中,如果將這些關鍵資訊儲存在硬體安全模組(如TPM,Trusted Platform Module)中會更安全。

(4)資訊娛樂系統網路上的節點間通訊沒有加密,並且有些還沒有認證:網路上的節點間通訊沒有加密,所以攻擊者可以分析網路上的所有流量。另外,只有少部分服務採用了認證機制。如果要實現節點級別的安全,那麼網路上所有的節點絕對不能對網路有任何信任,任何節點間的通訊都應該經過加密和認證。

以上內容節選自《智慧汽車安全攻防大揭祕》,點此連結可在博文視點官網檢視此書。
                 圖片描述

  想及時獲得更多精彩文章,可在微信中搜尋“博文視點”或者掃描下方二維碼並關注。
                    圖片描述

相關文章