Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В компании «Криптонит» завершили интересное исследование, результатами которого мы спешим поделиться. Наша команда лаборатории информационной и сетевой безопасности провела реверс-инжиниринг ПЗУ промышленного устройства и получила доступ к данным, которые считаются защищёнными. Точно такие же средства «защиты» используются в тысячах других устройств — от принтеров и МФУ до автомобилей Mazda и модуля записи видео на Международной космической станции.
Казалось бы, очевидно, что в устройствах профессионального и промышленного назначения требуется обеспечить защиту критически важных данных от сбоев питания и несанкционированного доступа. Для этого придумана масса вариантов: отказоустойчивые файловые системы, криптоконтейнеры и специализированные драйверы — менеджеры управления «сырым» массивом флеш-памяти, позволяющие обращаться к нему как к жёсткому диску и ограничивать доступ к определённым зонам.
Однако зачастую в этом наборе технологий используются разработки с закрытым исходным кодом. Как следствие — производители предпочитают выбрать удобное решение и доверять ему вслепую, поскольку оценить его безопасность можно только с помощью методов обратной разработки. Вот мы и решили её выполнить, руководствуясь принципом «доверяй, но проверяй!».
Для эксперимента в «Криптонит» доставили образец промышленного устройства, в котором использовался распространённый технологический стек: менеджер управления флэш-памятью FlashFX Tera и защищённые файловые контейнеры FlashPack внутри транзакционной файловой системы Reliance Nitro. Такая связка широко применяется в самом разном оборудовании, выпущенном за последние 13 лет.
Забегая вперёд, скажем, что в ходе исследования был найден способ получения доступа к защищённым данным, а также сформулированы базовые рекомендации по противодействию подобным атакам.
Менеджер FlashFX Tera и транзакционная файловая система Reliance Nitro были представлены в 2009 году частной компанией Datalight, которая была основана бывшим инженером Boeing, а с 2019 года стала дочерней фирмой Tuxera — финского разработчика ПО. В настоящее время Tuxera FlashFX Tera поддерживает более 300 микросхем флэш-памяти различных типов. Он работает с любой 32/64-разрядной операционной системой, а также имеет предварительно портированные версии для Linux , Android, Windows CE и VxWorks.
Началось исследование как обычно — с дампа памяти. Чтение ПЗУ исследуемого устройства производилось с помощью программно-аппаратного комплекса PC3000-Flash, использующего технологию прямого доступа к микросхемам NAND Flash. Его подключение осуществлялось через адаптер PC3000 Spider Board, позволяющего выполнить подключение к технологическим выводам микросхемы NAND Flash без пайки за счёт 25 подвижных игольчатых контактов.
В процессе длительного хранения микросхем NAND Flash без поддержания питающего напряжения растёт вероятность перетекания зарядов между ячейками памяти. Также она увеличивается из-за демонтажа экранированной ПЗУ, поскольку для снятия защитного экрана от ЭМИ приходится нагревать его паяльной станцией. Перетекание зарядов приводит к появлению битовых ошибок, частота которых зависит главным образом от типа флэш-памяти и особенностей её технического исполнения.
Поэтому после чтения дампа была выполнена коррекция битовых ошибок ECC кодами Боуза-Чоудхури-Хоквингема (БЧХ) длиной 10 байт, способными исправить до 4-х битовых ошибок на 512 байт данных. Для этого использовалась написанная нами программа на языке C#, реализующая алгоритм, обнаруженный в дизассемблированном драйвере. После корректировки битовых ошибок мы создали новый дамп без блоков ECC, подготовленный к трансляции диспетчером FlashFX на логический уровень.
Для поиска смещений разделов, типов файловых систем, определения наличия шифрования или сжатия применялась программа DataExtractor из состава ПАК PC3000-Flash. Дальнейшее изучение полученного дампа выполнялось при помощи утилиты для анализа прошивок Binwalk и самописных программных инструментов. Также использовался популярный архиватор 7-Zip, поскольку он способен извлекать данные из различных файловых систем и скомпилированных библиотек. С ним отпадает необходимость искать специализированные распаковщики для каждого формата, что существенно экономит время.
Основная часть программного реверс-инжиниринга осуществлялась в интерактивном дизассемблере IDA Pro. С его помощью в библиотеке flashfx.ko был найден транслятор памяти FlashFX Tera, а в библиотеке reliance.ko обнаружена реализация файловой системы Reliance Nitro v2.x, по которой был определён формат заголовков для извлечения разделов и файлов.
В дампе памяти был обнаружен файловый контейнер Flash Pack неизвестного проприетарного формата. Чтобы его открыть, мы декомпилировали код приложения, с помощью которого осуществлялось конфигурирование исследуемого устройства, и нашли в нём парсер для данного типа контейнеров.
На следующем этапе методом поиска по открытым источниками (OSINT) в репозитории крупного зарубежного разработчика ПО и системного интегратора Bitbucket были обнаружены реализации проприетарных форматов файловых контейнеров и способов их шифрования. В итоге последовательно были сняты все слои защиты, и мы получили полный доступ ко всем данным в «защищённой» встроенной памяти.
Можно ли было предотвратить такую атаку? Да. Например, используя блок памяти с защитой от атаки повторного воспроизведения (RPMB), или другой вариант аппаратной защиты от НСД к разделу памяти с критически важными данными. Большинство современных устройств работают на процессорах архитектуры ARM, в которых поддерживается виртуализация аппаратных ресурсов, позволяющая создавать изолированную среду (TrustZone).
Выводы
Практика показывает, что архитекторы программного обеспечения нередко выбирают какой-либо технологический стек, руководствуясь только удобством его внедрения и игнорируя пробелы в защите. Закрытый код в таких разработках ещё больше усложняет их независимый аудит.
Используя широкодоступные инструменты чтения и анализа флеш-памяти, а также методы реверс-инжиниринга, в компании «Криптонит» смогли обойти защиту на базе технологий Tuxera и получить доступ к критически важным данным, хранящимся в ПЗУ промышленного устройства.
Данный метод применим к тысячам других устройств, которые выпускались с 2009 года по настоящее время. В них используется тот же популярный набор проприетарных технологий, который ошибочно считается надёжным.
Результаты исследования могут использоваться для анализа безопасности устройств, хранящих критически важные данные в формате FlashFX Tera & Reliance Nitro, а также для восстановления данных с их накопителей в случае неисправности.