Развитие мобильного банкера Asacub

Впервые мы столкнулись с семейством Trojan-Banker.AndroidOS.Asacub в 2015 году, тогда были обнаружены и проанализированы первые версии зловреда, имевшие больше возможностей для шпионажа, чем для кражи средств. С тех пор троянец эволюционировал, а его создатели провели масштабную кампанию по распространению (весна-лето 2017 года), благодаря чему в течение последнего года представители Asacub занимают первые места по количеству атак среди мобильных банковских троянцев, обгоняя такие семейства, как Svpeng и Faketoken.

Мы решили посмотреть, что из себя представляет современный представитель семейства Asacub. Для этого изучили актуальные версии троянца, ориентированные на кражу денег у владельцев Android-устройств с подключенным сервисом мобильного банкинга одного из крупнейших российских банков.

Версии Asacub

В теле троянца зашит номер версии, состоящий из двух или трёх чисел, разделённых точками. После 9-й версии, судя по всему, нумерация началась заново.

История Asacub началась с 4-й версии в конце 2015 года, версии до третьей включительно известны как Trojan-SMS.AndroidOS.Smaps. В 2016 году были активны версии 5.X.X–8.X.X, в 2017 году версии 9.X.X–1.X.X. В 2018 году наиболее активно распространялись версии 5.0.0 и 5.0.3.

Общение с C&C

Хотя возможности Asacub постепенно менялись, в его сетевом поведении – формате общения с командным сервером (C&C) – изменения были незначительные. Это и позволило говорить о том, что разные по своим возможностям банковские троянцы относятся к одному семейству.

Данные всегда передавались на командный сервер по протоколу HTTP в теле POST-запроса в зашифрованном виде на относительный адрес /something/index.php. В ранних версиях часть относительного пути something выглядела более-менее осмысленно и представляла собой случайное сочетание слов и коротких комбинаций букв и цифр, разделённое подчёркиванием, например, «bee_bomb» или «my_te2_mms».

Пример трафика ранней версии Asacub (2015 год)

Передаваемые и получаемые данные зашифрованы алгоритмом RC4 и закодированы по стандарту base64. Адрес C&C и ключ шифрования (в версиях 4.x и 5.x один для различных модификаций, и различный для различных C&C в более поздних версиях) зашиты в теле троянца. В качестве доменов верхнего уровня в ранних версиях Asacub используются .com, .biz, .info, .in, .pw. В версии 2016 года поменялись значение заголовка User-Agent и способ генерации относительного пути в URL: теперь часть до «/index.php» состоит из слитного сочетания осмысленного слова и случайных букв и цифр, например, «muromec280j9tqeyjy5sm1qy71» или «parabbelumf8jgybdd6w0qa0». Кроме того, входящий трафик от командного сервера стал сжиматься с помощью gzip, и для всех C&C доменом верхнего уровня являлся .com:

С декабря 2016 года изменения в общении с командным сервером затронули только способ генерации относительного пути в URL: на смену осмысленному слову пришла достаточно длинная случайная комбинация букв и цифр, например, «ozvi4malen7dwdh» или «f29u8oi77024clufhw1u5ws62». На момент написания статьи других значительных изменений в сетевом поведении Asacub не наблюдалось:

Происхождение Asacub

С достаточной уверенностью можно утверждать, что семейство Asacub эволюционировало из троянца Trojan-SMS.AndroidOS.Smaps. Общение обоих троянцев с командными серверами строится по одному принципу, схожим образом формируются относительные адреса, на которые троянцы отправляют сетевые запросы, а также пересекается набор возможных команд, которые троянцы могут выполнять. Кроме того, нумерация версий Asacub продолжает нумерацию Smaps. Основное отличие заключается в том, что Smaps передаёт данные открытым текстом, а Asacub зашифровывает данные алгоритмом RC4 и затем кодирует в формат base64.

Сравним примеры трафика от Smaps и Asacub – инициализирующий запрос к командному серверу с информацией о заражённом устройстве и ответ от сервера с командой на выполнение:

Запрос Smaps

Запрос Asacub

Расшифрованные данные из трафика Asacub:

{"id":"532bf15a-b784-47e5-92fa-72198a2929f5","type":"get","info":"imei:365548770159066, country:PL, cell:Tele2, android:4.2.2, model:GT-N5100, phonenumber:+486679225120, sim:6337076348906359089f, app:null, ver:5.0.2"}

Данные, отправляемые на сервер

[{"command":"sent&&&","params":{"to":"+79262000900","body":"\u0410\u0412\u0422\u041e\u041f\u041b\u0410\u0422\u0415\u0416 1000 50","timestamp":"1452272572"}},
{"command":"sent&&&","params":{"to":"+79262000900","body":"BALANCE","timestamp":"1452272573"}}]

Инструкции, получаемые от сервера

Можно также сравнить формат, в котором Asacub и Smaps пересылают с устройства на командный сервер входящие SMS-сообщения (закодированные алгоритмом base64):

Формат Smaps

Формат Asacub

Расшифрованные данные из трафика Asacub:

{"data":"2015:10:14_02:41:15","id":"532bf15a-b784-47e5-92fa-72198a2929f5","text":"SSB0aG91Z2h0IHdlIGdvdCBwYXN0IHRoaXMhISBJJ20gbm90IGh1bmdyeSBhbmQgbmU=","number":"1790","type":"load"}

Распространение

Банкер распространяется через фишинговые SMS-сообщения, содержащие ссылку и предложение посмотреть фото или MMS. Ссылка ведет на веб-страницу с аналогичным предложением и кнопкой для скачивания, при нажатии на нее на устройство загружается APK-файл троянца.

Окно загрузки троянца

Asacub маскируется под приложения для работы с MMS или клиент популярного сервиса бесплатных объявлений. Нам встречались названия «Фото», «Сообщение», «Avito-Предложение», «ММС – Послание».

Иконки приложений, под которые маскируется Asacub

APK-файлы троянца скачиваются с сайтов типа mmsprivate[.]site, photolike[.]fun, you-foto[.]site, mms4you[.]me под именами формата:

  • photo_[number]_img.apk,
  • mms_[number]_img.apk
  • avito_[number].apk,
  • mms.img_[number]_photo.apk,
  • mms[number]_photo.image.apk,
  • mms[number]_photo.img.apk,
  • mms.img.photo_[number].apk,
  • photo_[number]_obmen.img.apk.

Для установки троянца пользователю необходимо в настройках устройства разрешить установку приложений из неизвестных источников.

Заражение

При установке Asacub запрашивает у пользователя, в зависимости от версии троянца, либо права администратора устройства (Device administrator), либо разрешение на использование службы специальных возможностей AccessibilityService. После получения прав назначает себя приложением для SMS-сообщений по умолчанию и пропадает с экрана устройства. Если пользователь игнорирует или отклоняет запрос, окно снова открывается через каждые несколько секунд.

Троянец запрашивает права администратора устройства

Троянец запрашивает разрешение на использование AccessibilityService

После установки троянец начинает общение с командным сервером злоумышленников. Все данные передаются в формате JSON (после расшифровки). Среди них есть информация о модели смартфона, версии ОС, операторе сотовой связи, версии троянца.

Рассмотрим подробно версию Asacub 5.0.3, наиболее распространённую в 2018 году.

Структура данных, пересылаемых на сервер:

1
2
3
4
5
6
7
{
"type":int,
"data":{
data
},
"id":hex
}

Структура данных, получаемых от сервера:

1
2
3
4
5
6
7
8
9
{
"command":int,
"params":{
params,
"timestamp":int,
"x":int
},
"waitrun":int
}

Сначала троянец отправляет на сервер информацию об устройстве:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"type":1,
"data":{
"model":string,
"ver":"5.0.3",
"android":string,
"cell":string,
"x":int,
"country":int,//optional
"imei":int//optional
},
"id":hex
}

В ответ от сервера приходит код команды для выполнения («command»), её параметры («params») и время задержки перед выполнением («waitrun», в миллисекундах).

Список команд, зашитых в теле троянца:

Код командыПараметрыДействия
2Отправка на командный сервер списка контактов из адресной книги зараженного устройства
7"to":intЗвонок на указанный номер
11"to":int, "body":stringОтправка SMS-сообщения с указанным текстом на указанный номер
19"text":string, "n":stringОтправка SMS-сообщений с указанным текстом на номера из адресной книги зараженного устройства, с подстановкой в текст сообщения имени адресата из адресной книги
40"text":stringЗавершение приложений с указанными именами (антивирусные и банковские приложения)

Набор возможных команд – наиболее существенное различие разных версий Asacub. В версиях 2015 – начала 2016 года, подробно разобранных в статье, инструкции от C&C в JSON-формате содержали название команды в текстовом виде («get_sms», «block_phone»). В более поздних версиях вместо названия команды стал передаваться её числовой код. Одной команде в разных версиях соответствовал один и тот же числовой код, но набор поддерживаемых команд различался. Например, в версии 9.0.7 (2017 год) следующий набор команд: 2, 4, 8, 11, 12, 15, 16, 17, 18, 19, 20.

После получения команды троянец пытается выполнить её, затем возвращает на C&C информацию о статусе выполнения и полученные данные, если таковые имеются. Значение «id» внутри блока «data» равно значению «timestamp» команды, о которой идёт речь:

1
2
3
4
5
6
7
8
9
10
11
{
"type":3,
"data":{
"data":JSONArray,
"command":int,
"id":int,
"post":boolean,
"status":resultCode
},
"id":hex
}

Троянец также назначает себя SMS-приложением по умолчанию и при поступлении нового SMS пересылает злоумышленнику номер отправителя и текст сообщения в формате base64:

1
2
3
4
5
6
7
8
{
"type":2,
"data":{
"n":string,
"t":string
},
"id":hex
}

Таким образом Asacub может выводить средства с привязанной к телефону банковской карты путём отправки SMS-сообщений для перевода средств на другой счет по номеру карты или мобильного телефона. Кроме того, троянец перехватывает SMS-сообщения от банка, содержащие одноразовые пароли и информацию о балансе привязанной банковской карты. Некоторые версии троянца могут самостоятельно извлекать из таких SMS-сообщений коды подтверждения операций и отправлять их на нужный номер. При этом пользователь не сможет проверить баланс через мобильный банк или поменять в нём какие-либо настройки, т.к. после получения команды с кодом 40 троянец запрещает открытие на телефоне банковского приложения.

Для троянца характерны грамматические и орфографические ошибки в сообщениях пользователю во время установки («Система не корректно работает», «Для устраннения проблемы вам необходимо…») и использование в этих сообщениях смешения кириллических и латинских символов.

Для обфускации троянец использует различные способы: от простейших, таких как конкатенация строк и переименование классов и методов, до выноса реализации некоторых функций в нативный код – включение в APK-файл SO-библиотек на C/C++, что требует использования дополнительных инструментов или динамического анализа для деобфускации, поскольку большинство инструментов для статического анализа Android-приложений поддерживают только байткод Dalvik. Также в некоторых версиях Asacub строки в приложении шифруются тем же алгоритмом, что и данные, отправляемые на C&C, но с другими ключами.

Пример использования нативного кода для обфускации

Примеры использования конкатенации строк для обфускации

Пример шифрования строк в троянце

География распространения Asacub

Asacub ориентирован на российских пользователей – на Россию приходятся 98% случаев заражения (225 тысяч), что объясняется нацеленностью злоумышленников на клиентов крупного российского банка. Троянец также затронул пользователей из Украины, Турции, Германии, Белоруссии, Польши, Армении, Казахстана, США и других стран.

Заключение

Пример троянца Asacub показывает, что мобильные зловреды могут функционировать на протяжении нескольких лет с минимальными изменениями схемы распространения. В данном случае это SMS-спам – до сих пор многие люди переходят по подозрительным ссылкам, устанавливают ПО из сторонних источников и не глядя дают приложениям любые разрешения. Злоумышленники также нечасто меняют формат общения зловреда с командным сервером, так как это требует бόльших усилий и приносит меньше «пользы», чем внесение изменений в исполняемый файл – самым значительным изменением за историю этого троянца стало шифрование пересылаемых между устройством и C&C данных. При этом для затруднения детектирования новых версий регулярно вносятся изменения в APK-файл троянца, меняются домены командных серверов, а ссылки на скачивание троянца зачастую являются одноразовыми.

IOCs

IP-адреса С&C:

  • 155.133.82.181
  • 155.133.82.240
  • 155.133.82.244
  • 185.234.218.59
  • 195.22.126.160
  • 195.22.126.163
  • 195.22.126.80
  • 195.22.126.81
  • 5.45.73.24
  • 5.45.74.130

IP-адреса, с которых скачивался троянец:

  • 185.174.173.31
  • 185.234.218.59
  • 188.166.156.110
  • 195.22.126.160
  • 195.22.126.80
  • 195.22.126.81
  • 195.22.126.82
  • 195.22.126.83

SHA256:

158c7688877853ffedb572ccaa8aa9eff47fa379338151f486e46d8983ce1b67
3aedbe7057130cf359b9b57fa533c2b85bab9612c34697585497734530e7457d
f3ae6762df3f2c56b3fe598a9e3ff96ddf878c553be95bacbd192bd14debd637
df61a75b7cfa128d4912e5cb648cfc504a8e7b25f6c83ed19194905fef8624c8
c0cfd462ab21f6798e962515ac0c15a92036edd3e2e63639263bf2fd2a10c184
d791e0ce494104e2ae0092bb4adc398ce740fef28fa2280840ae7f61d4734514
38dcec47e2f4471b032a8872ca695044ddf0c61b9e8d37274147158f689d65b9
27cea60e23b0f62b4b131da29fdda916bc4539c34bb142fb6d3f8bb82380fe4c
31edacd064debdae892ab0bc788091c58a03808997e11b6c46a6a5de493ed25d
87ffec0fe0e7a83e6433694d7f24cfde2f70fc45800aa2acb8e816ceba428951
eabc604fe6b5943187c12b8635755c303c450f718cc0c8e561df22a27264f101