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