劫持Uconnect

优质
小牛编辑
115浏览
2023-12-01

劫持Uconnect

接下来你会发现,要想劫持Uconnect设备,并不需要远程入侵这辆吉普,但是,要想弄清楚如何探索头单元和其他部分,劫持是很有必要的。我们在这里提供了一些具体的信息来帮助那些热衷于访问头单元文件的用户。很显然,本地安全是整个汽车安全中很重要的一个部分。因为任何漏洞作者都会告诉你说,只有搞明白了目标系统中错综复杂的关系,你才能创建一个能完全发挥作用的漏洞。

总的来说,劫持Uconnect设备的方法有两种,第一种适用于所有的版本,也很简单;第二种只适用于特定的操作系统版本,但是可以视为一种合法的入侵。

任意版本

你可以把一个有效的ISO文件放到一个U盘上,再把这个U盘插入到Uconnect系统的USB端口。头单元就会识别这个包含有更新文件的U盘并开始更新过程,如下。

{%}

图-Uconnect的更新界面

如果你尝试在U盘验证后,但是重启前,移除U盘,系统就会放弃更新并重启进入常规(非更新)模式。

但是,在验证了U盘后,系统就会重启头单元。如果,你这时候关机并拔出U盘,系统就会简单地要求你插入U盘。

{%}

图-要求插入U盘的界面

此时,你可以插入一个新的U盘。我们不清楚系统会如何检查新的U盘,但是一定和原来的检查方法很 “接近”或者就根本不检查。然而,U盘上可以包含修改后的文件。比如,通过修改原始ISO文件的十六进制值来更改根密码是可以成功的。更新是从ISO文件上运行的,包括用于验证ISO有效性的代码。所以,如果你愿意的话,也可以阻止代码运行完整性检查。

版本14_05_03

版本14_05_03中存在一个bug,能允许绕过系统的ISO验证过程。不过,这个ISO文件中的某些属性还是要保持不变的,至于原因我们也不是完全清楚(如上)。至少,我们知道不能更改的属性包括文件中的一些哈希和签名。通过手动编辑ISO就可以绕过完整性检查。

系统中的bug:

/usr/share/scripts/update/installer/system_module_check.lua
91   local fname= string.format("%s/swdl.iso", os.getenv("USB_STICK") or
"/fs/usb0")
 92    local FLAGPOS=128
 93
 94    local f = io.open(fname, "rb")
 95    if f then
 96       local r, e = f:seek("set", FLAGPOS)
 97       if r and (r == FLAGPOS) then
 98          local x = f:read(1)
 99          if x then
100             if x == "S" then
101                print("system_module_check: skip ISO integrity check")

绕过ISO有效性检查很简单,只需要在一个十六进制编辑器中手动编辑文件并把偏移128 (0x80) 上的值修改为‘S’ (0x53)。

{%}

图-修改后的完整性检查字节

更新模式

如果想在更新过程中运行代码,比如,要想绕过除了ISO完整性检查之外的其他检查,你可以更改’system_module_check.lua’。要想绕过某些过程的最有效办法就是修改ISO,让系统检测ISO是不是正在绕过完整性检查,如果是,就放弃更新过程。这样,你就可以在不完成Uconnect系统更新过程的情况下,运行代码了,而完整更新过程可能需要30分钟。仅仅通过修改‘cmds.sh’ 的内容,就可以放弃整个更新过程。

上面提到的这种在更新过程中运行代码的方法存在弊端,主要是头单元会处于 “更新模式”(更多细节请参阅‘bootmode.sh’ ),也就是说并不是所有的文件系统都会挂载,并且类似网络连接这样的功能也不会启用。但是,头单元在安装更新的过程zhong是可以修改的,而且这种更改是不会因为汽车重启而移除的。

常规模式

用另外一种不同的方式来修改ISO就可以让代码在 “常规”模式运行,这样就能访问所有的文件系统和网络连接了。为了在常规模式下更新代码。用户必须修改 ‘boot.sh’ 文件来运行一些代码。下面就是劫持ISO时,boot.sh文件的差别:

< sh /fs/usb0/cmds.sh &

< ######rently started with high verbosity

---

> # Start Image Rot Fixer, currently started with high verbosity

在做出了更改后,Uconnect系统在启动时,就会执行U盘上‘cmds.sh’文件中的任何命令。例如,你可以更改根目录并启动SSH守护进程,这样就可以获取SSH远程权限了(给你访问Uconnect设备的根权限)。

首先,你必须修改ISO中的根密码,然后,在‘cmds.sh’文件中添加下面的命令。这样在开机时SSH就能启动:‘/fs/mmc0/app/bin/sshd’

如下是通过SSH登录哈曼Uconnect系统:

ssh root@192.168.5.1
******************************** CMC ********************************
Warning - You are knowingly accessing a secured system. That means
you are liable for any mischeif you do.
*********************************************************************
root@192.168.5.1's password:

注意:其中有个词拼错了。

在很多时候,你可能想要在Uconnect系统中放入文件。要想实现这一点,你必须要能写入一个文件系统,就像运行挂载命令一样简单:

mount -uw /fs/mmc0/

很明显,通过发出另一个挂载命令就可以逆向这个过程:

mount -ur /fs/mmc0/