Бесплатно Экспресс-аудит сайта:

23.05.2020

Исследование безопасности аппаратного менеджера паролей RecZone

Автор: Phil Eveleigh

Введение

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

В процессе тестирования я изучил дизассемблирование, устройство чипсетов, назначение пинов, протоколов и схему шифрования.

По результатам исследования выяснилось, что:

  • Учетные записи могут хранится в незашифрованными. Вы не ослышались. В менеджере паролей информация может храниться в открытом виде.

  • Учетные записи сохраняются после сброса настроек.

  • Используется обратимое шифрование.

  • и многое другое.

В этой статье будет рассмотрен аппаратный менеджер паролей RecZone. Мы изучим отдельные компоненты, разберемся с даташитами, выгрузим информацию из SPI флешки при помощи Raspberry Pi и выясним, в каком виде хранится информация.

Рисунок 1: Внешний вид аппаратного менеджера паролей RecZone

Во всех протестированных менеджерах есть возможность установить мастер-пароль для защиты девайса, добавить URL, имя пользователя и пароль для каждого сайта, но, к сожалению, клавиатуры оказались неудобными, и использовать надежные пароли было затруднительно.

Добавление тестовых паролей

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

Рисунок 2: Добавление тестовой информации в менеджер паролей

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

Рисунок 3: Место крепления корпуса

После отвинчивания винтов и снятия задней крышки обнаруживаем электронную плату.

Первоначальное инспектирование платы

Следующий шаг – визуальный осмотр платы, выяснение, какие компоненты есть, и какие компоненты представляют для нас интерес.

Начнем с обратной стороны платы:

Рисунок 4: Задняя сторона платы

На рисунке выше показана основная плата с несколькими компонентами и соединениями к другим частям устройства, включая батарею (синий прямоугольник), подсветку экрана (фиолетовый прямоугольник) и кнопка сброса настроек (зеленый прямоугольник). Для нас наибольший интерес представляет флеш-чип с восемью пинами (красный прямоугольник).

Обычно на флеш-чипе хранится вся информация устройства, в том числе пароли.

Многие модели можно опознать по тексту на корпусе:

Рисунок 5: Модель флеш памяти

Как видно из рисунка выше, модель чипа - 25Q40CT. По результатам поисков в интернете был найден даташит , который нам понадобится после завершения первоначального инспектирования платы.

К сожалению, я не смог опознать модель микроконтроллера на задней стороне платы, по сути, являющийся «мозгом» устройства.

Верхняя часть платы также представляет для нас интерес, поскольку содержит множество соединений, именуемых как «vias» или межслойные соединения, напрямую соединяющих разные слои платы. В нашем случае есть два слоя. Соответственно, вышеуказанные соединения обеспечивают связь между передней и задней частью.

Рисунок 6: Соединения двух слоев платы

Скорее всего, эти выводы подключены к какому-то компоненту на передней стороне платы.

Рисунок 7: Передняя сторона платы

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

Подсветка экрана подключена при помощи проводов с правой стороны. Маловероятно, что все выводы на задней стороне предназначены для экрана.

Снятие экрана оказалось возможным с небольшим усилием, однако впоследствии выяснилось, что правильное обратное подключение и повторное использование устройства практически невозможно. Вывод: во время реверс-инжиниринга всегда полезно иметь запасные девайсы!

Рисунок 8: Снятие экрана

Экран был подключен к дорожкам наверху и внизу. Однако некоторые соединения (vias) используются на чипе под экраном. Этот трюк в виде уплотнения применяется с целью экономии места. Хотя оболочку можно удалить, но высок риск испортить чип.

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

Чипсет

Здесь нам пригодится ранее найденный даташит . Чип представляет собой SPI флешку, как правило используемую для хранения информации в небольших устройствах. В даташите указана вся необходимая информация, включая назначение каждого пина. В нашем случае – критически важно уметь считывать данные корректно.

Изучив даташит, еще раз убеждаемся, что чип запитывается от напряжения 2.7~3.6В, и подавать питание можно через Raspberry Pi.

Прозвон цепи

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

Рисунок 9: Мультиметр, используемый для прозвона цепи

В этом режиме при замыкании цепи будет издаваться звуковой сигнал. На плате был контакт для тестирования заземления, и при подключении одного щупа мультиметра к этому пину, а другого щупа к пину 4 чипа, цепь должна оказаться замкнутой.

Рисунок 10: Проверка замкнутости цепи

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

Подключение чипа к Raspberry Pi

Используя информацию из даташита, можно сравнить функции пинов с аналогами в SPI устройства Raspberry Pi. Пины на чипе показаны на схеме ниже:

Рисунок 11: Схема чипа

Имена пинов не совпадают с пинами устройства Raspberry Pi. Соответственно, вначале нужно было разобраться с назначением каждого пина:

· Vss – Основное подключение к земле.

· Vcc – Питание чипа

· CS# – Выбор чипа (или выбор ведомого / включение чипа). Позволяет выбрать из нескольких микросхем (интегральных цепей), подключенных к одной шине. Чип на плате ведомый, а то устройство, откуда идет чтение – ведущее.

· SO/IO1 – Выходной пин для данных, который будет использоваться для считывания данных с чипа.

· WP#/IO2 – Входной пин для защиты записи. Поскольку мы считываем данные, и нам нужно записать только один бит, этот пин может не пригодиться.

· Hold#/IO3 –Входной пин удерживания (ожидания). Поскольку опять же мы в основном считываем, этот пин может не пригодиться.

· SCLK – Часы.

· SI/IO0 – Входной пин для данных. Поскольку нам нужно записать один бит перед чтением, этот пин понадобится для разрешения записи.

Спецификация SPI пинов в устройстве Raspberry Pi показана на рисунке ниже:

Рисунок 12: Схема SPI пинов устройства Raspberry Pi

В SPI флешке ключевым является пин MOSI (ведущий выходной, ведомый входной), подключаемый к пину SI (ведомый входной) на чипе, и пин MISO (ведущий входной, ведомый выходной), подключаемый к пину SO (ведомый выходной) на чипе. Когда чип запитывается по обычной схеме, микроконтроллер является ведущим, а чип – ведомым. Однако в нашем случае питание будет поступать через стороннее устройство (Raspberry Pi), которое взаимодействует с чипом до микроконтроллера и становится ведущим.

Итоговая схема соединения Raspberry Pi и чипа показана на рисунке ниже:

Рисунок 13: Схема подключения Raspberry Pi к чипу

Вышеуказанная схема позволяет подвести питание к чипу без необходимости в запитывании остальной платы. К земле подключение есть, а с соответствующих пинов происходит считывание данных.

Для подключения чипа я использовал зажим. Если у вас нет зажима, можно подключить каждый пин отдельно. Однако в этом случае весь процесс сильно осложняется.

Рисунок 14: Зажим для подключения чипа

После подключения Raspberry Pi мне удалось считать данные с чипа. В моем случае у Raspberry Pi был статический IP-адрес и подключение к виртуальной машине через адаптер USB-ethernet, позволяющий организовать доступ через SSH.

Для считывания данных у Raspberry Pi должны быть активированы SPI интерфейсы, что достигается через настройку соответствующей опции после запуска команды raspi-config:

sudo raspi-config

Рисунок 15: Конфигуратор Raspberry Pi

Выгрузка данных

При помощи программы flashrom я убедился, что чип подключен правильно:

sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=1000

Рисунок 16: После запуска приложения flashrom нужный чип найден

Как видно на рисунке выше, программе удалось обнаружить GigaDevice flash chip «DG25Q40(B)», из чего можно сделать вывод, что чип подключен правильно и данные могут быть считаны с флешки.

Для выгрузки данных я добавил флаг для чтения и указал файл, куда нужно выгрузить информацию:

sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=1000 -r dump.bin

Рисунок 17: Выгрузка данных с чипа в файл

После появления сообщения об окончании процесса все данные были считаны. Однако на этом наша работа не заканчивается.

Выяснение формата данных

Следующий шаг – разобраться с форматом выгруженных данных. Для чтения полученного файла воспользуемся приложением hexdump:

hexdump -C dump.bin

Рисунок 18: Содержимое файла dump.bin

Я не мог поверить, что данные, хранимые на чипе, находятся в открытом виде. На рисунке выше виден пароль, введенный мной перед исследованием устройства.

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

Рисунок 19: Содержимое памяти после сброса настроек чипа

Введенные ранее данные все еще находятся в хранилище!

Соответственно, если пользователь нажмет на кнопку сброса и продаст устройство, то все пароли можно будет считать в открытом виде после выгрузки информации с чипа.

Абсолютное сумасшествие!

Во время повторной выгрузки я также обнаружил следующее:

Рисунок 20: 4-значный пин-код, установленный после сброса настроек

Как видно из рисунка выше, мастер-пароль также находится в открытом виде.

Надеюсь, у пользователей подобных устройств не возникнет ситуаций с повторным использованием пароля, хотя полностью исключать такую вероятность нельзя. Особенно если 4-значный код используется в качестве пина банковской карты или телефона.

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

Мы связались с производителем устройства и сообщили о проблемах безопасности, но не получили ответа.

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