У компании Tesla есть программа баг-баунти, приглашающая исследователей находить уязвимости безопасности в её автомобилях. Для участия мне нужно было настоящее «железо», поэтому я начал искать на eBay детали Tesla Model 3. Моя цель заключалась в том, чтобы компьютер и сенсорный экран Tesla заработали на моём столе, после чего я мог бы запустить операционную систему машины.

Компьютер машины состоит из двух частей: MCU (Media Control Unit, блока управления медиа) и autopilot computer (AP, компьютера автопилота), расположенных один поверх другого. В машине компьютер размещён перед пассажирским сиденьем, примерно за бардачком. Сама эта деталь размером с iPad и толщиной с 500-страничную книгу. Она заключена в металлический корпус с водяным охлаждением:

The Tesla Model 3 MCU and autopilot computer in its water-cooled metal casing
MCU и компьютер автопилота Tesla Model 3 внутри своего металлического корпуса с водяным охлаждением

Поискав на Ebay «Tesla Model 3 MCU», я нашёл довольно много результатов в ценовом диапазоне $200 - $300. Изучая страницы товаров, я заметил, что многие из продавцов — компании-«утилизаторы», которые скупают разбитые машины, разбирают их и по отдельности продают детали. Иногда они даже выкладывают фотографии самих разбитых машин и позволяют фильтровать страницы товаров по деталям, извлечённым из одного автомобиля.

Чтобы запустить автомобиль и взаимодействовать с ним, мне нужно было ещё кое-что:

  • Источник постоянного тока, способный выдавать 12 В

  • Модуль сенсорного экрана из утилизированной Model 3

  • Дисплейный кабель, чтобы соединить их

В качестве источника питания я выбрал модель с настраиваемыми 0-30 В с Amazon. У неё были версии на 5 А и на 10 А; на тот момент я решил, что надёжнее будет взять с запасом, и заказал версию на 10 А. Как оказалось позже, это было очень верное решение, потому что на пике система потребляла до 8 А. Экраны Model 3 на Ebay имели на удивление высокую цену; предполагаю, что это популярная запчасть. Мне удалось сделать довольно выгодное приобретение за $175.

Сложнее всего было заказать кабель, соединяющий MCU с экраном. Он нужен был мне, потому что и компьютер, и экран продавались с кабелями, обрезанными в нескольких сантиметрах от разъёма (любопытно, что так поступало большинство продавцов вместо того, чтобы просто отсоединить кабеля).

Именно тогда я обнаружил, что Tesla публикует справочник «Electrical Reference» для всех своих автомобилей. На сервисном веб-сайте можно найти конкретную модель, поискать компонент (например, дисплей), и посмотреть, как конкретно должна подключаться деталь, какие кабели/разъёмы для этого используются и даже за что отвечают различные контакты внутри разъёма:

Tesla Electrical Reference showing the display wiring diagram and connector pin assignments

Выяснилось, что для дисплея нужен 6-контактный кабель (2 контакта — 12 В и заземление, 4 контакта — данные) со специальным разъёмом Rosenberger 99K10D-1D5A5-D. Вскоре обнаружилось, что если вы не автомобилестроительная компания, делающая крупные заказы, то отдельный кабель Rosenberger вы приобрести никак не сможете. Этого товара нет на Ebay, на Aliexpress, да и вообще практически никаких поисковых результатов не находится.

Немного покопавшись, я выяснил, что этот кабель очень похож на более распространённый автомобильный кабель LVDS, используемый в машинах BMW для передачи видео. Поначалу мне показалось, что разъёмы выглядят абсолютно так же, как у Rosenberger, поэтому я заказал этот кабель:

BMW LVDS cable ordered as a potential replacement for the Rosenberger connector

Компьютер доставили первым. Попытавшись включить его, я поискал в схемах Tesla и на фотографиях людей, создававших похожие системы настольного MCU, какой контакт какого разъёма мне нужен для подключения 12 В и заземления. Так как вместе с компьютером поставлялись обрезанные кабели, мне удалось зачистить соответствующие провода и присоединить к нужным зажимы блока питания:

Diagram showing the relevant connector and pins used to provide power to the board

Замигала пара красных светодиодов, и компьютер запустился! Так как экрана ещё не было, я пока практически никак не мог взаимодействовать с автомобилем. Прочитав исследование @lewurm на GitHub, я уже знал, что по крайней мере в старых версиях автомобилей внутри машины была сеть, а у некоторых компонентов имелся собственный веб-сервер. Я подключил один конец Ethernet-кабеля к порту рядом с разъёмом питания, а другой — к ноутбуку.

У этой сети нет DHCP, поэтому IP-адрес нужно задавать вручную. Выбираемый IP должен иметь вид 192.168.90.X/24 и быть больше 192.168.90.105, чтобы не конфликтовать с другими хостами в сети. На Reddit я обнаружил содержимое старого файла /etc/hosts, из которого ясно, что хосты обычно привязаны к конкретным IP:

192.168.90.100 cid ice # mcu 
192.168.90.100 ic # только в модели Model X/S | IC = instrument cluster
192.168.90.102 gw # шлюз
192.168.90.103 ap ape # ap = автопилот
192.168.90.104 lb # непонятно
192.168.90.105 ap-b ape-b # тоже автопилот
192.168.90.30 tuner # тоже непонятно
192.168.90.60 modem # у него есть ftp-сервер

В посте @lewurm написано, что SSH на порте :22 и веб-сервер на :8080 открыт на 192.168.90.100, то есть на MCU. Осталось ли в новых моделях всё по-прежнему? Да!

Я обнаружил в MCU два сервиса, которые можно исследовать:

  • SSH-сервер, сообщающий «SSH allowed: vehicle parked» («SSH разрешён: машина припаркована»), что довольно забавно, учитывая обстоятельства

    • Этот SSH-сервер требует особым образом подписанных SSH-ключей, которые предположительно может генерировать только Tesla.

    • Любопытно, что в программе баг-баунти Tesla предлагает «программу доступа к руту». Исследователи, которые найдут хотя бы одну реальную уязвимость получения рута, получат постоянный SSH-сертификат для своей машины, позволяющий им выполнять вход под рутом и продолжить исследования. Удобная возможность, ведь забравшись внутрь, будет гораздо проще найти дополнительные уязвимости.

  • REST-подобный API на :8080 , возвращавший историю «задач»

    • Этот сервис называется «ODIN» (On-Board Diagnostic Interface Network); он намеренно оставлен открытым для использования с диагностическим инструментом Tesla под названием Toolbox.

Примерно в то же время я снял металлические пластины, чтобы посмотреть, как же выглядят платы изнутри. Здесь мы видим две платы, которые устанавливаются одна поверх другой:

The MCU and autopilot computer boards separated, showing the two distinct PCBs

После доставки экрана и кабеля BMW LVDS стало очевидно, что разъём, к сожалению, не подойдёт. Разъём BMW был гораздо толще по краям и его невозможно было подсоединить к экрану. Это вынудило меня импровизировать: я зачистил два обрезанных «хвоста» кабелей MCU и экрана и попытался соединить провода по отдельности. Провода были очень тонкими и нежными. Система проработала пару секунд, а потом обломки проводов упали на плату и закоротили её, из-за чего сгорел один из чипов управления питанием:

Сгоревший чип
Сгоревший чип

Было крайне трудно найти название/модель сгоревшего чипа, особенно из-за того, что часть напечатанного на нём текста была повреждена. Я не мог продолжать проект дальше, поэтому пришлось заказывать новый компьютер.

Тем временем моему другу Яссеру (@n3r0li) удалось совершить невозможное: он каким-то образом идентифицировал чип, как понижающий регулятор MAX16932CATIS/V+T, отвечающий за понижение уровня напряжения питания. Мы заказали чип и отнесли плату в местную мастерскую ремонта плат, где удалось успешно заменить его и починить MCU. Теперь у меня было два компьютера.

Итак, мне очень нужен был кабель Rosenberger, который никак не удавалось достать.

Потерпев неудачу в онлайн-поисках и даже посетив сервисный центр Tesla в Лондоне (беседа, мягко говоря, оказалась странной), мне пришлось смириться с тем, чего я пытался избежать: с покупкой всей системы проводов приборной панели.

В Tesla Electrical Reference наряду с разъёмами можно найти номера всех деталей. Поискав кабель, соединяющий MCU с экраном, я нашёл номер 1067960-XX-E. Введя его на Ebay, я обнаружил этого монстра:

Tesla Model 3 dashboard wiring harness listed on eBay, showing a large bundle of cables
Стрелками показаны концы экранного кабеля

Оказалось, что у машин нет отдельных кабелей; они монтируются в эти большие «пучки», связывающие множество соседних кабелей в одну систему. Именно поэтому я не смог найти отдельный кабель — их попросту не производят. К сожалению, у меня не было никаких других вариантов, кроме как купить весь пучок за $80.

Несмотря на свои размеры, он заработал идеально. Автомобиль запустился, включился сенсорный экран. На моём столе лежал автомобильный компьютер с запущенной операционной системой!

Запустив систему, можно было приступать к экспериментам с пользовательским интерфейсом, взаимодействиям с открытыми сетевыми интерфейсами, исследованию шин CAN и, вероятно, даже попыткам извлечения прошивки.