2、响应名为“ firmware-handshake”的新贵事件
3、手动(尽管未观察到,但已在文件注释中指出)
该脚本从高层获取并应用更新,如下所示 。
该脚本使用哨兵文件检查是否正在进行现有升级 。
打开升级包并进行安装的外壳程序脚本,检查“ unpack.sh”脚本是否正在运行 。
如果正在进行升级,则执行固件握手,因为更新已经在进行中 。
可以假设网关正在处理升级,并且如果哨兵文件小于20分钟,则do-hardware-shash退出 。因此,不会对网关执行任何主动检查以查看其是否被占用 。
如果网关更新的时间早于20分钟,则将其挂起,并且握手过程将继续 。要查看VPN是否已连接,脚本将检查接口tun0是否存在 。
如果未连接VPN,脚本将等待30秒钟再试一次 。没有积极尝试建立VPN隧道-另一个外部过程会这样做 。建立VPN连接后,脚本将连接到以下URL:
firmware.vn.teslamotors.com:4567/vehicles//handshake
发送以下数据:
vehicle_hardware_configuration_string –由“硬件ID”派生,这是一个用逗号分隔的字符串,用于描述网关存储的车辆配置 。另一个外壳程序脚本/ usr / local / bin /
vehicle_hardware_configuration_string生成此字符串 。格式:

文章插图
从/ etc / swver读取,这是在CID上运行的软件版本 。
然后,服务器返回JSON字符串,该字符串应包含以下字段:
Firmware_download_url –我们将下载的文件的位置
Firmware_download_file_md5 –我们将下载的文件的MD5校验
Download_status_url –用于回传升级状态的URL
Vehicle_job_status_urlUnpack_size –解压缩的固件文件的大小
Install_size –安装固件文件所需的大小
我们发现仍然可以发出这些请求并接受响应 。至关重要的是,我们发现可以使用另一辆汽车的VPN来请求任何VIN 。
我们很惊讶地发现,JSON响应不是使用jq这样的健壮解决方案,而是使用awk,gsub和split手动解析 。然后对这些字段进行一些基本的完整性检查 。为了指示升级已经开始,将download_status_url存储在前哨文件中 。
通过对文件发出HTTP HEAD请求,然后检查firmware_download_url文件的大小 。我们认为这是一种奇怪的机制,因为它可以简单地在JSON响应中传输 。
firmware_download_url在获得的所有响应中都指向服务器
firmware-bundles.vn.teslamotors.com 。尽管是通过握手过程发出的,但没有任何链接有效 。
使用JSON响应中的unpack_size和install_size,对Flash文件系统上的备用空间执行基本检查 。为了防止CID休眠60分钟,将对在端口4035上的CID上运行的Web API发出请求 。现在下载文件 。
它作为一个部分进行下载-不会以任何方式分块或拆分 。如果不是预期的大小,则再次尝试下载 。
无法逃避这种情况,这意味着脚本可能会陷入无限循环 。对于测试期间获得的示例firmware_download_url示例,这些文件仅只能通过Tesla VPN下载 。
然后将文件的md5校验和与期望值进行比较 。如果文件不匹配,则再次尝试下载文件 。下载文件后,将通过CID屏幕上的弹出窗口提示用户升级 。
另一个shell脚本/ usr / local / bin / get-response执行此操作 。它向端口4070上CID上运行的Web API发出请求,并等待一个小时以做出响应 。
如果用户接受更新,则下载的文件将移至/ home / tesla / dropbox,准备安装 。
USB更新
使用USB记忆棒,也可以将更新文件放入/ home / tesla / dropbox 。Shell脚本/ usr / local / bin / usb-upgrade执行此操作 。
该脚本在文件夹/ toinstall中查找文件名,格式为文件名:ui_full_package_*_<code>_pedigree_v*.tar.gz
使用下表,从车辆的VIN码中查找<code>:

文章插图
某些VIN通过USB更新的处理方式有所不同
他的表格显示有带有预设VINS的开发工具 。如果此文件名中没有CID上的软件的当前版本,则将文件复制到Dropbox中,然后安装 。
由于检查是幼稚的,并且忽略了实际版本,因此可以进行固件的升级和降级 。
脚本中似乎有一个错误 。如果脚本中不存在车辆的VIN,则返回的<code>只是空白 。这将导致以下形式的文件匹配:ui_full_package_*__pedigree_v*.tar.gz 。
在USB记忆棒上的给定文件夹中,攻击者似乎可以放置特制的固件更新文件并执行任意代码 。我们尝试了很多次,但无法触发 。另一个安全控制措施是阻止脚本被调用,但是我们无法确定它是什么 。
推荐阅读
- 解除USB限制原来如此简单
- 淘宝极速推广99元效果怎么样 极速推广效果怎么样
- 淘宝怎么找免费货源 开淘宝店去哪里找货源
- 怎么开淘宝店及货源 怎么选择网店货源
- 超级店长怎么用 超级店长需要付费吗
- 开淘宝店的总结分析 淘宝数据分析怎么做
- 开网店的详细步骤网店 如何开网店具体步骤
- 女生120斤怎么减肥
- 人流后半月查子宫内膜0.2cm怎么回事?
- 茶包是怎么出现的,怎么选择柑普的设施呢
