于各種各樣的原因,拿開源代碼或現成的一些工具用在自己的項目里向來很常見。不過近年來諸如Log4j漏洞等安全問題的爆發,也揭露了開源工具可能帶來的安全風險。這一次,風險出現在現代汽車公司用來管理軟件的產品中。
今年5-6月份,軟件工程師Daniel Feldman連續發布四篇博客,記錄了自己破解家中現代汽車信息娛樂系統的過程與方法。其中最關鍵的一步是要獲取現代汽車公司用來管理軟件的私鑰。這原本是不可能的事情,但是他一時興起去谷歌搜索了一下,居然真的搜到了那段私鑰,然后成功破解了自己的汽車。
故事要從去年夏天這位工程師新買了一輛現代汽車(2021款Hyundai Ioniq SEL)說起。這是一輛混動車,支持安卓Auto或蘋果CarPlay,可以無線充電、加熱座椅,還配有天窗。Daniel本人特別喜歡這輛車的車載信息娛樂(IVI)系統,他發現菜單動畫很流暢,說明運行的軟件不那么臃腫,不會讓CPU/GPU全負荷運轉。程序員的天性讓他想研究個徹底,嘗試破解掉系統,獲取root權限,加入自己編寫的軟件。
破解的第一步是先搞清楚這個系統到底是個啥以及以前有沒有人破解過它。經過研究,Daniel發現這個IVI系統有兩個版本,一個是基于Android 系統的導航,另一個是基于 Linux 的版本。前者只要通過工程菜單安裝自己的APK就能破解,后者則還沒有被攻破,而且可以調整為工程模式(相當于開發者的診斷、調試模式)。只要進入IVI系統的軟件更新界面,快速在更新按鈕左側按10次,再在按鈕右側按一次就可以進入工程模式。進入之后,他又通過網上搜到的教程,找到了進入工程模式的密碼。
進入工程模式之后,就能看到大量診斷、調試數據和隱藏的設置。其中的 USB 拷貝以及ISV設置中的“ADB TCP”選項與“軟件測試工具”選項看起來是突破口。經過一番嘗試之后,Daniel還是決定直接獲取固件更新包(update.hyundai.com)再解壓分析。不過,雖然獲取到了固件壓縮包,在解壓時卻遇到了麻煩——需要密碼。不管用什么密碼破解工具都行不通。這在日常安全研究中其實很常見。
無奈之下再去分析壓縮包里的文件,根據關鍵詞去網頁里搜索,不過也沒什么收獲。但是,在現代汽車的更新網站中卻發現了一個比較特殊的更新程序,下載之后有一組文件跟固件壓縮包中的一個程序名對上了。再通過ZIP解壓軟件的對文件CRC進行校驗,在一對匹配的文件中找到了 bkcrack明文。最后經過一系列解密、編程等操作,最終成功從加密的固件ZIP壓縮包中提取了所有的文件,然后開始逆向。至此,破解IVI系統走到了關鍵路口。
在分析固件更新文件時,Feldman 發現了大量“enc_”前綴的文件,都是加密的,如果無法讀取這些文件,就無法了解系統的更新過程。因為讀取加密文件,就只能再次查看此前獲取的一些信息,包括從Mobis網站中下載的開源代碼。這一看,就找到了關鍵信息。在瀏覽代碼時,他搜索了所有shell腳本文件,然后發現了 linux_envsetup.sh 文件,這是用于創建系統更新ZIP文件的腳本。系統更新必需的zip密碼、加密方式、AES對稱密碼塊鏈(CBC)加密密鑰以及用來加密固件映像的IV(初始化向量)值都在腳本中寫得明明白白。不過,腳本中也提到的還有一些私鑰是用RSA算法加密的,源代碼中并沒有包含這部分密鑰。
Feldman 拿腳本中的[AES]加密密鑰到谷歌里一搜,發現這個密鑰其實是 NIST 發布的SP800-38A文檔(https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf)中列出的第一個AES 128位CBC示例密鑰。這著實有些離譜。
首先,在加密領域,CBC加密方法用得較少,而且使用填充加密的AES CBC加密方法也沒那么安全。其次,這是NIST的公開文檔中發布的第一個例子。就算拿去用,也頂多用于測試,但是顯然現代公司的開發人員直接拿公開文檔中的密鑰作為自家產品機密信息的加密密鑰……這種行為與把“12345”作為開機密碼還寫在便簽紙上貼在電腦上也差不了多少。你以為別人不會看,但別人想看就分分鐘能打開你電腦。
最后,Feldman用這個密鑰解開了其中一個壓縮包,然后成功從加密的固件映像文件中提取出了更多文件,并找到了處理IVI系統更新的軟件,還找到了更新程序所需要的RSA公鑰。谷歌搜索的方法屢試不爽,他再次拿已知的公鑰片段去搜索,結果發現,這又是一個公開的教程中舉的例子:RSA Encryption & Decryption Example with OpenSSL in C(http://hayageek.com/rsa-encryption-decryption-openssl-c/)。這個教程舉例的項目在源代碼中附有這個公鑰和對應的RSA私鑰。也就是說,現代汽車公司用了這個公開教程中舉例的公鑰、私鑰對,還把公鑰放到了產品源代碼中。所以拿公鑰一搜,就能搜到私鑰。
解密所需要的密鑰都集齊后,只待Feldman本人汽車型號對應的固件更新,就能開展行動。這一等就等到了2022年4月。Feldman早就通過 linux_envsetup.sh 腳本了解到加密固件更新的過程, 對應型號的固件更新后,他就創建了自己的固件版本,并創建了兩個后門。最終,自制的固件更新包做好后,他通過最開始發現的USB拷貝功能把自制的更新包裝入了IVI系統,并成功重啟了系統。他通過后門就能訪問、控制IVI系統,并加入了自制的程序。時隔大概一年,這位工程師終于隨心所欲地控制了自己汽車信息娛樂系統。
與其他的破解相同,這次的探究出于極客的天性、需要一定的技術基礎。不同之處就在于用于解密的關鍵密鑰是直接從谷歌中搜索來的。作為車企的研發人員,直接拿網上公開教程的例子來作為真實產品的私鑰,著實為安全埋了一顆雷……當科技發展得越來越復雜,人犯的錯看起來就越低級。這也驗證了電影《我是誰?沒有絕對安全的系統》里的名言:人才是網絡世界中最大的BUG……
詳細過程、方法及技術細節可參考Feldman博客:
https://programmingwithstyle.com/posts/howihackedmycar/
https://programmingwithstyle.com/posts/howihackedmycarpart2/
https://programmingwithstyle.com/posts/howihackedmycarpart3/
https://programmingwithstyle.com/posts/howihackedmycarguidescreatingcustomfirmware/
“道高一尺魔高一丈”,曾經被認為不可破解的游戲《戰爭機器4(Gears of War 4)》正式“淪陷”。
其實GoW是2016年的老游戲了,但卻一直沒有被攻破,其一個主要原因就是它在PC和Xbox One平臺上都是以UWP的形式出現,黑客高手們對這一隨Win10上線的新鮮格式并不熟悉。
然而就在狗年春節期間,Codex實現了首次破解UWP游戲,當時中招的是《Zoo Tycoon Ultimate Animal Collection(動物園大亨)》。
這次立功的當然還是Codex小組,免激活版本不僅可以免費下載安裝(ISO鏡像文件),也完全不需要了微軟賬戶甚至商店(C組建議通過防火墻阻止程序聯網,以策萬全)。
GoW如今的完整容量達到了100GB以上,美區價格39.99美元,國內有港版和臺版可選。
GoW沒了金身(主要是微軟和Arxan加密)后,“零元飯”們都在期待《極限競速7》和《光環戰爭2》了。