«В наше дурацкое время нет никакого смысла покупать хорошую машину. Проснулся рано утром и обнаружил вытащенный бампер и панель. Ещё хуже то, что выдернули провода из разъёма питания фар. Это точно не случайность, машина стояла на обочине, и остался след от отвёртки. Защёлки поломаны и т.д.»
Это казалось бессмысленным актом вандализма любителей разрушать прекрасное. Спустя три месяца ситуация повторилась.
«Зачем я вообще купил хорошую машину? Знаю, это проблемы первого мира, но почему бы им просто не оставить мою машину в покое? Ехал на работу с неработающими фарами, ещё больше царапин на краске, а на накладке больше нет креплений. Я не очень счастлив.»
На этот раз «хулиганы» вытащили бампер и отсоединили фару. Но оказалось, что оба инцидента не были вандализмом, потому что пару дней спустя произошло следующее:
«Теперь понятно, зачем они это делали. Машину украли! Моё приложение ToyotaUK показывает, что она сейчас едет. А я только вчера заправил полный бак. Отстой!»
Машина исчезла. И похоже, что её угнали благодаря фаре. Иэн работает исследователем кибербезопасности в сфере автомобилестроения, он уже получал баг-баунти за нахождение уязвимостей в машинах; читая его твит, я сначала подумал, что это хак ради трофея. Но оказалось, что это не так: вскоре после этого у соседа Иэна украли Toyota Land Cruiser. Для Иэна это стало личным делом, он хотел понять, как его машину угнали. В конце концов, в ней есть сложные системы безопасности, в том числе иммобилайзер двигателя. Как же преступникам удалось уехать?
Иэн провёл исследование, начав с телематической системы MyT, используемой во многих автомобилях Toyota. Автомобильная индустрия уже многие десятки лет устанавливает в машины встроенные системы диагностики. Это называется «on-board diagnostics» (OBD); когда Electronic Control Unit (ECU, электронный блок управления, ЭБУ) обнаруживает неполадку, он записывает код. В индустрии это называется «скинуть DTC» (Diagnostic Trouble Code). Система MyT отправляет DTC на серверы Toyota, а приложение MyT может их отображать.
Это коды, обозначающие выявленную неполадку и время её возникновения. В некоторые DTC включаются «стоп-кадры» — данные датчиков примерно в момент неполадки, позволяющие механику попытаться диагностировать неполадку (такими данными могут быть скорость автомобиля, температура на улице, напряжение аккумулятора и тому подобное). В современных автомобилях ECU соединены друг с другом каналом связи, в котором работает протокол, называемый CAN-шиной (CAN расшифровывается как Controller Area Network). Он был изобретён более тридцати лет назад и сегодня используется не только в легковых автомобилях: он встроен в суда, фермерское оборудование, самолёты, строительное оборудование и даже в космические корабли (например, CAN-шина сейчас находится на орбите Марса). Один из способов диагностирования неполадки блоком ECU заключается в том, что он не слышит ответа от другого ECU, с которым ему нужно общаться; часто такая диагностика выполняется при помощи таймаута: если сообщение CAN не принимается регулярно, то спустя какое-то время слушающий сообщения блок предполагает, что произошла неполадка или в CAN-шине, или в другом ECU. И иногда очевидно, что сбой произошёл в CAN-шине: например, если не отправляются собственные сообщения ECU или если оборудование интерфейса CAN-шины сообщает об утере связи.
Оказалось, что незадолго до угона машина Иэна сбросила множество DTC.
В передней части RAV4 есть ECU, управляющий огнями (ближним и дальним светом фар, а также поворотниками). В большинстве автомобилей есть такой ECU, потому что дни, когда свет включался простым переключателем, давно прошли: свет сегодня умный, он имеет такие элементы, как электродвигатели для выравнивания фар (когда в машине находится тяжёлый груз, фары поворачиваются, чтобы компенсировать это), фары для освещения углов, механизмы для автоматического выявления неисправностей фар, для включения насосов омывания водой фар и так далее. А на RAV4 этот ECU ещё и выбирает, какие светодиоды должны быть включены, чтобы не ослеплять едущих навстречу водителей, но всё-таки освещать остальную часть дороги.
DTC показывали, что связь с ECU управления светом была утеряна. Это неудивительно, потому что воры вырвали из него провода. Но DTC ещё и показывали сбой большого количества систем: контроля передних камер, системы управления гибридным двигателем и так далее. Как такое может быть? Это стало ещё одной зацепкой: вероятно, в блоках ECU не произошли неполадки, скорее, с ними была утеряна связь, и диагностика отметила это как неполадку. Общим фактором здесь стала CAN-шина.
Иэн провёл дальнейшее исследование, забравшись в дарк-веб, на сайты, где обсуждался угон автомобилей, поискал на форумах и нашёл видео с YouTube об угонах автомобилей. Он нашёл веб-сайт, продающий более сотни продуктов для обхода защиты автомобилей, от программирования фальшивых автомобильных брелоков до устройств «аварийного запуска» (сайт продавал всё это якобы тем владельцам машин, которые потеряли свои ключи, или тем взломщикам, которые вскрывают автомобили с согласия хозяев).
У обычного покупателя цены бы вызвали слёзы (до €5000), однако для банды автоугонщиков это было инвестицией. Существуют продукты, целью которых может стать множество моделей автомобилей, в том числе Jeep, Maserati, Honda, Renault, Jaguar, Fiat, Peugeot, Nissan, Ford, BMW, Volkswagen, Chrysler, Cadillac, GMC… и Toyota.
В случае Toyota, система «аварийного запуска» — это блок электроники, спрятанный внутри корпуса Bluetooth-колонки JBL. Это позволяет ворам убедительно всё отрицать: если их остановит полиция, то поначалу покажется, что у них с собой не очевидные инструменты для кражи автомобилей, а невинное музыкальное устройство. На веб-сайте был список моделей автомобилей, «поддерживающих» устройство для угона: среди моделей Lexus были ES, LC, LS, NX, RX, а среди моделей Toyota — GR Supra, Prius, Highlander, Land Cruiser… и RAV4. Иэн обсудил это устройство с Ноэлем Лоудоном из компании Harper Shaw, занимающейся криминальной экспертизой автомобилей, и решил купить его, чтобы подвергнуть реверс-инжинирингу. После этого он позвал меня на помощь, чтобы я разобрался, как устройство работает по CAN-шине.
Иэн называет меня гуру CAN: я работал с Volvo над её первой автомобильной платформой на основе CAN и спроектировал первое недорогое оборудование CAN для используемых в автомобилях мелких чипов, моя компания-стартап создавало ПО для сетевой связи CAN, использующейся во всех автомобилях Volvo, и я был членом команды, выигравшей Volvo Technology Award за систему CAN-сети (позже мой стартап был продан Bosch и стал процветающей частью группы Bosch ETAS, занимающейся технологиями ПО для внутренних автомобильных систем). Вместе с Иэном мы начали разбирать устройство для угона, чтобы понять, как оно работает.
Прежде чем двигаться дальше, мне нужно сделать пояснение: в этой истории я не буду раскрывать подробности, упрощающие создание копии подобного устройства для угона. Его создатель — преступник, и ни я, ни Иэн никогда не будем помогать таким людям. Я рассказываю эту историю для того, чтобы помочь правоохранительным органам и производителям автомобилей начать что-нибудь делать с этими устройствами (в конце я приведу несколько советов по тому, как производители и продавцы автомобилей могут улучшить своё ПО ECU для защиты от воров). Также я хочу подчеркнуть, что ситуация не относится только к Toyota: Иэн начал исследовать RAV4, потому что у него угнали RAV4, но и у других производителей есть модели, которые можно угнать схожим образом.
Новая методика угона: инъецирование через CAN
Современные автомобили защищены от угонов при помощи смарт-ключа, который общается с автомобилем и обменивается криптографическими сообщениями, чтобы ключ доказал машине свою подлинность. Такая схема обмена сообщениями в общем случае считается безопасной и не может быть взломана без наличия огромных ресурсов (доступных только на государственном уровне). Но угонщики не атакуют сложные элементы: они находят слабые места и обходят их. В прошлом это делалось при помощи Relay Attack (релейной атаки). В обычной ситуации автомобиль по радиоканалу просит ключ подтвердить себя, и когда он получает валидное сообщение, то открывается и отключает иммобилайзер двигателя. Угонщики нашли простой способ обойти эту схему: они использовали портативную радиорелейную станцию, которая отправляла сообщение автомобиля в дом, где хранятся ключи, а затем возвращала сообщение машине. Машина принимала сообщение как валидное, потому что оно таким и было — для разблокировки машины использовались настоящие ключи. Когда люди узнали, как работает релейная атака, от неё можно было защититься: владельцы автомобилей начали хранить ключи в металлической коробке (блокирующей радиосообщение от автомобиля), а некоторые производителей автомобилей теперь изготавливают ключи, уходящие в сон, если они находились без движения в течение нескольких минут (таким образом, они не получают радиосообщения от машины). Столкнувшись с этим поражением, но не желая отказываться от своего выгодного ремесла, угонщики нашли новый способ обхода защиты: обход всей системы смарт-ключей. Они придумали новую атаку: CAN Injection (инъецирование через CAN).
На схеме ниже показано, как блоки ECU в RAV4 соединены друг с другом шиной CAN (это очень упрощённая схема, на которой не показаны все ECU и CAN-шины).
Здесь показано три CAN-шины:
- CAN-шина управления (соединённая с ECU передних фар, управления дверьми, телематики, кондиционирования и так далее)
- CAN-шина силовой передачи (соединённая с ECU управления двигателем, гибридным аккумулятором и управления электродвигателем и так далее)
- CAN-шина беспилотного управления (соединённая с ECU радара, передней камеры и автоматической парковки)
Атака инъецирования через CAN получает доступ к внутренней связи автомобиля (то есть к CAN-шине) и инъецирует фальшивые сообщения, как будто полученные от ресивера смарт-ключа; по сути, эти сообщения говорят: «ключ валидирован, разблокируй иммобилайзер». В большинстве автомобилей сегодня эти внутренние сообщения не защищены: ресиверы просто им доверяют. На схеме выше можно увидеть, как это работает для RAV4: угонщики подключаются к проводам красной CAN-шины (к которой подключён ECU ресивера смарт-ключа, показанный жёлтым цветом), а затем используют простое электронное устройство для отправки CAN-кадров на красную CAN-шину, чтобы отправить фальшивые сообщения «ключ валидирован», как будто они поступают от ресивера смарт-ключа. Шлюзовый ECU (простое устройство, которое просто копирует сообщения CAN, передавая их туда и обратно) копирует это фальшивое сообщение по зелёной CAN-шине, и система управления двигателем (синего цвета) принимает сообщение и деактивирует функцию иммобилайзера.
Затем угонщики могут использовать своё устройство CAN Injector для отправки другого фальшивого сообщения CAN блоку ECU дверей (тоже обозначенному синим); по сути, оно гласит: «ключ валиден, открой двери». То есть им даже не нужно повреждать машину, чтобы забраться внутрь: они могут просто открыть дверь, залезть в неё и уехать — и всё это без необходимости в ключе.
Устройство инъецирования через CAN
Вот как выглядит устройство для угона CAN Injector, которое купил Иэн:
Похоже на Bluetooth-колонку JBL. И внутри оно по большей части ею и является (не хватает только динамика).
CAN Injector присоединён к печатной плате JBL и залит большой каплей пластика. Иэн расплавил пластик тепловым феном, разобрался, как устройство соединено с печатной платой JBL, и даже выяснил, какие в нём используются чипы (сопоставляя контакты с чипами, пока не нашёл подходящий паттерн).
Оказалось, что компонентов там примерно на $10: чип PIC18F, содержащий оборудование CAN плюс предварительно запрограммированное в чип ПО (называемое прошивкой), приёмопередатчик CAN (стандартный чип CAN, превращающий цифровые сигналы от оборудования CAN в PIC18F в аналоговые напряжения, подаваемые на провода CAN) и дополнительная цепь, соединённая с приёмопередатчиком CAN (подробнее о ней ниже). Устройство получает питание от аккумулятора колонки и подключается к CAN-шине. CAN-шина — это, по сути, пара скрученных проводов, а в автомобиле есть множество соединённых вместе CAN-шин, или напрямую проводами, или связанных цифровым образом через компьютер-шлюз, копирующий сообщения CAN между CAN-шинами, к которым он подключён.
Устройство для угона должно подключаться к CAN-шине управления (красная шина на схеме) и выдавать себя за ECU смарт-ключа. Есть множество способов добраться до проводов этой CAN-шины, единственное, что требуется — провода должны подходить к краю автомобиля, чтобы до них можно было добраться (до проводов, погребённых глубоко внутри, не доберутся угонщики, пытающиеся украсть припаркованную на улице машину). Пока самым простым путём к этой CAN-шине на RAV4 являются фары: нужно вытащить бампер и получить доступ к CAN-шине через разъём передней фары. Может быть возможен и другой доступ: можно или пробить отверстие в панели, где проходит витая пара проводов CAN, или перерезать два провода и вставить между ними CAN Injector, но из-за уменьшения цены машины с дырой угонщики предпочитают самый простой путь (исследование Иэна показало, что в основном эти автомобили предназначаются для экспорта в контейнерах в страны Африки).
При первом включении CAN Injector ничего не делает: он прослушивает шину для получения сообщения CAN, чтобы понять, что автомобиль готов. Когда оно получает это сообщение CAN, то выполняет два действия: начинает отсылать поток сообщений CAN (примерно 20 раз в секунду) и активирует дополнительную схему, подключённую к приёмопередатчику CAN. Поток сообщений CAN содержит сигнал «смарт-ключ валиден», а шлюз перенаправляет его блоку ECU управления двигателем на другой шине. В обычном случае это вызвало бы сумятицу в CAN-шине управления: сообщения CAN от настоящего контроллера смарт-ключа начали бы конфликтовать с поддельными сообщениями от CAN Injector, а это могло бы помешать шлюзу перенаправлять инъецированные сообщения. Именно здесь на помощь приходит дополнительная схема: она меняет образ работы CAN-шины так, чтобы все другие ECU на этой шине не могли передавать сообщения. Шлюз продолжает слушать сообщения и, разумеется, может отправлять сообщения CAN-шине силовой передачи. Поток повторяется 20 раз в секунду, потому что такая система неустойчива, и иногда шлюз не слушает, потому что его оборудование CAN перезапускает себя (оно считает, что невозможность передачи сообщений — это показатель неполадки, что в каком-то смысле справедливо).
На корпусе Bluetooth-колонки JBL есть кнопка «Play», подключённая к чипу PIC18F. При нажатии на кнопку поток сообщений CAN немного меняется, они начинают давать команду ECU дверей на разблокировку дверей (как будто нажата кнопка «unlock» на беспроводном ключе). Затем автоворы могут отсоединить CAN Injector, залезть в машину и уехать. Вот запись с камеры слежения такого угона у другой жертвы (если вам не терпится, перейдите на 2 минуты 55 секунд):
Модифицированный приёмопередатчик CAN
Давайте вернёмся к модификации приёмопередатчика CAN, меняющего способ работы CAN (в этом разделе подробно объясняется, как работает CAN-шина, так что можете спокойно перейти к разделу «Побеждаем CAN Injector», где я говорю о том, как Toyota и другие производители могут остановить угонщиков).
В обычном случае CAN работает как огромный вентиль AND, где шина считывает логическую 1, если все устройства передают логическую 1, и считывает логический 0, если какое-либо устройство передаёт в неё логический 0. Это работает благодаря тому, что шина «плавает» на так называемом рецессивном уровне: два провода CAN, обозначаемые H и L, имеют напряжение примерно 2,5 В, а разница между ними близка к нулю (уровень плавает, потому что приёмопередатчик CAN в рецессивном состоянии имеет высокий импеданс). Это транслируется приёмопередатчиком CAN в логическую 1 (а контакт RX приёмопередатчика выводит логическую 1 на оборудование CAN, встроенное в чип основного процессора). Любой контроллер CAN может перевести шину на доминантный уровень (обычно это около 4,5 В на CAN H и около 0,1 В на CAN L, с разницей примерно в 4,4 В). Однако CAN Injector имеет другой приёмопередатчик CAN: у него есть режим, который активно выполняет переключение в рецессивное состояние, и никакое другое устройство CAN не может перевести шину в доминантное состояние (одно устройство может немного сместить напряжения CAN H и L, но этого недостаточно для изменения состояния на логический 0).
Иэн изготовил настольную CAN-шину для CAN Injector, воссоздав её электронику и добавив псевдо-ECU (у Иэна в этом большой опыт: он создал портативный эмулятор «автомобиль в чемодане», который используется для демонстрации методик хакинга автомобилей). Логический анализатор и осциллограф могут измерять влияние CAN Injector на реальную CAN-шину. Вот трассировка отправки псевдо-блоком ECU кадра CAN до того, как CAN Injector включает цепь подавления доминантного уровня:
Логический анализатор использует следующие линии:
- INJECT-TX: контакт TX, соединяемый с приёмопередатчиком CAN от контроллера CAN устройства CAN Injector
- INJECT-CS: включение подавления доминантного уровня (оно включено при высоком сигнале)
- ECU-TX: контакт TX, соединяемый с приёмопередатчиком CAN блока ECU от контроллера CAN блока ECU
- CAN H и CAN L: высокий/низкий сигналы CAN на витой паре CAN-шины (это аналоговые сигналы)
- ECU-RX: контакт RX от приёмопередатчика CAN блока ECU к контроллеру CAN блока ECU
Всё это нормально и CAN-шина работает правильно.
▍ Сон и пробуждение
В начале процесса угона CAN Injector отправляет кадр CAN, чтобы разбудить CAN-шину. Когда автомобили «отключены», на самом деле они не отключены: блоки ECU переходят в режим сна с низким энергопотреблением. Их можно «разбудить» кадром в CAN-шине (который обычно поступает от ECU дверей или от ECU беспроводного ключа). Когда-то давно этот сигнал к пробуждению находился бы на краю CAN-шины, который является полем начала кадра (start-of-frame, SOF) кадра CAN. Однако оказалось, что на краю CAN-шины могут возникать радиопомехи, из-за чего автомобили беспричинно пробуждаются. Это становилось проблемой для владельцев автомобилей, паркующихся в аэропортах (где мощный сигнал радара вызывал фронт CAN-шины), потому что когда они возвращались из отпуска, то обнаруживали, что аккумулятор автомобиля разрядился. Современный подход к пробуждению заключается в использовании System Basis Chip, который представляет собой сочетание в одном чипе приёмопередатчика CAN, регулятора мощности и цепи пробуждения: эта цепь пробуждения имеет минимальную логику CAN и способна распознавать настоящие кадры CAN, а поскольку шум от радиолокационного поиска радара никогда не будет выглядеть как правильный кадр CAN, спонтанного пробуждения не происходит.
CAN Injector отправляет кадр пробуждения множество раз в секунду, пока не получит кадр CAN от пробудившегося ECU на CAN-шине. На этом этапе CAN Injector ещё не включил цепь включения доминантного уровня, поэтому разбуженный ECU может отправить свой кадр CAN. Затем CAN Injector подавляет доминантный уровень и начинает периодически отправлять свой поддельный кадр CAN (называемый spoof), притворяясь смарт-ключом.
▍ Подавление доминантного уровня
Механизм рецессивности/доминантности — основа работы CAN-шины: она использует его для того, чтобы определить, какой кадр должен идти следующим (это называется arbitration), и использует его для сигнализирования об ошибках. Основная цель подавления доминантного уровня в CAN Injector — не позволить другим устройствам CAN выполнять передачу, чтобы не было конфликтов между отправляемыми одновременно spoof и реальным кадром. В обычном случае этот конфликт вызвал бы долгий «цикл» ошибок в CAN-шине; это первый вопрос моей викторины по CAN:
Когда CAN Injector активно подавляет доминантный уровень, то, по сути, не позволяет всем остальным устройствам CAN выполнять передачу по шине, вынуждая сделать так, чтобы можно было получить только его поддельные кадры. Такая блокировка не только останавливает все остальные кадры, но и блокирует механизм ошибок протокола CAN, поэтому все другие ECU не могут отправить ошибку, чтобы остановить поддельные кадры CAN Injector. Это вторая цель механизма подавления доминантного уровня: он способен победить оборудование защиты CAN. Например, у производителя кремниевых устройств NXP есть продукт под названием Stinger: приёмопередатчик CAN со встроенной логикой защиты, распознающий поддельный кадр и уничтожающий его ошибкой CAN. Система CAN-HG компании Canis Labs тоже способна выявлять и уничтожать поддельные кадры при помощи ошибок CAN. Но методики защиты, основанные на использовании ошибок CAN, не могут победить CAN Injector с его модифицированным приёмопередатчиком, потому что он не позволяет никакому другому устройству CAN переключиться в доминантное состояние.
Когда ему не позволяют установить доминантное состояние, контроллер CAN застревает в цикле, пытаясь отправить кадр CAN, затем сдаётся и может попытаться повторить отправку позже. Это тема моего второго вопроса викторины по CAN; для иллюстрации проблемы я использовал определённую модель контроллера CAN (которая почти никогда не устанавливается в продаваемые автомобили) (реальный ECU будет иметь более сложную систему управления сетью в попытках повторно подключиться к CAN-шине после возникновения того, что выглядит как аппаратная неполадка).
Показанная ниже трассировка логического анализатора показывает, как псевдо-ECU в настольной CAN-шине Иэна пытается отправить собственный кадр CAN, но не может, потому что доминантный уровень подавляется.
В трассировке INJECT-CS имеет высокий сигнал, что приводит к включению доминантного уровня. INJECT-TX имеет высокий сигнал (бит рецессивности). Обычно это означает режим ожидания CAN, поэтому другие контроллеры CAN могут начать отправлять кадр CAN, пройдя arbitration. Линия ECU-TX показывает начало кадра CAN со start-of-frame (который в CAN является битом доминантности), но она не может перевести шину в логический 0 (ECU-RX застрял на логической 1), поэтому выполняет установленный процесс восстановления после ошибки CAN (всё это подробнее описано во втором вопросе викторины по CAN).
Показаны напряжения на проводах CAN H и CAN L; псевдо-ECU смог на небольшую величину изменить эти напряжения, но этого недостаточно, чтобы это стало заметно какому-либо из приёмопередатчиков CAN (в том числе и его собственному приёмопередатчику) как бит доминантности (как видно в трассировке на линии ECU-RX, застрявшей на логической 1).
Существует потенциальная проблема с запретом ECU на отправку битов доминантности: поле ACK CAN. Поле ACK в кадре CAN — это однобитное поле, используемое приёмопередатчиком для определения того, что его слушает хотя бы одно устройство, и что получен OK кадра. Приёмопередатчик отправляет логическую 1 для ACK (то есть бит рецессивности) и ожидает считать её обратно как логический 0, потому что обычно все приёмники отправляют логический 0 (то есть бит доминирования), чтобы сообщить, что они получили OK кадра. Если приёмник пытается отправить логический 0, но считывает логическую 1, то протокол CAN обрабатывает это как ошибку и не принимает кадр как правильный. Всё это означало бы, что шлюзовый ECU в RAV4 не получил бы поддельный кадр ECU смарт-ключа. А это, в свою очередь, означает, что поддельный кадр не будет перенаправлен на CAN-шину силовой передачи, чтобы его увидела система управления двигателем. Однако оказывается, что это не проблема: так как множество приёмопередатчиков CAN отправляет логический logic 0 одновременно, а когда все они делают это вместе, комбинированные приёмопередатчики могут подавить цепь включения доминантного уровня и подать в шину доминантное состояние. Это видно на следующей трассировке: в самодельной CAN-шине Иэна здесь находится четыре псевдо-ECU, и совместно они могут сместить напряжения до уровня, требуемого для доминантного состояния в шине и логического 0 в поле ACK поддельного кадра, переданного CAN Injector. Поэтому все ECU получают OK поддельного кадра CAN Injector.
Побеждаем CAN Injector
Для начала хорошие новости: CAN Injector можно победить, и это можно сделать чисто программным исправлением, то есть уже выпущенные автомобили можно защитить и мы, наконец, можем перестать устанавливать механический блокиратор руля после каждой поездки. Существует два уровня устранения проблемы:
- Быстрый и грязный. Он использует знание о том, как сейчас работает CAN Injector и позволяет внести небольшое изменение, предотвращающее его работу. Это исправление не позволит решить проблему навсегда: преступник, спроектировавший CAN Injector, сможет отреагировать на изменения, после чего устройство, скорее всего, снова начнёт работать. Но это поможет выиграть время для другого исправления.
- Обмен криптографическими сообщениями. Необходимо использовать шифрование и коды аутентификации для защиты кадров CAN, чтобы CAN Injector не мог создавать валидные поддельные кадры. При правильной реализации это решит проблему навсегда. Однако это требует определённых усилий (подробнее об этом ниже).
Эти исправления применимы ко всем моделям автомобилей, уязвимым к атаке CAN Injection (проблема охватывает всю индустрию автомобилестроения, не ограничиваясь конкретным производителем или моделью).
▍ Быстрое и грязное решение
В настоящее время CAN Injector создаёт хаос в CAN-шине управления: делая шину рецессивной, он вызывает у контроллеров CAN блоков ECU отказ в передаче сообщений и невозможность сбоя с конкретным типом ошибки CAN: ошибки бита перехода из доминантного в рецессивное состояние. Такая ошибка очень редка и обычно означает аппаратную неполадку (она видна в сброшенных на сервер DTC). Шлюзовый ECU (в другой модели — ECU иммобилайзера двигателя) может мониторить свой контроллер CAN на возникновение таких ошибок и следовать максиме Яна Флеминга: «Один раз — случайность, дважды — совпадение, трижды — вражеское действие». Поэтому шлюз можно перепрограммировать так, чтобы он передавал дальше кадр CAN смарт-ключа, только если он недавно передавал кадр CAN без проблем и в недавнем прошлом в CAN-шине не было битовых ошибок такого типа. «Недавним прошлым» можно считать несколько секунд, что решит проблему ложноположительных срабатываний (когда на самом деле возникает редкая, но реальная неполадка): водитель может просто немного подождать и повторить попытку снова.
Это быстрое и грязное решение можно победить, модифицировав CAN Injector (мы не будем раскрывать, как это сделать). Но ужасно примитивный способ работы CAN Injector даёт нам понять, что это займёт приличное время. Это позволит производителям автомобилей выиграть время для внедрения полнофункционального исправления.
▍ Обмен криптографическими сообщениями
Правильным решением для устранения атаки CAN Injection будет применение в CAN политики нулевого доверия (или, по крайней мере, для конкретных сообщений в конкретных CAN-шинах). Политика нулевого доверия означает, что ECU не доверяет автоматически сообщениям от других ECU, а требует доказательств, что они подлинные. Для этого стоит использовать Hardware Security Module (HSM, аппаратный модуль безопасности); в автомобилестроении для них есть стандарт (называемый Secure Hardware Extensions, или SHE). В обычном случае это подразумевало бы использование чипов, включающих в себя оборудование, из-за чего уже существующие автомобили модифицировать было бы невозможно. К счастью, возможна программная эмуляция HSM, и Canis Labs реализовала её для SHE HSM: для неё требуется примерно 3 КБ кода и 200 байт ОЗУ. Использование ПО для кодирования и декодирования защищённого сообщения CAN занимает около 40 микросекунд времени CPU. В прошивке ECU обычно есть немного свободной памяти, и эта система, скорее всего, потребует около 0,05% общего времени CPU. Иными словами, эту защиту легко будет разместить в новой прошивке (на самом деле, Canis Labs успешно сотрудничала с армией США, создавая схему шифрования для CAN в ECU уже имеющихся военных транспортных средств).
Такой подход с использованием шифрования означает более существенные изменения, чем быстрое и грязное решение:
- Криптографическим сообщениям требуется больше места в CAN-шинах для передачи кодов аутентификации (в созданной Canis Labs схеме CryptoCAN используется пара зашифрованных кадров CAN для отправки одного незашифрованного кадра CAN; в других схемах используется половина полезной нагрузки кадра CAN).
- Блокам ECU нужно предоставить секретные ключи (обычно это делается на производстве), чтобы в каждой машине использовались свои ключи (в противном случае создателю CAN Injector достаточно будет просто купить одну машину и использовать инструменты для извлечения ключей, после чего он сможет взломать любую машину). Возможно, также понадобится система повторного предоставления ключей ECU: если ECU нужно заменить или переустановить в другой автомобиль, то ему понадобятся новые ключи, соответствующие тем, которые хранятся в других ECU.
Первое изменение не так уж сложно реализовать, потому что защищать нужно будет только один или два кадра CAN (поэтому потребуется лишь небольшая часть места в CAN-шине). Но для второго потребуется создание инфраструктуры управления ключами и их распространения (для чего, как минимум, необходимы инструменты для инъецирования ключей и база данных для хранения ключей). Применение стандарта SHE HSM как минимум будет означать, что эти инструменты стандартны и что возможно использование готовых решений. Однако за долгие годы производители автомобилей научились быть аккуратными с изменениями в автомобильных системах: то, что кажется быстрым и простым, часто оказывается не таким, и даже простое исправление требует дорогостоящего тестирования, чтобы избежать непредусмотренных последствий. Поэтому для реализации потребуется какое-то время.
Дальнейшие шаги
Иэн попытался связаться с Toyota, чтобы обсудить атаку CAN Injection и предложить свою помощь, но без особого успеха. Частично это вызвано тем, что крупные корпорации с трудом реагируют на проблемы с безопасностью. А частично тем, что это не раскрытие уязвимости, поэтому установленные Toyota процессы здесь неприменимы. Обычный процесс раскрытия уязвимости заключается в том, что этичный хакер находит уязвимость, которую преступники потенциально могут использовать, связывается с производителем, у которого есть время, чтобы устранить уязвимость. Это называется уязвимостью нулевого дня (потому что производитель обязан действовать быстро, потенциально имея ноль дней для исправления ошибки до того, как её начнут использовать преступники). Атака CAN Injection не является уязвимостью нулевого дня: скорее, это уязвимость минус 365 дней, потому что преступники уже использовали её для угона автомобилей (и делали это активно: произошёл всплеск в угонах автомобилей без помощи ключей, но правоохранительные органы просто предположили, что это были релейные атаки). Нет никакого риска в том, что описание атаки CAN Injection приведёт к использованию её преступниками: они уже широко её используют, и именно благодаря её использованию с автомобилем Иэна ему пришлось превратиться в цифрового детектива криминальной экспертизы.
▍ Доступ к автомобилю
Сейчас Иэн пытается получить доступ к RAV4, чтобы проверить, действительно ли его самодельная CAN-шина точно копирует всё поведение CAN Injector. Доступ также позволит протестировать реальный CAN Injector при помощи инструментов (в том числе осциллографом и логическим анализатором). Это невозможно сделать без официальной мастерской и автомобиля, потому что атака приводит к потоку DTC, которые необходимо сбросить при помощи авторизованных инструментов. Пока получить доступ не удаётся. Если какой-то производитель автомобилей или организация захочет бороться с атаками CAN Injection, то вы можете связаться с нами.
▍ Реверс-инжиниринг прошивки
Полный анализ работы CAN Injector должен включать в себя реверс-инжиниринг его прошивки. Используемая CAN Injector PIC18F может быть защищена от считывания её прошивки, но существует по крайней мере две методики обхода этой блокировки. Однако ни одну из них нельзя реализовать без риска уничтожения устройства, а одна из методик требует доступа к дорогостоящему специализированному оборудованию. Это уже выходит далеко за рамки любительского исследования и требует серьёзных ресурсов. В идеале этим проектом могла бы заняться организация, обеспечивающая безопасность автомобилей, а сам проект должен стать важным для производителей автомобилей, желающих понять, как угонщики используют CAN Injection, и выработать наиболее практичные способы борьбы с этой атакой.
Автор:
ru_vds