第十代本田思域更新已使用AOSP测试密钥签名
三年前,我发布了我最初的作品,以了解和逆向工程我的汽车,特别是我2021年本田思域的主机。初步反应非常鼓舞人心。我写这篇文章是为了给项目更新。王国的钥匙,最大的进展是在映射更新过程时取得的。本田支持通过USB更新主机。虽然有许多本田特定的检查,但最终USB驱动器包含一个经过签名的AOSP更新文件,通过Android恢复程序进行分阶段处理和应用。好消息是?他们在res/keys中留下了公众已知的AOSP测试密钥,尽管他们修改了恢复二进制文件,但verify_file签名逻辑与库存AOSP匹配。因此,只要你能正确格式化USB驱动器并用公众已知的AOSP测试密钥进行签名,你就可以在主机上安装任何你想要的内容,无需传统根访问(不需要su与setuid)。这意味着,只要主机通电,并且攻击者对最前面的USB端口有物理访问权限,他们就可以通过更新路径在主机上执行任意代码。这是一种邪恶的女仆攻击。由于它需要对汽车内部的物理访问,而不是酒店房间,我称之为邪恶的代客停车攻击。想象一下,一名记者开车到一家酒店并将车交给代客停车。这位为某个三字母机构工作的代客停车员通过USB安装了一个更新。当汽车被归还时,记者不知道主机已经被修改。由于我想要一个酷炫的漏洞名称,我将其称为“EvilValet”。这篇博客文章并不是技术写作。如果你想要详细的技术细节,请查看技术文档。我还发布了一个新的工具,ota-builder,使人们能够轻松准备将被主机接受的更新文件。虽然这还处于早期阶段,但现在应该很简单去构建一个更新文件,例如,安装带有setuid设置的su二进制文件(即,使设备获得root权限)。*我有强烈理由相信所有更新都是使用公众已知的AOSP测试密钥签名的,但我没有访问每一个可能的官方更新文件,也没有访问每个主机变体及其文件系统。我的主机在res/keys中有AOSP测试密钥,尽管我也安装了HondaHack,因此它有可能将密钥注入到密钥库中。然而,我还确认,MRC_EU_SW_v12_4.zip,一个公众可用的EU软件更新文件,是用测试密钥签名的。该文件是从一个公共论坛下载的,并且从未由我修改。因此,所有更新都是用AOSP测试密钥签名的可能性很高。欢迎贡献者帮助支持或反驳这一假说。构建工具除了更新过程,最有用的工作是apk-rebuilder。它有一个非常重要的任务:从互联网获取本田思域更新文件,并生成干净的输出文件树,自动化所有逆向工程师原本必须手动执行的工作,包括:解决资源,重建.smali代码,重新打包APK文件,提取ramdisk等等。这也发挥着重要的作用,因为我们无法发布实际的本田源代码。我们发布一个函数,该函数接受一个更新文件(我们不托管)并输出本田的.smali代码、图像资源等。生成的输出遵循清晰的目录结构,可以在文档中引用,而无需实际上传敏感文件。杰出工作 - 寻求贡献者 有一些杰出的东西是希望拥有的。已知版本 更新过程是脆弱的,并且高度依赖版本号。这不会限制运行未签名代码的能力,因为版本号可以被“伪造”(请参见技术文档)。但是,为了首先构建更新文件,你需要知道主机期望哪些版本。此外,对主机软件的任何更改,如果与我的构建不匹配,可能会导致意外行为和恢复循环。如果你驾驶第十代本田思域并且技术娴熟,我鼓励你为该回购的“已知版本,显示音频软件”部分做出贡献。如果你感觉特别勇敢,请查阅ota-builder代码并尝试刷新更新。但请自担风险;如果你的主机与我的不同,你可能会陷入恢复循环,软砖你的设备。工具链 我在本地机器上有一个实验性/进行中的工具链。它接受候选的.c代码并为ARMv7进行编译,使用与原始供应商二进制文件相同的编译器版本和构建标志。这在我理解更新过程的工作中证明是不可或缺的。它大量使用Docker。当前的迭代杂乱无章,且大部分特定于我的工作流,但我想发布一个清晰的实现。自定义主题 我在vibe-coding apk-renderer时稍微探讨了一下这一点。自定义主题可能很难交付,因为它们生活在三菱对AOSP框架的分叉中。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡