StarLine В92

StarLine В92

По заказу ООО «СтарЛайн» я провожу тестирование сигнализации StarLine В92 на уязвимость диалогового кода и всей системы в целом. По инициативе Михаила Чаусова, мне было предложено долговременное сотрудничество, это стало для меня новой ступенью к карьере «эксперта» а не просто любителя электронного взлома. После устного договора, мне выслали сигнализацию на исследования.

Начну по порядку, сигнализация многоканальная (500каналов) в ней используется сделанный на заказ трансивер  WINTEC W84R01AQ. Технологии закрытые, на трансивер отсутствует PDF, что очень усложняет поиск слабых мест. Кроме диалогового кода, использован собственный алгоритм прыгающих частот, это требует более глубокого изучения аппаратной части.

Брелок построен на базе МК PIC16F946. С трансивером он общается по SPI интерфейсу, линия двунаправленная, по этому разделить байты на принимаемые и отправленные тяжело. В контроллере задействованы четыре линии для общения с приемником. Это линия данных, линия тактирования, линия которая разделяет байты, например идет трехбайтное слово, потом пятибайтное. Четвертая линия, это линия, которая дает команду на отправку данных и на считывание, логика там такая, идет фронт идет отправка данных, идет спад фронта, данные считываются и кладутся, с фронтом снова отправка в эфир. Тут я могу немного ошибаться, так как исследовал все двух канальным осциллографам, у которого периодически оборачивалась фаза одного из каналов. Скорость передачи данных к трансиверу около 100кГц. Для анализ потока, я использовал SPI анализатор и уже в hex виде изучал данные.

  

Трансивер, который стоит на лобовом стекле управляется МК 18F25K20, скорость обмена там на много выше. За диалоговый обмен отвечает этот контроллер, после удачной сессии он выдает значение, которое состоит из 12 байт, они уходят в главный блок и сигнализация открывается. Линия от трансивера до блока стандартная, это RS232, бодовая скорость 19200. При каждой сессии, значение меняется, оно шифровано! Вот пример нескольких нажатий:

24 0A 20 6C 2D 9B 12 6E 57 F3 E6 04

24 0A 20 2C 86 3B AA 2E FC 53 73 A7

24 0A 20 35 3C 89 CB 37 46 E1 3F 82

24 0A 20 02 B0 D3 5B 00 CA BB AF 34

24 0A 20 DB F6 91 27 D9 8C F9 DB E2

 

24 0A 20 — это заголовок

6C 2D 9B 12 6E 57 F3 E6 04 – это шифрованная часть

 

С этой линией я стал проводить эксперименты. У меня родилась идея, в общем зачем решать проблему в лоб, когда можно зайти окольными путями. Так родилась идея «деактиватора». Дело в том, что если отправлять любой из этих кодов прямо в линию, сигнализация открывается. Значит нужно быстро проникнуть в салон авто и вместо трансивера подключить свой блок, который отправит эти байты и деактивирует сигнализацию. Решение не очень оригинальное, так как сигнализация подымет шум с начало, но какая разница? Черный рынок будет требовать устройство, а как оно будет работать уже не важно, главное снять с охраны и разблокировать запуск авто.

Теперь давайте разберемся, почему любое из этих чисел подходит и не устаревает, дело в том, что оно шифрованно счетчиком, сверка которого не делается, счетчик лежит в оперативе, при каждом сбросе питания у сигнализации эти числа циклически повторяются. Вот теперь самое интересное, подойдут ли эти данные к другой сигнализации этого же модельного ряда. Я переобучаю сигнализацию, что бы сгенерился новый ключ шифрования и пробую из терминалки отправить число (24 0A 20 6C 2D 9B 12 6E 57 F3 E6 04 24 02 01 01) Сигнализация молчит, дело в том, что кроме счетчика на шифрование этого числа влияет ключ шифрования, который у каждой сигнализации разный! Идея с диактиватором была хороша, но не универсальна. Это всего лишь частный случай.

 

Родилась еще одна идея по быстрому диактивированию сигнализации. Изучив это число (24 0A 20 6C 2D 9B 12 6E 57 F3 E6 04 ) оказалось, что последний шифрованный байт является не значимым, важно просто присутствия любого значения на этом месте, таким образом, шифрованное число сократилось до 8 значимых байт. Восьми байтное число, это достаточно большое число, но если счетчик двухбайтный, то в этом огромном числе присутствует множество валидных комбинаций, их количество 65536. Я решил попробовать метод прямого перебора, ведь несмотря на то, что число большое, угадать одно из 65536 может быть вполне реально. Для этого я написал маленькую программку, которая выводила данные по такой логике и отправляла их в блок сигнализации

 

24 0A 20 00 00 00 00 00 00 2C 67 22

24 0A 20 00 00 00 00 00 00 2C 68 22

24 0A 20 00 00 00 00 00 00 2C 69 22

24 0A 20 00 00 00 00 00 00 2C 6A 22

24 0A 20 00 00 00 00 00 00 2C 6B 22

24 0A 20 00 00 00 00 00 00 2C 6C 22

 

Как вы поняли это просто перебор, где

24 0A 20 – заголовок

00 00 00 00 00 00 2C 67 перебираемые значение

22 – произвольное число, можно отсылать любое

 

Спустя минут 5, сигнализация отреагировала, брелок издал какие-то звуки, видимо я угадал запрос статуса или что то там еще. Я сильно обрадовался и стал ждать дальше, в надежде, что я угадаю комбинацию на открытие. Потом брелок еще несколько раз издавал звук. Прошло достаточно много времени, перебор дошел до инкремента третьего байта, время для перебора непозволительно большое. Идея отодвинулась в сторону, а после переобучения брелка я сдался совсем, так как не смог за целый час угадать ни одной комбинации! После переобучения ключ шифрования поменялся и сменил диапазон валидных значений куда то далеко, куда перебором не подобраться и за сутки.

 

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

24 02 01 01 24 0C 30 0A 03 08 00 00 00 45 00 00 00 8A – открыть

24 02 01 01 24 0C 30 02 00 08 00 00 00 45 00 00 00 7F – закрыть

В данном случаи это восьмой байт по счету, изменяя его, на брелок приходили разные команды. Я предположил, что канал обратной связи единый для всех моделей, и этим можно воспользоваться, зная номер брелка, можно ему подпихнуть дезинформацию, вынудив автовладельца нажать на брелке кнопку «открыть». Сейчас веду работу в этом направлении, но подозреваю, что не все так просто, канал обратной связи может быть индивидуальный, один из пятисот, либо меняющийся при каждой сессии.

 

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

На данном этапе исследований, делаю вывод, сигнализация StarLine устойчива к электронному взлому! И я ее рекомендую к установке.

 

Обсуждаем на форуме тут https://phreaker.ru/forum/showthread.php?p=9434#post9434