Реверсинг і злом зовнішнього 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. Обнюхуємо комунікації

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


1. Вступ

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

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

Доступ до збережених на диску даних, які нібито зашифровані, здійснюється після введення пінкод. Декілька вступних зауважень щодо цього девайсу:

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

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

Спочатку препаруємо девайс на частини, щоб зрозуміти, з яких компонентів він складається. Найнуднішим заняттям є розтин корпусу: багато мікроскопічних гвинтиків і пластику. Розкривши корпус, бачимо наступне (зверніть увагу на припаяний мною, п'ятиконтактний роз'єм):

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

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

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

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

Найбільш примітні її частини (див. зверху донизу):

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

SPI-флешка зберігає прошивку для JMS539 та деякі налаштування.

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

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

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

Всього лише:

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

2.3. Клавіатурна плата

При огляді клавіатурної плати, справи знаходять цікавіший поворот.

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

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

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

CY8C21434 використовує набір M8C інструкцій (див. документацію). На [сторінці продукту](http://www.cypress.com/part/cy8c21434-24ltxi) зазначено, що він підтримує технологію CapSense (Рішення від Cypress, для ємнісних клавіатур). Тут видно п'ятиконтактний роз'єм, що припаяний мною - це стандартний підхід для підключення зовнішнього програматора через ISSP-інтерфейс.

2.4. Дивимося на дроти

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

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

Пояснення до цієї на коліна намальованої схеми:

  • 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.

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

Потім запускаємо логічний аналізатор Saleae, і вводимо на клавіатурі: "123456". У результаті бачимо таку діаграму.

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

На ній можемо бачити три канали обміну даними:

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

Збільшуючи перший сплеск на каналі P4 (синій прямокутник попереднього малюнка), бачимо наступне:

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

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

Однак останній аудіо-потік каналу P4 трохи відрізняється від інших: це звук для «невірного пінкоду»!

Повертаючись до діаграми натискання клавіш, при збільшенні діаграми останнього аудіо-потоку (див. знову синій прямокутник), отримуємо:

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

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

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

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

Чіпсет USB-SATA постійно опитує PSoC - щоб зчитувати стан клавіші, яке за умовчанням дорівнює "0". Потім, при натисканні кнопки «1», воно змінюється на «1». Остаточна передача відразу після натискання “~” відрізняється, якщо введено неправильний пінкод. Однак зараз я не перевіряв, що там фактично передається. Але підозрюю, що навряд чи це є ключ шифрування. Так чи інакше, дивись наступний розділ, щоб зрозуміти, як я зняв дам внутрішньої прошивки PSoC.

Джерело: habr.com

Додати коментар або відгук