О чем материал
Рассказываем о Chip’olino — инструменте для проведения glitch-атак по питанию, который разработал эксперт Positive Labs.
Когда я начал погружаться в атаки по питанию, я изучил множество открытых материалов по теме. Однако предложенные в них подходы редко удавалось воспроизвести без доработок и костылей. Стало ясно, что для интеграции всех этих техник в арсенал Positive Labs нужен собственный инструмент.
По сути, нам требовалась поваренная книга, в которую можно записывать рецепты разных атак: сколько паприки и огурчиков добавлять в каждое блюдо и при какой температуре лучше готовить. Мы сделали такой инструмент и назвали его Chip’olino: сегодня я расскажу, как он работает и из каких компонентов состоит.

Рецепт атаки по питанию
Каждый микроконтроллер (МК) нужно готовить по-разному: одному требуется пять вольт питания, а другому — три. Порой атаку можно повторять несколько раз без перезагрузки МК, а иногда чип приходится перезагружать перед каждой попыткой сбоя — например, при снятии защиты с NRF52 (стандарт де-факто в устройствах с BLE).
Не менее важен интерфейс, через который мы взаимодействуем с чипом до и после атаки. Лучше иметь под рукой все основные варианты: SWD, UART, SPI, I2C и 1-Wire. Например, для извлечения прошивок из STM32 требуются и UART, и SPI.
Еще один ключевой ингредиент — время. Специалисты бесконечно спорят о том, что должно быть мозгом атаки: в основном разговоры крутятся вокруг ПЛИС (программируемая логическая интегральная схема) и МК. Первые обеспечивают высокую временную точность, а вторые — удобную настройку логики.
Наконец, нам не обойтись без схемотехники и физики. Печатная плата (ПП) и электронные компоненты вокруг МК существенно влияют на временны́е параметры атаки. Так, ошибки в проектировании платы могут свести на нет использование ПЛИС — точность может быть утрачена. Более того, если номиналы электронных компонентов подобраны неправильно, провести атаку вообще будет невозможно.
В итоге базовый набор ингредиентов выглядит следующим образом:
- манипуляции с питанием;
- интерфейс общения с чипом;
- схемотехника;
- конструкция ПП;
- временны́е параметры (момент и длительность атаки).
Все они тесно связаны друг с другом: стоит изменить всего одну составляющую — и придется начинать заново. По сути, если вы провели атаку на одном чипе, вы можете сразу повторить ее на другом таком же, но только если ингредиенты останутся неизменными.
Пишем поваренную книгу
Нам нужно было разработать решение, позволяющее не только проводить исследования, но и записывать их рецепты. Для этого важно было выработать универсальный подход к проведению атак, сохранив при этом высокую степень свободы действий (за помощь с архитектурой спасибо моему коллеге Александру Занегину).
Решение получило название Chip’olino.
Для начала мы выявили общие элементы в разных видах атак по питанию (см. рис. 1).
Стало понятно, что, несмотря на значительные различия между атаками, их можно описать в едином формате. Соответственно, программная часть Chip’olino должна включать универсальный набор сущностей и описание ряда свойств:
- как перезагружать/включать МК;
- как с ним взаимодействовать;
- какой алгоритм манипуляций питанием использовать;
- как проверять, что атака прошла успешно.
В свою очередь, железо Chip’olino — это управляющая плата, к которой присоединяются небольшие аддоны. Она отвечает за управление питанием и взаимодействие с МК через разные интерфейсы. В качестве мозга системы мы выбрали микроконтроллер RP2040 (золотая середина между МК и ПЛИС). Помимо двух обычных ядер, он оснащен блоком PIO (programmed input/output), который обеспечивает выполнение микропрограмм за фиксированное время.

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

В большинстве устройств, которые поступают к нам на исследование, есть МК с прошивкой. Если устройство сделано качественно, прошивка будет защищена от считывания. Существуют разные способы ее извлечения, в том числе атаки по питанию. До появления Chip’olino мы, как и другие исследователи, паяли мелкие проводочки, делали сложные коммутации, подключали логические анализаторы, осциллографы и ПК. Такие стенды разваливались сразу во всех возможных местах, поэтому мы проводили атаки, боясь шелохнуться ;(

Записываем рецепт
Переходим к практике! Для начала добавляем в прошивку новый МК и описываем его свойства. В качестве примера возьмем Renesas RH850:
target_t rh850_tgt = {
.name = "rh850",
.rst_delay_tick = 100000000,
.check_delay_us = 100,
.count_edge_pio = 8,
.board_init = rh850_board_init,
.sync_checker = rh850_sync,
.rst_state = rh850_reset_state,
.glitcher = &g_gnd_cnt,
.load_pio_prog = gnd_cnt_load_pio_prog,
.glitch = gnd_cnt_glitch,
.unlock_checker = rh850_is_unlock,
};
Добавляем в код фактуру и задаем временны́е параметры: как долго чип перезагружается, сколько времени проходит между атакой и проверкой. Также потребуется определить шесть функций, которые зададут алгоритмы управления и взаимодействия с процессором. Для этого придется изучить документацию на чип и тщательно продумать все нюансы атаки. Без опыта здесь не обойтись — не каждая домохозяйка с ходу разберется :)
Далее начинаем готовить аддон. В случае Chip’olino это не так уж сложно, но опыт в разработке электроники все же понадобится. Аддон соединяется с основной платой через два разъема, в которые подаются разные сигналы: питание, интерфейсы, цифровые и аналоговые выводы. Берем только те сигналы, которые нужны нам для проведения атаки. Например, в случае с Renesas RH850 я использовал 7 линий из 40 (см. рис. 5). Взаимодействие с МК происходит через UART, он запитывается от 3,3 вольта, также нужно использовать по одному сигналу для перезагрузки и управления атакой.
Помимо самого RH850, на итоговой схеме содержатся компоненты, необходимые для запуска МК в нужном режиме (см. рис 6). В сумме — 11 электронных компонентов и один транзистор для осуществления сбоя на линии питания ядра.
Наконец, переходим к трассировке печатной платы. Это последний шаг — так мы фиксируем физические параметры атаки.
Обычно МК выпаивается из «боевого» устройства и устанавливается в аддон для проведения атаки.

Attention! При проведении атаки есть риск полностью стереть прошивку или закирпичить чип. Помните, что мы вмешиваемся в работу микропроцессора, поэтому результат не всегда предсказуем ;(
Готовим по рецепту
А теперь самое приятное. Представьте ситуацию: год назад вы научились снимать защиту от чтения прошивки у RH850 и хотите повторить атаку. У вас уже есть готовый аддон, в прошивке Chip’olino — нужный процессор, а где-то на wiki сохранились заметки о былом опыте. По сути, вам остается лишь запаять защищенный МК на аддон и запустить скрипт.

Да, первый раз придется попотеть и кропотливо подобрать нужные параметры. Зато все последующие атаки будут приносить сплошное удовольствие.
Chip’olino in the wild
Итак, задача получения инструмента для исследования в области атак по питанию выполнена! Приятно, что он получился настолько универсальным и вобрал в себя не только наш опыт, но и экспертизу мирового сообщества. Многие атаки были проведены и описаны до нас — часть из них уже имплементирована в Chip’olino.
Чтобы внести свой вклад в направление атак по питанию, мы частично выложили инструмент на github. Отмечу, что в открытой версии нет поддержки ряда МК, информация об атаках на которые еще не вышла в паблик. В репозитории можно найти файлы для производства и использования Chip’olino, а также подробные рецепты атак на разные чипы.
Мы уже обкатали Chip’olino в нескольких проектах Positive Labs, в планах — существенное расширение линейки поддерживаемых чипов. Начало положено!