Тыжпрограммист, честь тебе и хвала. Возможно, твоя юность прошла в растянутом шерстяном свитере, но сейчас ты гордо смеешься в лицо любому приколу об айтишниках. Возможно, прошло время ремонта автомобилей с ДВС с мужиками в гаражах, но....Валера, настало твое время.
Ты айтишник, на тебя с обожанием смотрят женщины и с завистью мужчины. Хорошо, что ты уже за компьютером, будем в две клавиатуры хакать Теслу.
Для начала следует разобраться с hardware в Вашей Tesla. Нас интересует MCU (Media Control Unit), Бывает MCU1(Tegra) и MCU2(Intel).
В Тесла есть специальный диагностический режим, в котором видны все текущие ошибки, 100 последних ошибок. Есть возможность открытия сервисного меню для калибровки отдельных узлов.
Если у Вас Tesla model S дорестайлинговая на MCU1. Подключаемся вместо приборной панели в Fakro-Lan и запускаем скрипт перевода в factory. Factory mode отличается от Developer mode тем, что после перезагрузки не слетает.
#!/bin/bash
#
# Put Tesla MCU1 in factory mode
#
# Call over diagnostics port with seceth enabled
#
# Reboot MCU afterwards
#
VALUE=true
if [ ! -z "$1" ]; then
VALUE=$1
fi
CID="192.168.90.100"
curl "http://${CID}:4070/_data_set_value_request_?name=GUI_factoryMode&value=${VALUE}"
Для получения обновлений и управления автомобилем через приложение нужно, чтобы на машине были живые сертификаты. Сертификаты можно утерять, если автомобиль в период их смены долгое время будет без интернета или в случае рутования машины.
Сертификаты живут здесь /var/lib/car_creds/car.{crt,key}
.
Каждому автомобилю выдаются уникальные клиентские сертификаты для Hermes/OpenVPN, и они периодически меняются. Это усложняет захват образов прошивки или проверку бэкенда Tesla, так как сначала вам нужно получить root-доступ к автомобилю.
Получение root-прав позволяет Вам загружать любую модифицированную прошивку. Например, превратить Ваш авто в бэтмобиль.
Иногда это вынужденная мера, так как eMMC от Hynix на Тегре не очень хорошего качества и живет около 5 лет, потому что запись в /var очень активная. Для замены чипа памяти на Swissbit eMMC Вам потребуются root-права.
Я уже писал как снять дамп с NAND, здесь процесс абсолютно идентичный. Если память не поменять заблаговременно, то eMMC будет изнашиваться, процессор Tegra не сможет загрузиться, а ваш экран MCU не будет включаться или MCU будет перезагружаться и перезагружаться.
Конечно удалять и заменять этот чип, рискованно. Но как только MCU мертв, маловероятно, что вы сможете восстановить раздел /var, который является разделом 3 на чипе.
MMC/SD на самом деле является стандартом интерфейса, который позволяет различным производителям создавать чипы. Если вы не хотите сейчас заменять чип и просто хотите получить дамп, вы можете припаяться к колодкам на задней панели CID, подключить их к выводам ридера и прочитать eMMC таким образом.
Если Вы будете использовать такой способ - смотрите инструкцию к Вашему ридеру.
Получение root-доступа
Есть возможность получения root доступа через уязвимости софта, но они легко закрываются. Есть железный вариант и он надежнее. Это работает на Теграх без автопилота и с автопилотом 1 поколения. CID - центральный дисплей это дочерняя плата к MCU.
CID сделан Nvidia, процессор на MCU так же Nvidia. Поскольку это сделано nVidia, они использовали типичную систему на своих высококлассных видеокартах, то есть обновление прошивки идет попеременно в раздел 1 или 2, в зависимости от того, что в данный момент не активно, новая прошивка проверяется, затем автомобиль перезагружается на новую прошивку и развертывает поэтапные компоненты в остальной части автомобиля.
Загрузочный сопроцессор живет в чипе Tegra 3, отличном от реального процессора T3, и при сбросе этот сопроцессор инициализируется. Это довольно большой чип для встроенного устройства (512 МБ), и причина в том, что он отслеживает, какой раздел в eMMC является активным, а затем грузит ОС из него в оперативной памяти при каждой загрузке. После завершения работы сопроцессор цепочкой загружается в процессор T3, который загружается в файловую систему в оперативной памяти, и монтирует раздел eMMC 3 как /var и 4 как /home.
Более подробно на английском https://unofficial-tesla-tech.com/index.php?title=Rooting_MCU1
Если у тебя model3, значит ты умеешь отделять зерна от плевел, тебе маркетинговый шит что слону дробина, не бьет прямиком в мозг, то ты понимаешь, что Tesla model 3 это лучший электромобиль на текущий момент. Это многократно подтверждается владельцами с опытом эксплуатации разных моделей.
Возможно, Вам как и мне, с первого взгляда на интерьер model3 захотелось эту видеодвойку на шифонэре прикрыть салфеточкой.
Но, это только на первый взгляд. Чем дольше ты будешь пользоваться этим авто - тем более ты проникнешься гениальностью исполнения.
Недавно я получил Tesla Model 3, и так как я обожаю ковыряться в системах и пытаясь выяснить, как устроен мой компьютер (моя машина).
Я работаю над инфраструктурой машинного обучения ( https://golf-robotics.com/, сами понимаете, будущее за роботами), поэтому мне хотелось бы иметь возможность взглянуть на то, как автопилот FSD работает под капотом и что он на самом деле может делать за пределами той ограниченной информации, которую показывает пользовательский интерфейс.
Если Вы хотите повторить мои действия или испытывать что-то новое стоит зарегистрироваться в Tesla bug bounty https://bugcrowd.com/tesla
Одобренные участники программы могут взламывать автомобили Tesla без боязни юридических последствий или отзыва гарантии. Тесла поможет Вам оживить кирпич, но это не точно!
cid/ice - это компьютер, который управляет дисплеем и всеми медиа-системами, такими как звук.
192.168.90.100
первичный и вторичный компьютеры автопилота.
192.168.90.103 - ap/ape
192.168.90.105 - ap-b/ape-b
Шлюз - это в первую очередь UDP-сервер, который управляет коммутатором, конфигурацией автомобиля и прокси-запросами между стороной ethernet (cid/автопилот) и
192.168.90.102 CAN-ШИНА к контроллерам и датчикам двигателя.
Модем - это LTE-модем
192.168.90.60
Тюнер - это для AM/FM-радио. Не присутствует на более новых автомобилях модели 3, включая мои. Отсутствие AM/FM-радио действительно кажется проблемой безопасности, поэтому я был удивлен, увидев, что оно было удалено.
192.168.90.60
Внутренняя автомобильная сеть использует Marvel 88EA6321 в качестве коммутатора. Это автомобильный гигабитный коммутатор.
Большинство соединений используют 100BASE-T1, который является 2-проводным PHY для Ethernet. Компьютеры автопилота, модем, тюнер, шлюз, CID-все используют 100Base-T1. Есть два стандартных порта Ethernet. Один из них расположен на материнской плате CID и имеет стандартный разъем Ethernet. Другой расположен в пространстве для ног со стороны водителя и имеет специальный разъем.
Tcam
TCAM-это особый тип памяти, который может выполнять очень быстрые поиски/фильтры за один цикл. Это позволяет Шлюзу задавать пакетные фильтры для применения коммутатором. По умолчанию порт ethernet в пространстве для ног со стороны водителя отключен этими правилами. Диагностический разъем на материнской плате CID может получить доступ только к портам 8080 (Odin) и 22 (SSH) на CID.
Дорестовые Model S используют постоянное соединение OpenVPN для связи с “материнским кораблем”, как называет его Тесла. Все коммуникации с Tesla проходят через это VPN-соединение, так что нет никакой возможности получить файл обновлений.
Вместо использования OpenVPN M3 запускает прокси-сервис под названием Hermes. Hermes-это относительно простая служба, которая может передавать неаутентифицированные запросы по CID на материнский корабль. Предположительно, поддержание постоянных соединений OpenVPN на 500 000+ автомобилях не было масштабируемым, поэтому они переключились на более простое решение.
Бинарники
Есть куча разных двоичных файлов hermes. Все они, кажется, написаны на Go :). Приятно видеть, как мой любимый язык программирования работает в моей машине.
$ ls opt/hermes/
hermes_client* hermes_fileupload* hermes_historylogs* hermes_teleforce*
hermes_eventlogs* hermes_grablogs* hermes_proxy*
$ file /opt/hermes/hermes_client
opt/hermes/hermes_client: sticky ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=JRZRLflVY89A6p67rwkt/nb9KmeWMLadrBGvRVujH/aJPtciQz8Xldpa7VcVy_/XzIY9KY7sZI0KdwLYOK5, stripped
Odin
Odin-это сервис python 3, работающий на каждом автомобиле. Он используется для различных действий по техническому обслуживанию автомобиля, таких как калибровка радара и камер. Если вы подключитесь к внутренней карточной сети, то сможете получить к ней доступ по адресу 192.168.90.100:8080.
Если вы попытаетесь выполнить какое-либо из действий на Odin, он просто выдаст ошибку.
Odin реализован довольно интересным способом. Есть список задач и сетей. Задачи-это действия высокого уровня, которые могут быть выполнены кем-то с определенными разрешениями.
LIB-файлы-это “сети”, которые, по-видимому, являются специфичной для домена программой языка/пользовательского интерфейса только для создания служебных задач.
Сети очень близки к JSON, но хранятся в файлах .py.
Вот отрывок из одного:
network = {
...
"get_success": {
"default": {"datatype": "Bool", "value": False},
"position": {"y": 265.22259521484375, "x": 108.96072387695312},
"variable": {"value": "success"},
"value": {"datatype": "Bool"},
"type": "networks.Get",
},
"IfThen": {
"position": {"y": 340.1793670654297, "x": 297.02069091796875},
"expr": {"datatype": "Bool", "connection": "get_success.value"},
"if_true": {"connection": "exit.exit"},
"type": "control.IfThen",
"if_false": {"connection": "capturemetric.capture"},
},
...
}
Kernel / Secure Boot
Я не очень много знаю об используемом Intel SOC, но он поддерживает некоторую безопасную загрузку. У меня нет возможности проверить, включен ли он, но я не удивлюсь, если это так. Если он не включен, то должна быть возможность изменить kernel, чтобы отключить dm-verity и загрузить неподписанный образ.
Updater
Все прошивки блоков подписаны Tesla. Программа обновления проверяет подпись перед обновлением, чтобы убедиться, что ничего странного не происходит. Это означает, что мы не можем использовать программу обновления для установки модифицированной прошивки.
CAN Bus
В автомобиле есть несколько шин CAN, до которых можно добраться. CAN-шина не зашифрована, поэтому мы можем извлечь из них изрядное количество внутренних данных. Было несколько проектов по реинжинирингу значений CAN.
Есть пара готовых диагностических инструментов, которые вы можете использовать для их чтения.
Сервисы и приложения
Spotify работает под управлением пользователя spotify как сервис. Похоже, нет никакого способа развернуть новые изолированные приложения в системе. Я думал, что будет что-то похожее на Android APKs для чего-то вроде Spotify, но это просто приложение Qt.
Я продолжаю разбираться, если Вы считаете пост интересным - дайте знать и я напишу продолжение.
Большое спасибо ребятам из сервиса Tesla в Москве https://teesla.ru/ за оказанную помощь в попытках собрать воедино возможные варианты самостоятельного обслуживания своего автомобиля.
Просто для справки, перевод в factory в СНГ оценивается где-то в $200, теперь Вы можете это делать бесплатно! За смену памяти на Тегре в сервисах могут попросить до $1000, но Вы во всеоружии!
Imbecile
Python — удивил. Не ожидал его увидеть внутри.
Статья интересная, продолжайте. Больше деталей.