- PVSM.RU - https://www.pvsm.ru -

Очередная программная закладка в роутерах D-Link

image

На информационном портале devttys0.com [1] некто Craig Heffner – опытный специалист в области реверс-инжиниринга – выложил статью-исследование [2] очередной (уже находили [3]) программной закладки в роутерах 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 [4] для DIR-100 (для его DI-524 используется та же самая). Затем прошёлся по бинарнику своей утилитой binwalk [5] и вынул 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 [6]. Сообщения датируются 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.

Автор: Xlab

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/d-link/45538

Ссылки в тексте:

[1] devttys0.com: http://www.devttys0.com/blog/

[2] статью-исследование: http://www.devttys0.com/2013/10/reverse-engineering-a-d-link-backdoor/

[3] уже находили: http://habrahabr.ru/post/183314/

[4] firmware v1.13: https://www.pvsm.ruftp://ftp.dlink.eu/Products/dir/dir-100/driver_software/DIR-100_fw_reva_113_ALL_en_20110915.zip

[5] binwalk: http://code.google.com/p/binwalk/

[6] http://forum.codenet.ru/q58748: http://forum.codenet.ru/q58748

[7] Источник: http://habrahabr.ru/post/197314/