现代 Tucson破解 (二)

        之前的帖子中,我展示了如何破解现代途胜 2020 年的官方固件并对其进行逆向工程。最后我想到,我可以简单地修改更新包,再次用相同的密码压缩它,并将其推送到汽车上。  

        但事实证明并不那么简单。更新包使用与 daudio.x509.pem 证书相对应的 RSA 密钥进行签名,并且在更新过程中会检查此签名。这是安卓OTA更新过程的一部分,用于更新整个单元的固件(不仅仅是车载导航)。与 2021 年 Ioniq 的 RSA 密钥不同,此密钥无法在线找到(至少我没有找到)。在这种情况下,我们该如何访问主机单元?

    我考虑了以下两个选项:
        1. 在其中一个应用程序中找到一个可利用的漏洞
        2. 在 Linux 内核中找到一个可利用的漏洞;主机单元正在运行 Linux 3.1.10,所以             这看起来是可行的

        我在这两种方法上都没有取得成功。幸运的是,我找到了一些新信息,这让我成功获取了车机的 root 权限。

新发现


        首先,我意识到现代汽车将相同的固件提供给了各种车型。我的车配备了所谓的“标准级 Gen5 导航”,外观如下:


现代 Tucson破解 (二)


        他们称其为“导航”,但实际上它基本上是整个车机的固件。相同的固件已经在 2018 年至 2021 年期间生产的不同现代、起亚和起亚凌动车型上使用。
        主机单元运行在 Telechips TCC893X SoC 上,其 SDK 已经泄露到互联网上。有一个秘密的恢复机制,通过在启动时按住电源按钮(左旋钮)和地图按钮来触发:

 现代 Tucson破解 (二)


我在我的现代途胜2020上试过,我在汽车屏幕上得到了这个错误:

 现代 Tucson破解 (二)


看起来恢复机制正在寻找USB驱动器上的一些加密文件。简单地搜索这些字符串导致了 lk.rom 文件,这是我一直忽略的更新包中的文件。让我们将其加载到 Ghidra 中并查看其中的情况。


逆向 lk.rom


    LK 代表“little kernel”,是许多嵌入式平台中使用的一个小型开源内核。主机单元将 lk.rom 加载到地址 0x82000000。在 Ghidra 中设置正确的起始地址后,我们可以轻松识别出打印大量有用调试信息的 printf 函数。跟踪消息 “[DEBUG] U-Boot Recovery Button pushed …. n” 导致:


 现代 Tucson破解 (二)


看起来恢复机制是 u-boot 的一部分,其入口点是位于 0x820589a8 处的函数:


 现代 Tucson破解 (二)


    使用第14行的debug消息,我们可以很容易地推断出这个函数将u-boot代码复制到0x80000000并启动它。PTR_DAT_82058a38是u-boot的起始地址,PTR_DAT_82058a3c是结束地址:


 现代 Tucson破解 (二)


利用这些地址,我们可以使用以下命令从lk.rom中“提取”u-boot代码。

$ dd if=lk.rom skip=$((0x1055c)) count=$((0x57894-0x1055c)) bs=1 of=uboot.rom

然后在Ghidra中将uboot.rom作为一个单独的二进制文件,起始地址为0x80000000进行分析。


逆向uboot.rom(lk.rom的一部分)

    这里有许多调试字符串,这对于理解正在发生的事情非常有帮助。恢复机制正在USB驱动器上寻找以下文件:

  • security_force/encrypt_lk.rom

  • security_force/encrypt_boot.img

  • security_force/encrypt_system.img

  • security_force/encrypt_recovery.img

  • security_force/encrypt_splash.img

  • security_force/encrypt_partition.dat


还有一个名为security_force/file_info的文件,其中包含了上述每个文件的名称、大小和CRC32校验和。这些文件(除了encrypt_partition.dat)对应于我们在更新包中找到的文件:


 现代 Tucson破解 (二)


它们必须使用AES-128-CBC进行加密,密钥为“)1Zorxo^fAhGlh$#”,IV为“aoAkfwk+#1.6G{dE”。只有system.ext4必须在加密之前转换为sparse镜像。


修补system.ext4

假设我们可以利用恢复机制刷入任何我们想要的东西,对于官方固件来说,最小的补丁将是什么,以便给我们一些访问汽车主机的方式?在搜索原厂应用程序中的可利用漏洞时,我在工程模式中发现了一个隐藏菜单,可以启用ADB:


 现代 Tucson破解 (二)


在“模块信息”的第3页右下角轻击5次可以切换mDispAdb。然而,如果存在ADB_HIDE_FEATURE,则此标志将被忽略,并且可见性始终设置为8,表示GONE。默认情况下,我们可以在system.ext4中看到ADB_HIDE功能已经设置:


$ cat /tmp/car/etc/permissions/com.hkmc.software.engineermode.adb_hide.xml 
<permissions>
<feature name="com.hkmc.software.engineermode.adb_hide" />
</permissions>


好的,让我们删除这个功能,创建一个恢复包,并将其推送到汽车上。长话短说,这行得通了!通过这个简单的改变,我们成功地在Kia Stinger 2020上启用了ADB,并通过USB连接到了它!

 现代 Tucson破解 (二)


获取根shell


现在我们有了ADB shell,如何变成root呢?原来在原厂固件中有一个方便的setuid二进制文件叫做“amossu”:


$ ls -la bin/amossu-rwsr-sr-x 1 root root 37216 Oct  6 08:29 bin/amossu

它简单地执行以下操作:

setgid(0);
setuid(0);
execv("/system/bin/sh",__argv);


工具
我发布了一个小工具以
及创建Gen5导航车辆自定义固件的说明。你可以在这里找到它(https://github.com/rgerganov/gen5fw)。到目前为止,我们已经成功地在Kia Stinger 2020上验证了整个过程(感谢Ali Al-Rawi)。


本合集现代 Tucson破解结束

来源:xakcop.com,感谢rgerganov

现代 Tucson破解 (二)

现代 Tucson破解 (二)


原文始发于微信公众号(安全脉脉):现代 Tucson破解 (二)

版权声明:admin 发表于 2024年4月22日 下午5:26。
转载请注明:现代 Tucson破解 (二) | CTF导航

相关文章