Если бы MikaTech была недобросовестной компанией, в Интернете можно было бы найти множество плохих отзывов о её услугах за 28 лет истории
Итак, ответ — ДА! Мы хорошие люди.Почему выбирают Mikatech, нажмите здесь, чтобы узнать
О MikaTech
Время пролетело быстро: с того дня, когда мы выполнили наш первый проект по обратному проектированию МК 8051 в 1998 году, до момента создания нашей лаборатории стоимостью в миллион долларов в 2012 году прошло 14 лет. Теперь мы начинаем новый бизнес по разработке встраиваемых визуальных систем, надеемся прослужить ещё 10 лет.
Peter Lee
Сооснователь и генеральный директор
История электроники началась с электричества. Сначала люди жили бок о бок с электрической энергией, не осознавая её огромного потенциала, и та эпоха оставалась спокойной. Затем пришёл Фарадей, который шаг за шагом запустил колесо электронных инноваций...
Вскоре появились первые машины, работающие на этом новом источнике энергии. Прошли десятилетия, и когда обычные люди постепенно привыкли к этим электрическим устройствам и перестали пристально следить за исследованиями новых технических специалистов, возникла новаторская идея: электроны можно управлять внутри стеклянных вакуумных ламп для создания функциональных схем. То, что сначала казалось остроумной экспериментальной концепцией, вскоре стало необратимым. Область электроники официально родилась, и колесо технического прогресса начало вращаться всё быстрее...
Новые дисциплины принесли новых практиков. Заводской персонал в синих рабочих халатах сменили лаборанты в белых халатах, и группа специалистов по электронике вышла на историческую арену. Пока широкая публика смотрела на эти технологические прорывы с шоком и замешательством, исследователи разделились на два лагеря: аппаратные разработчики и программные разработчики. Обе группы, моложе своих предшественников, были полны страсти и творческих идей, но шли разными путями. Программная команда продвигала свои теории постепенно и методично, в то время как инженеры-аппаратчики, вдохновлённые успехами, рисковали и изобрели транзистор.
До этого момента технологическое развитие всё ещё можно было контролировать, и широкая публика оставалась в неведении. Однако это состояние не могло длиться вечно и привело к неизбежному повороту. Введённые в заблуждение наивным предположением, что ограничение коммерциализации может замедлить технологическую эволюцию и вернуть общество к более простым временам, массовые потребительские рынки открыли свои двери для продуктов электронной промышленности, формируя неразрывный цикл спроса и предложения. Падающие цены на компоненты сделали электронное оборудование доступным для широкой аудитории, и колесо инноваций ускорилось до неуправляемости...
Вскоре появились первые интегральные схемы и микропроцессоры общего назначения, что ещё больше снизило цены на компьютеры и другое электронное оборудование. Вычислительные устройства стали доступны для покупки повсюду, завершая очередной цикл развития. Обычные граждане получили доступ к персональным компьютерам, что ознаменовало официальное начало компьютерной эры...
Пока разворачивалась эта технологическая революция, любители электроники и профессиональные инженеры — также разделённые на аппаратные и программные группы и защищённые относительной анонимностью — продолжали день и ночь совершенствовать свои проекты. В конце концов, в сообществе возник важный вопрос: почему бы не разработать универсальную интегральную схему? Небольшой, недорогой, перепрограммируемый чип, который можно было бы применять во всех областях электроники, встраивать в любое оборудование или систему по мере необходимости. На тот момент производственные технологии и рыночный спрос были достаточно зрелыми, чтобы поддержать такое творение. Не было причин сдерживаться. Аппаратные и программные концепции сошлись, и инженеры окончательно утвердили архитектуру первого интегрального чипа, назвав его МИКРОКОНТРОЛЛЕРОМ (МК).
Изобретение микроконтроллера произвело революцию во всей индустрии встраиваемых систем, однако эта беспрецедентная программируемая возможность также создала острую потребность в защите интеллектуальной собственности. Сегодня большая часть аппаратного обеспечения современных МК сосредоточена на встроенных механизмах безопасности, таких как биты защиты и аппаратные перемычки, которые блокируют несанкционированное внешнее чтение внутреннего кода прошивки. Тем не менее, как будет подробно описано в этой главе, независимо от того, насколько надёжными кажутся встроенные средства защиты МК, они становятся уязвимыми для обратного проектирования, как только злоумышленник получает физический доступ к чипу. Злоумышленники обычно применяют такие технические подходы, как декапсуляция чипа, лазерное микрозондирование и внедрение ошибок, чтобы отключить защитные блокировки и извлечь полные образы прошивки. Постоянная гонка вооружений между разработчиками средств защиты и злонамеренными обратными инженерами постоянно совершенствует защитные механизмы, эволюционируя от примитивных битов защиты до сложных аппаратных ускорителей шифрования. Освоение этих принципов безопасности так же важно, как и изучение базовой архитектуры МК. Микроконтроллер без достаточной защиты рискует полным дублированием кода и функциональным клонированием. Эта вводная глава закладывает основу для глубокого погружения в аппаратные и программные блоки, которые обеспечивают микроконтроллерам исключительную универсальность, а также их врожденные уязвимости безопасности.
Несмотря на их мощную функциональную производительность, микроконтроллеры следуют по своей сути простой логике проектирования. Они собираются из зрелых, высокопроизводительных базовых электронных компонентов по стандартизированному рабочему процессу, описанному ниже:
На основе этого стандартизированного шаблона было выпущено бесчисленное множество вариантов микроконтроллеров, которые тихо стали невидимыми спутниками, интегрированными почти во всё современное оборудование. Их непревзойдённая простота и гибкость программирования доминируют во встраиваемом проектировании уже десятилетия. Если вы намереваетесь разработать встраиваемый продукт на основе МК, имейте в виду, что почти каждый распространённый сценарий применения уже был исследован предыдущими инженерами, которые либо предоставили готовые решения, либо завершили предварительную экспериментальную проверку.
Три ключевых преимущества способствуют широкому распространению и коммерческому успеху микроконтроллеров:
Если вы увлечены электронной инженерией, освоение и управление аппаратной логикой микроконтроллеров — это обязательный навык.
Хотя существуют тысячи различных семейств микроконтроллеров и миллионы пользовательских прошивок, написанных исключительно для них, все МК имеют одинаковую базовую логику работы. Освоив рабочий процесс одной модели, вы сможете адаптироваться к большинству других вариантов. Стандартная последовательность полного жизненного цикла работы микроконтроллера выглядит следующим образом:
Во время обычной работы микроконтроллер последовательно выбирает машинные инструкции из внутренней программной памяти. Однако, как только программируется бит защиты, внешние интерфейсы отладки и чтения памяти навсегда отключаются, что не позволяет сторонним программаторам извлечь полную двоичную прошивку. Этот механизм блокировки служит основным аппаратным барьером безопасности, но он не является неуязвимым для продвинутых методов обратного проектирования. Например, злоумышленники могут выполнить полную декапсуляцию чипа, чтобы обнажить кристалл кремния, а затем использовать оборудование с фокусированным ионным пучком для физического изменения состояния защитных перемычек, полностью разблокируя защищённый чип. После обхода блокировки злоумышленники могут дампить всю флэш-память программ и восстановить полную логику исходного кода. Несанкционированное извлечение прошивки создаёт серьёзные коммерческие риски для отраслей, полагающихся на конфиденциальные встраиваемые алгоритмы. Для смягчения таких угроз производители полупроводников внедряют многоуровневые стратегии защиты, включая зашифрованное хранение в EEPROM и датчики физического обнаружения взлома. Тем не менее, описанный выше последовательный рабочий процесс остаётся основным принципом работы каждого микроконтроллера. Понимание этого основного цикла является первым критическим шагом как для реализации надёжной защиты МК, так и для проведения легальных операций по восстановлению прошивки.
Как показано выше, все внутренние операции МК выполняются на высоких скоростях по оптимизированной логике. Однако микроконтроллеры были бы лишены практической ценности без специализированных периферийных схем, интегрированных вместе с ядром процессора. В следующих разделах подробно разбираются функции каждого ключевого внутреннего модуля.
Постоянное запоминающее устройство (ПЗУ) — это категория энергонезависимой памяти, предназначенной для постоянного хранения исполняемой прошивки. Максимальный поддерживаемый размер программы определяется ёмкостью ПЗУ. Память ПЗУ может быть либо встроена в кристалл микроконтроллера, либо реализована как внешняя дискретная микросхема, причём у каждой конфигурации есть свои компромиссы. Внешние микросхемы ПЗУ снижают базовую стоимость МК и поддерживают гораздо больший объём программы, но потребляют несколько портов ввода/вывода для подключения шины памяти, ограничивая доступные периферийные интерфейсы. Внутреннее ПЗУ имеет меньшую максимальную ёмкость и повышает общую стоимость компонента, но сохраняет все порты ввода/вывода для подключения внешних датчиков и исполнительных устройств. Стандартная ёмкость ПЗУ варьируется от 512 байт до 64 килобайт.
Современные микроконтроллеры почти повсеместно заменяют традиционное масочное ПЗУ на flash-память, что позволяет обновлять прошивку в полевых условиях без специального заводского программатора. Эта возможность перепрограммирования одновременно создаёт новые уязвимости безопасности. Большинство МК интегрируют специальный бит защиты, который после программирования блокирует любой доступ к чтению прошивки через внешние интерфейсы программирования — это важная защита для интеллектуальной собственности. Однако этот механизм не является неразрушимым. Злоумышленники часто используют сбои питания или точное искажение тактовой частоты, чтобы обойти защиту и извлечь полный программный код. На многих высокозащищённых чипах применяются дополнительные аппаратные перемычки, которые физически разрывают цепь чтения памяти; для их взлома требуется полная декапсуляция и микрозондирование кремния. Если законные владельцы устройства потеряли исходный код, восстановление прошивки с полностью заблокированного оборудования становится почти невозможным, если только не существуют недокументированные заводские тестовые бэкдоры. Поэтому различие между разными типами памяти и анализ их встроенных функций безопасности критически важны как для разработчиков встраиваемых систем, так и для специалистов по аппаратной безопасности. Внешнее ПЗУ тривиально считывается стандартными логическими анализаторами, тогда как внутренняя flash-память требует сложных методов физического обратного проектирования для обхода встроенных уровней защиты.
Оперативное запоминающее устройство (ОЗУ) служит временной энергозависимой памятью для хранения данных времени выполнения и промежуточных результатов вычислений, генерируемых во время работы МК. Все данные, хранящиеся в ОЗУ, полностью стираются сразу после отключения питания. Для иллюстрации: если прошивка выполняет арифметическую операцию сложения, специальный регистр ОЗУ действует как временное хранилище для накопленной суммы. Ёмкость ОЗУ общего назначения обычно составляет несколько килобайт в основных семействах микроконтроллеров.
Несмотря на энергозависимость и невозможность сохранения данных без питания, ОЗУ остаётся ценной целью для кражи данных во время активной работы устройства. Если злоумышленник может заморозить выполнение МК и напрямую прочитать содержимое ОЗУ, он может извлечь криптографические ключи или промежуточные вычисления, временно хранящиеся в памяти. Многие защищённые микроконтроллеры имеют аппаратные блокировки, которые не позволяют внешним отладчикам обращаться к ОЗУ во время нормального выполнения программы. Если злоумышленник отключает эту блокировку с помощью аппаратного внедрения ошибок, становится возможным полное дампирование ОЗУ и анализ данных. Этот риск побуждает разработчиков защищённых встраиваемых систем применять такие контрмеры, как выполнение криптографических операций за постоянное время и автоматическое обнуление памяти для минимизации раскрытия конфиденциальных данных. В сочетании с энергонезависимой памятью EEPROM, ОЗУ содержит критические калибровочные параметры и уникальные токены безопасности, которые могут быть полностью дублированы после успешного взлома чипа. Полное восстановление системы требует анализа как прошивки ПЗУ, так и состояния ОЗУ во время выполнения, особенно когда дампы flash-памяти не дают контекста для динамической логики.
EEPROM — это специализированная энергонезависимая периферийная память, которая присутствует не на всех моделях микроконтроллеров. Она поддерживает чтение/запись во время активного выполнения программы (как ОЗУ) и сохраняет все данные неопределённо долго после отключения питания (как ПЗУ). Разработчики часто используют EEPROM для сохранения генерируемых во время работы параметров, таких как калибровочные смещения датчиков, коды доступа и счётчики использования, которые должны сохраняться при циклах питания. Основным ограничением EEPROM является низкая скорость записи, отдельные операции программирования занимают миллисекунды.
Как перезаписываемая энергонезависимая память, EEPROM входит в число наиболее приоритетных целей для злонамеренного обратного проектирования. Если глобальная защита МК не распространяется на область EEPROM, злоумышленники могут прочитать все хранящиеся конфигурационные данные и клонировать параметры устройства. Противники также используют функцию записи EEPROM для преднамеренного изменения хранимых значений, отключая встроенные проверки безопасности или изменяя пороговые значения производительности. Реализация битов защиты варьируется у разных производителей микроконтроллеров, и многие схемы защиты не полностью защищают блоки памяти EEPROM. Полный рабочий процесс обратного проектирования всегда включает полные дампы всей карты памяти, включая EEPROM, для восстановления полной логики встраиваемой системы. Классический реальный пример — потребительские струйные принтеры, которые хранят данные об уровне чернил в EEPROM; злоумышленники копируют данные из этой области памяти, чтобы обойти ограничения на дозаправку и обеспечить неограниченное использование чернил. Это демонстрирует как риски злонамеренного использования открытой EEPROM, так и легальные случаи восстановления утерянных конфигурационных данных устройства. Высокозащищённое встраиваемое оборудование снижает эти угрозы путём шифрования всех данных EEPROM или привязки хранимых параметров к уникальному аппаратному идентификатору чипа для предотвращения клонирования.
Регистры специальных функций занимают зарезервированное адресное пространство в общей карте ОЗУ МК. Их индивидуальные функциональные назначения навсегда определены производителем полупроводников и не могут быть перенастроены разработчиками прошивок. Каждый бит внутри SFR жёстко привязан к управлению конкретным внутренним периферийным устройством — таким как аналого-цифровые преобразователи, последовательные коммуникационные модули и порты ввода/вывода общего назначения. Изменение любого битового значения напрямую изменяет состояние соответствующей внутренней схемы. Например, запись логического 0 или 1 в регистр настройки порта переключает соответствующий физический вывод между режимами ввода и вывода; каждый отдельный бит регистра управляет одним выделенным выводом чипа.
С точки зрения аппаратной безопасности, критические биты управления безопасностью часто отображаются на специальные SFR. Специальный регистр безопасности может хранить состояние бита защиты, которое включает или отключает разрешение внешнего чтения памяти. Если злоумышленник манипулирует этим SFR через программные уязвимости или аппаратные сбои, он может полностью разблокировать чип без физической декапсуляции. Дополнительные SFR управляют аппаратными интерфейсами отладки JTAG и SWD; недостаточная блокировка этих регистров позволяет внешним отладочным зондам захватывать полные дампы памяти. По этой причине защищённые загрузчики проверяют состояние SFR, связанных с безопасностью, перед выполнением пользовательского кода. В области обратного проектирования первым шагом анализа является картирование всех адресов SFR и документирование их взаимодействия с аппаратными перемычками безопасности. Запись целевых битовых значений в эти регистры может отключить защиту и обеспечить полное извлечение прошивки, что составляет основу для последующего анализа уязвимостей. Восстановление функциональности с полностью заблокированного микроконтроллера часто зависит от выявления векторов манипуляции SFR.
Счётчик команд служит основным указателем выполнения, управляющим всей работой прошивки; он хранит адрес памяти следующей машинной инструкции, запланированной для обработки. После выполнения каждой инструкции значение PC увеличивается на один адрес, что обеспечивает последовательное выполнение программы, соответствующее написанному исходному коду. Однако значение счётчика команд может быть перезаписано на любом этапе выполнения, инициируя безусловный переход на новый адрес памяти — это реализует вызовы подпрограмм и условные переходы. После завершения выполнения целевого перехода PC снова продолжает последовательное увеличение (+1, +1, +1...).
Счётчик команд является основным вектором атак с внедрением ошибок, направленных на перенаправление потока выполнения. Внося контролируемые аппаратные сбои или преднамеренное искажение битов в регистр PC, злоумышленники заставляют МК выполнять произвольный несанкционированный код, который затем может отключить блокировки безопасности или дампить всё содержимое flash-памяти. Этот метод внедрения ошибок сочетает точные скачки напряжения или сбои тактового сигнала с декапсуляцией чипа для воздействия на критические временные окна во время проверок безопасности. В исследованиях обратного проектирования документирование поведения PC при искажённых тактовых или питающих условиях помогает разрабатывать контрмеры аппаратной безопасности. Многие микроконтроллеры интегрируют сторожевой таймер, который инициирует полный сброс системы, если счётчик команд ссылается на недопустимый адрес за пределами памяти, блокируя некоторые варианты атак на основе сбоев. Если сторожевой таймер отключён в прошивке, злоумышленники могут многократно вносить сбои в регистр PC, пока не обойдут защитные блокировки и не извлекут полные двоичные файлы прошивки.
Как следует из названия, центральный процессор контролирует и координирует все внутренние операции микроконтроллера, работая независимо от прямого вмешательства пользовательской прошивки. CPU интегрирует несколько подмодулей, три наиболее важных из которых подробно описаны ниже:

Бит: Фундаментальная двоичная единица, часто сбивающая с толку начинающих электронщиков. В практическом аппаратном смысле бит указывает на наличие или отсутствие напряжения на проводящей дорожке. Если напряжение достигает логической единицы, соответствующий вывод читается как логическая 1 (значение бита = 1); если проводник показывает 0 В, вывод читается как логический 0 (значение бита = 0). Теоретические определения описывают бит как одну двоичную цифру с двумя возможными значениями: 0 или 1.
CPU образует основной контур безопасности любой встраиваемой системы, и его внутренняя архитектура определяет общую уязвимость чипа. Многие процессорные архитектуры включают специализированные аппаратные отладочные цепи, которые могут быть активированы по стандартным триггерным последовательностям, предоставляя внешним зондам полный доступ для чтения внутренних областей памяти. Если производители не навсегда заблокируют эти отладочные интерфейсы с помощью перемычек, злоумышленники смогут без труда дампить всю flash-память программ. Производители полупроводников используют биты защиты для отключения путей отладки после программирования прошивки, однако неполная конфигурация перемычек оставляет CPU открытым для внешнего зондирования. Кроме того, все вычислительные операции АЛУ и аккумулятора генерируют измеримые физические побочные каналы — включая изменяющиеся паттерны энергопотребления и электромагнитное излучение. Эти сигналы утечки могут быть захвачены неинвазивно для восстановления криптографических ключей с помощью атак по анализу мощности и электромагнитного излучения, не требующих декапсуляции чипа. Поэтому защищённая встраиваемая прошивка должна учитывать как логическую защиту памяти, так и риски физических побочных каналов. Восстановление конфиденциальных ключей шифрования из заблокированных МК обычно требует комбинации нескольких методов: анализ треков питания, внедрение ошибок тактовой частоты и физическая декапсуляция для обхода встроенных блокировок и извлечения конфиденциальных хранимых данных.
Микроконтроллеры реализуют практическую встраиваемую функциональность через физические соединения с внешним периферийным оборудованием. Каждый МК интегрирует несколько специализированных банков регистров, называемых портами ввода/вывода, каждый из которых непосредственно отображается на внешние выводы корпуса чипа.
Термин «порт ввода/вывода» происходит от двойной перенастраиваемой функциональности каждого вывода, режим работы которого может динамически переключаться в соответствии с требованиями разработчика. Эти портовые регистры уникальны среди всех внутренних ресурсов памяти МК: их логическое состояние в реальном времени можно измерить обычным вольтметром!
Порты ввода/вывода служат основным физическим интерфейсом между микроконтроллером и внешним миром, и одновременно они представляют собой значительную поверхность атаки. Например, входные выводы, оставленные в плавающем состоянии, восприимчивы к внешним помехам, которые могут генерировать преднамеренные логические сбои, искажая состояние внутренних регистров. Злоумышленники также подают повышенное напряжение на выводы I/O, чтобы повредить периферийные схемы и вызвать сбои, отключающие логику защитных блокировок. Многие микроконтроллеры используют одни и те же физические выводы как для обычной работы, так и для заводского режима программирования; если бит защиты не запрограммирован, внешние программаторы могут напрямую считывать полную flash-память через эти общие выводы. Это делает обязательным полное программирование бита защиты после загрузки прошивки для отключения несанкционированных интерфейсов программирования. В рабочих процессах извлечения прошивки пассивный перехват сигналов на активных выводах I/O во время нормальной работы устройства позволяет выявить передаваемые конфиденциальные данные, включая ключи шифрования и параметры конфигурации устройства. Комбинируя захваченные трассы связи I/O с дампами внутренней памяти, злоумышленники могут полностью воспроизвести функциональное поведение целевого встраиваемого оборудования.
Непрерывные равномерные импульсные сигналы, генерируемые системным генератором, синхронизируют все внутренние схемы МК для работы в едином такте. Генераторы обычно используют кварцевые резонаторы или керамические резонаторы для точной стабилизации частоты, хотя также поддерживаются простые RC-генераторы без внешних резонансных компонентов для недорогих низкоточных приложений. Важная деталь: машинные инструкции выполняются не на сырой частоте генератора, а на более низкой разделённой частоте. Каждая инструкция разбивается на несколько тактовых циклов. Некоторые архитектуры МК используют фиксированное одинаковое количество циклов для всех инструкций, другие — переменное в зависимости от сложности команды. Для сравнения: система с кварцевым генератором 20 МГц не будет выполнять одну инструкцию за 50 наносекунд; реальная задержка инструкции составляет от 200 нс до 800 нс и полностью определяется конкретной архитектурой МК!
Частота генератора определяет тайминг всех внутренних операций чипа, и точное искажение тактового сигнала лежит в основе основных методов атак с внедрением ошибок. Временно сдвигая рабочую частоту или вводя узкие импульсные сбои в сигнал генератора, злоумышленники заставляют CPU неправильно декодировать инструкции или пропускать критические проверки безопасности. Этот метод позволяет разблокировать защищённые микроконтроллеры без физического изменения защитных перемычек через декапсуляцию. Кроме того, схема генератора часто генерирует повышенное напряжение программирования, необходимое для записи EEPROM; нестабильные тактовые сигналы могут инициировать непреднамеренные циклы записи, отключающие запрограммированные биты защиты. Восстановление заблокированных или полностью неработающих устройств иногда требует обхода родного генератора для перевода МК в недокументированные заводские тестовые режимы. Профессиональное оборудование для обратного проектирования включает специализированные модули генерации сбоев тактовой частоты для введения точно синхронизированных искажений сигнала в определённые точки потока выполнения прошивки. Глубокое понимание характеристик генератора необходимо как инженерам, усиливающим защиту встраиваемых систем, так и исследователям, разрабатывающим аппаратные методы эксплуатации.
Почти все встраиваемые прошивки полагаются на эти миниатюрные аппаратные секундомеры во время обычной работы. Таймеры и счётчики реализованы как специализированные 8- или 16-разрядные регистры специальных функций, значение которых автоматически увеличивается при получении каждого тактового импульса. Когда значение регистра достигает максимального предела переполнения, периферийное устройство генерирует аппаратный сигнал прерывания для CPU.
Если таймер использует внутренний кварцевый генератор в качестве источника тактов, инженеры могут точно измерить время между двумя событиями: вычесть начальное значение регистра T1 из конечного T2, чтобы получить общую измеренную длительность. Если таймер получает импульсные сигналы от внешнего физического источника, периферийное устройство перенастраивается в счётчик событий вместо измерителя времени.
Данное описание охватывает лишь основную базовую логику; реальная практическая реализация таймеров включает гораздо более сложную настраиваемую функциональность.

Регистр / ячейка памяти: Аппаратная схема, способная хранить один полный байт двоичных данных. Помимо 8 битов данных, доступных разработчику прошивки, каждый регистр также включает адресные биты для отображения в памяти. Два ключевых правила классификации:
Аппаратные таймеры часто используются для реализации ключевых механизмов безопасности, таких как сторожевые таймеры и логика аутентификации с ограничением по времени. Однако эти периферийные устройства также уязвимы для злонамеренного вмешательства. Например, злоумышленники, изменяющие предделитель таймера или регистры сравнения, могут расширить доступное окно для атак с внедрением сбоев или обойти блокировки безопасности, основанные на тайм-аутах. Некоторые семейства микроконтроллеров используют специальный аппаратный таймер для управления задержкой активации бита защиты после программирования; замораживание или ускорение этого таймера может помешать правильной активации бита защиты. В рамках обратного проектирования непрерывный мониторинг состояния регистров таймера позволяет определить точную временную последовательность всех критических для безопасности ветвей кода, что позволяет злоумышленникам идеально синхронизировать сигналы внедрения ошибок. Полные дампы памяти, захватывающие всю конфигурацию таймера, позволяют инженерам воспроизвести точное временное поведение исходного целевого оборудования для клонированных устройств. Восстановление прошивки в судебных целях сильно зависит от реконструкции исходных временных последовательностей таймера для обхода аппаратных блокировок безопасности.
Сторожевой таймер подключается к полностью изолированному внутреннему RC-генератору, работающему независимо от основного источника тактовой частоты.
Когда функция сторожевого таймера включена, непрерывный невозобновляемый счёт приведёт к полному аппаратному сбросу микроконтроллера, как только таймер достигнет порога переполнения, и выполнение прошивки начнётся сначала с начального адреса. Основной принцип работы основан на структурированных периодических командах обновления, размещаемых в ключевых точках основных циклов программы.
Если разработчики вставляют специальные команды сброса сторожевого таймера через соответствующие интервалы во всех основных циклах прошивки, счётчик сторожевого таймера никогда не достигнет переполнения, и нормальное выполнение программы продолжается без помех.
В случае неожиданных ошибок во время выполнения — чаще всего из-за электрических помех в промышленных встраиваемых средах — счётчик команд может зависнуть на недопустимом адресе памяти без возможности выхода. Без регулярных сигналов обновления сторожевого таймера значение счётчика продолжает увеличиваться до переполнения, автоматически инициируя полный сброс чипа для восстановления стабильной работы!
Сторожевой таймер является важным средством обеспечения надёжности системы, но он создаёт препятствия для злоумышленников, занимающихся обратным проектированием. Любая попытка приостановить выполнение МК для зондирования памяти вызовет аппаратный сброс по сторожевому таймеру, препятствуя стабильному полному считыванию памяти. Тем не менее, злоумышленники могут обойти это ограничение, либо точно синхронизируя внедрение ошибок во избежание переполнения сторожевого таймера, либо используя программные уязвимости для полного отключения сторожевого таймера, что открывает доступ к полному дампированию памяти. Высокозащищённые варианты микроконтроллеров имеют биты защиты, которые блокируют команды отключения сторожевого таймера через прошивку, добавляя дополнительный аппаратный барьер. Во время атак по извлечению прошивки злоумышленники могут вносить сбои тактовой частоты, чтобы намеренно пропустить критические инструкции обновления сторожевого таймера, инициируя контролируемый аппаратный сброс, который предоставляет временный доступ к недокументированным режимам загрузчика. Успешное судебное восстановление чипа требует всестороннего анализа временных характеристик сторожевого таймера, чтобы избежать непреднамеренных сбросов, мешающих захвату памяти.
Два критических модуля, связанных с питанием, интегрированы в подсистемы питания микроконтроллера:
Детектор пониженного напряжения (BOD): Опасное состояние во время циклов отключения питания или устойчивого падения напряжения питания, вызванного электрическими помехами. Различные внутренние периферийные схемы МК работают при разных минимальных порогах напряжения; нестабильные уровни питания приводят к неопределённому, неконтролируемому поведению чипа. Для снижения этого риска большинство микроконтроллеров интегрируют встроенный аппаратный сброс при пониженном напряжении, который мгновенно инициирует полный сброс системы, как только напряжение питания падает ниже заданного безопасного порога.
Вывод сброса Master Clear (MCLR): Специализированный внешний вывод для ручного полного сброса чипа, активируемый подачей либо логической единицы, либо логического нуля в зависимости от архитектуры МК. Если микроконтроллер не имеет встроенной схемы детектора пониженного напряжения, разработчики могут подключить внешнюю дискретную схему сброса к этому выводу MCLR для воспроизведения защитной функциональности.
Манипуляции с питанием представляют собой один из наиболее распространённых векторов атак с внедрением ошибок для обхода битов защиты МК. Кратковременные скачки пониженного или повышенного напряжения искажают внутреннюю логику, заставляя CPU выполнять недопустимые последовательности инструкций, отключающие защитные барьеры. Хотя встроенные схемы детектора пониженного напряжения инициируют автоматический сброс при длительных низких напряжениях, сверхбыстрые переходные скачки напряжения могут обойти обнаружение и позволить успешно обойти защиту. Кроме того, вывод сброса MCLR также служит триггером для входа в заводской режим программирования; незащищённые выводы сброса позволяют злоумышленникам принудительно сбрасывать чип и инициировать чтение памяти до полной активации бита защиты после загрузки. Для продвинутых физических атак полная декапсуляция чипа предоставляет прямой доступ зондов к внутренним шинам питания, что позволяет проводить целенаправленное изменение напряжения на цепях защитных перемычек. Легальное судебное восстановление прошивки часто relies на точные контролируемые скачки питания для индукции предсказуемых аппаратных сбоев, которые навсегда отключают защиту чтения памяти.
Параллельная передача данных через порты ввода/вывода общего назначения обеспечивает оптимальную производительность для связи на короткие расстояния до нескольких метров. Для обмена данными между устройствами на больших расстояниях параллельная проводка становится непрактичной, поэтому последовательная связь является предпочтительным отраслевым решением.
Почти все современные микроконтроллеры интегрируют несколько специализированных аппаратных периферийных устройств последовательной связи в качестве стандартных встроенных модулей. Выбор подходящего последовательного протокола зависит от четырёх основных критериев проектирования:
Фундаментальным требованием для надёжной последовательной передачи данных является строгое соблюдение стандартизированного протокола связи: формального набора правил синхронизации и кадрирования данных, обеспечивающих правильную интерпретацию принимающими устройствами передаваемых двоичных потоков данных. Аппаратные периферийные устройства МК автоматизируют всю низкоуровневую логику протокола, сводя работу разработчика к простым операциям записи в регистры для исходящих данных и чтения регистров для захваченных входящих данных.

Байт: Стандартная единица данных, состоящая из 8 сгруппированных двоичных битов. Если один бит представляет собой одну двоичную цифру, то байт функционирует как 8-разрядное двоичное число, способное выполнять все стандартные арифметические вычисления в АЛУ. Отдельные биты внутри байта имеют неравный числовой вес: крайний левый бит старшего разряда имеет максимальное значение и называется старшим значащим битом (MSB). Крайний правый бит младшего разряда имеет минимальный вес и называется младшим значащим битом (LSB). Восемь двоичных битов образуют 256 уникальных комбинаций, поддерживая десятичное представление чисел от 0 до 255 включительно.
Последовательные интерфейсы, такие как UART, SPI и I2C, служат двойной цели: обычный обмен данными с периферией и специализированное заводское программирование. Если бит защиты не запрограммирован, злоумышленники используют эти последовательные шины для извлечения полных двоичных файлов прошивки из встроенной flash-памяти. Даже полностью заблокированные микроконтроллеры остаются уязвимыми для атак по побочным каналам на трафик последовательной передачи, если используются незашифрованные протоколы связи. Стандартные рабочие процессы обратного проектирования начинаются с пассивного мониторинга линий последовательной шины для обратного проектирования проприетарных протоколов, а затем вводятся пользовательские команды для активации недокументированных тестовых режимов, отключающих блокировки чтения памяти. Многие устаревшие семейства микроконтроллеров содержат скрытые заводские тестовые последовательности, активируемые передачей определённой байтовой комбинации через периферийное устройство UART. После разблокировки через этот последовательный бэкдор становится возможным полное дампирование flash-памяти без разрушительной декапсуляции чипа. Восстановление прошивки с устаревшего встраиваемого оборудования часто полностью зависит от обнаружения этих недокументированных последовательных команд для неинвазивного извлечения проприетарного двоичного кода.
В отличие от аналоговых интегральных схем, которые требуют только подключения внешних компонентов и подачи питания для работы, микроконтроллеры требуют предварительного программирования прошивки перед развёртыванием. Это требование представляет собой значительный барьер, отпугивающий многих разработчиков «чистого» аппаратного обеспечения от использования проектов на основе МК. Кажущаяся сложность разработки прошивки создаёт ненужные задержки, поскольку реальный рабочий процесс программирования микроконтроллеров следует интуитивно понятной логике.
Несколько языков программирования низкого уровня поддерживают разработку прошивок для микроконтроллеров, включая ассемблер, стандартный C и встраиваемый BASIC с их соответствующими компиляторами. Разработка прошивки просто требует написания последовательных машинных инструкций в порядке желаемого потока выполнения. Обширная экосистема интегрированных сред разработки (IDE) для Windows упрощает рабочие процессы с помощью графической отладки и инструментов визуализации памяти.
Этот учебник отдаёт предпочтение языку ассемблера из-за его минимальных вычислительных накладных расходов, максимальной скорости выполнения и полного детального контроля над каждым внутренним аппаратным сигналом микроконтроллера.

Прерывание — Аппаратное обеспечение микроконтроллера работает на порядки быстрее, чем большинство физических внешних процессов, которые оно контролирует, оставляя CPU простаивающим большую часть времени в ожидании внешних событий. Постоянный непрерывный опрос входных выводов и регистров состояния потребляет значительные вычислительные ресурсы, поэтому специализированные аппаратные сигналы прерываний уведомляют CPU о возникновении важных внешних событий. Как следует из названия, прерывание приостанавливает последовательное выполнение программы для обслуживания вызвавшего события. Сигналы прерываний поступают от множества внутренних и внешних периферийных источников; при обнаружении МК приостанавливает текущую обработку для идентификации корневого триггера. Если требуется логика обслуживания, текущий адрес счётчика команд помещается в стек, и выполняется специализированная подпрограмма обслуживания прерывания для обработки события.
Скомпилированный двоичный файл прошивки является наиболее коммерчески ценным активом любой встраиваемой системы, поэтому предотвращение несанкционированного чтения памяти является основным приоритетом аппаратного проектирования. Биты защиты составляют основной оборонительный барьер против кражи прошивки, однако эти механизмы содержат уязвимости, которыми можно воспользоваться. Злоумышленники разработали обширный набор методов эксплуатации для обхода встроенных блокировок, начиная от программных логических атак и заканчивая разрушительной физической декапсуляцией чипа. После успешного полного извлечения прошивки злоумышленники проводят глубокий статический анализ для выявления уязвимостей кода или массового производства клонированных поддельных устройств с идентичной проприетарной функциональностью. По этой причине производители коммерческого оборудования активно инвестируют в обфускацию двоичного кода и шифрование встроенной памяти для усложнения обратного проектирования. Вся зашифрованная прошивка должна быть расшифрована на определённом этапе выполнения, создавая узкое временное окно, в котором незашифрованный открытый код подвержен атакам по побочным каналам. Легальное судебное восстановление прошивки с заблокированных микроконтроллеров иногда возможно через анализ остаточных данных flash-памяти, особенно если бит защиты никогда не был правильно запрограммирован при производстве. Дополнительные пути восстановления используют уязвимости кода загрузчика для отключения защитных блокировок и выполнения полного дампирования flash-памяти для полного двоичного анализа. В конечном счёте, комплексная безопасность встраиваемых систем опирается на многоуровневую стратегию защиты, сочетающую аппаратные перемычки, безопасные стандарты кодирования и регулярные циклы обновления прошивки для устранения вновь обнаруженных недостатков безопасности. Эта вводная глава закладывает фундаментальную теоретическую основу для всех последующих тем по аппаратному обеспечению и анализу безопасности, предоставляя читателям базовые знания для разработки либо надёжных схем защиты от обратного проектирования, либо для проведения легальных судебных операций по восстановлению прошивки при необходимости.
Почему выбирают Mikatech, нажмите здесь, чтобы узнать
У разных производителей микросхем разные номера деталей, но внутреннее ядро микросхемы может быть выполнено по одной и той же технологии, поэтому перечислить все номера деталей, к которым применима наша технология, практически невозможно, например MYSON, STK, FEELING, ANALOG, FUJITSU, NOVATEK, LG/HYNDAI.
Кроме того, с развитием технологий мы ежедневно приобретаем всё больше опыта и разрабатываем новые методы обратного проектирования для различных интегральных схем. Полный список номеров деталей интегральных схем, входящих в нашу компетенцию, постоянно растёт, пожалуйста, свяжитесь с нами, чтобы узнать подробности.
Mikatech Innovative Limited понимает важность конфиденциальности своих клиентов. В момент обращения в Mikatech ваша личная информация будет защищена в соответствии с нашими внутренними регламентами, разработанными за годы практики. Mikatech использует эту информацию для настройки своих услуг под вас и никогда не раскрывает её третьим лицам по какой-либо причине.
По каждому проекту мы удаляем все данные, материалы и коды через 60 дней после передачи файлов — это защищает нас и вашу конфиденциальность.
Да, это полностью законно.
Mikatech предоставляет свои услуги по обратному проектированию только в образовательных целях. Использование вышеуказанных услуг может быть незаконным в некоторых странах или регионах, пожалуйста, ознакомьтесь с местными законами.
Mikatech не несёт ответственности за использование вышеуказанных услуг, которое может быть признано незаконным.