В этой серии статей будет описан процесс реверс-инжиниринга роутера Huawei HG533.
Автор: Juan Carlos Jiménez
В этой серии статей будет описан процесс реверс-инжиниринга роутера Huawei HG533.
Рисунок 1: Внешний вид роутера Huawei HG533
Вначале мы попробуем найти последовательные порты, оставленные инженерами, которые проектировали устройство, для отладки и других целей, связанных с технической поддержкой.
Несмотря на то, что процесс поиска будет описываться на примере роутера, те же самые методы можно применить и для других, повсеместно используемых, устройств, начиная от принтеров и заканчивая IP-камерами. Если аппарат обладает более менее приличным функционалом, то, скорее всего, работает на базе Linux и имеет скрытые отладочные порты, наподобие тех, которые мы будем искать.
Поиск последовательного порта
Большинство UART-портов, найденных мной в коммерческих продуктах, имеют от 4 до 6 пинов, которые обычно идеально выровнены и иногда помечены на плате. Данные порты не предназначены для использования конечными пользователями и не имеют подсоединенных выводов или коннекторов.
После осмотра платы мое внимание привлекло два набора площадок, которые не использовались до того момента, пока я не припаял к ним пины (см. рисунок ниже):
Рисунок 2: Плата роутера
По-видимому, в роутере имеются 2 последовательных порта, используемых для взаимодействия с двумя различными интегральными микросхемами. Отследив дорожки, можно понять, какой из портов соединен с главной микросхемой. Скорее всего, именно здесь мы найдем наиболее интересную информацию.
В любом случае мы просто пытаемся подключиться к обоим портам для того, чтобы выяснить, что «предлагает» нам каждый.
Идентификация ненужных пинов
На данный момент мы нашли два ряда пинов, которые, на первый взгляд, могут быть UART портами. Вначале нужно определить, присутствуют ли ненужные пины. Существует один простой трюк, позволяющий решить данную задачу. Мы просто подсвечиваем заднюю сторону плату и смотрим, какие слои контактируют с бугорками из припоя.
Рисунок 3: Подсвеченная плата
По результатам осмотра подсвеченной платы сделаем следующие выводы относительно соединения площадок из припоя:
Пайка пинов для более легкого доступа
На рисунке выше видны оба последовательных порта.
Площадки в этих портах сквозные и заполнены припоем с высокой температурой плавления, с которым очень тяжело работать
В случае со вторым последовательным портом я решил просверлить дырки (в качестве сверла использовался кусок иголки). Далее просовываем пины и припаиваем с обратной стороны платы.
Рисунок 4: Припаянные пины
Поиск выходного пина
На данный момент у нас есть два коннектора, на каждом из которых по 3 «полезных» пина. Мы пока что не определили работоспособные порты или последовательный протокол, используемый устройством, но количество и расположение пинов говорит о том, что, скорее всего, мы имеем дело с UART-портами.
Коротко рассмотрим протокол UART. В спецификации описаны 6 типа пинов:
Мы также знаем, что согласно стандарту по умолчанию на пинах Tx и Rx напряжение повышается (устанавливается в 1В). Передатчик линии (Tx) отвечает за повышение напряжения, и если передатчик не будет подсоединен, напряжение линии будет плавать.
Подведем промежуточные итоги:
Вышеприведенной информации вполне достаточно для того, чтобы наладить мост между портами UART и USB, но если подсоединять пины случайно вы не поймете механики процесса.
Продолжаем углубляться.
Мультиметра или логического анализатора вполне достаточно для того, чтобы определить типы пинов, но если вы хотите понять, что конкретно происходит на каждом разъеме, нет ничего лучше хорошего осциллографа:
Рисунок 5: Осциллограмма одного из пинов
После проверки пинов при помощи осциллографа приходим к следующим выводам:
Теперь мы знаем тип каждого пина, но для того, чтобы «пообщаться» с последовательным портом, необходимо выяснить скорость передачи данных в бодах (baudrate). Эту задачу можно решить при помощи логического анализатора. Если у вас нет данного устройства, можете пойти другим путем и подбирать скорость передачи из списка наиболее распространенных скоростей до тех пор, пока не начнете получать читаемый текст от последовательного порта.
На рисунке ниже показана информация, полученная от логического анализатора, на котором включена функция анализа протокола. Я игрался с различными скоростями до тех пор, пока не получил читаемый текст (\n\r\n\rU-Boot 1.1.3 (Aug...).
Рисунок 6: Анализ протокола при помощи логического анализатора
Как только найден выходной пин и подобрана скорость передачи, мы готовы к коммуникации с устройством:
Рисунок 7: Схема распиновки последовательных портов
Подсоединение к последовательным портам
Теперь когда мы получились всю необходимую информацию относительно аппаратной части, настало время «пообщаться» с устройством. Подсоединяем любой мост типа UART-USB и начинаем анализ. На рисунке ниже показана моя собственная аппаратная сборка, предназначенная для одновременного общения с обоими портами и мониторинга одного из портов при помощи осциллографа:
Рисунок 8: Вариант аппаратной сборки для подключения к последовательным портам
Когда мы откроем последовательный терминал на компьютере во время коммуникации с устройством, то увидим, как главный UART порт начинает выдавать полезную информацию. Ниже показаны команды, используемые мной для подсоединения к каждому порту, а также первые строки во время процесса загрузки:
Рисунок 9: Программная часть взаимодействия с последовательными портами
Please choose operation:
3: Boot system code via Flash (default).
4: Entr boot command line interface.
0
Словосочетание ‘Command line interface’ свидетельствует о том, что мы нашли способ попасть внутрь системы. После выбора пункта 4 мы попадаем в командную строку, предназначенную для взаимодействия с загрузчиком устройства.
Кроме того, если мы выберем пункт 3, подождем, когда закончится проверка контрольной суммы и нажмем enter, то получим сообщение Welcome to ATP Cli и строку для ввода логина. Если на устройстве изменен пароль, процедура авторизации может вызвать затруднения. Однако в большинстве случаев можно авторизироваться при помощи стандартной учетной записи. После нескольких попыток мне удалось попасть в систему при помощи комбинации admin:admin.
-------------------------------
-----Welcome to ATP Cli------
-------------------------------
Login: admin
Password: #Password is ‘admin'
ATP>shell
BusyBox vv1.9.1 (2013-08-29 11:15:00 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
# ls
var usr tmp sbin proc mnt lib init etc dev bin
Теперь мы можем выполнять команды с правами суперпользователя. На данном роутере установлен BusyBox с линуксовым интерфейсом, о котором я расскажу подробнее в следующей статье.
Что дальше?
После того как мы получили доступ к BusyBox CLI, можем начать исследование программного обеспечение. В зависимости от устройства это могут быть пароли в текстовом виде, TLS-сертификаты, полезные алгоритмы, небезопасные приватные API и так далее.
В следующей статье мы подробнее углубимся в программную часть. Я объясню различия между режимами загрузки, расскажу о выгрузке памяти и других интересных вещах, которые можно делать, если есть доступ к программному обеспечению устройства.
Спасибо за внимание.
Гравитация научных фактов сильнее, чем вы думаете