Как стать автором
Обновить

Ломаем зашифрованный диск для собеседования от RedBalloonSecurity. Part 0x01

Уровень сложностиСложный
Время на прочтение50 мин
Количество просмотров23K
Всего голосов 25: ↑24 и ↓1+31
Комментарии0

Комментарии

Ничего не понятно, но очень интересно!
Я старался сделать статью понятной для большинства. Видимо не достарался)
Спасибо! Говорю сразу, чтоб понять третью часть, понимание этой обязательно.
Причины по которым были созданы эти 2 режима мне неизвестны (знатоки в комментариях очень даже приветствуются)
Денис Юричев «Reverse Engineering для начинающих»:
«x86 всегда был архитектурой с инструкциями переменной длины, так что когда пришла 64-битная эра, расширения x64 не очень сильно повлияли на ISA. ARM это RISC4-процессор разработанный с учетом инструкций одинаковой длины, что было некоторым преимуществом в прошлом. Так что в самом начале все инструкции ARM кодировались 4-мя байтами. Это то, что сейчас называется «режим ARM». Потом они подумали, что это не очень экономично. На самом деле, самые используемые инструкции процессора на практике могут быть закодированы c использованием меньшего количества информации. Так что они добавили другую ISA с названием Thumb, где каждая инструкция кодируется всего лишь 2-мя байтами. Теперь это называется «режим Thumb».»

Т.е. похоже все дело в простой экономии памяти.
Вау. Спасибо!

Немного исторического контекста: это было во времена проникновения и закрепления ARM в мобильных телефонах, относительно дорогих flash с размерами меньше мегабайта и узкими (8/16 бит) шинами. Thumb (который по сути был небольшой надстройкой над ARM — второй декодер команд, управляющий тем же ALU) убил сразу двух зайцев — выше плотность кода (и экономия за счёт меньших flash в массовом продукте) и чтение очередной команды за одно обращение по 16-битной шине.
Была даже кое-какая конкуренция именно в направлении уплотнения и именно под телефоны: Motorola с нуля разработала свою ISA M*CORE (вообще без 32-битной кодировки, только 16, но с эффективным кодированием часто используемых 32-битных констант вроде битовых масок) и гордо публиковала сравнения с ARM/Thumb в свою пользу, но в итоге таки перешла на ARM.
А Thumb потом развили до нынешнего Thumb-2, позволяющего совмещать 16- и 32-бит кодировки без явного переключения режимов.

«Шикарное» изложение! Осталось только разбить все слова на слоги и обозначить ударные слоги в словах (проставить/обозначить ударение). И сразу станет всё предельно ясно и понятно!
Опять таки, спасибо за правки по грамматике. Из меня тот еще писатель)
Зачем проходить такой квест, если можно было взять оригинальный образ флешки для этого диска, «доработать» его для того, чтобы он смог работать с гермоблоком, и сразу прочитать все данные? Любой DR специалист сделает это за пару минут.

А что это за процедура с гермоблоком? Имеешь в виду образ флеш памяти с платы hdd?

А вы подумайте. Диск с оригинальной прошивкой дает доступ к полной «поляне». А вам прислали с модифицированной варью, где размер юзер-области «подрезан». Но в ПЗУ кроме собственно исполняемого кода есть адаптивные параметры конкретного гермоблока. Вам это знать необязательно, а любая DR контора в курсе, и сделает вам эту операцию по «анлоку» за пару минут
данные на блинах наверняка тоже шифрованы
Нет, эти диски не умеют в FDE
Судя по подсказкам в предыдущей статье — в процессе загрузки диска участвуют 3 составляющие — IC, Winbond Flash и блины.
Мне кажется, что если, к примеру, прикрутить плату к HDD с другого похожего HDD, диск заблокируется. Данные, наверное, не шифрованы. Но, происходит сверка каких-то данные между этими тремя компонентами. И, если все гуд, диск работает как надо. Но, если соответствия нет, на блины запишутся данные, которые его заблокируют. А, кроме платы, ничто не может сменить данные на блинах.

Плюс, мне кажется, что код, который отвечает за генерацию ключей лежит исключительно внутри IC, или Winbond Flash. На блинах нету ничего, что связано с этим уровнем. Так или иначе, мы работаем с debug меню диска. И, раз это debug меню, было бы глупо располагать его на блины: блин сломался — дебега нету.
никаких сверок. Просто в содержимом микросхемы флеш (это не обязательно будет винбонд) есть и код, и данные. Данные — необходимы для нормального старта диска, так как нет двух одинаковых по характеристикам дисков (параметры головок и поверхностей). Эти параметры тоже лежат в микросхеме флеш. Естественно, в отличии от микропрограммы — эти параметры индивидуальны. Поэтому просто переставить плату — не прокатит, но и ничего не заблокируется. А вот модифицировать/перенести код — никто не мешает.
Я пытался прогнать дизассемблером по прошивке с флеш, но там все запаковано. Я вряд-ли смог бы достать ключи вот таким способом.

Короче, я уверен, что были и другие способы взломать этот челлендж. И, ребятам из редбалун были бы точно интересны другие способы взлома. Но, мои познания в железяках ограничены. Это мой первый прошитый чип.
а зачем вам эти ключи? они же нужны только для дальнейшего секаса с прошивкой, но не нужны для кошелька, верно я понял условие задачи?
Для кошелька как такового они не нужны — они нужны лишь для перехода на следующий левел. В процессе взлома я понятия не имел в каком формате я получу кошелек. Он мог лежать как угодно — мог просто располагаться в памяти, мог быть где-то в каком-то зипе на одном из разделов, или я мог бы вообще в конце концов получить список адресов памяти с флеш-чипа, по которым бы и собрал публичный и приватный ключи, или вообще — в формате ссылки на какой-то мегазакрытый nginx. Какие-то обходные варианты наверное были, но я шел «верным» путем.
ИМХО — идти предопределенным путём — плохой способ. Нужно уметь глядеть шире и видеть другие возможности, дающие результат с бОльшей вероятностью и быстрей. Мне очень интересно, чем закончится ваш квест, пишите обязательно, и особенно — закончится ли он приглашением на работу.
Здесь полностью согласен. Ребятам был как раз интересен нестандартный путь решения.
Я пытался прогнать дизассемблером по прошивке с флеш, но там все запаковано.

возьмите помощь зала. Их есть у нас :)
Стек это FIFO конструкция
FIFO — это «первым зашёл — первым вышел». По этому принципу работают очереди. У стека несколько другой принцип: «последним зашёл — первым вышел», то есть LIFO. Прошу прощения за занудство.
Точняк. Поправляю.
что такое LED я до сих пор не понял

Это специфичное для дисков Сигейт состояние firmware. LED является аналогом try… catch с переходом в abort, где собственно abort и будет состоянием LED. т.е. диск падает в контролируемый exception, сообщая либо адрес, где произошло исключение, либо код ошибки, который подскажет что именно произошло.

Для контролируемой передачи управления на вектор обработки LED исключений (на Сигейтах) используется ARM-инструкция SVC (aka Supervisor Call), которая пошлет диск в обработчик SVC (тоже есть в таблице векторов)
Опа. Человек из data recovery. Это задание как-то можно было решить слив данные с блинов, или как-то из flash чипа?
Это задание как-то можно было решить слив данные с блинов, или как-то из flash чипа?

это зависит от цели вашего квеста.
Если вы всего лишь хотите добраться до последнего раздела с данными (который вероятно не виден из-за обрезанного размера диска), то да, достаточно влить правильную прошивку и вы увидите все пространство диска, со всеми разделами.
Если же цель пройти все задания, то нет. Так как ключ генерится посредством самописного алгоритма и не хранится в открытом виде.
Целью было добратся до битков и возможный переезд в NYC. А как я пойму, какую прошивку лить? если солью с другого диска, я не смогу «завести» этот. верно?
В предыдущей статье я решил выставить фотку консоли по той причине, что мне влом опять повторять процесс включения 4х медных жил в 5 отверствий и крепить их скотчем. К сожалению, то, что я считывал удалилось из-за давности) Но, мне интересно, что Вы скажете. Сброшу на выходных.
Если лень читать флешку, то можно просто level_1_makesureitsnotcorrupted.lod файл, я попробую ограничиться только им.
Хотя содержимое флешки сильно облегчило бы задачу.

Даже без глубоких знаний внутренностей Seagate можно сравнить дампы flash двух разных прошивок (из разных уровней задания) и попробовать нащупать логику открытия следующего раздела. Судя по фрагменту патча в нулевой части статьи, код там уже распакованный.
Disclaimer: это не в коем случае не «смотри как надо было», вы публикуете «детектив» по частям, а нам не терпится угадать «кто убил» :) Ждём продолжения!

НЛО прилетело и опубликовало эту надпись здесь
Вопрос — а по ходу дела вы пытались ли снять посекторно образ диска через ddrescue, чтобы потом попытаться руками примонтировать разделы из образа, вручную указав начало и конец? Или с самого начала поверхность диска целиком не читалась? Просто ещё в первой статье выяснилось, что разделов — три, т.е. потенциально они могли быть читабельны. Ну или чисто на память образ срезать… если конечно сама прошивка открытым текстом не угрожает самоуничтожением диска в случае задействования ddrescue…
Также, представляю, что за ужс будет на третьем уровне. Воображение подсказывает самые сумасшедшие варианты, вплоть до необходимости распознания кастомных сервометок и геометрии дорожек, которые надо рассчитать отдельно и вписать в прошивку, иначе диск вообще будет думать, что область с третьим разделом неисправна. Жду с нетерпением!
На 3м уровне будет жесть, но ее можно обьяснить нормальными методами)) наверное даже проще, чем в этой статье. Там будет программа похожая на эту, но немного урезанная. Эту я расписан так детально потому что для следующего левела, нужно максимальное понимание этолго.

Я не пытался как-то бэкапить диск, или пытаться открыть следующие разделы. На это есть несколько причин — то, что адрес начала раздела смещен — лишь моя догадка. Как они зарулили прошивку чипа так, чтоб раздела были закрыты — для меня до сих пор загадка. Брошу hddscan прошивку с флешки, и может что-то будет понятнее. Еще 1 причина — даже если я открою раздел, там может лежать шифрованный архив — и как я его открою?
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории