Реверсинг и взлом самошифрующегося внешнего HDD-накопителя Aigo. Часть 1: Препарируем на части

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

Реверсинг и взлом внешних самошифрующихся накопителей – мое давнее хобби. В прошлом мне доводилось упражняться с такими моделями, как Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. Совсем недавно коллега занес мне еще один экспонат: Patriot (Aigo) SK8671, который построен по типичному дизайну – ЖК-индикатор и клавиатура для ввода ПИН-кода. Вот что из этого получилось...


1. Введение
2. Аппаратная архитектура
– 2.1. Основная плата
– 2.2. Плата ЖК-индикатора
– 2.3. Клавиатурная плата
– 2.4. Смотрим на провода
3. Последовательность шагов атаки
– 3.1. Снимаем дамп данных SPI-флешки
– 3.2. Обнюхиваем коммуникации




1. Введение



Корпус



Упаковка


Доступ к сохранённым на диске данным, которые якобы зашифрованы, осуществляется после ввода пинкода. Несколько вводных замечаний по этому девайсу:


  • Для изменения пинкода необходимо нажать F1 перед разблокировкой;
  • В пинкоде должно быть от 6 до 9 цифр;
  • После 15 неверных попыток диск очищается.


2. Аппаратная архитектура


Сначала препарируем девайс на части, чтобы понять, из каких компонентов он состоит. Самое нудное занятие — вскрытие корпуса: много микроскопических винтиков и пластика. Вскрыв корпус, видим следующее (обратите внимание на припаянный мной, пятиконтактный разъём):




2.1. Основная плата


Основная плата довольно-таки проста:



Наиболее примечательные её части (см. сверху вниз):


  • разъём для ЖК-индикатора (CN1);
  • пищалка (SP1);
  • Pm25LD010 (спецификация) SPI-флешка (U2);
  • контроллер Jmicron JMS539 (спецификация) для USB-SATA (U1);
  • разъём USB 3 (J1).

SPI-флешка хранит прошивку для JMS539 и некоторые настройки.



2.2. Плата ЖК-индикатора


На плате ЖК нет ничего примечательного.




Всего лишь:


  • ЖК-индикатор неизвестного происхождения (вероятно с китайским набором шрифтов); с последовательным управлением;
  • ленточный соединитель для клавиатурной платы.


2.3. Клавиатурная плата


При осмотре клавиатурной платы, дела обретают более интересный поворот.



Вот здесь, на задней стороне, мы видим ленточный соединитель, а также Cypress CY8C21434 – микроконтроллер PSoC 1 (далее по тексту будем звать его просто PSoC)



CY8C21434 использует набор инструкций M8C (см. документацию). На [странице продукта]( (http://www.cypress.com/part/cy8c21434-24ltxi) указано, что он поддерживает технологию CapSense (решение от Cypress, для емкостных клавиатур). Здесь виден припаянный мной пятиконтактный разъём – это стандартный подход для подключения внешнего программатора через ISSP-интерфейс.



2.4. Смотрим на провода


Разберёмся что с чем здесь связано. Для этого достаточно прозвонить провода мультиметром:



Пояснения к этой на коленке нарисованной схеме:


  • PSoC описан в технической спецификации;
  • следующий разъём, тот что правее – ISSP-интерфейс, который волею судеб соответствует тому, что о нём написано в Интернете;
  • самый правый разъём – это клемма для ленточного соединителя с клавиатурной платой;
  • чёрный прямоугольник – чертёж разъёма CN1, предназначенного для соединения основной платы с ЖК-платой. P11, P13 и P4 – присоединены к ножками PSoC 11, 13 и 4, на ЖК-плате.


3. Последовательность шагов атаки


Теперь когда мы знаем, из каких компонентов состоит этот накопитель, нам необходимо: 1) убедиться, что базовая функциональность шифрования действительно присутствует; 2) узнать, как генерируются/сохраняются ключи шифрования; 3) найти, где именно проверятся пинкод.


Для этого я проделал следующие шаги:


  • снял дамп данных SPI-флешки;
  • попытался снять дамп данных PSoC-флешки;
  • удостоверился, что обмен данными между Cypress PSoC и JMS539 фактически содержит нажатые клавиши;
  • убедился, что при изменении пароля, в SPI-флешке ничего не переписывается;
  • был слишком ленивым, чтобы реверсить 8051-прошивку от JMS539.


3.1. Снимаем дамп данных SPI-флешки


Эта процедура очень проста:


  • подключить зонды к ножкам флешки: CLK, MOSI, MISO и (опционально) EN;
  • «обнюхать» коммуникации снифером, используя логический анализатор (я воспользовался Saleae Logic Pro 16);
  • декодировать SPI-протокол и экспортировать результаты в CSV;
  • воспользоваться decode_spi.rb, чтобы распарсить результаты и получить дамп.

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


$ decode_spi.rb boot_spi1.csv dump
0.039776 : WRITE DISABLE
0.039777 : JEDEC READ ID
0.039784 : ID 0x7f 0x9d 0x21
---------------------
0.039788 : READ @ 0x0
0x12,0x42,0x00,0xd3,0x22,0x00,
[...]
$ ls --size --block-size=1 dump
49152 dump
$ sha1sum dump
3d9db0dde7b4aadd2b7705a46b5d04e1a1f3b125 dump

Сняв дамп с SPI-флешки, я пришёл к выводу, что её единственная задача – хранить прошивку для устройства управления JMicron, которая встраивается в 8051-микроконтроллер. К сожалению снятие дампа SPI-флешки оказалось бесполезным:


  • при изменении пин-кода дамп флешки остаётся тем же самым;
  • после этапа инициализации девайс к SPI-флешке не обращается.


3.2. Обнюхиваем коммуникации


Это один из способов найти, какой чип отвечает за проверку коммуникаций, для интересующих времени/контента. Как мы уже знаем, контроллер USB-SATA подключен к ЖК Cypress PSoC, через разъём CN1 и две ленты. Поэтому подключаем зонды к трём соответствующим ножкам:


  • P4, общий ввод/вывод;
  • P11, I2C SCL;
  • P13, I2C SDA.


Затем запускаем логический анализатор Saleae, и вводим на клавиатуре: “123456~”. В результате видим следующую диаграмму.



На ней можем видеть три канала обмена данными:


  • на канале P4 несколько коротких всплесков;
  • на P11 и P13 – почти непрерывный обмен данными.

Увеличивая первый всплеск на канале P4 (синий прямоугольник предыдущего рисунка), видим следующее:



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


Однако последний аудио-поток канала P4 немного отличается от других: это звук для «неверного пинкода»!


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



Здесь мы видим однообразные сигналы на P11. Так что похоже, это и есть синхросигнал. А P13 – данные. Обратите внимание, как шаблон изменяется после окончания звукового сигнала. Было бы интересно посмотреть, что здесь происходит.


Протоколы, работающие с двумя проводами, это обычно SPI или I2C, и в технической спецификации на Cypress говорится, что эти контакты соответствуют I2C, что как видим справедливо и для нашего случая:



Чипсет USB-SATA постоянно опрашивает PSoC – чтобы считывать состояние клавиши, которое по умолчанию равно «0». Затем, при нажатии клавиши «1», оно меняется на «1». Окончательная передача, сразу после нажатия “~” отличается, если введён неверный пинкод. Однако на данный момент я не проверял, что там фактически передаётся. Но подозреваю, что вряд ли это ключ шифрования. Так или иначе, смотри следующий раздел, чтобы понять как я снял дам внутренней прошивки PSoC.

Источник: https://habr.com/ru/post/455515/


Интересные статьи

Интересные статьи

Введение В этой статье я подробно расскажу о том, как работать с библиотекой discord.js, создать своего Discord-бота, а также покажу несколько интересных и полезных команд. Сразу ...
FYI: Первая часть. Бенчмарк пакетного конвейера Пакетный конвейер обрабатывает конечный объём сохранённых данных. Здесь нет потока результатов обработки, выходные данные агрегир...
Те, кто собираются открывать интернет-магазин, предварительно начитавшись в интернете о важности уникального контента, о фильтрах, накладываемых поисковиками за копирование материалов с других ресурсо...
Предисловие За всё время работы программистом, я сталкивался с различными задачами по доработке сайтов. И отметил одно: функций много, по разных файлам разбросанно, общей картины пространства им...
Материал, первую часть перевода которого мы сегодня публикуем, посвящён новым стандартным возможностям JavaScript, о которых шла речь на конференции Google I/O 2019. В частности, здесь мы поговор...