Программатор CH341A с зажимом SOIC-8 подключён к выпаянной микросхеме флеш-памяти роутера на антистатическом коврике. Тёплый свет настольной лампы выхватывает контакты на фоне тёмно-бирюзовых теней...


Полгода назад на пентесте IoT-инфраструктуры промышленного заказчика я снял дамп SPI-флеш с роутера через CH341A - за первые двадцать минут binwalk нашёл в конфигах три пароля в plaintext. Два из них давали telnet root shell без какой-либо аутентификации. Устройство стояло на периметре, с белым IP, доступное из интернета. Это не аномалия: подобные артефакты регулярно встречаются в прошивках SOHO-роутеров и превращают устройство в готовый initial access без единого эксплойта. Запрет TP-Link в США только подсветил проблему, но не решил её - ниже разбираем, как проводить аудит прошивки роутера руками, от получения образа до готового чеклиста.

Запрет TP-Link в США и уязвимости роутеров: контекст для пентестера​

В 2024–2025 годах вокруг TP-Link развернулось политическое расследование: CISA и ряд американских ведомств подняли вопрос о supply chain рисках. По MITRE ATT&CK это T1195.003 (Compromise Hardware Supply Chain, Initial Access) - сценарий, где скомпрометированное оборудование становится точкой входа ещё до подключения к сети. Суть претензий - не конкретный бэкдор в прошивке, а системная непрозрачность firmware-разработки, медленная реакция на CVE и факты использования скомпрометированных устройств TP-Link в ботнетах. Подробнее - в нашем статье о уязвимости iot устройств.

Для пентестера эта история важна не политикой, а практикой: производители массового сетевого оборудования раз за разом наступают на одни и те же грабли. Hardcoded credentials, открытые debug-интерфейсы (telnet на нестандартном порту, UART shell без пароля), устаревшие компоненты - особенно Realtek SDK, на базе которого построены прошивки десятков OEM-производителей. Одна дыра в SDK транслируется в сотни моделей от разных брендов. По OWASP это A05:2021 (Security Misconfiguration) и A06:2021 (Vulnerable and Outdated Components) в чистом виде.

Вопрос не в том, можно ли доверять TP-Link. Те же проблемы встречаются у Netgear, D-Link, Tenda, в ряде случаев - у Asus. Аудит прошивки роутера - обязательный этап при пентесте любой сети с SOHO-оборудованием на периметре. Производитель вторичен.

Место firmware-аудита в цепочке атаки на сетевое оборудование​

Роутер на периметре - не просто сетевое устройство. Это полноценный Linux-хост с root-доступом, через который проходит весь трафик сегмента. Бизнес-логика атаки: компрометация роутера даёт злоумышленнику pivot point для входа во внутреннюю сеть, перехват трафика (включая DNS hijacking для фишинга) и persistence, переживающий переустановку ОС на подключённых хостах.

Вот как аудит прошивки встраивается в kill chain при пентесте сетевого оборудования:
  1. Recon / fingerprinting - определяем модель и версию firmware. Nmap с флагами --script http-title,http-server-header, доступ к веб-интерфейсу, Shodan/Censys для внешнего скана.
  2. Получение firmware - скачиваем с FTP/HTTP вендора, снимаем с устройства через UART/SPI или перехватываем при обновлении.
  3. Статический анализ - распаковка, поиск хардкод-кредлов, debug-эндпоинтов, reverse engineering бинарей в Ghidra.
  4. Эмуляция / динамический анализ - запуск firmware в QEMU, фаззинг веб-интерфейса, тестирование найденных эндпоинтов.
  5. Exploitation / initial access (T1190, Exploit Public-Facing Application) - эксплуатация найденных уязвимостей: command injection в веб-интерфейсе, аутентификация через хардкод-пароли, доступ через debug-порт.
  6. Persistence через firmware (T1542.001, System Firmware - Defense Evasion, Persistence) - проверяем возможность закрепления: модификация системного образа (T1601, Modify System Image), патч прошивки (T1601.001, Patch System Image), даунгрейд до уязвимой версии (T1601.002, Downgrade System Image).
  7. Lateral movement - скомпрометированный роутер используется для pivot'а: доступ к внутренним сегментам, ARP spoofing, DNS hijacking. Противник может также использовать его как часть внешней инфраструктуры для будущих операций - по MITRE ATT&CK это T1584.008 (Network Devices, тактика Resource Development).

Экстракция и распаковка firmware: пошаговый workflow​

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

и выгрузка через TFTP или netcat.

Метод 4: SPI flash dump через CH341A. Последнее средство, когда нет ни обновлений на сайте, ни UART-доступа. Подключаем SOIC8-клипсу к чипу флеш-памяти (обычно Winbond 25Qxx или Macronix MX25L), читаем командой flashrom -p ch341a_spi -r dump.bin. Надёжно, но требует вскрытия корпуса, а иногда и отпаивания чипа.

Метод 5: из bootloader'а. При доступе к U-Boot через UART можно снять дамп через TFTP без возни с flash напрямую. Команды зависят от конкретной конфигурации U-Boot, но типичная последовательность: md.b <addr> <len> для просмотра небольших участков памяти (проверить magic bytes), а для полноценной выгрузки - sf read / nand read для копирования flash в RAM с последующим tftp put на TFTP-сервер атакующего.

Анализ энтропии: определение шифрования в firmware​

Первый шаг после получения образа - проверка энтропии: binwalk -E firmware.bin. По данным Payatu (анализ D-Link DIR-822), если энтропия близка к 1.0 на всём протяжении файла - образ зашифрован или сжат целиком. Если значение скачет (низкая энтропия в начале, высокая в середине, снова падение) - нормальная структура: код загрузчика + сжатая файловая система (squashfs/cramfs). Именно этот паттерн характерен для большинства незашифрованных прошивок MIPS-роутеров.

Binwalk v3 (полностью переписанный на Rust) заметно быстрее и точнее предыдущих Python-версий на больших образах. Unblob лучше справляется с нестандартными контейнерами, характерными для китайских чипсетов (HiSilicon, Realtek) - если binwalk буксует, пробуем его. Стандартная распаковка: binwalk -e firmware.bin создаёт директорию с извлечённой файловой системой.

Анализ прошивки: поиск уязвимостей роутеров​

Статический анализ: бэкдоры и хардкод-пароли в firmware

После экстракции файловой системы (squashfs в 90% случаев для MIPS-роутеров) начинается охота за артефактами. Приоритет - от самого быстрого к самому трудоёмкому:

1. Хардкод-пароли и ключи. Файлы etc/shadow, etc/passwd, конфигурации в etc/config/ (для OpenWrt-based прошивок), скрипты в usr/sbin/. В прошивках на базе Realtek SDK хардкод-пароли нередко зашиты внутри ELF-бинарей - тут без strings с последующим анализом в Ghidra не обойтись.

2. Debug-интерфейсы. Ищем telnetd, dropbear (SSH) с пустым паролем или запуск без аутентификации в init-скриптах (etc/init.d/, etc/rc.d/). Типичный паттерн: telnetd запускается на нестандартном порту (23023, 26000) и не отображается в веб-интерфейсе. Классический A05:2021 (Security Misconfiguration).

3. Устаревшие компоненты. Прогоняем strings по основным бинарям - вылезут версии BusyBox, OpenSSL, libcurl, ядра Linux. Каждую версию сверяем по NVD (nvd.nist.gov). BusyBox до 1.36 и OpenSSL до 3.x нередко имеют известные CVE.

4. Command injection в веб-интерфейсе. CGI-бинари в usr/lib/cgi-bin/ или Lua-скрипты в usr/lib/lua/ - основная attack surface. Ищем вызовы system(), popen(), execve() с конкатенацией пользовательского ввода через Ghidra-декомпиляцию MIPS-бинарей httpd-демона. Это A03:2021 (Injection).
Bash:
# Базовый поиск хардкод-паролей в распакованной файловой системе
find ./squashfs-root -type f \( -name "*.conf" -o -name "*.sh" \) \
  -exec grep -l -i "password\|secret\|key\|token" {} \;
# Поиск бинарей с вызовами system/popen (потенциал command injection)
grep -rl "system\|popen" ./squashfs-root/usr/sbin/ 2>/dev/null
# Проверка init-скриптов на запуск debug-сервисов
grep -rn "telnetd\|dropbear" ./squashfs-root/etc/init.d/

Эмуляция и динамический анализ firmware​

Статический анализ даёт артефакты, но для подтверждения эксплуатабельности нужна эмуляция. Firmadyne (и его форк FirmAE) автоматизирует запуск Linux-based firmware в QEMU: создаёт виртуальную сеть, эмулирует NVRAM, поднимает веб-интерфейс. Процесс через FAT (Firmware Analysis Toolkit): ./fat.py firmware.bin - извлечение файловой системы, определение архитектуры (MIPS/ARM), настройка QEMU-образа, запуск эмуляции. После запуска роутер доступен по IP в виртуальной сети и тестируется стандартными инструментами: Burp Suite для веб-интерфейса, ручной fuzzing CGI-эндпоинтов.

Оговорка: success rate у firmadyne - 40-60%, с ARM-прошивками дела обстоят хуже, чем с MIPS. Если полная эмуляция не взлетела - есть QEMU user-mode для отдельных бинарей: qemu-mips -L ./squashfs-root ./squashfs-root/usr/sbin/httpd. Параметр -L указывает корневую файловую систему для загрузки зависимостей - аналог chroot, но для кросс-архитектуры.

Расшифровка защищённых прошивок: firmware diffing​

Ряд вендоров (D-Link, и постепенно TP-Link) перешёл на шифрование firmware-образов. По данным Payatu (анализ D-Link DIR-822 US variant), типичный подход: вендор выпускает «transition version» - промежуточную прошивку, ещё не зашифрованную, но уже содержащую утилиту дешифрования для последующих обновлений.

Техника firmware diffing: берём две соседние версии (последнюю незашифрованную и первую зашифрованную), распаковываем обе файловые системы и сравниваем через diff -rq или kdiff3. Ищем новые бинари с именами вроде encimg, fw_decrypt, imgdecrypt. В случае DIR-822 бинарь encimg принимал параметры -d -i <firmware_path> -s <image_sign>, где image_sign хранился в /etc/config/image_sign - по сути хардкод-ключ для AES. Шифрование есть, а ключ лежит рядом. Ну красота.

Предусловия: работает если вендор использует симметричное шифрование с ключом в прошивке. Не работает если применяется PKI с аппаратной верификацией подписи (Secure Boot на базе eFuse) - это встречается в enterprise-оборудовании (Cisco, Juniper, Fortinet), но крайне редко в SOHO-сегменте.

Сравнение инструментов анализа прошивки​

ИнструментНазначениеПреимуществаОграниченияКогда использовать
binwalk v3Распаковка, энтропияБыстрый (Rust), де-факто стандартFalse positives на нестандартных форматахПервичный анализ любого firmware
unblobРаспаковкаЛучше с нестандартными контейнерамиМенее зрелый, документация скуднаяКогда binwalk не справляется
GhidraРеверс бинарейБесплатный, MIPS/ARM декомпиляцияМедленнее IDA Pro на больших бинаряхАнализ httpd, CGI, crypto-бинарей
firmadyne/FirmAEЭмуляция firmwareАвтоматизация QEMUSuccess rate 40-60%, ARM хуже MIPSДинамический анализ веб-интерфейса
CH341A + flashromSPI flash dumpНадёжный дамп без софт-доступаТребует вскрытия корпусаНет доступа к firmware иным способом
radare2/rizinРеверс, скриптыСкриптуемость, CLI-workflowВысокий порог входаBatch-анализ нескольких бинарей

Ограничения firmware-аудита в современных средах​

Secure Boot и signed firmware. Enterprise-роутеры (Cisco ISR, Juniper SRX, Fortinet FortiGate) используют аппаратную верификацию подписи. Модификация образа (T1601.001, Patch System Image) детектируется на уровне загрузчика. SOHO-устройства в подавляющем большинстве этой защиты не имеют - тут вольница.

Cloud-managed firmware. Устройства с облачным управлением (Ubiquiti UniFi, TP-Link Omada) обновляются автоматически, прошивка верифицируется контроллером. Снижает window of exposure, но не исключает уязвимости в обновлённом образе - обновили, а дыру не закрыли, бывает.

RTOS и bare-metal. Часть IoT-устройств работает не на Linux, а на FreeRTOS, ThreadX, Zephyr. Binwalk и firmadyne к ним неприменимы - нужен анализ через Ghidra с ручной разметкой адресного пространства. Это другой класс задач, выходящий за рамки описанного workflow.

Отсутствие логирования. По OWASP A09:2021 (Security Logging and Monitoring Failures), подавляющее большинство SOHO-роутеров не логируют firmware-модификации. Даже если злоумышленник полностью заменит прошивку (T1495, Firmware Corruption), обнаружить это через штатные механизмы устройства почти невозможно. Единственный выход - внешний мониторинг: периодическое снятие хеша прошивки через JTAG/UART и сравнение с эталоном.

Чеклист аудита безопасности сетевого оборудования​

Готовый чеклист для включения в отчёт по пентесту или передачи сетевым администраторам:
  1. Идентификация устройства: модель, аппаратная ревизия, текущая версия firmware. Проверить на сайте вендора наличие обновлений.
  2. Проверка известных CVE: сверить версию firmware с базой NVD (nvd.nist.gov) и вендорскими advisory. Неустранённые CVE - critical finding.
  3. Экстракция firmware: получить образ одним из методов (FTP вендора, UART, SPI dump). Проверить энтропию через binwalk -E.
  4. Распаковка файловой системы: binwalk -e или unblob. Убедиться в наличии squashfs/cramfs/jffs2.
  5. Поиск хардкод-паролей: проверить etc/shadow, etc/passwd, конфигурационные файлы, строки в бинарях httpd/cgi.
  6. Аудит debug-интерфейсов: проверить init-скрипты на запуск telnetd/dropbear без аутентификации, наличие UART shell и JTAG-пинов на плате.
  7. Проверка устаревших компонентов: извлечь версии BusyBox, OpenSSL, libcurl, ядра Linux; сверить с CVE-базами.
  8. Анализ веб-интерфейса: проверить CGI/Lua-обработчики на command injection, directory traversal, auth bypass. Приоритет - бинари httpd, goahead, lighttpd.
  9. Эмуляция (если применимо): запустить firmware через firmadyne/FAT, подтвердить найденные уязвимости в динамике.
  10. Проверка механизма обновления: HTTP или HTTPS? Есть ли проверка подписи firmware? Возможен ли даунгрейд до уязвимой версии (T1601.002)?
  11. Документирование: зафиксировать findings с указанием severity, шагов воспроизведения и рекомендаций. Привязать к MITRE ATT&CK ID и OWASP-категориям.
За последние два года я провёл больше двадцати firmware-аудитов для устройств пяти разных вендоров - крайне редко встречал прошивку SOHO-роутера, которая прошла бы все пункты этого чеклиста без замечаний. Проблема не в конкретном TP-Link или D-Link - проблема в том, что индустрия SOHO-оборудования относится к firmware security как к задаче «когда-нибудь потом». Запрет одного вендора ничего не меняет: пока производители не внедрят verified boot и подписанные обновления по умолчанию, любой роутер за 2000–5000 рублей - готовая точка входа.

Отдельно про Realtek SDK, через который построены прошивки десятков OEM-брендов. Одна уязвимость в SDK множится на сотни моделей от разных вендоров - это supply chain в чистом виде (T1195.003), и политические решения её не закрывают. Закрывает только аудит конкретного железа, которое стоит в вашей сети. И ещё момент: формальный чеклист без реального reverse engineering - пустая трата времени. Пока не распаковал squashfs, не прогнал strings по httpd, не проверил init-скрипты на скрытый telnetd - ты не провёл аудит, ты заполнил бумагу. Хочется руки в крови - задачи по reverse engineering ждут на HackerLab.
 
Мы в соцсетях:

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

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab