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