近日,一位網名叫“greenluigi1”的開發者發現,現代汽車從公開的示例編程項目中借用密鑰來保護其系統,以在車載信息娛樂硬件上運行自傢的軟件。起初他隻是為自行修改2021款現代IoniqSEL車型的車載信息娛樂(IVI)系統,所以設法深入解如何連接到設備、並繞過其安全防護措施。
讓人沒想到的是,這位開發者竟然隻使用 Google 搜索引擎,就找到現代旗下 Hyundai Mobis 制造的 D-Audio2 系統定制固件的一個重大漏洞。
The Register 指出,由於車載信息娛樂系統(IVI)接受基於密碼保護的 ZIP 壓縮包的固件更新文件。
因此人們能夠繞過這套簡單的存檔防護措施來訪問相關內容,包括 IVI 各個組件的加密固件鏡像。
接著開發者設法創建自己的固件鏡像,以車載系統能夠接受、安裝和運行的 ZIP 文件格式對其進行加密,從而允許通過黑客提供的代碼來控制硬件。
截圖(來自:Programming With Style)
期間最幸運的,就是“greenluigi1”在 Mobis 網站上找到一個 Linux 安裝腳本 —— 該腳本旨在創建一個合適的 ZIP 文件來執行系統更新。
該腳本包括系統檔案所需的 ZIP 密碼、AES 對稱密碼塊鏈(CBC)的加密密鑰 —— 單個密鑰、而不是 RSA 非對稱公鑰 / 私鑰對)—— 以及初始化向量(IV 值)來加密固件鏡像。
與此同時,該信息還可用於解密鏡像,意味著 greenluigi1 能夠借助 AES 密鑰來解包、修改,然後通過官方腳本來重新打包加密為 ZIP 格式的壓縮包、並用於現代 IVI 的系統更新。
當然,實際操作還是沒有看起來這麼簡單。至少提供數據的某些部分,仍需使用 RSA 私鑰進行加密簽名。
此外更新程序需要使用私鑰對應的 RSA 公鑰,來檢查數據是否使用正確的私鑰簽名 ——這意味著 greenluigi1 需要找到 RSA 私鑰才能進一步深入。
在五月的一篇博客文章中,他解釋稱 —— 腳本暗示其正在使用 RSA 簽名,遺憾的是該密鑰不包含在源碼中。
然而更大的烏龍是,原腳本中的 AES 加密密鑰,竟指向 NIST 文檔 SP800-38A【PDF】中列出的首個 AES 128 位 CBC 示例密鑰。
盡管加密社區普遍意識到 CBC 很難被妥善部署,因此建議換用其它方法,但這傢車企竟然還是這麼做。
此外微軟去年警告稱:基於已知的密碼學研究,在應用可驗證填充、而沒有首先確保密文完整性的情況下,如非極其特殊的情況、CBC 模式加密的數據已不再安全。
由於現代錯誤地使用 AES CBC 方案和另一個在線發佈的密鑰作為私鑰,greenluigi1 得以使用該對稱密鑰,提取更新 ZIP 包中的一個加密固件映像文件的內容。
在提取的文件中,他找到處理 IVI 更新的軟件(一個名為 updateAgent 的二進制文件)。
加密的 zip 壓縮包
在擁有 zip 密碼和加密密鑰的基礎上,他決定繼續尋找簽名密鑰。幸運的是,該公司不僅留下公鑰、甚至還把私鑰都晾出來。
在一連串的好運加持下,greenluigi1 在固件映像中找到更新程序使用的 RSA 公鑰,並在線搜索該密鑰的一部分。
文件列表
搜索結果指向一個常見的公鑰,且它出現在《RSA Encryption & Decryption Example with OpenSSL in C》之類的線上教程中”。
這意味著現代“實習生”直接套用教程中的公鑰密鑰對,並將公鑰塞進源碼中。
從而使得 greenluigi1 追溯到配對的私鑰,最終簽署可讓 IVI 接納的自定義固件的更新程序。
對於此事,截止發稿時,現代汽車方面尚未回應外媒的置評請求。