LINUX.ORG.RU

Поиск уязвимости в автомобильной магнитоле

 ,


4

5

Здравствуй ЛОР, с необычным кмк вопросом сегодня я.

Ищу совета, помощи.

История длинная, начну издалека и надеюсь у вас хватит терпения дочитать до конца.

В моей машине с самого начала ее существования была установлена довольно примитивная магнитола. Хотелось чего-то помощней с навигацей и блекджеком.
Купил, поставил.

Тут небольшое отступление: автомобили марки Citroen и Peugeot комплектуются магнитолами производства компании Magneti Marelli.
Магнитолы эти одинаковы внутри и отличаются лишь интерфйсом.
Некоторые имеют тач, и часть функций там выведена на кнопки на экране. Некоторые тача не имеют и тогда эти функции выведены на хардварные кнопки.

Для подгонки по месту использования под конкретный автомобиль используется специальный дейвайс и программка разработки опять же концерна PSA. Суть в том что бы отредактировать некое подобие реестра зашитого внутри магнитолы.
Техник на СТО подключается к магнитоле через CAN-шину в автомобиле и задает настройки. Настроек очень много, начиная от «дизель/бензин» и до «количество динамиков». Можно также включать различные опции, например поддержку Mirror Link, Android Auto.

Однако не все так просто. Как оказалось, перед тем как отправить параметр конфигурации в магнитолу, мерзкая программулина связывается с материнским кораблем, в смысле сервером и проверяет - а чо ваще на этой машине должно стоять? И если ответ ее не устроит, то параметр в магнитолу не прописывается.

Моя магнитола снята как раз с автомобиля Peugeot 208 а установлена в Citroen C4. Машины немножко похожи но понятное дело телекодировать магнитолу не удается так как сервер видит что наи моей машине эта магнитола стоять не должна. Если кто не в курсе, все автомобили идентифицируются по уникальному VIN-номеру.

Как только не пытались мы с электриком на СТО обойти защиту - ничего не получается. Как потом я узнал позже, над этой проблемой бьется еще пара человек в инете но они больше по ремонту машин специалисты а не по компьютерам. Поэтому результата от них ждать не приходится.

Итак я уже подхожу к сути. Коротко - я пытаюсь найти способ как задать некоторые параметры в магнитоле.
Разобрав прошивку я обнаружил что параметры хранятся в sqlite базах (их несколько разбитых по категориям). Т.е вместо телекодирования через спец-кабель и программку можно поменять параметры прямо в файлах, подумал я и обрадовался.
Первое что я попробовал - это подменить данные в sqlite-файлах в прошивке и подсунуть файл прошивки с измененными файлами как обновление. Безуспешно, так как магнитола проверяет целостность файлов прошивки каким-то мерзким способом, а именно у них там своя (!) реализация crc32. Вот так например выглядит файл с контрольными суммами для одного из файлов (только одного, не спрашивайте меня почему тут несколько строк «size») :
CRC32: -1308817588
SIZE: 42635998
SIZE_1: 43126784
SIZE_2: 43601920
SIZE_4: 44634112
SIZE_8: 46972928
SIZE_16: 51953664
SIZE_32: 62914560

Понять как почитать такую контрольную сумму я не смог а инструкций в интернете понятное дело нет.

На данный момент у меня есть две идеи по способам изменения этих параметров.
1) Хардварный способ. Операционка и юзерские настройки магнитолы хранятся на micro-sd флешке. Флешка натурально вставленна в слот и ее можно достать. Идея в том что бы разобрать магнитолу и поправить файлы прямо на ней. Есть шанс получить «кирпич» если в магнитоле есть система защиты от подобных действий.

2) Софтварный способ.
В магнитоле есть браузер и возможность выходить в интернет. Т.е базовый план в том что бы выйти таким образом в инет, узнать свой IP, просканировать nmap-ом и попытаться найти стандартные уязвимости а если повезет и там есть telnet или подобная штука то подобрать пароль.

Есть мнение что в магнитоле работает операционка vxWorks. Быстрый гугл по CVE для vxWorks не дает никаких результатов.

В общем, в порядке эксперимента хочу обратится к знающим товарищам с такими вот вопросами:
1) Есть ли какие-то стандартные алгоритмы/способы поиска уязвимостей в embedded системах?
2) Может быть у вас есть альтернативные идеи как получить доступ к файловой системе так что бы ось не узнала об этом факте и поменять там что-то?

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

Спасибо )


Сочувствую. Это на самом деле ужасно, когда не можешь установить на свой автомобиль магнитолу из-за какого-то жадного дяди-проприетарщика.

Внутри магнитолы могут быть выводы UART для консольки. Но, скорее всего там тоже всё анально огорожено и запаролено.

Нашёл какую-то прошивку. Список файлов.

CRC32 считается нормально. Просто у них сумма по-дурацки, чезез знаковое записана. Если в файле .inf она отрицательная, то надо её вычислять так: (0xffffffff - crc32 + 1), а если положительная, как в файле ./u-boot-nand.bin.inf, то ничего не надо, считается нормально.

SIZE ­— объём разархивированных данных. Остальные — не понял, но вот, например, для ./AUDIO_BT/system.bin.inf в двоичном формате будет так:

      dec            bin                            hex

SIZE: 6767862     -  01100111 01000100 11110110  -  6744f6
SIZE_1: 6895616   -  01101001 00111000 00000000  -  693800
SIZE_2: 7016448   -  01101011 00010000 00000000  -  6b1000
SIZE_4: 7245824   -  01101110 10010000 00000000  -  6e9000
SIZE_8: 7815168   -  01110111 01000000 00000000  -  774000
SIZE_16: 8847360  -  10000111 00000000 00000000  -  870000
SIZE_32: 10977280 -  10100111 10000000 00000000  -  a78000

Может кто сообразит. Внутри system.bin вот такая структура.

anonymous
()

Я так понимаю, что программе для прошивки нужен интернет для связи с сервером? Без интернета тоже работать отказывается? А может проще отреверсить запрос, что она посылвает на сервер и подделать ответ? Типа MITM. Тогда получиться прошить программой без ковыряния прошивок.

WRG ★★★★
()

Текст не осилил.

Но хочу заметить кое-чего.

Однажды корефан грохнул магнитолу в своём пепелаце. Пепелац довольно редкий в наших пространствах, а на магнитолу естественным образом завязана вся электроника. И пепелац впал в обморочное состояние. Зная мои наклонности, корефан уболтал меня посмотреть на девайс. Посмотрел. Магнитола оказалась огороженной по самое не могу. Пришлось применять реверс-инжиниринг, очень глубокий гуглёж с перелопачиванием спеков, греть паяльник и рыскать в поисках нужных отвёрток.

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

Deleted
()
Последнее исправление: rht (всего исправлений: 4)
Ответ на: комментарий от WRG

Пришел сюда написать это. Твои 1 и 2 абсолютно неадекватны в сравнении с этим.

t184256 ★★★★★
()
Ответ на: комментарий от WRG

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

josser
() автор топика
Ответ на: комментарий от anonymous

Ну и раз уж тут такая пьянка, давай я расскажу о возможной дыре. ЭБУ воткни с нужным вином и всего делов.

anonymous
()
Ответ на: комментарий от anonymous

Да, это реальный метод которым многие воспользовались но я не могу :(
Все потому что менять VIN в блоке BSI на машинах 2014+ года можно только 1 раз.

Есть еще вариант с тем что бы найти машину до 2014 года, и уговорить владельца поставить ему мою магнитолу, поменять ему в BSI вин, телекодировать, а затем вернуть все в зад.

Самое сложное тут уговорить дилера этим заниматься ну и найти человека готового отдать свой таз на растерзание.

josser
() автор топика
Ответ на: комментарий от anonymous

Еще можно было бы взять блок BSI от другой машины (купить на разборке) прописать в него вин, воткнуть себе и телекодировать. Но херня в том что с чудим BSI машина не заведется. BSI надо менять вместе с кучей других железок а телекодировка магнитолы должна проходить с заведенным двигателем.

josser
() автор топика
Ответ на: комментарий от josser

Найти донора на 20 минут думаю не проблема, топай в автоклубы

Машине нахрен не нужно заводится, можно только питалово подвести и сигнальный с замка, да can шину подоткнуть, ацц включил и шей свою мултимедию

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

Это я и сам понимаю что так можно, но DiagBox видит что машина не заведена и не выполняет операцию

josser
() автор топика

Кажется на таком уровне уже проще собрать замену для этого на компе с линуксом.

anonymous
()
Ответ на: комментарий от anonymous

Может быть

Многие тулят туда планшет, но нормальная голова в разы удобней.
Через нее задаются разные настройки освещения, параметры круиза, варианты работы замков. Она пищит каждым динамиком отдельно в паре с парктроником и ставит на паузу музыку когда тебе звонят.
Сообщает о незакрытых дверях, напоминает об органичениях скорости, выводит нотификации и сообщения об ошибках работы двигла.
В ней есть какой-никакой процессор и к томуже этот vxworks - RTOS, ничего не тормозит. Ярядли я за разумное время и деньги смогу все это сделать сам на arme или какомнить samsung note

josser
() автор топика
Ответ на: комментарий от josser

SSL не страшен, если ты имеешь полный контроль над ОС, а не кулхакер, управляющий роутером. Ведь ты всегда можешь посмотреть, что данные до кодирования, что данные после декодирования. А ещё подменить сертификат.

KivApple ★★★★★
()
Ответ на: Может быть от josser

С этим всем можно работать тоже. В одноплатниках и микроконтроллерах бывает can, а дальше тебе остаётся лишь определить нужные команды.

KivApple ★★★★★
()
Ответ на: комментарий от josser

Что мешает начать с установки прокси на комп к работнику СТО? Против SSL есть ZAP и другие интересные вещи. Идея MITM пока самая адекватная.

SkynetCreator
()
Ответ на: комментарий от KivApple

А там и определять нечего, can obd2 хорошо документирован, подсунуть на шину нужный вин и судя по коментам ТС параметры оборотов, можно и весь набор. Но это отдельная тема

Но самое простое пригнать правильную машину на время воткнуть косу в мультимедиа бошку и проделать процедуру, все, можно переносить голову в свой авто.

Не понимаю велосипедостроения, процедура одноразовая, не тюнингом же ТС собрался заниматься

anonymous
()
Ответ на: комментарий от josser

У дилера всегда вопрос цены, я уже написал, пригони правильную тачку, воткните провода в магнитолу. Дилер будет доволен, снятие установка двух магнитол, работа по обновлению, можешь еще на пивас пообещать.

anonymous
()
Ответ на: комментарий от anonymous

Хех, ты думаешь я это им не предлагал? Они боятся и не хотят заморачиваться, у них везде камеры в рабочей зоне.

josser
() автор топика
Ответ на: комментарий от SkynetCreator

На комп работника СТО ваще ниччо низя ставить, даже подходить к нему нельзя ивыносить из рабочей зоны тож низя.

josser
() автор топика

Короче немного новостей

Поднял простенький веб-сервер который дампит юзер-агент и ip на ноуте.
Через 3g подключился к нему с браузера магнитолы. Узнал адрес, просканил его nessus'ом.

Обнаружил незапароленый telnet.

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

Нашел файлы sqlite с настройками!
К каждому прилагается .inf с контрольными суммами.
В этот раз не взял с собой флешку, в след раз возьму и попробую скопировать файло.

нашел спсоб отображать файлы на stdout.
Посмотрел несколько, обнаружил что часть sqlite файлов - именно обычный sqlite. А тот что мне нужен выглядит как-то странно. Ну не читается в нем дампа базы.

Опщем какой-то план есть, буду дальше пробовать

josser
() автор топика

Ты просто хочешь поправить содержимое sqlite файлов которые лежат на какой то файловой системе. Какая разница каким способом ты это сделаешь — через телнет или через снятие карточки?

redixin ★★★★
()

И да, если уж снимать карточку, то я бы сначала попробовал скопировать ее с помощью dd и бутнуться с копии. Если это прокатит, то можно не бояться брикнуть девайс.

redixin ★★★★
()
Ответ на: комментарий от josser

Блин как ты вообще живешь то?

К офф диллеру пыжика пригоняете пыжика и говорите надо сменить бошку и обновить, потом обратно сменить. Какие нахрен камеры это официальная работа, все по документам, все чики пуки, клиент хочет, его право

anonymous
()

А ты уверен что эта софтина не настраивает твой девайс именно из-за анальных запретов, а не по тому что не знает набор комманд? Вообще протокол для конфигурации точно знкрытый? Может стандарт какой?

matrixd
()
Ответ на: комментарий от anonymous

такой вариант я не рассматривал, но главная проблема будет в том что надо будет заставить диагбокс телекодировать в ручном режиме

Если делать это в автоматическом - телекодировка будет под тот пежо на котором будет в этот момент стоять голова.

Собственно таким способом мы уже пытались делать и именно таким способом удалось активировать часть функций. Проблема в том что как ни крути а некоторые параметры телекодировки не подойдут даже если я найду рестайлинговую копию своей машины с такой магнитолой на борту.
между рестайлами были изменения в BSI которые и надо телекодировать.

josser
() автор топика
Ответ на: комментарий от matrixd

Закрыт по самое немогу. Вообще раньше таких анальных запретов не было. Почему сейчас ввели - мне неведомо. Особого профита от этого я не вижу

josser
() автор топика
Ответ на: комментарий от josser

Профит - цена, дилер покупает со скидкой, но выполняет условия контракта. Такая вот практика, обеспечить себя закупщиком, а следовательно и работой, естественно дилер хочет быть эксклюзивом и в его девайсах есть фичи которых нет на общем рынке.

Тяжело хотеть рынка и открытых систем одновременно, это не выгодно рынку

anonymous
()
Ответ на: комментарий от anonymous

ну вот я только что позвонил на сервис пежо и они сказали что «я уточню у электрика этот вопрос но врядли».

josser
() автор топика
Ответ на: комментарий от anonymous

Проблема в том что за деньги это тоже не доступно. (
я бы понял если бы кто-то взимал плату. Я ему с удовольствием заплачу. Но таковых нет.

josser
() автор топика
Ответ на: комментарий от redixin

когда я писал пост я еще не знал что есть телнет доступ.
С телнетом есть разница в том что не надо разбирать пол машины.

josser
() автор топика
Ответ на: комментарий от josser

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

anonymous
()
Ответ на: комментарий от josser

хы, так это манагер и вопрос в том, что ты просил, упоминать надо пыжо и только пыжо

anonymous
()
Ответ на: комментарий от tazhate

В любом случае надо что-то шаманить с сетью/компом у дилера мне никто не даст

josser
() автор топика
Ответ на: комментарий от shooter93

Но ведь подмену сертификата можно обнаружить? Я имею в виду что ПО головы должно же заметить подмену?

Нельзя. Не заметит.

tazhate ★★★★★
()
Ответ на: комментарий от anonymous

SIZE ­— объём разархивированных данных. Остальные — не понял, но вот, например, для ./AUDIO_BT/system.bin.inf в двоичном формате будет так:

Предположу, что это размер в неких блоках, поэтому там столько нулей внизу, SIZE_1 означает блоки в 1024 байта, SIZE_32 - в 32K.

trycatch ★★★
()
Ответ на: комментарий от anonymous

Может кто сообразит. Внутри system.bin вот такая структура.

Угу, так оно и есть. Складываем размеры всех файлов, не включая каталоги, дополняем до размера блока, получаем искомый результат.

var blockSize = 32 * 1024;
fileSizes
  .map(fileSize => (Math.floor(fileSize / blockSize) + 1) * blockSize)
  .reduce((x, y) => x + y);
trycatch ★★★
()
Последнее исправление: trycatch (всего исправлений: 1)

Борода, я в растеряности

Подключился телнетом, в USB воткнул флешку, нашел способ копировать файлы.
Скопировать всю папку USER_DATA из корня.
В недрах нашел папку с файлами .sqlite
часть файлов шли в комплекте с .sqlite.inf файлами в которых была похожая но не такая же как в первом комментарии мета-финфа.
На первый взгляд ситуация такова:

часть sqlite файлов зажата gzip-ом. Причем для тех что зажаты идет парный .inf файл с инфой похоже по структуре описанной в первом комментарии, но не такой же по сути. Там тоже есть crc32 но выглядит он уже нормально, в хексе хоть и не соответствует тем значениям которые я пробовал считать вручную.

Я решил так, что если распаковать какой-то sqlite файл и заменить оригинальный файл распакованным то можно удалить его парный .inf

И вот что странно, я (сделав бекапы) поправил значения в одном из файлов. Я поменял параметр отвечающий за VIN автомобиля. я выбрал этот параметр из-за того что хотел быть уверенным что моим изменения распознаются системой. Если в магнитоле прописан неверный вин - она мерзко пищит.
Ну вот, я поправил вин, залил файл обратно в магнитолу и эта сволочь даже носом не повела.
Ребутал, пробовал менять по такой же схеме файлы в папке USER_DATA_BACKUP. Никакой реакции. Как будто ему ваще на эти файлы наплевать. Хотя когда я менял вин - то цифры которые были записаны в
том файле вроде бы соответствовали моему.

josser
() автор топика

А, достал инфу по операционке

WindRiver vxWorks 6.9.3

josser
() автор топика
Ответ на: комментарий от trycatch

Монстр! :)

дополняем до размера блока

Только, наверное, надо не просто единицу прибавлять, а смотреть, не лежит ли размер на границе блока и только тогда прибавлять?

anonymous
()
Ответ на: комментарий от anonymous

Я проверял по-разному, и если размер кратен размеру блока (сектора/кластера/все равно), то все равно добавляется дополнительный блок, иначе числа не совпадают. Возможно, файл дополняется несколькими байтами, а потом уже считается число блоков. Т.е. как-то так будет правильнее: Math.floor((fileSize + SIZE + N) / SIZE) * SIZE, где N от 0 до 3 (точнее сказать не могу, так как в списке нет размера файла, более близкого к границе блока, все варианты совпадают).

trycatch ★★★
()
26 марта 2017 г.
Ответ на: Борода, я в растеряности от josser

Эй, как вам удалось подключиться через Telnet? Я нашел IP: 192.168.9.10, 192.168.10.2, я попытался с помощью USB DLINK, но не объединиться. спасибо

pindour
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.