车辆
去年夏天,我买了一辆2021年款的现代Ioniq SEL。这是一辆不错的省油混动车,配备了一些不错的功能,如无线Android Auto/苹果CarPlay、无线手机充电、加热座椅和天窗。
我特别喜欢这辆车的一个东西是车载信息娱乐系统(IVI)。正如我之前提到的,它配备了无线Android Auto,这在这个价格范围内似乎是不常见的。像我拿到的许多新设备一样,我想玩弄一下,最终看看我能做些什么。
目标
车载信息娱乐系统(IVI)就像现在许多东西一样,只是一台电脑。我的目标是入侵IVI以获取root权限,希望能够在上面运行自己的软件。当然,破解这样的设备的第一步是进行研究。
我查找的一些明显的东西包括:
- 设备运行什么?
- IVI有两个版本,一个是运行安卓的导航版本,另一个是基于Linux的版本。
- 是否有其他人曾经入侵过?
- 基于安卓的导航版本很容易通过在工程菜单中安装自己的APK文件来入侵。
- 基于Linux的版本尚未被入侵。
- 非导航IVI是否有工程模式?
- 是的
工程模式
我喜欢开发者设置和测试应用程序。通常可以通过与它们交互来获得很多乐趣。我甚至认为我可能会幸运地找到一个选项来启用SSH服务器或类似的东西。
我发现通过进入软件更新屏幕,快速按下更新按钮左侧10次,然后再按下按钮右侧一次,就可以进入我的IVI的工程模式。如果屏幕没有立即出现,按键操作会一直重复,直到成功为止。
工程模式由4位数引脚保护。这个指南帮助我弄清楚了引脚是“2400”。
进入工程模式后,我浏览了菜单,查看所有可用的选项。有大量的诊断,调试读数和隐藏设置。有几个菜单吸引了我的眼球:
-
USB拷贝
-
此菜单有子选项,可将日志复制到USB驱动器或从USB更新系统的各个部分。
-
其中一个选项表明按住IVI上的“Radio”按钮也会触发日志收集。
-
模块信息> ISV设置
-
该菜单有一个ADB TCP选项,以及“SW Test Tools”(软件测试工具)单选按钮。
使用这些设置,我收集了一堆日志到我的USB驱动器,并试图使用ADB连接到IVI。
ADB TCP
我用无线Android Auto连接我的手机,以进入IVI的Wi-Fi网络,并试图端口扫描设备,但我找不到任何开放的ADB端口。:(我最终发现这个设置并没有真正做任何事情。
日志
这些日志被证明是IVI如何在引擎盖下工作的数据库。
日志被传输到一个名为“daudio2.0v_{Date}-{Time}.tar.gz”的大tar.gz中的USB。
该归档文件包含许多文件,包括内核日志、“top”命令的输出、logcat日志和来自BlueLink的日志。
最有趣的日志文件是logcat文件。基本上,在IVI上运行的每个应用程序都有大量的日志记录,所有这些都通过管道传输到这个文件。
Hacking It
在这一点上,我知道进入系统不会像打开设置那么容易。我需要利用一些东西才能进入。
我决定弄清楚如何进入的最好方法是对IVI上运行的应用程序进行逆向工程。但要做到这一点,我需要应用程序的文件。我认为最简单的方法就是简单地更新固件并将其拆包。
固件
最后我做了更多的研究,浏览了日志。我发现这些IVIs运行现代摩比斯的“D-Audio 2 V”。D-Audio 2 V是现代显示音频操作系统的第二代,用于现代和起亚的各种车辆。我发现现代摩比斯的网站上有一些D-Audio 2的源代码可以下载。我浏览了一下,但大部分都只是各种开源项目的小补丁,以使Wi-Fi系统正常工作。D-Audio 2系统的固件更新可在update.hyundai.com的“Display Audio Software Update”(显示音频软件更新)下找到。不幸的是,我的特定车辆没有更新,所以我只是下载了其他几辆车的更新。
固件文件包含在一个简单的.zip文件中,其中包含另一个zip文件。内部zip文件名为enc_system_package_{version}. zip。查看system_package zip,它似乎包含了IVI中各种模块的固件,如GPS和HD Radio,以及系统映像本身。
更新看起来很有希望,我试图提取系统映像,整个zip文件都是加密的。
尽管如此,我并没有完全灰心,我已经在我的电脑上有一些工具,比如John The Ripper和Hashcat,可以用来暴力破解zip密码。我尝试了暴力破解密码,最多尝试8个字符,因为这是我的系统在合理的时间内可以完成的,但是没有成功。我还尝试使用一些我的密码列表,但也没有成功。
破解它
在这一点上,我开始研究其他可能可以使用的工具或服务。就在那时,我发现了bkcrack。显然,传统的zip加密可以通过已知明文攻击来破解。这意味着如果我能找到至少一个存在于加密zip内的文件中的12字节数据,我可能就可以解密整个zip文件。
搜索是为了找到匹配的文件。我查看了加密的zip文件列表,看到了一些适合攻击的候选文件。在“MODEMus”文件夹内,有一个名为modem_version.txt的文件,长度为37字节。由于它是一个文本文件,很可能是以人类可读的格式编写的。
最初,我在互联网上搜索文件,希望能找到匹配的文件,但大多数结果都是失效的FTP链接,所以我采取了另一种方法。
我希望现代汽车会在他们的IVI中重新使用调制解调器模块,因此也会重新使用调制解调器的固件文件。如果我能找到另一个IVI的未加密调制解调器更新,我就有希望找到一个匹配的modem_version.txt文件。
从现代汽车的更新网站上,我发现他们为他们的导航IVI提供了一个特殊的更新程序。
我安装了导航更新软件,并下载了2020-2021年现代Ioniq导航IVI的最新更新。
我去了更新程序下载文件的地方,打开了system_package tar文件。
里面有一个调制解调器文件夹,里面是一组非常熟悉的文件!但是modem_version. txt文件的大小不对。:(
但是我知道里面还有很多其他的文件也可能是匹配的。但哪些是匹配的呢?
对比两组文件,有几个大小相同,但不能保证文件的内容相同。
幸运的是,zip文件救了我。当制作一个zip文件时,它会计算每个文件的CRC值。CRC是循环冗余校验,是zip解压程序用来验证文件是否被正确解密/解压的。相同的文件应该产生相同的CRC值。由于导航的更新文件是在一个tar文件中而不是一个zip文件中,我先提取了它们,然后将它们压缩成了zip格式。有一对文件匹配:“partition.mbn”。我找到了我的明文。
我把新发现的明文加载到bkcrack里...这不起作用?但为什么呢?
最后,我只是尽可能地试验各种方法,看看能否得到一些密钥。正如我所发现的,尤其是如果你将bkcrack限制在最小的12字节明文范围内,会有很多误报。bkcrack失败了。
但尝试使用这些密钥将只会导致一个无效的zip文件。
我回到了bkcrack的Github问题页面,并阅读了所有的问题。在那里,我发现所需的“明文”不是原始文件本身,而是原始文件的正确压缩版本。
我需要找出现代汽车Mobis用来压缩原始zip文件的确切程序和参数。
我使用Windows内置的zip创建程序压缩了我的partition.mbn文件,但没有成功。然后我尝试了7Zip中的每一个参数组合。
我甚至编写了一个使用压缩库创建尽可能多的组合的C#程序。但是什么都没用。我觉得现代汽车不太可能使用一个奇特的Windows zip程序,所以我转向了Linux。
我使用我安装的Kali自带的zip命令行工具创建了大量具有各种设置的zip文件。
然后我逐个进行了测试,在此期间我还发现我为bkcrack使用了错误的参数。我需要指定zip文件中的文件条目,而不是zip文件本身。经过多次检查我的列表并尝试多个可能的密钥后,bkcrack终于找到了正确的密钥。
我使用bkcrack找到的“主密钥”制作了一个zip文件,然后...
Finally?
我成功地从加密的zip文件中提取了每个文件!
bkcrack还允许你从它找到的主密钥中恢复zip文件的密码,所以我尝试了一下,但它没能找到任何长达16个字符的密码,这已经是我在我的电脑上可以合理破解的最长长度了。
但既然现在我可以访问所有的文件了,我提取了enc_system文件夹中的system.img文件。仅仅从可用的文件中,我就学到了很多东西,比如系统中安装了Python和Perl。我觉得这对将来制作反向shell可能会有帮助。
最终,我找到了应用程序存储的位置,并开始对它们进行逆向工程。幸运的是,由于应用程序将大量的调试信息打印到Logcat文件中,很多重要函数的标记和逆向工程都变得相当简单。
网络接入
我还发现安装了RTL 8152/8153 USB以太网适配器的驱动程序。
我购买了多个基于RTL8153的USB以太网适配器,希望能找到一些开放的端口。我买的适配器中有一个带有内置的USB集线器,这使得它与IVI不兼容,但我买的第二个适配器是一个直接的以太网适配器,让我成功地连接到了系统。不幸的是,它只允许我访问CarPlay和Android Auto服务器,没有其他可用的端口。
在逆向工程“automotivefw”二进制文件的过程中,我发现工程模式中的ADB TCP设置将eth0的IP地址设置为192.168.7.110。使用日志,我发现eth0应该具有MAC地址“F4:50:EB:2E:58:00”。我希望如果我能够改变我的RTL8153适配器的MAC地址,我就可以访问这个网络,这个网络有希望能够提供ADB访问。
我将我的RTL适配器传递给了我的Kali虚拟机,并尝试使用ethtool为其烧入一个新的MAC地址。但我很快发现RTL8153的MAC地址无法使用ethtool编辑。
我在网上搜索了任何能帮助我的工具,但我读到的所有内容都让我相信这些芯片的MAC地址设置是无法编辑的。在网上搜索了几个小时后,我找到了Realtek的RtPGtoolUI实用程序的图片。根据我所了解的信息,它看起来是制造商用来设置这些USB以太网适配器的实用程序,包括烧录它们的MAC地址。通过我读过的所有文档,我还发现许多这些适配器使用了一种叫做EFuses的东西,而不是传统的闪存存储。如果我的适配器使用EFuses,即使使用了正确的工具,我也有可能无法更新它,但我仍然抱着希望并继续搜索。
我花了无数个小时试图找到应用程序的下载。最终,我找到了合适的可疑的中国论坛,并下载了该软件。RtPGtoolUI
经过一番摸索,我成功地将一个新的MAC地址烧录到了我的适配器上,尽管它使用了EFuses。
网络访问?
我将新烧录的以太网适配器插入汽车的USB端口,但却发现没有任何变化。通过Wireshark也没有看到不同的流量。我可以看到MAC地址的更改是成功的,但它并没有给我额外的访问权限,甚至没有给我一个IPv4地址。
我扫描了192.168.7.110地址,它确实指向了IVI,但只有相同的CarPlay/Android Auto端口是开放的。
在这之后,我查看了日志,意识到eth0设备是一种内置的以太网适配器,总是处于离线状态。无论我使用什么样的USB适配器,它始终出现为eth1。同时,我也意识到当Wi-Fi密码生成时,它被记录在日志中,这意味着我可以使用Wi-Fi连接。连接到Wi-Fi产生了与以太网适配器相同的访问权限,只是我的笔记本终于获得了一个正确的IPv4地址。
由于网络访问途径失败了,而且我无法通过逆向工程找到任何后门或易受攻击的漏洞,我决定尝试进行固件更新过程。
Firmware更新
如果我能够弄清楚固件更新的所有安全措施,我就可以修改现有的系统映像,加入我的后门,从而获得对IVI的完全访问权限。
在系统映像中,我找不到处理固件更新的任何二进制文件。工程模式应用程序和设置应用程序指示,一旦在设置中按下更新按钮,IVI将启动到恢复模式。在固件更新的enc_system文件夹中有一个enc_updateboot.img文件。我猜想这个映像包含了恢复系统。不幸的是,7Zip无法像提取system.img文件那样提取这个映像,用Notepad++打开映像文件揭示了其中的原因。
没有可读的字符串,文件被加密了。我想这就是“enc_”前缀的意思。
查看更新中的其他文件,所有带有“enc_”前缀的文件都已加密。
我又被卡住了。如果没有加密密钥,我将无法了解更多的系统更新过程。我决定继续搜索我已经掌握的所有信息。我继续对所有我能找到的应用程序进行逆向工程,我搜索了我提取的日志,我查看了我之前下载的Mobis网站上的开源代码
Did I read that right?
在浏览Mobis网站上的源代码时,我搜索了所有shell脚本文件。在结果中,我发现了一个名为Linux的shell脚本文件。
这个文件打开了一切。原来这是创建系统更新zip文件的脚本。
原来我的硬盘上一直有系统更新的zip密码。
很有帮助的是,加密方法、密钥和IV也在脚本中。
该脚本还暗示使用RSA签名,但不幸的是,用于此的密钥不在源代码中。
但至少我有密钥。为了验证没有其他人已经得到了这一点,我谷歌了加密密钥。
Google Git? Apple? Chegg????
原来该脚本中的加密密钥是NIST文档SP800—38A中列出的第一个AES 128位CBC示例密钥。
现代摩比斯肯定不会用这把钥匙,这只是测试用的,对吧?没有错误?不不可能...
我可以在7Zip中打开文件,但它只有一个损坏的条目。
但是,在该文件上运行binwalk显示updateboot.img文件已成功解密,并且其中有大量内容。
在binwalk中使用-e(提取)参数,我提取了img文件,显示了一个基本的Linux设置。
在/usr/bin文件夹中,我发现了一个名为updateAgent的二进制文件,它看起来很有希望。
由于我已经有了zip密码和加密密钥,我决定寻找签名密钥,幸运的是,他们不仅留下了公钥,还留下了私钥。
在搜索了一些关键字,如“RSA”,我找到了公钥,但没有私钥。
我再次在谷歌上搜索了私钥的一部分,以进行合理性检查。
哦,他们又一次使用了一个非常常见的密钥。我不禁想知道他们是否使用了那个链接的“RSA Encryption & Decryption Example with OpenSSL in C”教程…
等待的游戏
现在我已经拥有了所有的“城堡之钥”,但仍然没有针对我的特定车型的固件更新。我不想冒险破坏我新车的主机单元,所以我选择等待更新的到来。
本合集共7部分,本篇为第一部分
来源:programmingwithstyle.com,感谢greenluigi1
原文始发于微信公众号(安全脉脉):HowIHackedMyCar 2021款 现代IONIQ (一)
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论