ProHoster > Блог > администрация > Обръщане и хакване на Aigo самокриптиращо външно HDD устройство. Част 1: Разчленяване на части
Обръщане и хакване на Aigo самокриптиращо външно HDD устройство. Част 1: Разчленяване на части
Обръщането и хакването на външни самокриптиращи устройства е моето старо хоби. В миналото имах възможност да практикувам с модели като Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. Съвсем наскоро колега ми донесе друг експонат: Patriot (Aigo) SK8671, който е изграден по типичен дизайн - LCD индикатор и клавиатура за въвеждане на PIN код. Ето какво излезе от това…
Достъпът до данните, съхранявани на диска, който се предполага, че е криптиран, се осъществява след въвеждане на ПИН код. Няколко уводни бележки за това устройство:
За да промените ПИН кода, трябва да натиснете F1 преди отключване;
ПИН кодът трябва да съдържа от 6 до 9 цифри;
След 15 неправилни опита дискът се изчиства.
2. Хардуерна архитектура
Първо, ние разделяме устройството на части, за да разберем от какви компоненти се състои. Най-досадната задача е отварянето на кутията: много микроскопични винтове и пластмаса. След като отворихме кутията, виждаме следното (обърнете внимание на пет-пиновия конектор, който запоих):
2.1. Основна платка
Основната платка е доста проста:
Най-забележителните му части (вижте отгоре надолу):
конектор за LCD индикатор (CN1);
пищялка (SP1);
Pm25LD010 (спецификация) SPI флаш устройство (U2);
Контролер Jmicron JMS539 (спецификация) за USB-SATA (U1);
USB 3 конектор (J1).
SPI флаш устройството съхранява фърмуера за JMS539 и някои настройки.
2.2. LCD индикаторно табло
Няма нищо забележително на LCD платката.
Само:
LCD индикатор с неизвестен произход (вероятно с набор от китайски шрифт); с последователно управление;
Лентов конектор за клавиатурна платка.
2.3. Клавиатурна дъска
При изследването на клавиатурата нещата стават по-интересни.
Тук, от задната страна, виждаме лентов конектор, както и Cypress CY8C21434 микроконтролер PSoC 1 (по-нататък ще го наричаме просто PSoC)
CY8C21434 използва набора от инструкции M8C (вижте документация). На [страница на продукта]( (http://www.cypress.com/part/cy8c21434-24ltxi) е посочено, че поддържа технологията CapSense (решение от Cypress, за капацитивни клавиатури). Тук можете да видите пет-пиновия конектор, който запоих - това е стандартен подход за свързване на външен програматор през ISSP интерфейса.
2.4. Гледайки жиците
Нека да разберем какво е свързано тук. За да направите това, просто тествайте проводниците с мултицет:
Обяснения за тази диаграма, начертана на коляното:
PSoC е описан в техническата спецификация;
следващият конектор, този вдясно, е ISSP интерфейсът, който по волята на съдбата отговаря на написаното за него в интернет;
Най-десният конектор е терминалът за лентовия конектор към клавиатурната платка;
Черният правоъгълник е чертеж на конектора CN1, предназначен за свързване на основната платка към LCD платката. P11, P13 и P4 са свързани към PSoC пинове 11, 13 и 4 на LCD платката.
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, тъй като този контролер зарежда целия фърмуер от флаш устройството на етапа на инициализация.
След като взех дъмп от SPI флаш устройството, стигнах до извода, че единствената му задача е да съхранява фърмуера за контролното устройство JMicron, което е вградено в микроконтролера 8051. За съжаление, правенето на дъмп на SPI флаш устройството се оказа безполезно:
при промяна на ПИН кода дъмпът на флаш устройството остава същият;
След етапа на инициализация устройството няма достъп до SPI флаш устройството.
3.2. Надушване на комуникации
Това е един от начините да откриете кой чип отговаря за проверката на комуникациите за времето/съдържанието, което ви интересува. Както вече знаем, USB-SATA контролерът е свързан към Cypress PSoC LCD чрез конектор CN1 и две ленти. Следователно свързваме сондите към трите съответни крака:
P4, общ вход/изход;
P11, I2C SCL;
P13, I2C SDA.
След това стартираме логическия анализатор Saleae и въвеждаме на клавиатурата: “123456~”. В резултат на това виждаме следната диаграма.
На него можем да видим три канала за обмен на данни:
има няколко кратки изблици на канал P4;
на P11 и P13 - почти непрекъснат обмен на данни.
Увеличавайки първия скок на канал P4 (син правоъгълник на предишната фигура), виждаме следното:
Тук можете да видите, че на P4 има почти 70ms монотонен сигнал, който в началото ми се стори, че играе ролята на часовник. Въпреки това, след като прекарах известно време в проверка на предположението си, открих, че това не е часовников сигнал, а аудио поток, който се извежда към високоговорителя при натискане на клавишите. Следователно този раздел на сигнала не съдържа полезна за нас информация. Въпреки това може да се използва като индикатор, за да се знае кога PSoC регистрира натискане на клавиш.
Последният аудио поток на P4 обаче е малко по-различен: това е аудиото за „невалиден ПИН“!
Връщайки се към графиката на натискане на клавиш, увеличавайки графиката на последния аудио поток (вижте отново синия правоъгълник), получаваме:
Тук виждаме монотонни сигнали на P11. Изглежда, че това е часовниковият сигнал. И P13 са данни. Забележете как моделът се променя след края на звуковия сигнал. Би било интересно да видим какво ще се случи тук.
Протоколите, които работят с два проводника, обикновено са SPI или I2C, а техническата спецификация на Cypress гласи, че тези щифтове съответстват на I2C, което виждаме, че е вярно в нашия случай:
USB-SATA чипсетът постоянно проверява PSoC, за да прочете състоянието на ключа, който по подразбиране е „0“. След това, когато натиснете клавиша "1", той се променя на "1". Окончателното предаване веднага след натискане на “~” е различно, ако е въведен грешен PIN код. За момента обаче не съм проверил какво всъщност се предава там. Но подозирам, че това е малко вероятно да е ключ за криптиране. Както и да е, вижте следващия раздел, за да разберете как премахнах вътрешния фърмуер на PSoC.