Следующая новость
Предыдущая новость

Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo

13.04.2018 14:45
Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo

Содержание статьи

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

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

INFO

  • Первоисточник: Aigo Chinese encrypted HDD.
  • Материал распространяется в соответствии с лицензией CC-BY-SA 4.0.
  • Переводчик — Антон Карев.
  • Материал публикуется с согласия автора.
Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo
Корпус
Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo
Упаковка

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

  • для изменения ПИН-кода необходимо нажать F1 перед разблокировкой;
  • в ПИН-коде должно быть от шести до девяти цифр;
  • после пятнадцати неверных попыток диск очищается.

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

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

Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo

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

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

Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo

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

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

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

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

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

Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo
Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo

Здесь мы видим:

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

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

А вот это уже интереснее!

Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo

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

Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo

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

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

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

Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo

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

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

Как называется принцип имитации стойкой защиты?

  • Security by default
  • Security by obscurity
  • Secure design

Хардкорный взлом самошифрующегося HDD. Реверсим и хакаем внешний накопитель Aigo Загрузка ...

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

Теперь когда мы знаем, из каких компонентов состоит этот накопитель, нам необходимо:

  1. убедиться, что базовая функциональность шифрования действительно присутствует;
  2. узнать, как генерируются/сохраняются ключи шифрования;
  3. найти, где именно проверяется ПИН-код.

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

  • снял дамп данных 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 год

6790 р.

Экономия 1400 рублей!

1 месяц

720 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости