Энтузиаст Дэвид Шютц рассказал, как в рамках программы вознаграждения Tesla пересобрал бортовой компьютер компании в домашних условиях и с какими сложностями столкнулся в этом процессе.

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

Автомобильный компьютер состоит из двух частей — блока управления мультимедиа (MCU) и блока автопилота (AP), расположенных друг над другом. В автомобиле компьютер находится перед пассажирским сиденьем, примерно за бардачком. Сам блок размером с iPad и толщиной с книгу объёмом около 500 страниц, он заключён в металлический корпус с водяным охлаждением. Поискав на eBay «Tesla Model 3 MCU», я нашёл довольно много результатов в ценовом диапазоне $200–300. Просматривая объявления, я обнаружил, что многие из этих продавцов — компании, занимающиеся «восстановлением» повреждённых автомобилей, которые покупают разбитые машины, разбирают их и выставляют на продажу все запчасти по отдельности. Иногда они даже добавляют фотографию оригинального разбитого автомобиля и возможность фильтрации объявлений по запчастям, снятым с него же.

Для запуска автомобиля и взаимодействия с ним мне понадобилось ещё несколько вещей:

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

  • сенсорный модуль от повреждённой Model 3;

  • кабель дисплея для их соединения.

В качестве блока питания я выбрал регулируемый блок 0-30 В с Amazon. Были доступны версии на 5 ампер и 10 А, но на тот момент я решил, что лучше иметь некоторый запас мощности, и выбрал версию на 10 А — это было очень хорошее решение, поскольку позже выяснилось, что вся система может потреблять до 8 А в пиковые часы. Экраны Model 3 оказались на удивление дорогими на eBay, я предполагаю, это потому, деталь популярна в плане замены. Я нашёл довольно выгодное предложение за $175.

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

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

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

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

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

Я увидел, как начали мигать несколько красных светодиодов, и компьютер запустился! Поскольку у меня ещё не было экрана, способов взаимодействия с автомобилем было немного. Прочитав предыдущие исследования @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 # only in Model X/S | IC = instrument cluster 192.168.90.102 gw # gateway 192.168.90.103 ap ape # ap = autopilot 192.168.90.104 lb # no clue 192.168.90.105 ap-b ape-b # also autopilot 192.168.90.30 tuner # Also no clue 192.168.90.60 modem # this has the ftp server

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

Я уже обнаружил 2 сервиса для исследования на MCU:

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

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

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

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

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

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

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

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

В справочнике по электротехнике Tesla, помимо разъёмов, можно найти все номера деталей. На кабеле, соединяющем микроконтроллер с экраном, указан номер 1067960-XX-E. Поиск на eBay выдаёт вот это чудовище: 

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

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

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