近日,一位网名叫“greenluigi1”的开发者发现,现代汽车从公开的示例编程项目中借用了密钥来保护其系统,以在车载信息娱乐硬件上运行自家的软件。起初他只是为了自行修改 2021 款现代 Ioniq SEL 车型的车载信息娱乐(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 接纳的自定义固件的更新程序。 对于此事,截止发稿时,现代汽车方面尚未回应外媒的置评请求。