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


文章插图
基于人格的条件流示例
尽管看到了许多错误,但是可以在QEMU仿真器中运行二进制文件 。二进制程序按预期启动了两个侦听服务 。

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

文章插图
在仿真器中运行IC更新器
二进制文件在初始化期间对其自身执行sha512哈希 。我们惊讶地发现,尽管sha512输出64个字节,但仅保留了前8个字节 。这意味着可以使用蛮力找到哈希冲突 。
怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
hash_self对二进制文件进行sha512哈希

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

文章插图
截断的sha512哈希输出

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

文章插图
一般sha512sum
稍后,当向固件更新服务器发出请求时,此哈希将用作User-Agent字符串的一部分 。
怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
哈希被放入请求的用户代理部分
攻击者可以在运行替代恶意软件的同时报告预期的sha512哈希,尽管这意味着服务器可以确定正在使用哪个版本的更新程序 。
这不是针对恶意行为的有力保护 。通过计时器或按需执行,更新程序可以在缓冲区中处理一系列命令 。可以通过cid-updater或打开的命令端口输入它们,从而允许Tesla以太网上的其他设备执行操作 。
以下是任务“ fwheartbeat”的示例,该任务以1小时的间隔启动,并调用了函数start_regular_timer:
怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
在计时器上添加了fwhearbeat
通过调用函数do_after_e_ms,还可以在固定时间段后运行命令 。这是重新启动固件下载的示例:
怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
经过一段时间后,下载重新启动正在运行
这些命令由字符串引用,可以采用许多值,并存储在大型数组中 。
怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
命令数组
使用不同的参数,命令“ install”和“ patch”都最终调用函数do_install 。
像交互式命令处理器一样,该过程的命令端口提供了使用技巧和其他帮助 。
怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
要求ic-updater通过HTTP提供文件的示例

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

文章插图
通过HTTP下载提供的文件

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

文章插图
通过命令端口报告的当前状态
需要会话令牌来保护IC和CID之间的命令 。每天更改一次,并通过VPN从Tesla服务器进行同步 。如果攻击者可以嗅探IC和CID之间的连接,并使用它发送自己的命令,则攻击者可以拦截此令牌 。
我们能够将二进制文件放入开发模式 。完成此操作后,包括签名检查在内的大多数安全功能都被禁用 。
怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
开发模式导致签名检查被跳过
二进制文件包含大量功能 。从最高层次来看,最重要的过程如下:
1、握手-将请求发送到包含车辆详细信息的Tesla服务器并接收对车辆执行操作的响应的过程 。
2、基于握手下载和解密各种固件更新文件将下载并解密的固件更新文件(称为补丁(完整的固件更新) 。
3、bsdiff40(二进制difs)或Redbend delta(专有二进制diff))安装到脱机闪存分区中
4、中继–将固件从CID复制到IC重新部署–将固件的离线状态复制到在线状态以进行恢复其他功能包含在二进制文件中,但未使用 。
握手
类似于外壳脚本更新,有关车辆的数据使用VIN进行监控,然后发送到远程服务器,该服务器以任何可用的更新作为响应 。
通过功能do_handshake向固件服务器发出POST请求 。要从文件连接,这需要固件服务器的配置(包括服务器名称,端口和路径) 。
怎么使用黑客手段逆向分析一点点揭开特斯拉固件更新过程

文章插图
配置握手请求
POST请求中包含的数据比shell脚本版本复杂,包括以下内容:
1、车辆VIN –从网关检索和缓存,而不是从文件中读取 。在请求的路径中发送 。
2、VHCS(车辆硬件配置字符串)–基于从网关恢复的hwids.txt的字符串(使用函数fetch_vhcs生成) 。作为POST参数发送 。


推荐阅读