Анти-иммобилайзер Mitsubishi

Некоторое время назад я снимал полные логи CAN-шины автомобиля Mitsubishi. В то время меня интересовали общие данные, что ходят по шине. Получилось найти большое количество информации (температуры, скорости, обороты коленчатого вала, передачи и состояние АКПП и прочее) напрямую на шине, т.е. для их получения можно не слать диагностические запросы блокам ЭБУ.

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

Вот выдержка из лога:

TIME: 89.590s ID: 272 LEN: 1 DATA: 00
TIME: 89.599s ID: 256 LEN: 4 DATA: 97 0b 20 86
TIME: 89.601s ID: 273 LEN: 3 DATA: 61 44 8a

Соответсвенно, данные каждый раз разные. В силу 4 миллиардов вариантов вопросов от ЭБУ, сделать подборку ответов не представляется возможным. Очень интересно, по какому алгоритму производится рассчет данного ответа (известно, что для его формирования используется VIN-код автомобиля, а вот использование какого-либо прочего секрета, в том числе идентификатора метки ключа под вопросом).

Но на днях меня внезапно посетила мысль: а почему бы не попробовать заглушить штатный иммобилайзер, блокировать его работу? Как видно по логу, задержка между сообщениями вопрос-ответ всего 2мс. Нормальное время для вычисления ответа, но самостоятельно отправить ответ быстрее не составляет труда, тем более мне вычисления проводить не требуется.

Что и было попробовано. Программа до безобразия проста: после получения посылки на адрес ID:256, я отвечаю на адрес ID:273 данными 0x000000. Для работы с автомобилем взял проект Мини-бортового, точнее платы от него.

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

На этом этапе прогноз не утешительный. Похоже, общение ЭБУ и иммобилайзера слабо чувствительно к нарушениям протокола и левым запросам/ответам. Последняя попытка насолить штатному иммобилайзеру: по приходу пакета на адрес ID:272 пытаюсь сам отправить запрос иммобилайзеру, так же дублирую запрос иммобилайзеру после штатного и отправляю неверный ответ в блок ЭБУ после ID:256 и ID:273.

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

Заключение

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

А пока по факту имею такую конструкцию, при подключении которой в диагностический разъем автомобиля двигатель отказывается заводиться:

Такое должно работать на Mitsubishi Pajero Sport 2ого поколения, на Mitsubishi Pajero 4 и скорее всего на Mitsubishi Lancer X (и всем производным данного автомобиля в лице Outlander XL, ASX), если подключить не к диагностике, а к шине CAN-C автомобиля.

Ссылки

Original: http://igorkov.org/immoblock,
Author: igorkov