怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程


怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
 
Tesla Model S如何更新其固件?对显示器和仪表盘进行逆向工程时,我们发现了什么?
第1部分:分析硬件,并在CID中完成14层PCB
第2部分:逆转固件更新过程和Suicide Bomber模式的重要性
CID VCM软件架构
与大多数嵌入式系统相比,CID更大,更复杂;对于嵌入式系统而言,CID则是linux发行的Ubuntu的完整版本,这对嵌入式系统而言是不寻常的 。
在内核中,我们找到了自定义元素,例如Harman Redbend 。该内核是使用Linaro工具链构建的 。
为了满足使用开源软件的法律要求,特斯拉在项目进行到一半的时候就透露了内核的来源 。但是,这对逆向工程无济于事,因为它仅占系统的一小部分 。
引导加载VCM
这似乎与许多Tegra设备相似 。
BPMP(启动和电源管理处理器)是Tegra SoC的辅助处理器 。它执行存储在ROM中的只读引导程序,并且是ARM7处理器 。此时,我们关闭了Tegra中的主处理器 。
当BPMP ROM引导加载程序从NOR闪存中读取一条数据时,会提供大量信息 。这称为BCT(引导配置表) 。信息包括:
内存中几个引导程序的地址
将引导程序加载到SDRAM的位置
SDRAM中引导加载程序的入口点
连接到系统的SDRAM的配置(需要进行引导才能访问)
将第一阶段引导加载程序复制到SDRAM之后,BPMP开始执行 。此时,我们尚未打开Tegra中的主处理器 。
第一阶段的引导加载程序似乎称为QUICKBOOT,其大小约为56KiBytes 。明确引用了AES-Cmac(消息认证代码) 。此处使用的字符串中包括“ AES-CMAC Xor”,这些字符串也可在开源引导程序U-boot中找到(github) 。
怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
来自第一阶段引导程序的字符串
人们可能会认为引导加载程序是基于U-boot的,但是特定的加密功能实际上是由Nvidia编写的,因此可以由Nvidia在其他地方免费使用 。
当第一阶段引导加载程序正确设置SoC时,主处理器就会启动 。然后加载第二阶段的引导加载程序,以允许主处理器运行 。
当我们解压缩并运行内核时,我们发现第二阶段的引导程序非常简单 。
我们没有看到任何加密保护的迹象 。它似乎不是基于任何广为人知的引导程序,而是我们认为它是完全自定义的 。
宽松地遵循Android bootimg格式,内核映像由一个文件中的内核和ramdisk组成 。内核激活后,将运行名为/sbin/init-stage-0.sh的脚本 。其主要目的是通过安装NAND闪存分区使系统完全可操作 。
NOR闪光灯
我们在NOR flash中找到了BCT,第一级和第二级引导程序以及内核 。
怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
CID NOR闪存的布局
我们发现许多分区已经像到主分区和恢复分区 。
NAND闪存
/ usr /文件系统存储为sqaushfs文件系统,其中包含在正常操作期间不会更改的二进制文件和脚本 。
SquashFS在低资源嵌入式系统中很常见,是一种压缩的只读文件系统,它允许文件系统的不可更改部分占用较小数量的闪存 。
/ var /目录包含日志,是一个小的128Mb ext4文件系统 。
/ home /目录包含升级文件和临时数据,以ext4文件系统的形式存储在其余的闪存中 。
/ home和/ var目录覆盖在只读文件系统上,仅允许少数几个目录被读/写,这意味着系统的大部分内容都是只读的 。
双库固件
初始ROM引导加载程序运行后,引导加载过程可以选择两个映像:
ROM引导加载程序–仅提供一个副本 。
除非存在灾难性的硬件问题,否则它是不变的,并且不太可能失败 。
stage1_primary / stage1_recovery –由ROM引导程序顺序选择 。
如果第一个失败,则第二个运行 。
除了内存中的位置,这两个引导程序看上去几乎相同stage2_primary / stage2_recovery –在此运行的引导程序由哪个stage1引导程序运行确定 。
同样,两个引导加载程序看起来几乎相同,除了内存中的位置kernel_a / kernel_b –这两个内核的引导参数彼此非常不同系统启动时可以挂载在线/离线usr分区 。
这是两个内核的引导参数:
怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
 
init-stage-0.sh脚本读取thispartid的值,并加载两个/ usr / squashfs分区之一 。如果其中一个损坏,则可以使用另一个恢复 。
我们还可以看到AppArmor通常处于启用状态 。该强制访问控制系统允许内核将二进制文件限制为受限的资源集 。Ubuntu默认情况下启用此功能 。Tesla上的配置看起来是标准配置 。


推荐阅读