Безопасность на уровне железа: реверс мозга автомобиля

  • #Positive_Labs

О чем материал

Специалисты R&D-центра Positive Labs обнаружили несколько уязвимостей в серии автомобильных микроконтроллеров Renesas. Такие чипы устанавливают во все блоки машины — от телематики до управления двигателем. Обнаруженные уязвимости нельзя назвать сложными, однако их эксплуатация требует нетривиального подхода — атаки по питанию.

Что ломать в автомобиле

С одной стороны, современные автомобили довольно сложные, а с другой — как посмотреть... Есть всего два вида моторов (двигатель внутреннего сгорания и электродвигатель), и оба основаны на технологиях XIX века. Для управления машиной используются электронные блоки (ЭБУ) — их много, и каждый отвечает за небольшой список задач, например:

  • Блок управления двигателем — рассчитывает подачу топлива, зажигание и обороты.
  • ABS — предотвращает блокировку колес при торможении.
  • ESP — помогает удерживать автомобиль на траектории.
  • BCM — контролирует свет, стеклоподъемники, центральный замок.
  • Блок подушек безопасности — отслеживает аварии и запускает подушки.

По отдельности это простые устройства — гораздо «глупее» любого, даже самого дешевого планшета. Вся сложность кроется в количестве ЭБУ и их взаимодействии. С появлением в автомобиле первого программируемого блока сразу возникла вероятность ошибки программиста, а по мере роста их числа эта вероятность увеличивается... 

Таким образом, хорошо напичканный электроникой современный автомобиль становится интересным объектом для исследователей безопасности и хакеров. Наиболее перспективный с технической точки зрения сценарий атаки — получение удаленного контроля над отдельными ЭБУ без физического доступа к транспортному средству. Что же должен сделать злоумышленник, чтобы превратить настоящий автомобиль в машинку на пульте управления? В кино захват контроля над машиной выглядит эффектно, однако в реальности для этого требуется огромная техническая и информационная подготовка. 

Попробуем представить путь хакера до любого из ЭБУ. Предположим, злоумышленник уже получил доступ к одному из блоков по радиоканалу (Wi-Fi, BLE, RF). Теперь ему нужно достучаться до ECM (блок управления двигателем) и EPS (блок электроусилителя руля) — это даст возможность управлять машиной. Пройти такой путь на современных автомобилях весьма трудно: для начала придется разобраться с внутренним устройством блоков и архитектурой их соединения.

Устройство ЭБУ

ЭБУ обычно содержит несколько узлов: управляющий микроконтроллер (MCU), CAN-трансиверы и каскад для входных и выходных сигналов. 

Рисунок 1.svg
Рисунок 1. Схема ЭБУ

Вся магия происходит в MCU — это мозг блока, и именно для него программист пишет прошивку. Вся логика работы блока содержится в ней.

Архитектура

В современных автомобилях есть несколько отдельных сетей:

  • Powertrain CAN — отвечает за двигатель и коробку передач.
  • Chassis CAN — управляет тормозами, системой ESP и подвеской.
  • Body CAN — контролирует двери, освещение и климатическую систему.
  • Infotainment CAN — обеспечивает работу мультимедиа и навигации.

Все ЭБУ общаются по шине данных CAN, но есть один нюанс — Gateway ECU. Это своего рода шлюз, который обеспечивает безопасную и фильтрованную передачу данных между разными сетями и системами. То есть если хакер отправит сообщение из блока А в блок Б, оно пойдет не напрямую, а через Gateway. Для злоумышленника это может стать проблемой: гейт фильтрует трафик между блоками и может не пропустить нелегитимные сообщения или вовсе запретить обмен данными.

Рисунок 2.svg
Рисунок 2. Обмен данными между сетями автомобиля
Без заголовка.png
Рисунок 3. Архитектура

Путь из блока А в блок Б

Рассмотрим ситуацию, когда блок A должен связаться с блоком Б. Для этого необходимо выполнение сразу нескольких условий:

  • Блок A должен сформировать и отправить корректные данные на шину CAN.
  • Данные должны дойти до Gateway.
  • Gateway должен распознать сообщение как допустимое и пропустить его дальше.
  • Блок Б должен корректно принять полученные данные.
  • Блок Б должен интерпретировать их как валидные и выполнить соответствующее действие.

Каждый из этих этапов требует глубокого понимания устройства прошивки блока A, блока Б и Gateway: какими сообщениями они обмениваются и какая логика заложена в обработку данных. 

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

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

Автомобильные MCU

В линейках основных производителей микроконтроллеров для автомобильных ЭБУ (Infineon Technologies, NXP Semiconductors, STMicroelectronics и Renesas Electronics) заявлены механизмы защиты прошивки, а также дополнительные средства безопасности. В частности, Secure Boot и аппаратные средства контроля целостности.

Несмотря на различия в архитектуре, представленные на рынке автомобильные MCU во многом похожи. Это связано с тем, что в индустрии есть набор отраслевых стандартов, которые в том числе регламентируют требования к безопасности микроконтроллеров, применяемых в ЭБУ. Один из ключевых стандартов — AUTOSAR (AUTomotive Open System ARchitecture). Он разделяет программную логику и аппаратную платформу, тем самым повышает гибкость, модульность и повторное использование кода, а также формирует единые подходы к безопасности. 

Итак, нулевой шаг — получение самой прошивки. Для ее извлечения из микроконтроллера часто применяются атаки по побочным каналам (Side Channel Attacks). Их суть заключается в кратковременном физическом воздействии на микросхему — например, с помощью электромагнитных импульсов или путем манипуляций с линией питания. Это позволяет вызвать контролируемый сбой во внутренней логике работы чипа и нарушить уже упомянутые штатные механизмы защиты. В отдельных случаях таким образом можно обойти ограничения доступа и получить содержимое прошивки для последующего анализа и реверса (подробнее о подобных атаках можно почитать здесь: раз, два, три).

Извлечение прошивки из Renesas RH850

Мы исследовали серию микроконтроллеров Renesas RH850, которые используются в разных автомобильных блоках (Gateway, ECM, TCM, BCM и т. д.). Соответственно, уязвимости в этих чипах могут открыть хакеру дверь к прошивкам и дальнейшему получению контроля над автомобилем.

Производитель заявляет несколько видов защиты прошивки в этом семействе МК:

  • Защита паролем (ID authentication).
  • Отключение интерфейсов, по которым можно вычитывать ПО (Prohibition of connection of a dedicated flash memory programmer).
  • Отключение команды чтения памяти (Prohibition of read commands).

Мы изучили разработанный производителем BOOTROM (загрузочный код / загрузчик), который по умолчанию недоступен для изменения со стороны программиста. В нем обнаружилось несколько участков кода, где можно «повернуть не туда» и получить доступ к прошивке.

Рисунок 3.svg
Рисунок 4. Ассемблерный код обработчика команды чтения памяти (отладочная команда)

На рис. 4. видно, что после проверок настроек безопасности чип может отправить данные пользователю, но может и отказать. Если разработчик ПО включил защиту, команда вернет не данные, а код ошибки. Обычно это не считается проблемой безопасности — такой код пишут все. Однако если допустить, что процессор может исполнять код с ошибками, ситуация меняется. Этот кусок уже не будет безопасным: в нем есть сразу два места, где можно свернуть в зеленый блок, а не в красный.

Для эксплуатации этой ошибки в коде мы разработали аддон (небольшая печатная плата) к Chip’olino. 

Рисунок 4.svg
Рисунок 5. Аддон для Chip’olino.

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

Рисунок 5.svg
Рисунок 6. Сбой на линии питания ядра

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

***

В ходе экспериментов мы получили возможность обходить защиту множества чипов — выбранная серия MCU насчитывает десятки устройств. По сути, теперь мы можем доставать прошивки из ЭБУ и заниматься всеми любимым реверс-инжинирингом в его привычном понимании.

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

Мы дěлаем Positive Research → для ИБ-экспертов, бизнеса и всех, кто интересуется ✽ {кибербезопасностью}