入侵特斯拉——智能汽車安全性分析
特斯拉汽車一直受到黑客的關注,很多安全研究人員都嚐試過挖掘特斯拉汽車的漏洞,主要原因是特斯拉是純電動汽車並且有網絡連接,可以通過網絡對汽車進行控製,而且特斯拉本身也非常依賴電子控製係統。本文就來分析特斯拉已經出現過的問題。此漏洞已經修複,本文隻是為了讓讀者了解漏洞原理以便應用到工作中,使汽車變得更安全。
一直以來特斯拉被認為比其他具有網絡連接功能的汽車更安全,可以作為聯網汽車的楷模,盡管特斯拉時不時被爆出一些小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)信息娛樂係統網絡上的節點間通信沒有加密,並且有些還沒有認證:網絡上的節點間通信沒有加密,所以攻擊者可以分析網絡上的所有流量。另外,隻有少部分服務采用了認證機製。如果要實現節點級別的安全,那麼網絡上所有的節點絕對不能對網絡有任何信任,任何節點間的通信都應該經過加密和認證。
以上內容節選自《智能汽車安全攻防大揭秘》,點此鏈接可在博文視點官網查看此書。
想及時獲得更多精彩文章,可在微信中搜索“博文視點”或者掃描下方二維碼並關注。
最後更新:2017-11-13 14:35:13