Содержание статьи
- Аппаратная архитектура
- Основная плата
- Плата ЖК-индикатора
- Клавиатурная плата
- Смотрим на провода
- Последовательность шагов атаки
- Снимаем дамп данных SPI-флешки
- Обнюхиваем коммуникации
- Начинаем снимать дамп с внутренней флешки PSoC
- ISSP-протокол
- Что такое ISSP
- Демистификация векторов
- Общение с PSoC
- Идентификация внутричиповых регистров
- Защитные биты
- Первая (неудавшаяся) атака: ROMX
- Вторая атака: трассировка с холодной перезагрузкой
- Реализация
- Считываем результат
- Реконструкция флеш-бинарника
- Находим адрес хранения ПИН-кода
- Снимаем дамп блока 126
- Восстановление ПИН-кода
- Что дальше?
- Заключение

INFO
- Первоисточник: Aigo Chinese encrypted HDD.
- Материал распространяется в соответствии с лицензией CC-BY-SA 4.0.
- Переводчик — Антон Карев.
- Материал публикуется с согласия автора.


Доступ к сохраненным на диске данным, которые якобы зашифрованы, дается после ввода ПИН-кода. Несколько вводных замечаний по этому девайсу:
- для изменения ПИН-кода необходимо нажать F1 перед разблокировкой;
- в ПИН-коде должно быть от шести до девяти цифр;
- после пятнадцати неверных попыток диск очищается.
Аппаратная архитектура
Сначала препарируем девайс на части, чтобы понять, из каких компонентов он состоит. Самое нудное занятие — вскрывать корпус: много микроскопических винтиков и пластика. Вскрыв корпус, видим следующее (обрати внимание на припаянный мной пятиконтактный разъем):

Основная плата
Основная плата довольно проста.

Наиболее примечательные ее части (сверху вниз):
- разъем для ЖК-индикатора (CN1);
- пищалка (SP1);
- Pm25LD010 (спецификация) SPI-флешка (U2);
- контроллер Jmicron JMS539 (спецификация) для USB-SATA (U1);
- разъем USB 3 (J1).
SPI-флешка хранит прошивку для JMS539 и некоторые настройки.
Плата ЖК-индикатора
На плате ЖК нет ничего примечательного.


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

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

CY8C21434 использует набор инструкций M8C (см. документацию). На странице продукта указано, что он поддерживает технологию CapSense (решение от Cypress для емкостных клавиатур). Здесь виден припаянный мной пятиконтактный разъем — это стандартный подход для подключения внешнего программатора через ISSP-интерфейс.
Смотрим на провода
Разберемся, что с чем здесь связано. Для этого достаточно прозвонить провода мультиметром.

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

Последовательность шагов атаки
Теперь когда мы знаем, из каких компонентов состоит этот накопитель, нам необходимо:
- Убедиться, что базовая функциональность шифрования действительно присутствует.
- Узнать, как генерируются/сохраняются ключи шифрования.
- Найти, где именно проверяется ПИН-код.
Для этого я проделал следующие шаги:
- снял дамп данных SPI-флешки;
- попытался снять дамп данных PSoC-флешки;
- удостоверился, что обмен данными между Cypress PSoC и JMS539 фактически содержит нажатые клавиши;
- убедился, что при изменении пароля в SPI-флешке ничего не переписывается;
- поленился реверсить 8051-прошивку от JMS539.
Снимаем дамп данных 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-флешке не обращается.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»