Статья Пентест IoT-устройств: от разведки и разборки до эксплуатации по OWASP ISTG

Монитор с зелёным фосфорным свечением отображает консоль с командой анализа прошивки и найденными учётными данными. Сканирующие линии и бочкообразное искажение экрана создают атмосферу технического...


На последних трёх проектах по тестированию безопасности IoT я вскрывал корпуса устройств, подключался к UART - и в двух случаях из трёх получал root-шелл без единого запроса пароля. Третье устройство хотя бы запросило логин, но пара admin:admin прошла сразу. По опыту индустрии, в подавляющем большинстве IoT-ассессментов хотя бы один отладочный интерфейс (UART или JTAG) остаётся полностью открыт в продакшн-версии устройства. Это не баг - это состояние индустрии.
Записано со слов нашего коллеги. Повествование от первого лица.
Пентест IoT-устройств отличается от тестирования веб-приложений тем, что атакующая поверхность одновременно охватывает железо, прошивку, радиоканалы, облачные API и мобильные приложения. Стандартные методологии сетевого пентеста покрывают от силы треть этого пространства. Ниже - воспроизводимый процесс, который я использую на реальных проектах, с привязкой к OWASP IoT Security Testing Guide (ISTG) и MITRE ATT&CK.
UART (Universal Asynchronous Receiver-Transmitter) — это базовый двухпроводной аппаратный протокол, используемый в Интернете вещей для последовательной связи.
JTAG (Joint Test Action Group) — это отраслевой стандарт аппаратного интерфейса, используемый во многих устройствах Интернета вещей для отладки, тестирования и программирования микроконтроллеров или систем на кристалле.

Модель IoT-устройства и скоупинг по OWASP ISTG​

Русскоязычные материалы по аудиту безопасности IoT обычно перечисляют шаги вроде «просканируйте сеть, найдите уязвимости, эксплуатируйте». Это описание пентеста веб-приложения, а не IoT-устройства. OWASP IoT Security Testing Guide (ISTG) предлагает другой подход - компонентную модель, где каждый элемент устройства тестируется отдельно.

По ISTG любое IoT-устройство раскладывается на две категории элементов:

Внутренние элементы: процессор (ARM, AVR, x86), память (EEPROM, флеш-чипы), прошивка (установленная + механизм обновления) и сервисы обмена данными (сетевые демоны, отладочные сервисы).

Интерфейсы: внутренние (UART, JTAG, SPI, I2C - доступны после вскрытия корпуса), физические (USB, Ethernet - доступны снаружи), беспроводные (Wi-Fi, BLE, Zigbee, Z-Wave) и пользовательские (веб-панель, дисплей, камера).

Для скоупинга пентеста ISTG использует модель атакующего с двумя осями:

Уровень физического доступаОписаниеПример
Уровень 1 (удалённый)Нет физического доступа, атака через интернетShodan, облачный API
Уровень 2 (близость)Находится вблизи устройства, атака из LAN/WLANWi-Fi, Bluetooth
Уровень 3 (физический, неинвазивный)Устройство в руках, корпус закрытUSB, кнопки, внешние порты
Уровень 4 (физический, инвазивный)Корпус вскрыт, доступ к PCBUART, JTAG, дамп флеш-памяти

Примечание: приведена упрощённая авторская адаптация модели OWASP ISTG.

Уровень авторизацииОписание
AA-1Анонимный доступ (без учётных данных)
AA-2Обычный пользователь
AA-3Привилегированный пользователь / администратор
AA-4Производитель / root-доступ (максимальные привилегии)

На пересечении этих осей определяется, какие компоненты попадают в скоуп. IP-камера на стене здания - Уровень 2/AA-1: тестируем беспроводные интерфейсы, сетевые сервисы, веб-панель. Умное устройство, которое атакующий может купить и разобрать дома, - Уровень 4/AA-3: тестируем всё, включая чипы памяти и отладочные интерфейсы на плате.

Этот этап - не формальность. Без чёткого скоупинга пентест IoT превращается в хаотичное тыканье nmap-ом в устройство с последующим «уязвимостей не обнаружено» в отчёте. Видел такие отчёты - на устройстве потом находили открытый UART с рутом.

Разведка и fingerprinting IoT-инфраструктуры​

1780406461885.webp

Разведка IoT-устройств начинается задолго до физического контакта. Первый шаг - определить, что именно перед нами.

Внешняя разведка (PA-1). Для устройств, торчащих в интернет, Shodan и Censys - стандартные точки входа. Запрос http.title:"Camera" country:"RU" в Shodan выдаёт тысячи результатов с открытыми веб-интерфейсами. По MITRE ATT&CK это Search Open Technical Databases (T1596, Reconnaissance; также релевантна T1595.002 - Vulnerability Scanning). Но Shodan - только начало. Полезнее смотреть FCC ID устройства: каждое радиоизлучающее устройство, продаваемое в США, проходит сертификацию FCC, и в открытом доступе лежат фотографии внутренностей - PCB, чипы, антенны. Это Gather Victim Host Information: Hardware (T1592.001) / Firmware (T1592.003) - ещё не вскрыв корпус, вы знаете, какой процессор стоит внутри и где на плате искать UART.

Локальная разведка (PA-2). В сегменте локальной сети сканирование nmap -sV -O --script=banner <target> выявляет открытые порты и баннеры сервисов. IoT-устройства часто выдают себя характерными fingerprint-ами: lighttpd, uhttpd, GoAhead-Webs, Boa HTTPd в качестве веб-сервера. Открытые порты 1883 (MQTT без TLS), 5683 (CoAP) или нестандартные порты в диапазоне 8000-9000 - типичные маркеры.

Для Zigbee и Z-Wave устройств нужен SDR-приёмник или специализированный адаптер (CC2531 для Zigbee, RTL-SDR для разведки частотного диапазона). Wireshark имеет встроенный диссектор Zigbee. Для захвата трафика - KillerBee (zbdump) с адаптером CC2531. Well-known Trust Center Link Key ZigBeeAlliance09 позволяет расшифровать join-процедуру и вытянуть network key для последующей расшифровки трафика. Да, ключ лежит прямо в спецификации - и да, это работает.

Что собирать. На этом этапе фиксируется: модель устройства, версия прошивки (часто видна в веб-интерфейсе или баннере), открытые порты и сервисы, используемые протоколы, наличие стандартных учётных данных. Всё это определяет дальнейший вектор.

Аппаратный пентест: UART, JTAG и дампы памяти

1780406747761.webp

Здесь начинается территория, которую русскоязычные материалы почти не покрывают. Аппаратный пентест - это PA-4 по модели ISTG и прямой путь к OWASP IoT Top 10 2018 I10 (Lack of Physical Hardening) и I1 (Weak, Guessable, or Hardcoded Passwords).

Требования к окружению​

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

JTAG и дамп флеш-памяти​

JTAG даёт более глубокий доступ - вплоть до пошаговой отладки процессора. JTAGulator подключается ко всем подозрительным контактным площадкам и через BYPASS/IDCODE-сканирование определяет распиновку TDI/TDO/TCK/TMS. OpenOCD подключается к найденному интерфейсу и позволяет читать/записывать память, останавливать процессор и копаться в регистрах.

Для устройств, где UART заблокирован, а JTAG отключён через fuse bits, остаётся прямой дамп флеш-чипа. Программатором CH341A или Dediprog снимается полное содержимое SPI/NOR-флеш. Команда flashrom -p ch341a_spi -r dump.bin создаёт побайтовую копию. Дальше - анализ прошивки.

Анализ прошивки IoT-устройства​

Прошивка - центральный элемент тестирования безопасности IoT. По классификации ISTG это компонент ISTG-FW, и он делится на две части: установленная прошивка (ISTG-FW[INST]) и механизм обновления (ISTG-FW[UPDT]).

Первый шаг - извлечение файловой системы. Если у вас уже есть дамп (с UART, через веб-интерфейс обновления или через CH341A), binwalk находит и распаковывает всё автоматически:
Bash:
binwalk -e firmware.bin
# Результат: _firmware.bin.extracted/ с файловой системой SquashFS/JFFS2
Что искать внутри:
  • Захардкоженные учётные данные (T1552.001, Credential Access): strings firmware.bin | grep -i -E 'pass|pwd|key|secret|token' - первая команда, не последняя. Firmwalker автоматизирует этот процесс, проверяя shadow, passwd, конфигурационные файлы, SSL-сертификаты и приватные ключи.
  • Устаревшие компоненты (OWASP IoT I5): проверка версий BusyBox, OpenSSL, ядра Linux через strings и grep. Устройства с BusyBox 1.19 и OpenSSL 1.0.1 - регулярная находка в 2025 году. Не исключение, а норма.
  • Отладочные функции в бинарниках: Ghidra помогает найти скрытые backdoor-аккаунты и отладочные эндпоинты, которые не видны через веб-интерфейс. На одном проекте так нашли скрытый CGI-эндпоинт с command injection - его не было ни в документации, ни в веб-интерфейсе.
  • Механизм обновления (OWASP IoT I4): скачивается ли прошивка по HTTP или HTTPS? Проверяется ли цифровая подпись перед установкой? Возможен ли downgrade до уязвимой версии?
Для динамического анализа прошивку можно эмулировать. FirmAE и Firmadyne разворачивают образ прошивки в QEMU, позволяя взаимодействовать с веб-интерфейсом и сетевыми сервисами устройства без физического доступа к железу. Но применимость ограничена: прошивки с нестандартными драйверами или проприетарными аппаратными абстракциями часто не поднимаются в эмуляторе. Примерно каждая третья прошивка требует ручного допиливания QEMU-конфигурации.

Сетевой уровень: перехват и атаки на IoT-протоколы​

Сетевой анализ - OWASP IoT I7 (Insecure Data Transfer and Storage) и I2 (Insecure Network Services). По MITRE ATT&CK - Network Sniffing (T1040, Discovery/Credential Access).

MQTT без аутентификации​

MQTT - де-факто стандарт обмена сообщениями между IoT-устройствами. Проблема: в тестируемых IoT-инсталляциях брокеры нередко работают без аутентификации и без TLS. Подключение к такому брокеру тривиально:
Bash:
mosquitto_sub -h <broker_ip> -t '#' -v
# Подписка на все топики - видим все сообщения от всех устройств
В моей практике через открытый MQTT-брокер удавалось получить: координаты GPS-трекеров, показания медицинских датчиков, команды управления промышленными контроллерами. Один раз - полные credentials для облачного API прямо в MQTT-сообщении. Открытым текстом. В 2024 году.

CoAP и проприетарные протоколы​

CoAP (порт 5683/UDP) - легковесная альтернатива HTTP для constrained devices. Wireshark декодирует CoAP нативно. Zeek с плагинами позволяет писать правила для обнаружения аномалий в IoT-трафике. Проприетарные бинарные протоколы на нестандартных портах требуют реверса: запись трафика в pcap, анализ структуры пакетов, идентификация паттернов. Тут терпение важнее инструментов.

На что обращать внимание​

ПротоколПортТипичная уязвимостьOWASP IoT
MQTT1883Нет аутентификации, plaintextI2, I7
MQTT/TLS8883Самоподписанные сертификатыI7
CoAP5683Отсутствие DTLSI7
HTTP (веб-панель)80/8080Command injection, default credsI1, I3
Telnet23Default credentials, plaintextI1, I9
UPnP/SSDP1900Раскрытие информации, RCEI2

Эксплуатация веб-интерфейсов и API​

Большинство IoT-устройств предоставляют веб-интерфейс для управления - и это один из самых дырявых компонентов. По MITRE ATT&CK - Exploit Public-Facing Application (T1190, Initial Access) и Password Guessing (T1110.001, Credential Access).

Встроенные веб-серверы (GoAhead, uhttpd, lighttpd, Boa) часто содержат уязвимости, которые давно закрыты в «большом» вебе, но живут десятилетиями в прошивках: command injection через параметры диагностических утилит (ping, traceroute), directory traversal, SSRF через функции обновления.

Конкретная цепочка, которую я воспроизводил неоднократно:
  1. Подбор стандартных учётных данных (OWASP IoT I9 - Insecure Default Settings). Списки дефолтных паролей для IoT-устройств собраны в SecLists/Passwords/Default-Credentials.
  2. Если веб-интерфейс содержит форму диагностики (ping, DNS lookup) - проверка command injection: ; id, | cat /etc/shadow, [ICODE], whoami.
  3. Анализ API-запросов через Burp Suite: часто встречается отсутствие авторизации на API-эндпоинтах - IDOR, mass assignment, доступ к чужим устройствам через перебор серийных номеров.
  4. Проверка механизма обновления прошивки: если устройство скачивает обновление по HTTP без верификации подписи (OWASP IoT I4) - возможна подмена прошивки через MITM.
  5. Для устройств, чьи веб-интерфейсы доступны из интернета, Metasploit содержит модули для ряда популярных IoT-платформ. В msfconsole команда search type:exploit iot покажет доступные эксплойты; search type:exploit router и search type:exploit camera - дополнительные модули для конкретных классов устройств. Контекст применения: decision tree выбора вектора
Выбор вектора атаки на IoT-устройство зависит от условий проекта. Ниже - схема, которую я использую для приоритизации:

УсловиеВекторИнструментыOWASP IoT
Устройство в руках, корпус можно вскрытьUART → root-шелл → дамп прошивкиBus Pirate, minicom, binwalkI10, I1
Устройство в руках, корпус sealed/tamper-proofДамп прошивки через OTA-обновление + сетевой анализbinwalk, Wireshark, Burp SuiteI4, I7
Устройство в LAN, физического доступа нетСканирование портов → веб-интерфейс → MQTT/CoAPnmap, Burp Suite, mosquitto_subI2, I3, I9
Устройство доступно из интернетаShodan recon → веб-эксплуатация → облачный APIShodan, Burp Suite, MetasploitI3, I9
Есть образ прошивки (с сайта производителя)Статический анализ → эмуляция → поиск 0daybinwalk, Ghidra, FirmAEI5, I1

Принцип простой: если есть физический доступ - начинайте с железа. UART-шелл за 15 минут даёт больше информации, чем три дня фаззинга веб-интерфейса. Если физического доступа нет - прошивка с сайта производителя + сетевой анализ закрывают большую часть скоупа.
Ограничения и где методология ломается
Не каждое IoT-устройство поддаётся описанному процессу. Ограничения, с которыми я сталкиваюсь регулярно:
  • Проприетарные RTOS. Устройства на FreeRTOS, Zephyr или полностью кастомных прошивках без Linux-ядра не распаковываются binwalk-ом. Нужен полный реверс в Ghidra с нуля - это дни работы, не часы. На одном проекте мы потратили четыре дня только на то, чтобы разобраться в формате файловой системы.
  • Защищённые чипы. Процессоры с Secure Boot, TrustZone и прожжёнными fuse bits блокируют чтение прошивки и отключают JTAG. Обход требует glitching-атак (voltage fault injection) - специализированное оборудование (ChipWhisperer, ~$250-350) и экспертиза. Это уже не «подключился и снял дамп», а исследовательская работа.
  • Encrypted firmware. Если прошивка зашифрована и ключ не извлекается из bootloader-а - статический анализ невозможен без аппаратных атак на криптографию.
  • Эмуляция. FirmAE и Firmadyne работают с ~70% прошивок на базе GNU/Linux. Остальные 30% требуют ручной настройки QEMU или не эмулируются вовсе из-за завязки на проприетарные аппаратные модули.
Эти ограничения не означают, что пентест невозможен - они означают, что скоуп и бюджет должны учитывать реальную сложность устройства. Двухдневный IoT-пентест покрывает сетевой уровень и поверхностный анализ прошивки. Полноценное тестирование с аппаратным уровнем и реверсом - минимум неделя на одно устройство.

Заключение​

За семь лет работы с embedded-системами я пришёл к выводу, что главная проблема безопасности IoT - не сложность атак, а элементарность большинства находок. Захардкоженные пароли, открытый UART с root-шеллом, MQTT без аутентификации, обновления по HTTP - всё это OWASP IoT Top 10 2018 категории I1 и I9, и они покрывают подавляющее большинство реальных уязвимостей. Производители embedded-устройств в массе своей до сих пор не прошли тот путь, который веб-разработка прошла десять лет назад.

Фреймворк работает только если им пользуются. Пока я вижу, что даже в отчётах крупных ИБ-компаний IoT-пентест сводится к «просканировали Nmap-ом, нашли дефолтный пароль» - без аппаратного уровня, без анализа прошивки, без тестирования радиопротоколов. Это не пентест IoT - это пентест сетевого стека устройства, который совпадает с IoT только по названию. Если хочется разобраться, как полная цепочка от UART до root-шелла собирается на практике - задачи в категориях hardware и IoT на HackerLab.pro построены на похожих сценариях с реальным оборудованием.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab