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

Реверс-инжиниринг прошивки устройства на примере мигающего «носорога». Часть 1

Время на прочтение16 мин
Количество просмотров45K
Всего голосов 52: ↑52 и ↓0+52
Комментарии26

Комментарии 26

Очень интересная статья. Спасибо.
«зачем авторизация на осветительном приборе?» Это вы поймёте, когда будете сидеть в полной темноте или в «стробоскопе».
«зачем авторизация на осветительном приборе?» — это было скорее просто как поспешное недоумение. Потом, правда, недоумение стало ещё больше при виде того, что авторизация здесь используется совсем не для управления освещением.
НЛО прилетело и опубликовало эту надпись здесь
Бывает free-версия. Правда, без декомпила
Я бы обязательно перед запуском IDA подключился бы к TX и поглядел бы, что там «выходит». Логический анализатор в помощь для определения параметров сигнала (скорости и т.п.), затем терминал. Думаю, это сильно помогло бы.
Всё верно! При полноценном исследовании так и нужно. Но в рамках мастер-класса это было затруднительно (правда, один из участников был «во всеоружии» и подключился к TX). Ну и по задумке акцент был сделан именно на статический анализ.
Учитываем замечания и ошибки. Не загадывая постараемся развить тему и затронуть также «железячные» моменты.
Извиняюсь за оффтоп. А что за Bluetooth-модуль установлен на спине носорога? Судя по виду, он сильно загажен флюсом, не удается прочитать маркировку.
SPBT2632C2A
Как уже ответили — SPBT2632C2A. Маркировка на модуле — «006-000095», плохо получилось на фото
Почитал спецификации, этот модуль уже имеет свой STM32 контроллер с распаянными GPIO. Но для обучения конечно же лучше показывать на отдельно стоящем контроллере.
Не уверен, что тырить чужой код — самое полезный навык, которым следует овладеть студенту. Тем более, что в случае МК его зашивают во внутреннюю флэш память, защищенную от считывания; так что бинарники можно получить, только хакнув ресурсы разработчика. Лучше бы учили писать хороший собственный, плюс хорошо понимать целевые задачи и инструментарий.
Ну давайте начнем с того, что получить навыки реверс-инжениринга — это не «тырить чужой код». Это навык, который позволит, как минимум серьезно углубить свое понимание того, как строятся электронно-вычислительные устройства на всех уровнях, начиная от аппаратного и заканчивая прикладным софтом. Это существенно помогает при необходимости работы с чужим кодом и железом, например — при необходимости написания патчей и поиске ошибок. Обладая навыком реверса, например, можно отыскать ошибки в чужом бинарнике и даже исправить их — здесь, на хабре, были такие статьи. Также возможно даже разработать бинарный «плагин» расширяющий функциональность чужого приложения, такие задачи тоже, бывает, встают.
Помимо этого есть профессиональная область, которая требует глубоких знаний в реверс-инжениринге: это поиск уязвимостей в программных и программно-аппаратных продуктах. Она востребована и количество уязвимостей в объектах критической инфраструктуры не снижается год от года — достаточно зайти на CVE и посмотреть количество уязвимостей по годам: Siemens: Vulnerability Statistics
Далее. Получить бинарный код можно многими путями. Защищают от вычитывания, на самом деле единицы. Но помимо этого есть ряд подходов, позволяющих получить бинарный код — и, между прочим, в этой статье один упоминался, вероятно, вы не дочитали — это файлы обновления прошивки, поставляющиеся производителем.

Сейчас очень мало выпускников вузов, представляющих себе работу устройства на всех уровнях. Еще меньше тех, кто может восстановить логику этой работы по неполным данным. Кроме того, с вместе с увеличением объемов бинарного кода возрастает потребность в автоматизации работы реверс-инженера, поэтому эта область представляет еще и обширное поле для научных исследований.
По-моему, если вы хотите выучить студента на разработчика, то наилучший способ «углубить понимание» — разбор открытых исходных текстов программ; их сейчас доступно множество, для широчайшего разнообразия аппаратных платформ. И лабы, лабы и ещё раз лабы, на тех же stm32, с управлением реальными объектами в реальном времени и взаимодействием через современные интерфейсы. Занимаясь же реверсом, инженер обречён следовать за чужой технической мыслью, зачастую — устаревшей. Я уже не говорю о том, что реверс коммерческих продуктов может преследоваться по закону. Что касается перехвата кода при обновлении прошивок — вы, наверное, лучше меня знаете, что их нынче принято шифровать; нешифрованные прошивки для серьезных коммерческих продуктов, тем более в критичных областях — это 90-е в лучшем случае. Этой дорожкой уже ходили при позднем СССРе, где почти всё, что нынче называется IT, было реверсом; результат оказался плачевен.
Да в том-то и дело, что я знаю лучше вас, поэтому ваш комментарий выглядит очень наивным, как мнение человека, составленное на основе фильмов про хакеров. Страшное слово «криптография» вызывает у вас благоговейный трепет и мысли о непроницаемой защите.

Вы упорно не хотите понять, что сфера реверс-инжениринга — это не только «стащить чужой код и схематику, чтобы сделать похоже», это еще и поиск уязвимостей, защита информации, исследования в области машинного обучения и многое, многое другое. Не даром DARPA выплачивает миллионы за успехи в сфере реверс-инжениринга. Не даром у нас который год проводят огромные международные конференции ZeroNights, PHDays, а за рубежом — BlackHat и прочие. Но то DARPA, конференции… Что нам ровняться на какие-то там исследовательские институты, когда можно посмотреть фильм про хакеров, правда?)
К сожалению, из-за отсутствия техподдержки (вернее, из-за жадности тех, кто не хотел её оплачивать) пришлось как-то отреверсить проприетарный протокол достаточно известного бренда. Ничего хорошего в этом не вижу, непроизводительная трата времени, ничего мне профессионально не давшая и ничему новому не научившая. Криптография ломается, конечно, но ломать её — опять же малопочтенное и, в общем случае, преследуемое законом занятие.
И опять вы игнорируете в упор мои слова об огромной области для исследований, о интересных и важных задачах, решение которых приближает нас к автоматизации поиска уязвимостей методами машинного обучения, о том, в конце концов, что это все применяется для защиты — и продолжаете талдычить свое «преследуемо законом!!!11» — уже в котором комментарии, причем не только под этим постом. Складывается впечатление, что у вас какая-то нездоровая фиксация на одном аспекте — ладно бы просто по незнанию, но нет, уже после того, как вам разъяснили, вы все равно продолжаете игнорировать факты.

То что лично вам вставшая перед вами задача не дала ничего в профессиональном плане — это исключительно ваша веселая история из жизни, на глобальное положение дел (которое я уже третий комментарий пытаюсь до вас донести) она не влияет. Также как и ваши фантазии относительно «почтенности» — я уже приводил ссылки на международные конференции, посвященные информационной безопасности — если вы все-таки избавитесь от навязчивой боязни и посетите такое мероприятие, или хотя бы почитаете научные работы, посвященные информационной безопасности, возможно, узнаете что-то новое.
А если есть желание выучить студента на исследователя безопасности? Чему, на Ваш взгляд, стоит учить такого студента?

Касаемо обучения инженеров. Инженер, который создает продукт (программу/устройство), но не имеет представления, как этот продукт будут «ломать», в конечном счёте создаёт продукт, который легко взломать. А уж сколько обновлений передаётся в незашифрованном или «условно-самопально-зашифрованном» виде по той же причине… При обучении-то как раз и стоит затрагивать разные аспекты, в том числе и реверс.

Бытует такое мнение: «ой, они же завтра побегут всё взламывать» и поэтому нельзя их этому учить! Во-первых, не побегут; а во-вторых, стоит переживать о другом — когда на факультетах ИБ не преподают реверс.
Я так полагаю, раз это все «незаконно!!!», то нужно вообще срочно закрывать факультеты ИБ ведущих технических вузов. А то ишь ты, повадились плодить потенциальных преступников! Бумажка с регламентами — вот настоящее оружие доблестного борца с киберугрозами! Прошелся по предприятию, проверил, что шкафчики на замках, каждая флешка с бирочкой и USB-порты опечатаны — все, враг не пройдет.
Видимо, не акцентировал внимание в статье, что мастер-класс на конференции был в секции «Информационная безопасность».
Но в целом, реверсить — не значит «тырить».
На мой взгляд, реверс учит (буквально, вынуждает) понимать внутреннее устройство системы до самых низов. Это нужно и исследователю безопасности, и обычному разработчику (который вынужден взаимодействовать с другими системами), не говоря уже про вирусный анализ.
Очень интересная статья! Спасибо!
А как понять, по коду, что устройство обращается в GPIO?
То есть как увидеть, например, нажатия по кнопкам?
Будут записи в соотвествующие адресные пространства. В статье дана схема, периферия замаплена с адреса 0x4000 0000, а дальше в даташите смотреть что конкретно находится за каким адресом.
В качестве примера по GPIO
www.st.com/content/ccc/resource/technical/document/reference_manual/c2/f8/8a/f2/18/e6/43/96/DM00031936.pdf/files/DM00031936.pdf/jcr:content/translations/en.DM00031936.pdf
Страница 46, видно что GPIOA имеет адреса 0x4800 0000 — 0x4800 03FF, а на странице 163 даны оффсеты для всех регистров работы с этим портом, настройка, пулапы, и изменение состояния итд. По оффсету 0x14 лежит регистр ODR, имеет 16 бит, которые управляют подачей питания на соответствующей ноге, записывая в эти адреса 0 или 1 будут меняться состояния вывода. А читать состояния ноги можно из регистра IDR.
Все-таки это больше удача.

Аппаратная защита от считывания — норма жизни, будь это не игрушка для лабораторной, а реальный контроллер из например управления ДВС автомобиля — и хрен вам, а не считывание. Пустой файл из программатора и все. Я так пробовал минимум с двумя устройствами для знакомых моих коллег-автомобилистов.

Корректная расшифровка — тоже камень преткновения будь здоров. Ну вытащил ты какой-то бинарник, а если не знаешь ЧЕМ он упакован/зашифрован, код скажем малого объема и очищенный, уже без комментариев, заметок и тп (считай подсказок) — отдыхай, дорогой. Если ты не Рон Хогвард какой-нибудь, конечно.

Корректное дизассемблирование, не зная аппаратную часть и/или операционку тоже ведь не сделаешь. :) Вот тебе чип со стертой маркировкой (опять же автоиндустрия, будь она неладна, там такое видно очень частое явление) — и опять отдыхай, дорогой. ;?
Вы не совсем правы. Давайте по пунктам:

1) Аппаратная защита, на самом деле, не норма жизни, а скорее исключение — не могу точно сказать, почему так, но это факт — подавляющее большинство производителей (независимо от сферы применения девайса) ей пренебрегает. Вам могло не повезти дважды, но это далеко не закономерность, как ни странно.
Кроме того, вопрос в том, что именно защищено — даже при активированной защите от вычитки в современных устройствах, как правило, хватает векторов воздействия.

2) Распаковщик и расшифровщик чаще всего находится в том же бинарнике — на случай, если придется менять формат хранимой прошивки. А в этом случае задача
распаковки становится достаточно тривиальной для специалиста. Для поиска в этом «очищенном бинарнике малого объема» точки входа в расшифровщик/распаковщик
также существует ряд очень интересных современных методов.
Хороший вариант защиты — когда бутлодер защищен от считывания и содержит распаковщик, а код на флешке — чистый запакованный кастомным алгоритмом блок данных. Там тоже есть варианты, надо смотреть конкретную железку. Но это встречается редко — не любят большой код пихать
в бутлодеры нулевого уровня, труднее обновлять.

3) Аналогично поиску точки входа — есть ряд прогрессивных методов, ощутимо сокращающих времязатраты при подобной ситуации (они не рассматривались в данной статье). Чип со стертой маркировкой сам по себе практически не является замедляющим фактором.
Возьмем круг задач рядового инженера (меня). Все случаи — из моей личной практики. Может быть варианты 2 и 3 в принципе не абсолютно тупиковые, но в 99,99% случаев усилия, которые необходимо будет затратить не оправдывают результат. Ну вот так вот.
Если прошивки от сотиков — может и не норма. Но попробуйте из промышленного устройства любой европейской/американской/японской компании вытащить «прошивку».
Из фануковского сервопривода, шнейдеровской электроподстанции комплектной, бмвшного авто. :? Если вам дают вытащить программные потроха из ядра — это уже уязвимость. Как минимум интеллектуальной собственности.

Все остальное — " у нас есть тааакие приборы". Несерьезно. Ну у вас есть, у меня и других людей перед которыми встает задача именно реверса ради реверса — нет.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий