现代 Tucson破解 (二)

admin 2024年4月22日18:46:25评论16 views字数 2617阅读8分43秒阅读模式

        之前的帖子中,我展示了如何破解现代途胜 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破解 (二)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月22日18:46:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   现代 Tucson破解 (二)https://cn-sec.com/archives/2680901.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息