
58
Слушай, хочешь по-настоящему прокачаться в поиске уязвимостей IoT и роутеров? Тогда тебе нужна своя коллекция уязвимых прошивок для практики. Это как тренажерка для хакера — безопасная песочница, где можно ломать, не боясь последствий.
Где добыть прошивки
Официальные сайты производителей — первая точка входа. Почти все вендоры выкладывают обновления firmware в открытый доступ: TP-Link, D-Link, Asus, Netgear и другие. Просто заходи в раздел поддержки, находи свою модель устройства и качай архивы .bin или .img.
Специализированные базы данных дают золотую жилу для исследователей. Сервисы вроде firmware.re позволяют загружать и анализировать прошивки онлайн, автоматически выявляя уязвимости и бэкдоры. Это отличный способ быстро проверить firmware перед глубоким анализом.
Извлечение напрямую с устройства — хардкорный метод. Если у тебя есть физический доступ к роутеру или IoT-девайсу, можно дампить прошивку через UART, JTAG или напрямую считывать чип памяти программатором. Это даёт самую свежую и “живую” версию firmware.
Безопасная работа с прошивками
Изолированная среда — это обязательное условие. Никогда не анализируй прошивки на основной машине или в сети с важными данными. Разворачивай виртуалку на VirtualBox или VMware, отключай сетевые адаптеры или используй отдельный физический хост без доступа к интернету.
Проверка источников помогает избежать заражения. Скачивай firmware только с официальных сайтов или проверенных репозиториев. Перед распаковкой проверяй хеши файлов, если они предоставлены вендором — это защитит от модифицированных версий с вредоносом.
Документирование находок — профессиональный подход. Создай таблицу с информацией о каждой прошивке: модель устройства, версия firmware, известные CVE, дата релиза, архитектура процессора. Это сэкономит кучу времени при повторном обращении к архиву.
Лайфхак: создание архива уязвимых firmware
Организация коллекции требует структуры . Вот как я делаю свой архив:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mkdir -p ~/firmware_archive/{routers,iot_devices,cameras,nvr} cd ~/firmware_archive # Структура для каждого устройства # firmware_archive/ # ├── routers/ # │ ├── dlink/ # │ │ ├── DIR-815_v1.0_firmware_v2.01.bin # │ │ └── metadata.txt # │ ├── tplink/ # │ └── netgear/ # ├── iot_devices/ # └── cameras/ |
Автоматизация сбора упрощает жизнь. Напиши простой скрипт для массовой загрузки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import requests from bs4 import BeautifulSoup import os def download_firmware(vendor_url, save_path): """Парсит страницу вендора и качает все .bin файлы""" response = requests.get(vendor_url) soup = BeautifulSoup(response.content, 'html.parser') for link in soup.find_all('a', href=True): href = link['href'] if href.endswith(('.bin', '.img', '.zip')): firmware_url = vendor_url + href filename = os.path.join(save_path, href.split('/')[-1]) print(f"[+] Downloading: {filename}") fw_data = requests.get(firmware_url) with open(filename, 'wb') as f: f.write(fw_data.content) # Пример использования download_firmware("https://www.dlink.com/support/downloads/", "./routers/dlink/") |
Метаданные — критически важны. Для каждой прошивки создавай файл metadata.txt:
|
1 2 3 4 5 6 7 |
Device: D-Link DIR-815 Version: 2.01 Architecture: MIPS Known CVEs: CVE-2019-17621, CVE-2020-9376 Download Date: 2025-11-15 Source: https://support.dlink.com/... Notes: Hardcoded credentials in telnet service |
Настройка QEMU для эмуляции
Установка QEMU — первый шаг к эмуляции. На Ubuntu или Debian ставится одной командой:
|
1 2 3 |
sudo apt update sudo apt install qemu qemu-system qemu-system-arm qemu-system-mips \ qemu-system-x86 qemu-user qemu-user-static qemu-utils binwalk |
Извлечение файловой системы делается через binwalk. Этот инструмент — швейцарский нож для анализа firmware:
|
1 2 3 4 5 6 7 8 9 10 11 |
# Сканируем прошивку на предмет файловых систем binwalk firmware.bin # Автоматическое извлечение всех компонентов binwalk -e firmware.bin # Рекурсивная распаковка вложенных архивов binwalk -Me firmware.bin # Анализ энтропии (поиск шифрования/сжатия) binwalk -E firmware.bin |
После извлечения получишь папку _firmware.bin.extracted/ с полной файловой системой.
Chroot-эмуляция — быстрый способ запуска. Если нужно просто запустить один бинарник из прошивки:
|
1 2 3 4 5 6 7 8 9 10 |
# Копируем QEMU-бинарник нужной архитектуры в rootfs sudo cp /usr/bin/qemu-arm-static extracted_rootfs/usr/bin/ # Монтируем служебные директории sudo mount -o bind /dev extracted_rootfs/dev sudo mount -o bind /proc extracted_rootfs/proc sudo mount -o bind /sys extracted_rootfs/sys # Делаем chroot в файловую систему прошивки sudo chroot extracted_rootfs /bin/sh |
Теперь можешь запускать бинарники ARM/MIPS прямо на x86 хосте.
Полная эмуляция системы требует больше настроек . Для запуска всей прошивки как отдельной VM:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Создаём виртуальный диск и копируем туда rootfs qemu-img create -f qcow2 firmware_disk.qcow2 2G sudo modprobe nbd max_part=8 sudo qemu-nbd --connect=/dev/nbd0 firmware_disk.qcow2 sudo mkfs.ext4 /dev/nbd0 sudo mount /dev/nbd0 /mnt sudo cp -r extracted_rootfs/* /mnt/ sudo umount /mnt sudo qemu-nbd --disconnect /dev/nbd0 # Запускаем QEMU с правильной архитектурой qemu-system-arm -M vexpress-a9 -kernel vmlinuz -initrd initrd.img \ -drive if=sd,file=firmware_disk.qcow2 -append "root=/dev/mmcblk0 console=ttyAMA0" \ -net nic -net user,hostfwd=tcp::8080-:80 -nographic |
FirmAE и Firmware Analysis Toolkit автоматизируют эмуляцию. Это готовые фреймворки с набором скриптов и предконфигурированных ядер для разных архитектур:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Клонируем FirmAE git clone --recursive https://github.com/pr0v3rbs/FirmAE.git cd FirmAE ./download.sh # Запускаем эмуляцию прошивки ./run.sh -r firmware.bin # Firmware Analysis Toolkit (FAT) git clone https://github.com/attify/firmware-analysis-toolkit.git cd firmware-analysis-toolkit ./setup.sh ./fat.py firmware.bin |
FirmAE автоматически определит архитектуру, извлечёт файловую систему, настроит сетевые интерфейсы и запустит все сервисы из прошивки.
Дебаггинг в QEMU — финальный босс. Подключаем GDB для анализа уязвимостей:
|
1 2 3 4 5 6 7 8 9 10 |
# Запускаем QEMU с GDB-сервером qemu-system-arm -M vexpress-a9 -kernel vmlinuz -initrd initrd.img \ -drive if=sd,file=firmware_disk.qcow2 -append "root=/dev/mmcblk0" \ -net nic -net user -s -S # В другом терминале запускаем GDB gdb-multiarch (gdb) target remote localhost:1234 (gdb) break main (gdb) continue |
Теперь можешь ставить брейкпоинты, отслеживать выполнение кода и искать баги прямо в эмулированной прошивке.
Практические сценарии
Поиск жёстко зашитых учёток — классика жанра. После извлечения файловой системы:
|
1 2 3 4 5 6 7 |
# Ищем hardcoded credentials grep -r "admin" extracted_rootfs/etc/ grep -r "password" extracted_rootfs/etc/shadow grep -r "root:" extracted_rootfs/etc/passwd # Поиск ключей и сертификатов find extracted_rootfs -name "*.pem" -o -name "*.key" |
Анализ web-интерфейса на предмет command injection:
|
1 2 3 4 5 6 7 |
# Находим CGI-скрипты find extracted_rootfs -name "*.cgi" -o -name "*.php" # Проверяем на небезопасные функции grep -r "system(" extracted_rootfs/www/ grep -r "exec(" extracted_rootfs/www/ grep -r "popen(" extracted_rootfs/www/ |
Reverse engineering бинарников для поиска buffer overflow:
|
1 2 3 4 5 |
# Смотрим защиты бинарника checksec --file=extracted_rootfs/usr/sbin/httpd # Дизассемблируем в Ghidra или IDA ghidra extracted_rootfs/usr/sbin/httpd |
Вот и всё — теперь у тебя есть полноценная лаборатория для практики. Собирай коллекцию, эмулируй, ломай и прокачивай скилл. Главное — делай это в изолированной среде и документируй все находки. Удачной охоты за багами!