[Перевод] Конференция DEFCON 27. Твой автомобиль – мой автомобиль. Часть 1

Брифинг выступления:

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

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

Jmaxxz известен благодаря своей работе с системами «умного дома» August Smart Lock (доклад на DEFCON 24 «Взлом с черного хода» — «Backdooring The Frontdoor»). В последние годы в центре его внимания были устройства для Интернета вещей. Он участвовал в работе секций «IoT village zero day» DEFCON 24 и DEFCON 25 и наконец, решил, что пришло время исследовать продукт вторичного автомобильного рынка — дистанционный стартер (далее ДС).

9wwg2ggloyqqgqtitekejb1t5us.jpeg

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

vueme2mytji28qyb03dk6mell3q.jpeg

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

Они не сообщают, как установить систему и какие инструменты использовать для программирования устройства. Для меня это проблема, потому что это моя машина, мой дистанционный запуск, и я должен иметь доступ к этим инструментам. Поэтому я поискал еще немного и нашел компанию из Канады, Fortin, которая выпускает такие стартеры и охотно предоставляет всю необходимую документацию. Я остановился на этом продукте и принялся за поиск подходящего пульта дистанционного управления. Дело в том, что если использовать с дистанционным стартером штатный ПДУ, то его диапазон действия будет ограничен диапазоном штатного пульта. На вторичном рынке предлагают пульты, которые действуют на расстоянии от полумили до полутора миль. По отзывам потребителей, это рекламный ход, потому что в реальности расстояние намного меньше. В этом и состоит проблема, потому что моей подруге нужно запускать двигатель автомобиля, стоящего на стоянке аэропорта, как только она выйдет из самолета, а это примерно полмили.

4gnwkgnrhovetlzs5ux9krrkyua.jpeg

Поэтому было бы здорово, если бы она могла просто вытащить свой телефон, открыть приложение и нажать «Пуск двигателя». Я нашел сторонний продукт под названием MyCar, полностью совместимый со стартером от Fortin. Это небольшой брелок с сим-картой и приемником GPS, который вы можете положить в машину и подключить к дистанционному стартеру. Затем с помощью мобильного приложения вы можете дистанционно запустить двигатель, разблокировать замки и тому подобное.

jjojqw2cghni-xojq0fc4g9l_qc.jpeg

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

Итак, давайте немного поговорим о том, как работают дистанционные стартеры. Для этого сначала надо понять, как запускается автомобильный двигатель. Примерно до середины девяностых автомобильный стартер представлял собой традиционный механический замок в связке «ключ-выключатель». Вы должны были вставить ключ и повернуть его, чтобы замкнуть электрическую цепь. Затем на территории США стали популярными замки с пометкой «иммобилайзер». Звучит замысловато, но это просто электронный замок. Итак, у вас есть механический замок, который является ключом к электронному замку, который, в свою очередь, является транспондером и содержит в себе некую информацию, которуюо можно прочитать. И пока вы не откроете электронный замок, ваш автомобиль не заведется. В правой части слайда вы видите 2 ключа: левый для иммобилайзера, а правый для обычного замка зажигания. Он просто приводит в действие механические компоненты замка, в то время как левый ключ разблокирует электронный замок, который запустит двигатель автомобиля.

ta6uebgp9j0vmrloqz7j6urdj7w.jpeg

Почему я об этом рассказываю? Дистанционный запуск работает через иммобилайзер. На следующем слайде вы видите схему подключения устройства Fortin EVO One к иммобилайзеру — внизу слева вы видите пару контактов, обозначенных как IMO. Справа вверху схемы вы видите две строчки: CAN LOW и CAN HIGH. Это контакты для подключения к автомобильной шине CAN. Причина, по которой дистанционные стартеры подключаются к шине CAN, заключается в уменьшении затрат на установку, потому что при монтаже используется меньшее число соединений. Если дистанционный стартер может считывать данные с шины CAN или посылать команды через шину CAN, это сокращает время монтажа системы дистанционного запуска двигателя.

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

kjvh-wuaotbsqpgf9n37l4keui0.jpeg

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

j178li8hd6mze4ycmiofz5b9hx4.jpeg

Дистанционное управление само подключаются к тому, что Fortin называет каналом передачи данных. Система использует проприетарный физический протокол передачи данных UART — универсальный асинхронный передатчик, осуществляющий обмен данными со скоростью 9600 бод. Дистанционный стартер Fortin просто соединяется через шину UART с двумя пультами, которые вы видите на слайде.

_hi2sbhumzj6gkeqzpkdit6op2s.jpeg

Установив ДС, я задумался о том, как подобные устройства могут повлиять на безопасность автомобиля. Очевидно, что ДС должен обойти иммобилайзер, так что насколько это безопасно в смысле возможности угона или перехвата управления машиной? Это касается не только передачи данных по сотовой сети, но и самого сигнала дистанционного запуска. Так что я начал искать в интернете информацию производителя по используемому протоколу передачи данных и попал на форумы, где люди пишут, что Fortin отказывается предоставлять этот протокол. Одна из причин: «мы не распространяем такую информацию, потому что EVO не игрушка для любителей, он предназначен для использования профессионалами.

s1vptisjief8gtp5l_w7qxumssa.jpeg

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

wewpxw4xv4o5lctbic2geybamno.jpeg

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

jscvfzmp-opex4-anawf7qlbrds.jpeg

Обратите внимание, что всякий раз, когда я нажимаю кнопку на моем пульте дистанционного управления, сообщение, которое отправляет антенна моему ДС, всегда начинается с 0C и заканчивается 0D. Так что если просто разделить то, что мы получаем, предположив, что 0C — начало, а 0D — конец, то в конечном итоге получим что-то вроде этого.

vobfnlvx9w-vbn1ksstupitkz9g.jpeg

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

yyrxylkz2oyd3efd3jpdgodxyp8.jpeg

Вот как выглядит структура типичной команды.

kadqquynqu1yfvj7ajfzeoihaps.jpeg

Когда вы нажимаете кнопку на пульте, антенна отсылает дистанционному стартеру такую команду. Его пробуждение осуществляет байт 0C, далее следуют 2 байта, которые, как я думаю, представляют собой направление передачи. Это интересно, так как в UART уже есть направление приема-передачи сигнала, поэтому я пометил эти байты как «мусор», просто считайте их константой. После этого следует единственный байт, обозначающий команду, которую пользователь хотел бы выполнить. Это может быть блокировка дверей или их открытие, отключение сигнализации и т.д. В общем, все, что вы захотите сделать удаленно, связанно с этой командой. Полезная нагрузка FF FF F1 — это адрес, или идентификатор, который определяет удаленную антенну, с которой пришло сообщение. Если блок ДС не распознает идентификатор, команда игнорируется. Если ДС принимает идентификатор, начинается многоэтапная процедура, которая включает в себя проверку наличия ключа в замке зажигания, включения или выключения двигателя, нажатия на педаль тормоза и т.д. Фактически этот процесс не имеет особого значения, просто устройство в этот момент изучает ID.

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

hdvfwdjchqmgjxxkyq6py7njjta.jpeg

Итак, я посылаю команду разблокировки замка в машину, но она не работает, потому что ДС не знает об этой антенне. Как я уже упоминал, это просто UART, свойством которого является поддержка так называемой двусторонней связи 2-way communication, благодаря чему можно дистанционно получить информацию о состоянии автомобиля. Например, если физически двигатель был запущен или остановлен, блок ДС отправит соответствующее сообщение на антенну ПДУ. При этом сообщение будет содержать в себе адрес этой самой антенны.

zc4xh9mphrtuaxmwk-wgpnozqbk.jpeg

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

usqccirorqiaewchf_7pvtjtflc.jpeg

Чтобы сгенерировать какое-то сообщение, достаточно просто открыть дверь автомобиля. Как видите, ДС отсылает антенне сообщение, что дверь была открыта, и тут же включается сигнализация.

q2lx9dgsgmn_lzetu_kdru35sce.jpeg

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

5a8r8_obpi04och-b65a4susys8.jpeg

Ну вот, звук появился (прим. переводчика: на экране воспроизводится тот же видеоролик со звуковым сопровождением). Итак, вы увидели, как я послал команду ДС и включил сигнализацию, и все это без ключа. Теперь давайте попробуем точно так же завести машину, для этого посмотрим следующее видео.

Обычно, если просто набрать команду «start» и попробовать запустить двигатель, это не сработает. Причина в том, что это автомобиль с ручной коробкой передач, и для таких машин системы дистанционного стартера имеют специальную процедуру. В данном случае вы должны нажать на кнопку дистанционного стартера, пока ключ находится в замке зажигания и двигатель запущен. Затем вы можете вытащить ключ, выйти из автомобиля, закрыть дверь, после чего ДС выключит двигатель и запрет двери на замок. Это сделано для того, чтобы автомобиль не реагировал на дистанционный запуск двигателя во время движения, потому что это опасно. Тем не менее, это не полноценная функция безопасности. Доказать это довольно просто, если взглянуть на блок EVO дистанционного стартера. Вы видите этот желтый провод в виде петли, который предназначен для работы с механической трансмиссией. Если его обрезать, данный блок можно будет использовать для автомобиля с автоматической коробкой передач. Такая конструкция блока позволяет не применять никаких специальных настроек при монтаже ДС в автомобили с разными типами трансмиссии.

7qmjeab3lmr9yewnawi1i2cis0s.jpeg

Итак, система не отреагировала на команду «start», поэтому я собираюсь вернуть этот блок на место и просто обрезать этот провод, чтобы разорвать соединение. Теперь, если повторить команду «start», раздастся звуковой сигнал и на панели приборов засветятся индикаторы состояния систем автомобиля, как это бывает при вставленном в замок ключе.

iam2ng9g1eeyjguvigz1t9pttjc.jpeg

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

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

Однако если у вас нет никакого ключа, то при нажатии на педаль тормоза машина заглохнет. Обойти это ограничение достаточно легко. Нужно выяснить, каким образом автомобиль сообщает дистанционному стартеру, что тормоз нажат. Вы видите несколько разноцветных портов в тыловой части корпуса модуля EVO — сюда подсоединятся кабель от CAN-шины. Достаточно просто вытащить этот кабель из блока ДС после того, как автомобиль будет дистанционно запущен, и он не будет реагировать на нажатие педали тормоза. Поскольку этот блок находится под кожухом рулевой колонки, я даю команду «start» через свой ноутбук, автомобиль заводится, я открываю дверь, выхожу из машины и вынимаю коннектор CAN-шины из блока EVO. Как видите, двигатель автомобиля работает, при этом у нас по-прежнему нет никакого ключа в замке зажигания.
Теперь, если нажать на педаль тормоза, ничего не произойдет, потому что EVO не знает о том, что она была нажата. После этого я могу сесть за руль, нажать на тормоз, перевести ручку передач в положение «Drive», и машина поедет. Все это проделывается без всякого ключа.

21:40

Продолжение будет совсем скоро…


Немного рекламы :)


Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас, оформив заказ или порекомендовав знакомым, облачные VPS для разработчиков от $4.99, уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5–2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps от $19 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

Dell R730xd в 2 раза дешевле в дата-центре Equinix Tier IV в Амстердаме? Только у нас 2 х Intel TetraDeca-Core Xeon 2x E5–2697v3 2.6GHz 14C 64GB DDR4 4×960GB SSD 1Gbps 100 ТВ от $199 в Нидерландах! Dell R420 — 2x E5–2430 2.2Ghz 6C 128GB DDR3 2×960GB SSD 1Gbps 100TB — от $99! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5–2650 v4 стоимостью 9000 евро за копейки?

© Habrahabr.ru