Впервые мы столкнулись с семейством 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 – инициализирующий запрос к командному серверу с информацией о заражённом устройстве и ответ от сервера с командой на выполнение:
![](/images/blog/2019-01/c1e3e95acd.png)
Запрос Smaps
![](/images/blog/2019-01/787fb78399.png)
Запрос 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":"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-файл троянца.
![](/images/blog/2019-01/9d730242e3.png)
Окно загрузки троянца
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-сообщений по умолчанию и пропадает с экрана устройства. Если пользователь игнорирует или отклоняет запрос, окно снова открывается через каждые несколько секунд.
![](/images/blog/2019-01/cdedeb3f43.png)
Троянец запрашивает права администратора устройства
![](/images/blog/2019-01/a43bde6c88.png)
Троянец запрашивает разрешение на использование 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