Защита прошивки на контроллерах AVR и PIC


23

Может ли кто-нибудь извлечь файл HEX, который я записал в предоставленный им микроконтроллер?

Если это возможно, как кто-то может гарантировать, что его код защищен во встроенных системах? В случае микроконтроллеров PIC и AVR, как можно защитить их прошивку от воспроизведения?



1
В случае # 1 вы, похоже, предлагаете предоставить шестнадцатеричный файл своим клиентам, в этом случае они могут просто записать его на несколько устройств-клонов, и нет реальной необходимости декомпилировать код, хотя это возможно. В случае заблокированного устройства (# 2), обычно это зависит от того, насколько они полны решимости получить код (другими словами, сколько они готовы потратить), но обычно это возможно.
alexan_e

1
Раньше это было два года, но защита в наши дни, как правило, побеждает в среднем один-два дня для популярных устройств. в основном, как только кто-то решил, что это стоит делать. Если вы действительно хотите обеспечить безопасность, вам нужно заняться чип-бизнесом, вы не получите ничего с готовых коммерческих частей.
old_timer

Ответы:


33

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

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

Многие устройства MCU в наши дни имеют встроенную флэш-память для записи программного кода. Ранее сохраненную и защищенную программу, хранящуюся во FLASH, обычно можно заменить новым кодом, но для разблокировки защитного механизма требуется операция полного стирания FLASH. После удаления деталь будет работать так же, как и до первоначальной защиты. Если загружена новая программа, обычно можно повторно заблокировать деталь, чтобы защитить вновь загруженный машинный код.

Любое обсуждение защиты кода в микроконтроллерах не будет полным без упоминания о том, что обычно нет никакой гарантии, что любая схема защиты, предложенная производителем детали, является надежной. Производители даже заявят, что системы защиты не являются на 100% надежными. Одна из причин этого заключается в том, что существует целая индустрия черного рынка, где за определенную плату старательные хакеры будут считывать код из защищенной части для любого, кто хочет заплатить. Они разработали различные схемы, позволяющие считывать код из ПЗУ или флэш-памяти на защищенных микроконтроллерах. Некоторые из этих схем невероятно умны, но работают для большего успеха в одних семьях, чем в других. Так что знайте об этом факте, тогда вы попытаетесь защитить свою программу от посторонних глаз.

Как только кто-то заполучил двоичный образ машинного кода, который был считан из микроконтроллера, независимо от того, был ли он защищенным микроконтроллером или нет, он может обработать машинный код с помощью инструмента, называемого дизассемблером. Это превратит двоичные данные обратно в код на ассемблере, который можно изучить, чтобы узнать, как работают алгоритмы вашей программы. Точная разборка машинного кода - это кропотливая работа, которая может потребовать огромных усилий. В конце процесс может привести к коду ассемблера, как я описал. Если ваша программа написана на каком-либо языке высокого уровня, таком как C, C ++ или Basic, код сборки будет представлять только скомпилированный и связанный результат вашей программы. Как правило, невозможно полностью восстановить украденный код обратно на уровень языка высокого уровня.

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

Самые опытные разработчики встраиваемых систем советуют вам использовать любую схему защиты, которая предлагается на MCU, в вашем приложении ... но не зависеть от этого до конца пути для вашего продукта. Они скажут вам, что лучший способ оставаться впереди конкурентов - это постоянно обновлять ваш продукт, чтобы старые версии были устаревшими и неинтересными к тому времени, когда хакеры могли клонировать ваш код. Измените код, добавьте новые функции, время от времени раскручивайте свои компьютерные платы, чтобы поменять местами все свои операции ввода-вывода и любые другие вещи, о которых вы можете подумать. Таким образом, вы можете выиграть гонку каждый раз.


Большое спасибо @Michael Karas Это был полный ответ
Rookie91

12

Я думаю, что ответа Майкла достаточно для этого вопроса, но я добавляю обе эти ссылки: Взлом PIC 18F1320 и все, что они делают, мы можем сломать! Они оба были очень интересны для меня.


Прилежный EE должен изучить эту последнюю ссылку и исследовать / сравнить / выбрать устройства, которые отсутствуют в списке. Сложность всегда более сдерживающая - например, добавление DS3641 или ATSHA204 . Хотя никакая дополнительная безопасность никогда не будет на 100% неразрушимой, дополнительная сложность может сделать ее не стоящей.
rdtsc
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.