- PVSM.RU - https://www.pvsm.ru -
На информационном портале devttys0.com [1] некто Craig Heffner – опытный специалист в области реверс-инжиниринга – выложил статью-исследование [2] очередной (уже находили [3]) программной закладки в роутерах D-Link. На этот раз закладка была выявлена в официальной прошивке для DIR-100 revA, но, по его мнению, присутствует в роутерах других серий:
Коротко говоря, если у вашего браузера установлен User-Agent как «xmlset_roodkcableoj28840ybtide», то вы автоматически получаете админский доступ к веб-панели управления роутером без всякой авторизации.
Первым делом автор скачал официальную прошивку firmware v1.13 [4] для DIR-100 (для его DI-524 используется та же самая). Затем прошёлся по бинарнику своей утилитой binwalk [5] и вынул SquashFS с ситемой, откуда взял веб-сервер /bin/webs и загрузил его в IDA:
Судя по строкам, /bin/webs это модифицированная версия thttpd. Авторы модификации — Alphanetworks, подразделение D-Link, все добавленные методы начинаются с префикса alpha:
Данная функция кажется наиболее интересной. При детальном анализе выясняется, что в ней выполняется сравнение строк – строка со смещением 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.
Собирая всю полученную информацию воедино, автор в конечном итоге составляет следующий псевдокод для функции 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/
Нажмите здесь для печати.