Для просмотра ссылки Войди или Зарегистрируйся
Эта статья предназначается для всех, кто имеет опыт в разработке *nix/ПО/эксплойтов, но не обладает или почти не обладает знаниями оборудования/электроники! Хоть мы и не будем рассматривать все подробности простых схем (для этого есть множество отличных онлайн-ресурсов), информация изложена так, что не требует предыдущего опыта работы.
Основная задача статьи — помочь тем, кто пытается заниматься исследованием уязвимостей и/или разработкой эксплойтов физического устройства без системы отладки, оболочки и прошивки. Иными словами, мы попробуем добраться до root shell без сложностей поиска уязвимостей нулевого дня!
Чтобы найти эти тесты FCC, нужно для начала узнать FCC ID. Этот ID всегда указан на корпусе устройства и обычно объединён с другой технической информацией и спецификациями. У данного устройства FCC ID находится на нижней крышке.
Для автоматизации процесса этот ID можно поискать непосредственно на Для просмотра ссылки Войдиили Зарегистрируйся или воспользоваться сайтами наподобие Для просмотра ссылки Войди или Зарегистрируйся или Для просмотра ссылки Войди или Зарегистрируйся. На них вы можете найти разнообразные документы: руководства пользователя, информацию о радиочастотном тестировании и фотографии внутренностей и внешнего вида устройства! Эти фотографии могут помочь в поиске возможных интерфейсов отладки оборудования, интересных компонентов, архитектуры ЦП и т. д.
Подсказка: если устройство не разбирается, то проверьте под наклейками или резиновыми ножками в нижней части устройства, там могут быть винты.
При изучении документации FCC или внутренностей устройства мы стремимся решить следующие важные задачи:
Любой другой большой чип на печатной плате тоже может дать полезную информацию об устройстве (ОЗУ, накопитель и т. п.).
Отладочные разъёмы (или контакты) обычно состоят из группы соединений, выстроенных в стандартную, легко узнаваемую структуру на печатной плате. Они могут быть уже припаянными к разъёму печатной платы (благодаря чему к ним можно легко подключать внешние устройства), или же вам придётся разогревать паяльник и припаивать к ним новые провода.
Примечание: отладочные разъёмы для встроенных ЦП часто представляют собой непосредственные соединения с контактами на самом ЦП. Если отладочные разъёмы сломаны или отсутствуют, то можно не обращать внимания на остальную часть платы и подключиться напрямую к этим контактам ЦП. С такими мелкими соединениями помогают специальные инструменты наподобие Для просмотра ссылки Войдиили Зарегистрируйся.
Хотя протоколов связи с оборудованием очень много (JTAG, I2C, SPI, CAN ...), в этой статье мы рассмотрим UART, потому что это один из самых популярных протоколов интерфейсов отладки.
Интерфейс UART состоит из четырёх контактов:
При помощи анализатора цепей мы можем исследовать реальную передачу UART.
В каждой строке показано изменение напряжения на отдельном контакте UART в процессе передачи. Здесь мы замеряем, как устройство получает данные.
или Зарегистрируйся. Однако для наших задач можно принять, что скорость в бодах UART-устройства — это просто количество передаваемых по проводу битов в секунду.
Большинство устройств работает со скоростью 9600 бод (9600 бит/с или 1200 байт/с) или 115200 бод. Существует много стандартных скоростей (обычно кратных 9600), но 9600 и 115200 почти всегда используются по умолчанию. Трюки для определения скоростей будут изложены ниже.
Этот безымянный производитель даже любезно промаркировал контакты!
Естественно, каждый инженер может реализовывать проекты по-разному. В первую очередь нужно искать следующее:
Примечание: Rx и Tx работают под одинаковым напряжением, поэтому ошибка обычно не приводит к проблемам (при необходимости провода можно позже поменять местами).
Как говорилось выше, при работе с UART присутствует некоторая неопределённость. Иногда контакт Vcc вообще отсутствует, иногда маркировка может быть ошибочной и т.п. Однако если вы увидите на плате три или четыре контакта в ряд, то это, скорее всего, UART.
Если на вашей плате отладочные контакты промаркированы, то сразу переходите к разделу «Взаимодействие». В противном случае надо браться за мультиметр!
Эта статья предназначается для всех, кто имеет опыт в разработке *nix/ПО/эксплойтов, но не обладает или почти не обладает знаниями оборудования/электроники! Хоть мы и не будем рассматривать все подробности простых схем (для этого есть множество отличных онлайн-ресурсов), информация изложена так, что не требует предыдущего опыта работы.
Основная задача статьи — помочь тем, кто пытается заниматься исследованием уязвимостей и/или разработкой эксплойтов физического устройства без системы отладки, оболочки и прошивки. Иными словами, мы попробуем добраться до root shell без сложностей поиска уязвимостей нулевого дня!
Разведка
Прежде чем переходить к исследуемому устройству, полезно провести предварительное изучение. В США все устройства, использующие радиочастотную связь (RF, Radio Frequency), например, WiFi, Bluetooth и т. п., должны проходить тестирование и проверку FCC. Эти тесты доступны публично, и обычно в них содержатся изображения внутренностей устройства!Чтобы найти эти тесты FCC, нужно для начала узнать FCC ID. Этот ID всегда указан на корпусе устройства и обычно объединён с другой технической информацией и спецификациями. У данного устройства FCC ID находится на нижней крышке.

Для автоматизации процесса этот ID можно поискать непосредственно на Для просмотра ссылки Войди
Вскрываем оборудование
Обычно детали аппаратных устройств скрепляются вместе винтами, клеем и (почти всегда) пластмассовыми защёлками. Эти защёлки — проклятие любого хакера оборудования, однако их обычно удаётся открыть, аккуратно надавив отвёрткой с плоским шлицем или другим узким инструментом. (Помните, что острые края инструмента всегда должны быть направлены в противоположную от вас сторону!)Подсказка: если устройство не разбирается, то проверьте под наклейками или резиновыми ножками в нижней части устройства, там могут быть винты.
При изучении документации FCC или внутренностей устройства мы стремимся решить следующие важные задачи:
1. Больше узнать об устройстве
Найдите ЦП. Обычно это самый большой чёрный квадрат на плате. Прочитайте его маркировку и найдите её в поисковом движке, обычно там есть технические описания архитектуры, контактов и многого другого.Любой другой большой чип на печатной плате тоже может дать полезную информацию об устройстве (ОЗУ, накопитель и т. п.).
2. Получить прошивку устройства
См. подраздел «При помощи оборудования» в разделе «Получение прошивки».3. Найти оболочки
Процесс получения shell и проведения интерактивной сессии отладки оборудования описан ниже.Общение с оборудованием
В программировании двоичные файлы могут компилироваться с отладочными символами; аналогично этому, разработчики оборудования могут добавлять в устройства такие элементы, как отладочные разъёмы, позволяющие обмениваться данными с компонентами печатной платы. Эти интерфейсы используются для отладки при разработке и часто необходимы при производстве устройств для загрузки прошивок и/или проведения автоматизированных тестов. Поэтому такие разъёмы не убираются из готового устройства и могут служить замечательными точками входа для любопытного реверс-разработчика.
Отладочные разъёмы (или контакты) обычно состоят из группы соединений, выстроенных в стандартную, легко узнаваемую структуру на печатной плате. Они могут быть уже припаянными к разъёму печатной платы (благодаря чему к ним можно легко подключать внешние устройства), или же вам придётся разогревать паяльник и припаивать к ним новые провода.
Примечание: отладочные разъёмы для встроенных ЦП часто представляют собой непосредственные соединения с контактами на самом ЦП. Если отладочные разъёмы сломаны или отсутствуют, то можно не обращать внимания на остальную часть платы и подключиться напрямую к этим контактам ЦП. С такими мелкими соединениями помогают специальные инструменты наподобие Для просмотра ссылки Войди
Хотя протоколов связи с оборудованием очень много (JTAG, I2C, SPI, CAN ...), в этой статье мы рассмотрим UART, потому что это один из самых популярных протоколов интерфейсов отладки.
Что за UART?
Universal Asynchronous Receiver/Transmitter (UART) — это простой, но изящный протокол. Как понятно из названия, он позволяет устройству асинхронно получать и передавать данные. UART-соединение обычно выглядит вот так:
Интерфейс UART состоит из четырёх контактов:
- GND: низкое напряжение, например, 0 В.
- Vcc: высокое напряжение, обычно от 3,3 В до 12 В.
- Rx (приём).
- Tx (передача).
При помощи анализатора цепей мы можем исследовать реальную передачу UART.

В каждой строке показано изменение напряжения на отдельном контакте UART в процессе передачи. Здесь мы замеряем, как устройство получает данные.
- Канал 0 (GND) постоянно имеет низкое напряжение.
- Канал 1 (Vcc) постоянно имеет высокое напряжение.
- Канал 2 (Rx) попеременно имеет низкое и высокое напряжение в процессе передачи данных.
- Канал 3 (Tx) постоянно имеет высокое напряжение (то есть передача данных отсутствует).
Скорости передачи информации (скорость в бодах)
Подробное описание бодов, скорости в бодах, скорости в битах и другого можно прочитать на Для просмотра ссылки ВойдиБольшинство устройств работает со скоростью 9600 бод (9600 бит/с или 1200 байт/с) или 115200 бод. Существует много стандартных скоростей (обычно кратных 9600), но 9600 и 115200 почти всегда используются по умолчанию. Трюки для определения скоростей будут изложены ниже.
Разъём UART
Заглянув внутрь устройства, вы можете увидеть нечто подобное:
Этот безымянный производитель даже любезно промаркировал контакты!
Естественно, каждый инженер может реализовывать проекты по-разному. В первую очередь нужно искать следующее:
1. Маркировку Rx и Tx
Если контакты Rx/Tx промаркированы, то почти всегда в пятидесяти процентах случаев обозначение Rx подразумевает или «здесь можно получать данные», или «отсюда устройство получает данные». (Тоже справедливо и для контакта Tx).Примечание: Rx и Tx работают под одинаковым напряжением, поэтому ошибка обычно не приводит к проблемам (при необходимости провода можно позже поменять местами).
2. Контакт Vcc
Не всегда понятно, для чего предназначается контакт Vcc. Обычно, если плата уже запитана (например, через USB или блок питания), то необходимость работать с контактом Vcc отсутствует, поскольку он уже подключён к внутреннему Vcc платы. Неправильная работа с эти контактом и попытка подключить к нему другой источник питания может привести к короткому замыканию двух источников питания, сгоранию устройства и повреждению оборудования! (К сожалению, я знаю это по собственному опыту.) Короче, НЕ ПОДКЛЮЧАЙТЕСЬ К ЭТОМУ КОНТАКТУ.Получаем Root Shell
Всё это здорово, но вы читаете эту статью не ради аппаратных протоколов, а чтобы получить root shell!Как говорилось выше, при работе с UART присутствует некоторая неопределённость. Иногда контакт Vcc вообще отсутствует, иногда маркировка может быть ошибочной и т.п. Однако если вы увидите на плате три или четыре контакта в ряд, то это, скорее всего, UART.
Если на вашей плате отладочные контакты промаркированы, то сразу переходите к разделу «Взаимодействие». В противном случае надо браться за мультиметр!