入侵特斯拉——智能汽車安全性分析
特斯拉汽車一直受到黑客的關注,很多安全研究人員都嘗試過挖掘特斯拉汽車的漏洞,主要原因是特斯拉是純電動汽車並且有網路連接,可以通過網路對汽車進行控制,而且特斯拉本身也非常依賴電子控制系統。本文就來分析特斯拉已經出現過的問題。本文只是為了讓讀者了解漏洞原理以便應用到工作中,使汽車變得更安全,所涉及漏洞已經修復。
一直以來特斯拉被認為比其他具有網路連接功能的汽車更安全,可以作為聯網汽車的楷模,儘管特斯拉時不時被爆出一些小BUG。例如,2015年8月的黑客大會DEFCON上,安全研究人員Marc Rogers和Kevin Mahaffey分享了他們對特斯拉Model S的研究成果,他們在研究過程中找到了6個問題,通過這些小BUG可以以物理入侵(不是遠程入侵)的方式控制汽車。接下來,我們就介紹他們這項研究的過程。
系統架構
圖1所示為特斯拉Model S的信息娛樂系統架構。
Model S的娛樂及信息系統和控制器CAN網路是隔離的,娛樂信息系統的各個模塊之間通過一個區域網進行通信,而汽車的各個控制器(如動力剎車等)通過CAN通信,娛樂系統與CAN之間通過網關連接。
首先來看看Model S信息娛樂系統的幾個模塊,分別是儀錶板、中央信息顯示和網關,其中儀錶板和中央信息顯示兩個模塊都運行版本比較老的Ubuntu操作系統,網關運行開源的實時操作系統FreeRTOS。
(1)儀錶系統又叫儀錶盤IC(Instrument Cluster),是位於方向盤正前方的一個8英寸的屏幕,運行Ubuntu Linux操作系統,處理器是NVIDIA Tegra3,如圖2所示。
(2)中央信息顯示模塊CID(Central Information Display),就是汽車中央的17英寸大屏,運行Ubuntu Linux操作系統,處理器是NVIDIA Tegra4,如圖3和圖4所示。
(3)網關(Gateway):連接信息娛樂系統與控制器網路,與CID集成在一起,運行FreeRTOS操作系統。圖5所示為Model S整個網路的架構。
這種將汽車的控制器網路與娛樂信息系統進行隔離的網路架構是非常優秀的設計,因為娛樂信息系統有豐富的網路連接,當黑客入侵娛樂系統後還需要通過網關才能控制汽車的關鍵部件[例如,行駛安全相關的部件(如電動轉向、電子剎車等)]。
信息收集
首先對系統進行分析,找出可能的攻擊向量,然後再研究特定的攻擊向量,首先是物理攻擊向量。通過分析找到了如下可能的物理攻擊向量。
(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所示。
另外一張卡存儲了地圖數據和一個以root許可權運行的腳本。
Wi-Fi:將Model S連入Wi-Fi後並沒有發現開放的埠,但是當Model S連上Wi-Fi後首先會通過向一些伺服器發起http請求確定網路連通性,在確定網路連通性後嘗試通過OpenVPN連接特斯拉伺服器(地址是http://vpn.vn.teslamotors.com)。由於OpenVPN配置正確,不能進行中間人攻擊。圖7所示為特斯拉VPN的配置。
特斯拉的OpenVPN使用UDP協議,並啟用了tls-auth,這就是CarKey.tar中包含的那個靜態密鑰的用處,即用於對數據包加入HMAC(Keyed-Hashing for Message Authentication)用於消息認證、用於防止DoS攻擊、埠掃描、未授權的SSL/TLS握手和初始化等。
因為特斯拉伺服器與汽車的證書鏈都是由同一個根證書機構簽發的,所以如果配置得不好可能出現漏洞,圖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所示。
CarKey里的證書和真的VPN伺服器的證書的認證鏈相同,如果特斯拉在配置OpenVPN服務時沒有檢查前面說的EKU證書用途(因為我們發給伺服器的是從汽車中名為CarKey.tar的文件中提取出來的證書,而這個證書是用於客戶端認證的證書),那麼汽車會信任FauxpenVPN,就可以進行中間人攻擊了,如圖10所示。
由於Model S驗證了伺服器EKU,所以並不能用CarKey.tar里的證書(用於客戶端認證的)來偽造伺服器(因為需要用於服務端認證的證書)與汽車交互。如果能找到一個由Issuing CA簽發的證書而且這個證書的EKU指定用途為服務端認證,就可以偽造一個VPN伺服器進行中間人攻擊。
乙太網介面:如圖11所示,乙太網介面先是由一個特斯拉車主發現並發布在特斯拉車主論壇,在這之前大家都覺得這個介面比較奇怪,因為它和常規的乙太網介面不同。
通過這個介面可以與汽車的娛樂信息系統網路通信,接入信息娛樂系統網路後使用Nmap等工具對內網掃描就可以發現3個設備,一個是CID、一個是IC、另一個是網關。這三個設備發送了大量(約1000個包每秒)的UDP廣播包(目的地址192.168.90.255),根據數據類型的不同使用不同的埠,這就與CAN匯流排的機制非常類似,網路上每個節點將數據廣播到網路上,需要數據的節點就接收需要的數據,猜測這裡的埠號類似於CAN的消息ID。通過掃描還發現了一些開放的埠及對應的服務,如表1所示。
掃描到的服務中有兩個是已經被爆出有漏洞的老版本,分別是DNS Proxy: runs dnsmasq 2.58和HTTP Service: mini_httpd 1.19。
另外,如掃描結果顯示的那樣,CID和IC都運行了X11伺服器,並且沒有任何認證,因此可以隨意更改顯示內容,如圖12所示。
最後,他們還找到了分別運行於IC和CID上的兩個程序ic-updater和cid-updater,從字面意思理解這兩個程序分別為IC和CID的升級程序,功能是獲取診斷信息、上傳文件或者固件,這兩個程序的大部分命令都有認證保護,但是其中也有些沒有,例如『status』,這兩個程序在輸入『status』狀態命令時會列印出許多信息娛樂系統的關鍵信息,屬於信息泄露漏洞,圖13所示為ic-updater status顯示出的信息。
事實上,後面整個研究的突破點就是這個漏洞導致的,通過這個漏洞列印出來的信息里給出了下載固件的URL。
測試中遇到的挫折
正當Marc Rogers進行研究時,其他研究人員找到了那個乙太網介面,特斯拉通過遠程升級將這個埠加入了認證機制,原本接上網線就可以與內網進行通信,現在卻不行了,但是由於知道IC和CID都在內網上,所以可以通過直接將網線接到CID或者IC的乙太網介面接入內網,如圖14所示。
測試中的突破
通過cid-updater服務的status狀態命令列印出來的信息里包含了一個比較特別的URL:firmware_download_url=hxxp://http://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所示。
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所示為自動認證代碼。
控制汽車
獲得了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所示。
接入CID後調用QtCarVehicle服務提供的功能可以控制汽車的一些功能,例如關閉電源,如圖18所示。
還可以控制如下功能。
- 關閉汽車。
- 啟動汽車。
- 開關門。
- 開關天窗。
- 開關前後行李箱。
- 控制大燈。
- 控制減震器。
- 控制空調。
- 鳴笛。
小結
圖19所示為整個研究過程的總結圖。
1 . 特斯拉做得比較好的地方
- 遠程升級:當出現安全漏洞時,特斯拉只需要遠程推送補丁即可,不需要召回或者向Jeep Uconnect漏洞那樣需要寄送U盤。
- VPN配置正確:特斯拉使用的VPN配置正確,不會有常見的(如中間人攻擊等因為配置缺陷而造成的)漏洞。
- 賬號密鑰更新及時:特斯拉的密鑰每隔24小時就更新一次。
- 控制器網路與信息娛樂系統的隔離:Model S在汽車的控制器網路(CAN)與信息娛樂系統之間採用網關進行隔離,並且網關只允許預設的功能調用。
2 . 需要改進的地方
- Wi-Fi靜態密碼:特斯拉服務中心名為Tesla Service的Wi-Fi(特斯拉會自動連接Wi-Fi)採用了汽車之間共享的靜態密碼,最好能改為WPA企業認證,這樣就不用在汽車之間採用相同的靜態密鑰。
- 邊界安全模型:Model S具有非常強的邊界安全,但是內網的安全性不高,設計者應該假設攻擊者可以獲得信息娛樂系統網路,雖然進入網路並不能造成太大影響。
- 明文存儲認證信息:VPN密鑰和安全令牌都以明文的方式存儲在文件系統中,如果將這些關鍵信息存儲在硬體安全模塊(如TPM,Trusted Platform Module)中會更安全。
- 信息娛樂系統網路上的節點間通信沒有加密,並且有些還沒有認證:網路上的節點間通信沒有加密,所以攻擊者可以分析網路上的所有流量。另外,只有少部分服務採用了認證機制。如果要實現節點級別的安全,那麼網路上所有的節點絕對不能對網路有任何信任,任何節點間的通信都應該經過加密和認證。
註:本文涉及漏洞均已修復。
本文選自《智能汽車安全攻防大揭秘》一書,感興趣的小夥伴可以到書中了解更多~
------------
更多科技資訊請見微信公眾號:博文視點Broadview(微信號:bvbooks)
推薦閱讀:
※一些對安全模型和架構的威脅(Day022)
※WTT日報10-19:兒童智能手錶存在嚴重的黑客攻擊風險
※網站入侵只是以愛國之名實施的網路暴力
※如何找回WhatsApp被刪除的消息
※APP加固技術歷程及未來級別方案:虛機源碼保護
TAG:特斯拉汽車TeslaMotors | 網路安全 | 人工智慧 |