О чем материал
Специалисты R&D-центра Positive Labs обнаружили несколько уязвимостей в серии автомобильных микроконтроллеров Renesas. Такие чипы устанавливают во все блоки машины — от телематики до управления двигателем. Обнаруженные уязвимости нельзя назвать сложными, однако их эксплуатация требует нетривиального подхода — атаки по питанию.
Что ломать в автомобиле
С одной стороны, современные автомобили довольно сложные, а с другой — как посмотреть... Есть всего два вида моторов (двигатель внутреннего сгорания и электродвигатель), и оба основаны на технологиях XIX века. Для управления машиной используются электронные блоки (ЭБУ) — их много, и каждый отвечает за небольшой список задач, например:
- Блок управления двигателем — рассчитывает подачу топлива, зажигание и обороты.
- ABS — предотвращает блокировку колес при торможении.
- ESP — помогает удерживать автомобиль на траектории.
- BCM — контролирует свет, стеклоподъемники, центральный замок.
- Блок подушек безопасности — отслеживает аварии и запускает подушки.
По отдельности это простые устройства — гораздо «глупее» любого, даже самого дешевого планшета. Вся сложность кроется в количестве ЭБУ и их взаимодействии. С появлением в автомобиле первого программируемого блока сразу возникла вероятность ошибки программиста, а по мере роста их числа эта вероятность увеличивается...
Таким образом, хорошо напичканный электроникой современный автомобиль становится интересным объектом для исследователей безопасности и хакеров. Наиболее перспективный с технической точки зрения сценарий атаки — получение удаленного контроля над отдельными ЭБУ без физического доступа к транспортному средству. Что же должен сделать злоумышленник, чтобы превратить настоящий автомобиль в машинку на пульте управления? В кино захват контроля над машиной выглядит эффектно, однако в реальности для этого требуется огромная техническая и информационная подготовка.
Попробуем представить путь хакера до любого из ЭБУ. Предположим, злоумышленник уже получил доступ к одному из блоков по радиоканалу (Wi-Fi, BLE, RF). Теперь ему нужно достучаться до ECM (блок управления двигателем) и EPS (блок электроусилителя руля) — это даст возможность управлять машиной. Пройти такой путь на современных автомобилях весьма трудно: для начала придется разобраться с внутренним устройством блоков и архитектурой их соединения.
Устройство ЭБУ
ЭБУ обычно содержит несколько узлов: управляющий микроконтроллер (MCU), CAN-трансиверы и каскад для входных и выходных сигналов.
Вся магия происходит в MCU — это мозг блока, и именно для него программист пишет прошивку. Вся логика работы блока содержится в ней.
Архитектура
В современных автомобилях есть несколько отдельных сетей:
- Powertrain CAN — отвечает за двигатель и коробку передач.
- Chassis CAN — управляет тормозами, системой ESP и подвеской.
- Body CAN — контролирует двери, освещение и климатическую систему.
- Infotainment CAN — обеспечивает работу мультимедиа и навигации.
Все ЭБУ общаются по шине данных CAN, но есть один нюанс — Gateway ECU. Это своего рода шлюз, который обеспечивает безопасную и фильтрованную передачу данных между разными сетями и системами. То есть если хакер отправит сообщение из блока А в блок Б, оно пойдет не напрямую, а через Gateway. Для злоумышленника это может стать проблемой: гейт фильтрует трафик между блоками и может не пропустить нелегитимные сообщения или вовсе запретить обмен данными.

Путь из блока А в блок Б
Рассмотрим ситуацию, когда блок 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 (загрузочный код / загрузчик), который по умолчанию недоступен для изменения со стороны программиста. В нем обнаружилось несколько участков кода, где можно «повернуть не туда» и получить доступ к прошивке.
На рис. 4. видно, что после проверок настроек безопасности чип может отправить данные пользователю, но может и отказать. Если разработчик ПО включил защиту, команда вернет не данные, а код ошибки. Обычно это не считается проблемой безопасности — такой код пишут все. Однако если допустить, что процессор может исполнять код с ошибками, ситуация меняется. Этот кусок уже не будет безопасным: в нем есть сразу два места, где можно свернуть в зеленый блок, а не в красный.
Для эксплуатации этой ошибки в коде мы разработали аддон (небольшая печатная плата) к Chip’olino.
Мы провели большую работу по настройке аддона и в конечном счете смогли считать прошивку с заблокированного чипа. Для этого в определенный момент времени, после попытки запросить память у микроконтроллера, нужно вызвать сбой на линии питания ядра. В результате ядро процессора выполнит код некорректно: вместо красного блока выполнение пойдет в зеленый, где чип отправляет данные из памяти.
Отметим, что для проведения подобных атак недостаточно логической ошибки в коде — нужна физическая возможность манипулировать питанием микроконтроллера. Конечно, у любого процессора есть входные линии питания, на которые можно подавать напряжение выше или ниже номинального. Однако это далеко не всегда приводит к контролируемому сбою с предсказуемым результатом. В большинстве случаев чип либо сгорает, либо перезапускается. Нам удалось настроить параметры сбоя питания ядра таким образом, чтобы выдержать золотую середину: процессору уже не хватает питания для нормальной работы, но он еще не выключается.
***
В ходе экспериментов мы получили возможность обходить защиту множества чипов — выбранная серия MCU насчитывает десятки устройств. По сути, теперь мы можем доставать прошивки из ЭБУ и заниматься всеми любимым реверс-инжинирингом в его привычном понимании.
А теперь представьте, сколько времени и знаний понадобится хакеру, чтобы превратить автомобиль в машинку на пульте управления? Ведь для победы над каждой из его частей требуется провести огромное исследование. Но никто не говорит, что это невозможно…



