
ROP Level 1 в GD32F4: «А метлой дверь подпёр?» Или как нежно слить защищенную прошивку через программатор
ramfactory 17 минут назад ROP Level 1 в GD32F4: «А метлой дверь подпёр?» Или как нежно слить защищенную прошивку через программатор Сложный 4 мин 674 Промышленное программирование * Программирование микроконтроллеров *...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. ramfactory 17 минут назад ROP Level 1 в GD32F4: «А метлой дверь подпёр? » Или как нежно слить защищенную прошивку через программатор Сложный 4 мин 674 Промышленное программирование * Программирование микроконтроллеров * Производство и разработка электроники * Реверс-инжиниринг * Аналитика ВведениеПредставьте картину: вы поставили на объект дорогущую бронированную дверь, врезали три умных замка, настроили биометрию... а уходя, подпёрли её шваброй или метлой, "вдруг ключ забудешь".
ииии, - заходи кто хочешь, бери что хочешь! Примерно так выглядит аппаратная защита Read-Out Protection (ROP) Level 1 в народных китайских микроконтроллерах GigaDevice (и не только, а так же и в нашей сегодняшней жертве — GD32F401). Разработчик серийного девайса ставит заветную галочку в программаторе, блокирует чтение Flash, спит спокойно и думает, что его интеллектуальная собственность в полной безопасности.
Технические детали
Но дьявол кроется в деталях. Раз уж отладочный интерфейс SWD на первом уровне защиты услужливо оставляет нам открытым «чёрный ход» в виде оперативной памяти (SRAM), грех туда не заглянуть. Сегодня мы побудем исследователями безопасности, соберем кастомный ассемблерный шелл-код, заставим DMA шпионить против собственного процессора и управлять аппаратным вочдогом, вытягивая прошивку байт за байтом через обычный штатный программатор.
⚠️ Важный дисклеймерВся информация предоставлена исключительно в ознакомительных целях для аудита собственных девайсов. Автор не несет ответственности за неправомерное использование материала. Анатомия уязвимостиПри активации защиты ROP Level 1 (в GD32, STM32, APM32, CH32) внешний доступ к Flash закрыт, но SRAM полностью открыта.
Мы можем подключиться отладчиком, остановить ядро и залить в ОЗУ свой код, а так же прыгнуть в него подправив PC и STACK. Однако контроллер памяти (FMC) блокирует прямые инструкции чтения (LDR) из Flash (и не только их, в STM например производители незаметно допиливают свои камни пытаясь вкрутить возможные варианты блокировки уязвимости, в том числе прыжки в SRAM "просто так", так же как в камнях новых серий пытаются закрыть эту дырку, но там просто диаметр уже и это тема другой статьи), если процессор выполняет код из SRAM. Но рядом есть окно — DMA (Direct Memory Access).
Отраслевые последствия
Фильтры FMC не проверяют транзакции «память-память», запущенные контроллером DMA. Он имеет более высокие привилегии на системной шине AHB, чем ядро, выполняющее сторонний софт. Данные из Flash потекут в ОЗУ в обход всех запретов ядра.
Но, тут можно слегка споткнуться, если упустить одну простую но коварную штуку: Аппаратный Watchdog (IWDG)! Если настроить DMA на копирование всей Flash разом, микроконтроллер мгновенно уйдет в ребут. В коммерческих прошивках всегда включен аппаратный сторожевой пес (IWDG).
Пока программатор общается с ПК по USB, проходят десятки миллисекунд — для независимого таймера, - вочдога это вечность. Решение: Сжимаем окно передачи до 16 байт (4 слова по 32 бита).
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





