軟件開發人員用谷歌搜索突破現代汽車安全防線
一位開發人員近日表示,在發現這款汽車的制造商使用不僅公之于眾,還從編程示例照搬的密鑰來保護系統后,他能夠在其汽車信息娛樂硬件上運行自己編寫的軟件。
明尼蘇達州明尼阿波利斯市的軟件工程師Daniel Feldman想改動其2021年款現代艾尼氪(Ioniq)SEL上的車載信息娛樂(IVI)系統。為此,他必須弄清楚如何連接到該系統,并繞過安全防線。
Feldman設法弄清楚了如何定制 IVI的D-Audio2系統(由現代汽車公司的移動平臺子公司現代摩比斯制造)的固件更新版,并讓IVI接受定制的更新版,隨后找到了一個讓人意料不到的法子:通過谷歌搜索。
IVI接受受密碼保護的ZIP存檔這種形式的固件更新版。Feldman從現代官網下載了更新ZIP,繞過了該存檔文件的簡單密碼保護機制,訪問其內容,內容包括IVI各個部分的加密固件映像。
隨后,他的目標變成了創建自己的固件映像,并在ZIP內以汽車會接受、安裝和運行的方式對其加密,從而使他能夠通過自己提供的代碼控制硬件。
幸運的是,Feldman在摩比斯的官網上找到了Linux安裝腳本,該腳本創建了一個合適的ZIP文件,用于執行系統更新。
該腳本包含系統更新存檔文件必不可少的ZIP密碼,以及AES對稱密碼塊鏈(CBC)加密密鑰(單個密鑰,而不是RSA非對稱公鑰/私鑰對)和用來加密固件映像的IV(初始化向量)值。
該信息還可以用于解密映像。
這意味著他可以使用AES密鑰來解密固件映像,修改它們,然后使用腳本用AES密鑰重新加密映像,并將其全部打包到受密碼保護的ZIP中,供現代IVI更新系統獲取。
但這不會那么容易:至少,所提供數據的一些部分需要用RSA私鑰進行加密簽名,而Feldman沒有RSA私鑰。更新程序將使用私鑰對應的RSA公鑰來檢查數據是否使用正確的秘密私鑰來簽名。
因此,他需要找到RSA私鑰才能執行下一步。
Feldman在早在5月份的一篇博文中解釋道:“該腳本暗示使用的是RSA簽名,但遺憾的是,用于簽名的密鑰不在源代碼中。”
他補充道:“后來發現,該腳本中的[AES]加密密鑰居然就是NIST文檔SP800-38A(https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf)中列出的第一個AES 128位CBC示例密鑰。”
順便插一句,加密界的共識似乎是CBC很難正確使用,而是建議使用其他方法。微軟去年警告,使用填充加密(padding)的AES CBC可能并不安全。
微軟聲稱:“微軟認為,在不先確保密文完整性就采用可驗證填充的情況下,解密使用對稱加密的密碼塊鏈(CBC)模式加密的數據不再安全,除了非常特殊的情況外。這一判斷基于目前已知的密碼學研究。”
但是現代公司犯的錯不在于錯誤實現AES CBC,而在于它使用網上發布的另一個密鑰作為機密信息。
有了這個對稱密鑰,Feldman 就能從更新 ZIP內的其中一個加密固件映像文件提取內容。
他在提取的文件中找到了處理IVI更新的軟件,一個名為updateAgent的二進制文件。換句話說,Feldman現正在查看他需要操控的代碼,即其車內IVI中的更新工具,這給了他操控代碼的大好機會。
Feldman解釋道:“由于我已經有了zip密碼和加密密鑰,于是決定尋找簽名密鑰。幸運的是,他們不僅留下了公鑰,還留下了私鑰。”
可以說,Feldman好運連連。他在固件映像中找到了更新程序使用的RSA公鑰,于是上網搜索該密鑰的一部分。搜索結果指向了一個常見的公鑰,該公鑰出現在了《C使用OpenSSL進行RSA加密和解密示例》(http://hayageek.com/rsa-encryption-decryption-openssl-c/)之類的教程中。
該教程及其他實現OpenSSL的項目在源代碼中附有這個公鑰和相應的RSA私鑰。
這意味著現代公司使用了教程中的公私密鑰對,并將公鑰放入其代碼中,Feldman因而得以從網上查到該私鑰。 因此,他能夠簽名現代公司的文件,并讓更新程序接受這些文件。
至此,Feldman就有機會為其汽車的IVI編寫自定義固件,他在隨后發在網上的兩篇文章中作了描述。他還為其他現代車主總結了其方法(https://programmingwithstyle.com/posts/howihackedmycarguidescreatingcustomfirmware/)。
現代公司尚未回應置評請求。
參考及來源:https://www.theregister.com/2022/08/17/software_developer_cracks_hyundai_encryption/如若轉載,請注明原文地址。