Холодная и теплая загрузка
Загрузка — общий термин, используемый для описания процесса, когда работающая система перезагружает операционную систему, которая в конечном итоге перезапускает компьютерную систему. Перезагрузка, загрузка, запуск и загрузка — все это синонимы, которые лучше описывают процесс при включении компьютера. Система в основном выполняет самодиагностику, обычно известную как POST, и загружает все необходимые драйверы, прежде чем система готова к использованию. Загрузка — это последовательный набор операций, которые система выполняет до того, как начнет работать операционная система. Перезагрузка может быть либо холодной (жесткая загрузка), либо теплой (мягкая загрузка), в зависимости от того, должна ли система запускаться из мертвого состояния или мощности состояние.
Последовательность загрузки
Существует стандартный набор операций, выполняемых каждым персональным компьютером во время последовательности загрузки. Когда вы нажимаете кнопку питания, система запускает цепную реакцию, которая в конечном счете начинает последовательность загрузки. Он начинается с центрального процессора, который запускает инструкцию в BIOS для BIOS, которая определяет программу запуска. Затем программа выполняет самотестирование при включении (POST), чтобы проверить, правильно ли работают все компоненты системы.
Если все в порядке, BIOS затем продолжит настроенную последовательность загрузки, пока не найдет нужное устройство, в котором есть ОС. Обычно BIOS получает чип CMOS для поиска операционной системы. После того, как BIOS успешно найдет нужное загрузочное устройство, он переносит процесс загрузки на главную загрузочную запись (MBR), которая проверяет загрузочный сектор дисков на правый диск с загрузчиком, который затем загружает файлы в память, теперь операционная система возьмет на себя процесс загрузки. Это, наконец, завершает процесс загрузки, и теперь пользователи могут получить доступ к системе.
Разница между холодной загрузкой и теплым загрузкой
Есть два способа перезагрузки системы: холодная (жесткая) загрузка и теплая (мягкая) загрузка. Хотя оба метода дают один и тот же результат, их определение немного меняется с точки зрения процесса загрузки. Холодная загрузка или жесткая загрузка — это процесс загрузки, в котором компьютерная система запускается из полного бессильного состояния. Когда вы выключаете систему и включаете ее снова, вы делаете то, что обычно называется холодным ботинком. При загрузке операционной системы система запускает самотестирование при включении питания или POST во время холодной загрузки, и, наконец, готовит систему к работе. Холодная загрузка обычно ничего не делает, кроме как полностью сбрасывает аппаратное обеспечение и перезагружает операционную систему.
С другой стороны, теплый ботинок относится к процессу загрузки, в котором система восстанавливает свое начальное состояние, не мешая источнику питания. Говоря простыми словами, когда вы перезагружаете свой персональный компьютер без прерывания питания, вы делаете теплую загрузку системы. Это означает, что вы инициируете команду сброса, одновременно нажимая комбинацию клавиш Ctrl, Alt и Delete, которая в конечном итоге перезапускает систему без потери мощности. Вы также можете выполнить теплую загрузку, нажав кнопку «Перезапустить» в меню «Пуск». Через несколько секунд компьютер возвращается в исходное состояние, тем самым завершая процесс загрузки.
Ну, есть много разных сценариев, которые заставили бы вас сделать либо холодный ботинок, либо теплый ботинок. И каждый процесс загрузки имеет свои собственные цели и результаты. Возможно, вам придется сделать теплую загрузку в любой из следующих ситуаций:
- Если приложение не отвечает в середине сеанса.
- Если программа встречает ошибку, и система зависает, для чего вам потребуется выполнить теплую загрузку, нажав клавиши ctrl, alt и delete.
- Если обновляется прошивка, требующая перезагрузки.
Выполняя теплую загрузку, вы фактически принудительно закрываете все программы и процессы, которые работают в фоновом режиме, что в конечном итоге размораживает систему и устраняет ошибки. Теплая загрузка обычно предпочтительнее, чем холодная загрузка, потому что для перезагрузки системы требуется меньше времени, и компоненты не сбрасываются полностью. Холодная загрузка, с другой стороны, полностью вытирает память и сбрасывает компоненты и источник питания. Однако холодная загрузка может быть лучшей альтернативой в случае сбоев системы, что потребует полной диагностики системы. Одним из главных недостатков холодного ботинка является то, что он полностью вытирает временную память, тем самым заставляя систему начинать с нуля.
Холодная загрузка против горячей загрузки
| Холодный ботинок | Теплый ботинок |
| Холодная загрузка обычно происходит при жесткой загрузке в компьютерной терминологии. | Теплая загрузка также называется мягкой загрузкой. |
| Система запускается из полностью бессильного состояния. | Система возвращается в исходное состояние без прерывания питания. |
| Он полностью сбрасывает аппаратное обеспечение и очищает систему от временной памяти. | Он не обязательно перезагружает компоненты и источник питания, тем самым сохраняя целостность памяти даже после перезагрузки. |
| Холодная загрузка обычно выполняется, когда система не реагирует на теплую загрузку. | Теплая загрузка обычно выполняется, когда программа не отвечает, и система зависает между сеансом. |
| Отключение питания от источника питания или отсоединение питания сбрасывает систему. | Одновременное нажатие клавиш ctrl, alt и delete или инициирование команды сброса приведет к перезагрузке системы без затруднения. |
| Он запускает тесты самодиагностики, тем самым перезагружая оборудование и память. | Он запрещает полную диагностику системы, тем самым сокращая время перезагрузки. |
Резюме
Фактически, процесс загрузки зависит от проблемы или ошибки, которые генерирует система, которая может быть чем-то вроде замороженной программы или невосприимчивого приложения или обязательной перезагрузки системы после обновления прошивки. Теплая загрузка была бы лучшей альтернативой, если программа или приложение не смогут ответить, поскольку для выполнения простой команды сброса будет достаточно, чтобы система перешла в исходное состояние без прерывания питания. С другой стороны, холодный ботинок очень эффективен в случае сбоев системы, которые потребуют от вас полной диагностики системы путем принудительной перезагрузки системы. Одним из недостатков холодной загрузки является то, что она полностью сбрасывает аппаратное обеспечение с нуля, что приводит к полной потере памяти.
Что такое холодная загрузка? — определение из техопедии
Холодная загрузка — это процесс запуска компьютера из выключенного состояния или состояния без питания и установки его в нормальное рабочее состояние. Холодная загрузка — это общий процесс запуска аппаратных компонентов компьютера, ноутбука или сервера до момента запуска его операционной системы и всех запускаемых приложений и служб.
Холодная загрузка также называется «тяжелая загрузка», «холодный старт» или «мертвый старт».
Техопедия объясняет "холодную загрузку"
Холодная загрузка обычно запускается нажатием кнопки питания компьютера. Компьютер, выполняющий холодную загрузку, уже находится в состоянии выключения, при котором не выполняются никакие аппаратные, программные, сетевые или периферийные операции. По большей части холодная загрузка выполняется таким образом, чтобы компьютер мог выполнять стандартные вычислительные задачи (общее использование). Тем не менее, иногда требуется холодная загрузка после программного и, как правило, аппаратного устранения неполадок.
Например, в отличие от «горячей» загрузки, «холодная» загрузка сбрасывает не только содержимое ОЗУ, но и очищает кэш. Это гарантирует, что в памяти компьютера не останется следов или экземпляров конфликтующих программ или их данных.
Краудсорсинг: что это такое, почему это работает и почему оно не уходит

Кажется почти невозможным, чтобы что-то настолько простое могло выполнить задачи, которые когда-то были назначены сотрудникам, но в некоторых случаях краудсорсинг действительно работает.
Использование метода «холодной» перезагрузки и других криминалистических техник в пентестах
Заканчивается рабочий день, и вы как можно скорее хотите покинуть свой офис. Весь день вы работали над отчетом и знаете, что его необходимо будет доделать утром. Вы заблокировали свой компьютер и думаете, что ваши данные в безопасности. Злоумышленники не смогут воспользоваться утилитой Ophcrack или самозагружаемым Linux-дистрибутивом, наподобие Kali, поскольку у вас установлен надежный пароль и зашифрован весь диск. Вы думаете, что все путем, однако вы ошибаетесь. Все чаще и чаще злоумышленники используют сочетание различных методов, включая новейшие криминалистические техники, чтобы добраться до вашей информации.
Автор: don
Заканчивается рабочий день, и вы как можно скорее хотите покинуть свой офис. Весь день вы работали над отчетом и знаете, что его необходимо будет доделать утром. Вы заблокировали свой компьютер и думаете, что ваши данные в безопасности. Злоумышленники не смогут воспользоваться утилитой Ophcrack или самозагружаемым Linux-дистрибутивом, наподобие Kali, поскольку у вас установлен надежный пароль и зашифрован весь диск. Вы думаете, что все путем, однако вы ошибаетесь. Все чаще и чаще злоумышленники используют сочетание различных методов, включая новейшие криминалистические техники, чтобы добраться до вашей информации.
На вашем компьютере существует отдельная область, содержащая конфиденциальную информацию, к которому злоумышленник будет не прочь прикоснуться своими руками, – это оперативная память. Система хранит всевозможную ценную информацию в памяти для того, чтобы до нее проще было добраться. Механизм полного шифрования диска должен хранить ключи, предназначенные для шифрования, где-то в оперативной памяти. Все то же самое справедливо и в случае ключей шифрования для Wi-Fi. Вот лишь небольшой список того, что хранится в оперативной памяти:
- Секции реестра (registry hives) ОС Windows и, следовательно, секции System и SAM
- Большинство буферов промежуточного хранения данных (clipboard)
- Пароли многих приложений
Вывод из всего этого можно сделать следующий: оперативная память – кладезь ценной информации, которая необходима множеству программ. Чтобы получить доступ к этой информации злоумышленники прибегают к техникам, используемым криминалистами. В этой статье будет рассказано о некоторых из таких техник, используя которые вы сможете расширить свой арсенал для выполнения пентестов.
Вводное слово
Полноценный профиль системы можно легко получить, используя дамп памяти. В последние годы снимки оперативной памяти использовались экспертами-криминалистами и в основном игнорировались пентестерами. И на это есть несколько причин. Криминалисты используют специальное программное обеспечение для захвата оперативной памяти и обычно делают это после авторизации на устройстве. Подобные снимки памяти используются для поиска вредоносов и скрытых процессов. Пентестера обычно больше интересуют хеши, файлы и запущенные процессы. Для получения подобной информации нет необходимости в дампах памяти, если у пентестера есть доступ к системе.
Однако существует несколько случаев, когда снимки памяти очень пригодились бы пентестеру. Рассмотрим такой сценарий: при проведении внутреннего расследования, пентестер получил доступ к машинам, находящимся снаружи системы предприятия. Клиент уверен, что специалист по безопасности не сможет использовать эти машины для доступа к системе. На машинах использовать полное шифрование диска, что делает невозможным использование Ophcrack и загрузку хешей. Любая из машин внутри системы также заблокирована. Однако клиент даже не догадывается, что опытный пентестер, которые знаком с некоторыми криминалистическими техниками, может получить содержимое оперативной памяти системы. В частности, существует две техники, которые можно использовать в этой ситуации: метод холодной перезагрузки и атака через Firewire.
Атака при помощи метода холодной перезагрузки
В начале 2008 года исследователи из Принстонского университета, а также организации, защищающей права и свободы личности в киберпространстве (Electronic Frontier Foundation) и компании Wind River Systems обнародовали документ озаглавленный «Lest We Remember: Cold Boot Attacks on Encryption Keys», где детально описан новый вид атак на работающие системы (live systems), целью которых является получение информации из оперативной памяти. Этот вид атак основан на получении информации, которая остается в оперативной памяти. Принято считать, что данные в оперативной памяти после выключения компьютера немедленно теряются.
Однако исследователи показали, что сей факт не совсем верен. На самом деле, требуется некоторое время для очистки данных из памяти. При отключении питания компьютера большая часть информации на секунду или две остается в целости и сохранности. Это время можно растянуть путем охлаждения памяти, для чего исследователи использовали один старый трюк – опрыскивали плату памяти, баллончиком со сжатым воздухом, перевернутым верх ногами. Охлаждение платы позволяет данным оставаться в памяти десятки секунд или даже минуты, что позволило исследователям разработать серию инструментов, которые могли извлекать информацию из памяти на машинах, где произошло быстрое выключение и повторное включение питания.
При использовании этого метода относительно велика вероятность получить небольшие ошибки внутри снимка памяти, из-за чего его избегают использовать эксперты-криминалисты. Однако пентестеру не требуется образ памяти, соответствующий стандартам криминалистики. Даже 2% повреждений вполне допустимо, если ключи шифрования и база данных SAM находятся в целости и сохранности, что позволяет использовать этот метод (хотя и с некоторыми трудностями) для внутренних пентестов.
Авторы документа «Lest We Remember» разработали комплект утилит для реализации атаки методом холодной перезагрузки, который можно загрузить с сайта Принстонского университета по адресу https://citp.princeton.edu/research/memory/code/. Основная утилита — USB/PXE Imaging, которую можно загрузить как tar-архив. Кроме того, команда исследователей создала серию make-файлов для упрощения процесса компиляции. Плюс к каждому архиву прилагается документация. 32-битную версию следует компилировать в 32-битной системе (или виртуальной машине), а 64-битную, соответственно, в 64-битной системе (или виртуальной машине). Не забывайте использовать корректную версию для соответствующей целевой системы, поскольку 32-версия будет работать на 64-битной машине, но не будет захватывать полностью адресное пространство памяти, так как 32-версия не сможет обратиться к полному 64-битному диапазону памяти.
В результате компиляции получается файл с именем scraper.bin, представляющий собой самозагружаемую утилиту, которую можно скопировать на USB устройство. Поскольку USB устройство будет использовать также и для хранения образа памяти, рекомендуется использовать устройство объемом не менее 16 ГБ, учитывая тот факт, что на современных системах объем оперативной памяти от 4 до 8 ГБ. Скопируйте файл на USB устройство при помощи утилиты dd из-под пользователя root (в нашем случае, sdb – местонахождение устройства):
sudo dd if=scraper.bin of=/dev/sdb
Итак, USB устройство готово к использованию на целевой системе. В идеале у пентестера должно быть две флешки: на 8 ГБ с 32-битной версией утилиты и на 16 ГБ с 64-битной, чтобы быть готовым к работе с любыми целевыми системами. Плюс к этому, желательно иметь баллончик со сжатым воздухом. Целевая машина должна быть включена и заблокирована. Не имеет значения, авторизовался ли на ней пользователь или нет. Кроме того, на целевой машине должно присутствовать полное шифрование диска – в противном случае всю работу можно сделать при помощи дистрибутива Kali или Ophcrack более качественно и с меньшими трудозатратами.
Как только подходящая система найдена, пентестер (естественно, с разрешения клиента) начинает свою работу. Для начала следует подключить USB устройство, после чего пентестер может охладить оперативную память при помощи баллончика, держа его верх ногами и опрыскивая плату памяти. Поскольку в процессе заморозки на чипе появится слой инея, необходимо аккуратно опрыскивать память и стараться не попадать на остальные части материнской платы. На Рисунке 1 показана охлажденная память перед реализацией атаки.

Рисунок 1: Охлажденная память перед реализацией атаки по методу холодной перезагрузки
Как только плата памяти охлаждена, пентестер должен выключить питание и включить его так быстро, насколько это возможно. На настольных компьютерах сделать это относительно просто путем нажатия кнопки выключения питания. Однако поскольку большинство переносных компьютеров не имеют подобных кнопок, быстро выполнить включение-выключение значительно труднее. Наилучший метод – быстро вынуть батарею, затем вставить ее обратно, а затем включить питание. Вне зависимости от системы, чем быстрее вы включите питание, тем более целостным будет образ памяти.
Во время загрузки машины с USB устройства, утилита автоматически сделает дамп памяти на устройство. На Рисунке 2 показан ход выполнения этого процесса.

Рисунок 2: Процесс создания дампа памяти
В зависимости от размера памяти и скорости USB-порта, процесс создания дампа может затянуться вплоть до нескольких часов при большом объеме памяти. Как только утилита завершила свою работу, система будет перезагружена. Пентестеру нужно просто вынуть USB устройство и вернуться к своей машине, где проходила компиляция утилиты для снятия дампа. Внутри архива есть утилита с именем USBdump, которая копирует каждый байт с USB устройства на машину пентестера. Сделать это можно при помощи следующей команды:
sudo ./usbdump /dev/sdb > memdump.img
Опять же этот процесс может занять несколько часов в зависимости от размера снимка памяти. В результате вы получите файл с полным образом памяти, содержащий побайтовый снимок целевой машины, с надеждой на то, что там будет небольшое количество ошибок.
Атака через Firewire
IEEE 1394 интерфейс, продвигаемый компанией Apple как FireWire, — высокоскоростной коммуникационный интерфейс, который первоначально задумывался в качестве замены SCSI. Главная составляющая FireWire – высокоскоростная передача информации. Именно поэтому данный протокол преимущественно используется для передачи больших объемов видео- и аудио-данных. Одна из фишек FireWire, которая позволяет передавать информацию на высокой скорости, — непосредственное обращение к памяти через DMA (Direct Memory Access), полностью минуя CPU. Подобный расклад хорош как для приложения по видеомонтажу при загрузке многочасовых фильмов с видеокамеры, так и для пентестера.
Прямой доступ памяти в FireWire позволяет пентестеру получить физический доступ к целевой машине для обхода парольной защиты в операционной системе путем перезаписи области памяти, содержащей функции по контролю за доступом. DMA также позволит пентестеру загрузить первые 4 ГБ оперативной памяти. Подобный вид доступа представляет серьезную уязвимость в спецификации интерфейса IEEE 1394, хотя у FireWire есть доступ только к первым 4 ГБ оперативной памяти и этот интерфейс может быть защищен антивирусом для предотвращения доступа через DMA. Из-за того, что FireWire функционирует в режиме hot-plug, целевая машина может быть заблокирована во время проведения атаки. Кроме того, большинство операционных систем пытаются ограничить доступ к DMA только для известных устройств (например, iPod’ов), но подобную защиту относительно легко обойти и подделать эти устройства.
Несмотря на то, что в основном подобные атаки направлены на FireWire, их можно реализовать на любом устройстве, которое использует подобную шину: ExpressCard (EC), PC Card и интерфейс Thunderbolt, распространенный на всех новый продуктах от компании Apple.
Карстен Мартмэнн-Мо (Carsten Maartmann-Moe) разработал утилиту Inception, заметно упрощающую эксплуатацию FireWire. Саму утилиту можно загрузить по адресу http://www.breaknenter.org/projects/inception/. Inception необходимо запускать на рабочей станции под управление операционной системы Linux. В этом случае Linux не может использоваться как виртуальная машина, поскольку там не реализован мост к FireWire (по уважительной причине). Кроме того, пентестеру необходимо установить пакеты Python 3 и libforensic1394 (последний пакет создал Фредди Уитерден (Freddie Witherden)). И, наконец, на обеих машинах (целевой и той, с которой производится атака) должен быть какой-либо из следующих интерфейсов: FireWire, EC, Thunderbolt, или PC Card.
Как только Inception установлен и подготовлен к работе, пентестеру нужно просто соединить свою и целевую машины при помощи кабеля FireWire и запустить следующую команду с root-привилегиями:
После запуска Inception доберется до областей памяти, которые управляют доступом, и «пропатчит» их, после чего мы сможем получить доступ к целевой машине без пароля. Естественно, в оперативной памяти целевой машины есть много полезной информации, и пентестер может сдампить первые 4 ГБ оперативной памяти при помощи следующей команды:
Анализ дампа памяти
Сделать дамп памяти – полдела. После этого предстоит его проанализировать. К счастью, существует несколько утилит для решения этой задачи, однако лишь малая часть этих инструментов спроектирована с прицелом для использования во время пентеста, а большинство разработаны для криминалистов, которые используют эти утилиты для поиска запущенных процессов, вредоносов и скрытой информации. Криминалистический анализ оперативной памяти – относительно новая область, в особенности для 64-битных систем. Многие полезные и мощные инструменты все еще ограничены использованием только среди представителей органов правопорядка. Исходя из этого, существуют такие задачи, которые могут выполнять с риском для клиента.
Авторы статьи «The Lest We Remember» также создали утилиту для анализа снятых образов оперативной памяти. Поскольку в основном статья была посвящена извлечению ключей шифрования из памяти, их утилита под названием AESKeyFind искала развертки AES-ключи и извлекала эти ключи. Эту утилиту можно загрузить с того же самого сайта. В составе этой утилиты также идет make-файл для упрощения компиляции. После компиляции запуск производится при помощи следующей команды:
./aeskeyfind –v memoryimage.raw
После запуска AESKeyFind перейдет к поиску AES-ключей, а затем отобразить их на экране. AESKeyFind найдет и 128 и 256-битные ключи. Даже если образ испорчен или содержит ошибки, утилита сможет достать ключи. На Рисунке 3 показаны ключи, найденные AESKeyFind, в образе, который содержит огромное количество ошибок:

Рисунок 3: Перечень ключей, найденных в испорченном образе оперативной памяти
Эти развертки AES-ключей могут быть использованы для различных целей. К примеру, это могут быть универсальные ключи для шифрования диска или трафика в протоколе VPN или беспроводной сети. После извлечение ключей останется выяснить лишь то, что они расшифровывают.
Еще одна полезная утилита – Volatility, которая представляет собой фреймворк с открытым исходным кодом для выполнения криминалистического анализа. У Volatility есть несколько модулей, позволяющих пентестеру извлекать полезную информацию о запущенных процессах и настройках целевой машины. Если образ не содержит ошибок, пентестер даже может извлечь Windows-хеши.
Первым шагом необходимо опознать архитектуру образа памяти. Для этого используется модуль imageinfo. На Рисунке 4 показаны результаты работы модуля imageinfo и профили памяти, опознанные Volatility.

Рисунок 4: При помощи модуля imageinfo определяется архитектура образа оперативной памяти
Получив эту информацию, пентестер может использовать дополнительные модули для поиска ветвей SAM и System, находящихся в реестре. Windows хранит реестр в оперативной памяти во время работы системы. Модуль hivelist можно использовать для того, чтобы найти местонахождение каждой из ветвей в памяти. На Рисунке 5 показаны результаты работы модуля hivelist с использованием информации о наиболее вероятном профиле, который был найден модулем imageinfo.

Рисунок 5: Найдено местонахождение ветвей System и SAM
Для работы с 32-битными системами в составе Volatility идет модуль hashdump, который может автоматически извлекать хеши паролей, если этому модули передать адреса ветвей SAM и System. К сожалению, этот модуль не работает с 64-битными системами, тем самым ограничивая свою полезность. Тем не менее, утилита идет с открытым исходным кодом, и нет ни одной причины, чтобы этот модуль не был разработан. Кроме того, технически возможно извлечение ветвей SAM и System из образа памяти, как только опознано их местонахождение, а затем использовать другие утилиты для извлечения хешей паролей.
У Security Response Center компании Microsoft есть десять непреложных правил безопасности. Правило 3 гласит: «Если злоумышленник получил неограниченный физический доступ к вашей системе, эта система больше не принадлежит вам». Многие клиенты уверены, что шифрование всего диска и стойкие пароли защитят их информацию даже в случае, если злоумышленник получил физический доступ к системе. Однако они не учитывают опасность, которая таит в себе оперативная память. В оперативной памяти хранится достаточное количество информации, используя которую пентестер может получить доступ к конфиденциальным данным или даже доступ ко внутренней сети. Подобная проблема никогда не принималась во внимание, поскольку не было практического способа получения образа памяти со стороны внешнего источника. Однако атака методом холодной перезагрузки и атака через Firewire делают возможным не только получение доступа к памяти, но и получение доступа к секретным ключам.
Вычитываем прошивку STM32
Почти в каждом микроконтроллере с интегрированной флэш памятью есть защита от вычитывания прошивки. Это делается чтобы защитить интеллектуальную собственность, криптографические ключи и алгоритмы от злоумышленников. Микроконтроллеры серии STM32, получившие широкое распространение в последнее время, особенно часто подвергаются атакам, однако нет практического опыта или информации касательно защищенности STM32 от подобных атак доступной публично. В этой статье рассмотрим системы защиты прошивки на примере STM32f0 серии.
Концепт защиты
Flash Readout Protection (RDP) ключевой компонент в защите, включенный во все линейки микроконтроллеров. Он защищает системную прошивку, сохраненную во внутренней флэш памяти от вычитывания. В зависимости от линейки, могут быть включены дополнительные механизмы, такие как Memory Protection Unit (MPU) и привилегированные / непривилегированные режимы исполнения. Вместе, эти системы призваны повысить защищенность.
RDP имеет 3 уровня защиты, RDP level 0, 1, 2. Защищенность увеличивается с ростом числа.
RDP level 0 : установлен по умолчанию и не предполагает защиты. Используя интерфейс отладки, можно получить полный доступ к устройству.
PRD level 1: Интерфейс отладки остается активным, но доступ к флэшу ограничен. Как только подключается интерфейс отладки, флэш память блокируется. Она не может быть считана ни напрямую, ни через DMA, ни путем исполнения инструкций из нее. Уровень защиты может быть как повышен до 2, так и понижен до 0, с потерей содержимого всей флэш памяти.
PRD level 2: максимально ограничивает и предоставляет максимальный уровень защиты. Интерфейс отладки отключен. Уровень не может быть понижен. Однако, несмотря на самый высокий уровень защиты, уровень 1 широко используется. Многие компании предпочитают не блокировать устройства полностью, предполагая возможности для устранения багов и неисправностей, т. к. на уровне 2 отладка невозможна. К тому же, в серии STM32f1 нет поддержки RDP level 2.
Устройство защиты RDP
RDP level это часть конфигурации систем микроконтроллера, хранящаяся в выделенной option bytes секции как 16 бит non-volatile памяти в виде двух регистров, RDP и nRDP. nRDP побитно комплементарен к RDP. Избыточность необходима для защиты от смены уровня путем подмены одного бита.

Регистры конфигурации RDP
Логика работы RDP
Согласно datasheet, на RDP level 1 существует два режим исполнения. Режим пользователя и режим отладки. Как только мк переходит в режим отладки, доступ к флэш блокируется. Чтение из флэша по заявлениям производителя должен вызвать ошибку шины, затем Hard Fault interrupt.
Атака Cold-Boot Stepping
В режиме RDP level 1 при подключении отладчика ограничивается доступ только к FLASH памяти, тогда как SRAM остается доступна. Мы можем попробовать вычитать данные в момент, когда она загружены в оперативную память. С такой уязвимостью борются разработчики криптографических библиотек. Ключи шифрования хранятся в SRAM только во время использования, что составляет несколько миллисекунд, что делают такую атаку практически не выполнимой, даже без того факта, что мы не знаем об организации памяти.
Для преодоления этого ограничения авторы статьи разработали Cold-Boot Stepping (CBS), метод с помощью которого можно делать точные снимки оперативной памяти. Идея метода в том, чтобы точно отсчитывать время от события, к примеру RESET, и циклично с шагом несколько тактов делать snapshot содержимого SRAM. Атака состоит из следующих шагов:

Схема установки для атаки CBS
1. Установление системы в изначальное состояние
1. Отключение питания. Необходимо чтобы мк смог снова читать из flash памяти.
2. Установка RESET до подачи питания. Позволяет запустить систему без начала исполнения кода
3. Подача питания под установленным RESET
2. Запуск системы на N кол-во шагов.
1. Запускает исполнение кода путем снятия RESET
2. Ожидание пока исполнение прошивки дойдет до установленного места
3. Установка Reset. Останавливает выполнение, но данные в SRAM остаются нетронутыми.
3. Вычитывание содержимого SRAM в файл
1. Подключение отладчика к мк
2. Снятие сигнала reset. МК не начинает исполнение кода, т. к. находится в состоянии halt установленного отладчиком.
3. Вычитывание SRAM
Повторяя этот алгоритм нужное нам количество раз можно получить информацию о контексте исполнения программы. Для реализации данной атаке необходимо точно контролировать время, что возможно только при использовании дополнительного мк.
Экстракция прошивки через CBS
Развивая описанный метод, можно создать метод полной экстракции прошивки. Во многих продуктах производители используют загрузчик, алгоритм верификации прошивки которого базируется на подсчете чек суммы, например CRC32, реализованной в некоторых линейках мк. Применяя CBS (Cold-Boot stepping) на этапе работы загрузчика, можно полностью восстановить прошивку путем анализа регистров аппаратной чек суммы или программной ее реализации, ведь на определенном шаге в ней хранится байты интересующей нас части прошивки.

Установка для атаки CBS
На фотографии представлена автономная установка для извлечения прошивки. Ноутбук динамически подстраивает шаг, основываясь на успешности работы на предыдущем шаге. Для мк с малым объемом памяти, например STM32F051R8T6 на 64кб, экстракция займет несколько дней.
Получается, что несмотря на то, что RDP level 1 предоставляет защиту от чтения SRAM, она может быть взломана.
Использование RDP level 2 позволить обезопасить устройство от подобных атак, одна зачастую производители используют RDP level 1. Например, в популярном программном обеспечении для отладки, OpenOCD, предоставляет только команду “Lock” для защиты flash памяти устройство. При этом команда поддерживает только RDP level 1.
Понижения уровня защиты
Рассмотрим теперь методы понижения уровня RDP. Производитель заявляет, необратимость установки уровня RDP level 2. В идеале нам нужно понизить уровень 2 до 0, однако избыточность регистров RDP требует замены 8 битов. Чтобы понизить 2->1, требует изменить всего 1 бит.

Таблица соответсвия состояний RDP
Методом UV-C оптической экспозиции можно добиться изменения бит с состояния “0” на “1”. Когда излучение в 254нм попадет на затвор, происходит внедрение электронов и состояние логической ячейки переходит с 0 (заряженное) на 1 (незаряженное). Предварительно требуется очистить кристалл с помощью химического травления.

Однако требуется локализовать область кристалла, где находятся RDP байты. Производитель не документирует внутреннюю структуру кристалла. Напишем программу, которая будет читать области памяти и определять факт изменения бита. В это время будет постепенно подвергать излучению различные части мк. После того, как положение байт RDP найдено, можно изготовить маску для точечного воздействия на мк. В лучшей попытке авторам статьи удалось понизить уровень защиты RDP без дополнительных ошибочно измененных бит.
Защита от понижения уровня защиты
Не существует защиты от понижения уровня RDP, однако можно написать программу так, что на этапе инициализации она как можно раньше проверяет значение битов RDP и FLASH_OBR, в котором хранится текущий уровень защиты, и прекращает исполнения, делая метод экстракции CBS бесполезным.
Взлом интерфейса отладки
Микроконтроллеры производителя ST предполагают отладку по интерфейсу SWD [2]. Когда отладчик подключается к мк с RDP level 1 защита флэш памяти ограничивает доступ. Плохо задокументированный механизм отладки вызывает много вопросов и подстегивает к его изучению.
Авторы статьи создали свою реализацию интерфейса SWD для изучения работы защиты. Оказывается, что защита активируется только если отладчик взаимодействует с шиной AHB-Lite [1]. Получая доступ только к регистрам SWD, защита не активируется, но как только запрашивается доступ к периферии, SRAM или Flash мк переходит в режим отладки и flash память блокируется.
Для определения логики работы защиты авторы уменьшили количество SWD запросов до необходимого минимума для успешной инициализации. В процессе инициализации защита не срабатывает.
Согласно документации на Cortex-M0 [3] инструкции процессора имеют приоритет по отношению к интерфейсу отладки. Получается отладчику нужно дожидаться свободного цикла на шине чтобы исполнить свой запрос. Если отладчик получит доступ к шине раньше защиты flash памяти, то сможет считать данные из не заблокированной памяти.
Авторы статьи изучили работу защиты с прошивкой, эмулирующей нагрузку на шину, состоящий из интенсивного чтения и операций NOP. Если в прошивке нет таких операций, то чтения памяти отладчиком занимает 2 цикла: разрешения адреса и непосредственно чтение. Если добавить одну операцию NOP, то один из трех запросов на чтение не выполнится. Зависимость вероятности успешного чтения от кол-ва операций NOP может быть выражена в виде формулы
Использование операций STR в качестве нагрузки позволят показать, что flash память сама контролирует доступ. Прошивка также очень быстро мигает светодиодом, а момент, когда он перестает мигать, говорит о том, что память заблокировалась и исполнение кода прекратилось.
Одним из объяснений данной уязвимости может быть некорректная имплементация согласования источника тактирования и остальной логики.
Авторы представили действующую реализацию экстракции кода с помощью двух STM32F0 Discovery. Данные отправляются на ПК через интерфейс UART, а SWD реализован на одной из STM.

Атака состоит из следующих шагов:
Перезагрузка системы с помощью отключения и подачи питания, чтобы сбросить защиту флэш памяти.
Инициализация интерфейса отладки.
Установка длины слова отладки в 32 бита
Установка адреса чтения из флэша
Попытка чтения из памяти
Вычитывание считанных данных через SWD
Повторить пока не прочтем всю память инкрементируя адрес
Средняя скорость вычитывания получается около 45 байт в секунду, что позволяет прочесть самый емкий «камень» в 256кб за 2 часа. Однако эксперименты проводились только на серии STM32F0 и предполагается, что из-за схожего внутреннего состояния, все мк линейки подвержены подобным атакам. Другие серии могут быть не затронуты.
Данную атаку можно избежать, используя второй уровень RDP, но как показано ранее уровень защиты может быть изменен. В то время как метод CBS требует работоспособность программного кода, уязвимость в отладчике может работать и в случае поврежденной при понижении уровня RDP прошивки.
Выводы
Серия мк STM32F0 содержит ряд уязвимостей позволяющих в лаборатории с базовым оборудованием создать установку для вычитывания прошивки. Методы могут комбинироваться для достижения наилучшего результата или позволить работать в RDP level 2.