>
Февраль 2017
Пн Вт Ср Чт Пт Сб Вс
« Янв    
 12345
6789101112
13141516171819
20212223242526
2728  

Взлом роутера D-Link 500T

Сегодня мы раскажем о замечательных ADSL-роутерах – незаменимых в домашних и промышленных сетях железяках. Поведаю тебе о вопросе эксплуатирования этих железок в выгодных для нас целях – вшивании зверского троянца во внутренности маршрутизатора. И таким образом, чтобы это не заметил ни умный админ, ни ушастый юзер.

Когда я писал эту статью, то предполагал, что читать ее будет достаточно продвинутый юзер с установленным GNULinux, который также имеет некоторые навыки работы и программирования в этой операционной системе. Однако представляется возможным повторить мои действия и на Windows (используя Cygwin, например), но это описано не будет. Для получения максимального удовольствия необходимы также навыки владения паяльником (это уже опционально).

Начало..

Итак, все началось с того, как однажды зависла эта самая железка, точнее, она предательски оборвала соединение с интернетом и никак не хотела его восстанавливать. При этом находилась она далеко, физического доступа к ней не было, Web-интерфейс не отзывался, но я вспомнил, что на этой штуковине должен быть telnet или ssh. Заходить в зону администрирования я
ранее не пробовал и опрометчиво не менял пароль к моей учетной записи (как оказалось позже, очень зря, ведь по дефолту он “admin:admin”). Итак, я попробовал SSH, и он работал!

 Как гром среди ясного неба! BusyBox! Никогда не задумывался о том, под чьим управлением находится этот роутер, оказывается – GNU/Linux! Мне стало жутко интересно, как же здесь все работает, и, мысленно благодаря лень и случай, я пустился в исследование.

Сбор информации

Итак, с чего я начал? Конечно, со списка доступных команд:

 Набор вполне вменяем, для нормального исследования и воплощения идей хватит.
Следующим проснулся интерес к версии ядра:

Для справки: MontaVista – дистрибутив, ориентированный на встраиваемые системы. Подавляющее большинство производителей сетевого оборудования отдают предпочтение этой системе. Ее можно найти и на других устройствах, например, в электронных книгах или сотовых телефонах.

Далее меня заинтересовала информация об архитектуре системы:

AR7 – это двухядерный чип, разработанный компанией Texas Instruments. Он содержит полноценный ADSL-роутер на одном чипе, поддерживающий стандарты ADSL1, ADSL2,ADSL2+. Основан на высокопроизводительном RISC процессоре MIPS 4KEc, с тактовой частотой 175 или 233 (в зависимости от технологии производства: 18 мкм или 13 мкм). Чип содержит на борту 2 UART-интерфейса, один из которых (UART_A) используется для вывода отладочной информации, а также EJTAG-интерфейс, служащий для отладки (прошивки) Flash0памяти. Об использовании этих интерфейсов будет рассказано далее.

Напоследок я посмотрел сведения о памяти:

Естественно, не забыв про адреса блоков:

 Из вышеописанного следовало, что Flash-память (/dev/mtdblock) имеет 5 блоков:

mtd0 – образ файловой системы SquashFs. Это специальная файловая система, находящаяся в сжатом состоянии и доступная только для чтения. Для сжатия используется алгоритм gzip, но в данном случае – LZMA (коэффициент сжатия выше). Размер этого блока равен 4 Мб.

mtd1 – этот блок содержит ядро MontaVista в сжатом LZMA алгоритмом состоянии, размер блока 600 Кб.

mtd2 – Bootloader ADAM2, выполняет загрузку ядра, так же имеет сервисный FTP-сервер для восстановления и перепрошивки. Подробнее о нем будет сказано далее. Размер блока равен 64 Кб.

mtd3 – поделен между конфигурационными данными и environment (переменные окружения) блоком, взглянуть на который можно в /proc/ticfg/env. Конфигурационные данные находятся в /etc/config.xml. Посредником между файловой системой блоком конфигурации является закрытая (как и все cm_*, управляющие, о них позже) программа cm_logic. Размер этого блока – также 64 Кб.

mtd4 – здесь содержится сигнатура прошивки, ядро и образ файловой системы. Используется этот блок при обновлении прошивки через Web-интерфейс. Первоначально она складируется в этот блок, потом проверяется контрольная сумма и, если сходится, записывается на свое новое место.

Оперативная память (в этой модели размером 16 Мб, но ADAM2 в этой модели видит только 14 Мб, лечится обновлением), смонтирована к директории /var, и ее спокойно можно использовать в наших целях:

Не забудем пробежаться по списку процессов. Из интересных здесь затаились демоны: thttpd — Web-server; dproxy — кэширующий DNS запросы proxy server; ddnsd — DNS daemon; pppd… – собственно daemon, реализующий подключение по протоколу PPP, а в параметрах мы видим данные учетной записи. Итак, если роутер не прикидывается шлангом (читай – не находится в режиме bridge), то можно с легкостью заполучить учетную запись.

Программы cm_* являются закрытыми и в состав исходных кодов входят уже скомпилированными (эти программы – также разработка Texas Instruments, на D-Link за несоблюдение лицензий ругаться не стоит).

cm_logic – программа управляющая логикой работы системы, через нее проходит конфигурация; производит синхронизацию /etc/config.xml с соответственной частью содержимого /dev/ticfg (указывающего на mtd3).

cm_cli – интерфейс командной строки для управления и конфигурации системы. Например, настройки подключений производятся через этот интерфейс.

cm_pc – выполняет запуск и мониторинг процессов, связи с правилами (например, запускать программу как демон, также в правила входит информация об открываемых портах) описанными в /etc/progdefs.xml; загружается сразу после ядра.

webcm – CGI-интерфейс, дыряв, например позволяет взглянуть на /etc/shadow, просто обратившись по URL.

 Ничего не получил, thttpd не так прост, а вот если так:

 Другое дело. Это можно использовать для сбора информации, если нет доступа к ssh/telnet, но есть доступ к Web-интерфейсу.

firmwarecfg – используется для прошивки через Web-интерфейс. На вход этой программы POST-запросом из Web-интерфейса передается образ, а она уже перенаправляет к Flash-памяти, предварительно проверив контрольную сумму образа.

На этом сбор первичной информации закончен, пора переходить к решительным действиям.

Установка средств разработки и компиляция прошивки

Прошивки роутеров D-Link (да и всех остальных, основанных на GNU/Linux) распространяются под лицензией GPL, получить их можно на официальном FTP-сервере. На самом деле можно выбрать любую из списка предложенных прошивок, они одинаковы (касательно T-серии). В поставке – исходники ядра, окружения, необходимых инструментов и toolchain для разработки/компиляции существующих программ. Его следует распаковать в корень и добавить в переменную окружения PATH путь до bin-директории toolchain`a:

 Теперь, чтобы скомпилировать свою собственную прошивку, заходим в директорию с исходными кодами и выполняем этот самый make.

 Будет заданно множество вопросов о включении поддержки устройств (лучше ответить на них положительно). По окончании компиляции в директории TYLinuxV3/images будут созданы образы прошивки. Также можно запустить скрипт, одноименный с твоей моделью из директории /TYLinuxV3/src/scripts.

Пару слов о передаче файлов между роутером и компьютером. Самый первый способ, который я применил – возможность передачи файлов по протоколу SSH, используя для этого программу scp. Но чуть позже я узнал, что mc (Midnight Commander) также имеет возможность соединяться по SSH (Panel -> Shell connection). Как вариант, можно поднять на своем рабочем месте Web- или FTP-сервер. Позже я отдал предпочтение Web-серверу, ибо работает он наиболее резво. Установил я thttpd, маленький и быстрый, как и на роутере. Запускаем у себя и стягиваем на роутер файл, предварительно перейдя в директорию /var (она, как говорилось ранее, доступна для записи).

 Чтобы стянуть файл с роутера, можно также поднять Web-server:

 Обрати внимание, если ты хочешь скачать с роутера исполняемый файл, следует убрать права на запуск. При скачивании большого количества файлов с роутера лучше использовать mc, не нужно будет предварительно копировать файлы в /var и убирать права, а после – удалять эти файлы для освобождения места. В общем, дело вкуса, выбирай любой вариант, который тебе удобен.

Создание своей программы

Начнем, конечно же, с классики программирования – HelloWorld. Каких-то особых правил нет. Текст программы до боли знакомый:

 Компилируем (путь до toolchain’а должен быть указан в переменной окружения PATH):

 Далее, копируем программу на роутер в директорию /var, устанавливаем права на запуск и запускаем:

 И… ничего не произойдет, либо вывалится оповещение path not found. В чем же дело? Я ранее уже говорил про cm_pc – эта программа запускает другие в соответствии с правилами, описанными в /etc/progdefs.xml. Вот и пришло время модифицировать и прошивать образы файловой системы.

Модификация файловой системы

Для того, чтобы модифицировать файловую систему, ее для начала надораспаковать. Как я уже упоминал, файловая система здесь – SquashFs с патчем LZMA. В пакет для разработки прошивок входит только программа mksquashfs (для создания образа), unsquashfs (для распаковки) отсутствует. Но это не беда, все доступно на сайте файловой системы, нужна нам именно первая версия. Наложив LZMA-патч и собрав утилиты, откладываем их в удобное место. Для начала получим образ файловой системы с роутера:

 И скачать удобным способом.

Далее, распаковываем образ:

 Теперь можно модифицировать как угодно, а угодно нам скинуть FuckTheWorld в
директорию /bin и добавить правило для запуска в /etc/progdefs.xml.

 А добавляем вот что (между тэгами ):

Сохраняем и запаковываем обратно:

 Следует обратить внимание, что образ файловой системы не должен превышатьдопустимых размеров. Если тебе приспичило что-то срочно испробовать, и оно непомещается, удали из образа что-нибудь “ненужное” вида grep, whoami, или жевоспользуйся упаковщиком исполняемых файлов UPX. Теперь загружаем на роутеробраз и переходим к следующему разделу.

Запись образа файловой системы

Способ прошивки роутера очень прост, заключается он в обращении к устройству/dev/mtdblock/*. Итак, заливаем на роутер любым удобным способом образ файловойсистемы и производим сие нехитрое действие:

 или

 Через некоторое время, когда пройдет процесс записи, роутер перезагрузится, иизменения вступят в силу. Пробуем запустить наш пример:

 Получилось! Превосходно. Идем дальше.

Способы восстановления в случае неудачи

Прежде чем прошивать роутер более серьезными “поделками” следует узнать, какже действовать в критических случаях, когда маршрутизатор отказываетсязагружаться. Безвыходных ситуаций нет. На помощь приходит ADAM2 FTP-сервер. Дляначала следует запустить FTP-клиент на IP-адрес ADAM2, который можно подглядетьв /proc/ticfg/env (параметр my_ipaddress).

Далее следует включить роутер с зажатой кнопкой reset, и через некотороемгновение появится приглашение.

 Для наглядности можно включить отладочный режим, тогда будут выводиться всяинформация и все ответы FTP:

 Логин/пароль – adam2/adam2. Процесс перепрошивки очень прост. Для началапереводим сессию FTP в бинарный режим:

 Далее выбираем Flash-память для записи:

 Теперь отправляем, например, образ файловой системы и указываем место
назначения:

 Ждем окончания записи, перезагружаем роутер, выходим из сессии:

 Все! Как видишь, нет ничего сложного, теперь если что-то пойдет не так, ты всегда можешь исправить ситуацию.

Для удобства работы, следует дать нормальный IP-адрес, включить автоматическую загрузку (чтобы с reset’ом не плясать) и немного увеличить время ожидания подключения перед загрузкой ядра. Все эти параметры хранятся в переменных окружения, есть специальные команды FTP ADAM2: GETENV и SETENV (для получения и установки переменной соответственно). В сессии FTP вводим следующие команды:

 Роутер перезагружается и можно зайти на ADAM2 по 192.168.1.1:21. Если появится желание перепрошить образ ядра, и ядро откажется загружаться, FTP запустится сам. Перед прошивкой модифицированными образами обязательно следует сохранить текущие для восстановления. Вообще, сменить переменные окружения можно и через /proc/ticfg/env, мне просто захотелось рассказать больше о работе с FTP.

 А проверить изменения можно так:

 Что делать, если ты захотел попробовать перепрошить загрузчик, и как действовать в случае неудачи? Либо роутер по каким-то причинам не запускается, и нет доступа к ADAM2? Выход есть – JTAG, а точнее, в этом чипе присутствует EJTAG (расширенная версия). Это интерфейс для внутрисхемной отладкипрограммирования.

Для подключения к этому интерфейсу нам понадобится LPT-порт компьютера, разъемы и 4 резистора. Схема простейшая.

Спешу заметить, что прошивка через JTAG – дело не быстрое, займет достаточно много времени. Так что использовать стоит только для восстановления загрузчика, если даже он не работает. Для общения по JTAG следует использовать специальную программу, например UrJTAG. Ниже приведен пример работы по этому интерфейсу.

Установка связи:

 Обнаружение Flash-памяти:

 Чтение Flash-памяти:

 Запись в память (загрузчика):

 Полезно также знать о UART-интерфейсе (ранее я обещал о нем рассказать). В UART_A отчитывается, то есть ведет лог загрузчик (на ранней стадии загрузки с ним можно и пообщаться) и ядро. При написании модифицированных ядер это незаменимо для отладки. UART — Universal Asynchronous Receiver/Transmitter (универсальный асинхронный приемопередатчик) почти всегда присутствует на микроконтроллерах.

Схема адаптера очень проста. Базируется лишь на одной микросхеме – преобразователе уровней TTL: MAX232 для COM и FT232R для USB. Микросхемы достаточно распространены и проблем с покупкой не будет.

Схема собирается на макетной плате (которую спокойно можно поместить в корпус разъема COM-порта) за 20 минут и приносит море пользы. Например, при отладке ядра это абсолютно незаменимое решение. А если с электроникой туго? Выходом являются USB-шнуры для старых телефонов, на них как раз стоит преобразователь UART — USB.

Некоторые идеи распространения

Свой проксисокс на чужом роутере – это здорово. Как, собственно, и спамящий по всем протоколам маршрутизатор. Это тебе не компьютер с Windows, которую переставляют каждый месяц :). Роутеры часто не меняют и не перепрошивают. Да и кому кроме нас взбредет в голову сама идея инфицирования роутера?

Не забывай, под контролем у нас весь трафик от пользователя/сети. На более мощных роутерах уже и DDOS-бота возможно повесить. Спрятать файл/скрыть процесс, перехватывать запись в mtd блоки исключив затирание нашей программы – все, что угодно!

Допустим, ты собрался взяться за написание серьезной программы для роутера. Важна очень хорошая отладка, наверняка придется кучу раз переписывать/восстанавливать образы… Это очень грустная перспектива. Даже руки немного опускаются, если еще и учесть, что ресурс перезаписи у Flash-памяти невелик (подробнее в документации к микросхеме памяти), и есть перспектива угробить ее. Но выход есть! Qemu может эмулировать AR7! Ты представляешь, какие это дает возможности и безграничное удобство? Теперь нам ничего не мешает написать что-то невероятно классное!

Итак. Ты написал программу, проверил на своем или 1-2 чужих роутерах, но ведь еще вся сеть впереди, вручную заражать муторно, на 10-м роутере уже начинаешь проклинать весь мир, и плывет в глазах от верениц “cat” и “mtd”. Напишем программу для автоматизации этих рутинных действий. Я выбрал язык python.

План работы таков:

  • составляем список роутеров, например, с помощью nmap;
  • скрипт должен брать из списка по порядку IP-адреса, заходить через telnet со стандартным логиномпаролем;
  • далее те самые действия: закачиваем модифицированный образ, перезаписываем, перезагружаемся.

 

 

Логика работы скрипта очень далека от идеала, сейчас поясню, почему. Для начала следует проверять версию прошивки/ядра и модель роутера, ибо могут быть серьезные отличия в работе. Далее, вместо заготовок прошивок следует выкачивать образ файловой системы с роутера, распаковывать, модифицировать и отправлять обратно. Это исключит проблемы, возникающие с совместимостью в разных моделях/версиях прошивок, ведь устойчивость работы для тебя – самое главное. Также вирус может иметь функции червя, и, если есть желание, всегда можно прикрутить к нему сканер сети, брутфорс для RDP и подобные фишки.

Есть еще один замечательный способ распространения. Ничего не мешает написать программу под Windows, которая будет иметь при себе (либо скачивать со своего сервера) образ файловой системы и заражать им роутер, если он присутствует. Распространять эту программу всеми “стандартными” способами: съемные накопители, эксплойты под программы, заражение других программ… Комбинируя эти способы, можно устроить серьезную пандемию. Ты только представь себе эту картину – ведь подобные устройства распространены повсеместно.

Защита роутера

Раскопав все это, я подумал: как же можно защитить роутер? А то, глядишь, и сам попаду. Первым делом следует сменить пароль пользователей на более сложный и длинный (ограничение – 8 символов), сменить баннеры и приветствия сервисов (hex-редактором, либо, что предпочтительнее, перекомпилировать программы), дабы nmap или другие сканеры не могли определить версии сервисов.

Также следует сменить порты, на которых висят демоны. Делается это путем модификации progdefs.xml. Убить telnet (к нему проще всего подобрать пароль, да и протокол незащищенный, зачем он нам), включить firewall, разрешить подключение к сервисам только с собственного IP- или MAC-адреса. Также используй firewall для защиты сети или компьютера, не зря ведь он присутствует. Грамотная настройка правил всегда поможет защититься.

Заключение

Многие, не только D-Link-роутеры и прочие подобные устройства построены на
чипе AR7, в список входят Acorp, NetGear, Linksys, Actionec… Довольно
популярен этот AR7 вместе с MontaVista. Отсюда следует, что, используя тот же
toolchain, без особых проблем можно провести действия, описанные в статье.

Задумайся: помимо вредоносных действий можно сделать и полезное/приятное себе
и другим (не спорю, удовольствие от взлома заменить невозможно, но все же).
Можно делать свои прошивки, например, более мощные роутеры, способные
качать/раздавать торренты… Все модели имеют USB 1.1-интерфейс, но в младших
моделях он не распаян. Добавить к ядру USB-модуль и драйвер файловой системы,
снабдить роутер Flash-памятью – и в итоге получится этакое сетевое хранилище за
небольшие деньги. Вариантов масса, а идеи должны возникать тысячами – не
ограничивай себя, твори и созидай!

Share Button
[Всего голосов: 1    Средний: 5/5]

Вам может быть интересно также:

Last updated by at .

1 comment to Взлом роутера D-Link 500T

Leave a Reply

You can use these HTML tags

<a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">