Мобильный троянец Rotexy, банкер и вымогатель

На волне активности мобильных банковских троянцев мы решили провести подробный анализ и проследить эволюцию других популярных семейств зловредов помимо Asacub. Одним из наиболее интересных и активных в настоящий момент экземпляров оказался мобильный троянец, актуальный представитель семейства Rotexy. В августе — октябре 2018 года он осуществил более 70 тысяч атак на пользователей, преимущественно в России.

Интересной особенностью семейства этих банковских троянцев является использование сразу трех источников команд:

  • сервиса GCM (Google Cloud Messaging), который позволяет через серверы Google передавать на мобильное устройство небольшие сообщения в формате JSON;
  • командного сервера злоумышленников (C&C);
  • входящих SMS-сообщений.

Вышеописанная «всеядность» появилась уже в первой версии Rotexy и сохранилась во всех последующих представителях семейства. Также в ходе исследования мы пришли к выводу, что этот троянец эволюционировал из SMS-шпиона, впервые замеченного в октябре 2014 года. Тогда он детектировался как Trojan-Spy.AndroidOS.SmsThief, но последующие зловреды были выделены в отдельное семейство Trojan-Banker.AndroidOS.Rotexy.

Современная версия Rotexy совмещает в себе функции банковского троянца и вымогателя. Она распространяется под названием AvitoPay.apk (или похожим) и загружается с сайтов, имеющих имена вроде youla9d6h.tk, prodam8n9.tk, prodamfkz.ml, avitoe0ys.tk и так далее. Шаблон формирования имен понятен: отсылка к популярным сервисам бесплатных объявлений + случайный набор символов + двухбуквенный домен верхнего уровня. Но прежде чем в деталях рассмотреть возможности и особенности актуальной версии Rotexy, мы хотим кратко изложить путь, который проделал троянец от 2014 года до наших дней.

Эволюция Rotexy

2014–2015

С момента обнаружения зловреда в 2014 г. его основные функции и способ распространения не изменились: Rotexy распространяется с помощью ссылок в фишинговых SMS-сообщениях, предлагающих установить приложение. При запуске он запрашивает права администратора устройства, после чего начинает общение с C&C-сервером.

Типичный список классов в DEX-файле троянца

До середины 2015 г. для обмена данными с командным сервером Rotexy использовал формат JSON без шифрования. Адрес C&C также был указан в коде в открытом виде:

В некоторых версиях в качестве адреса использовался динамически сгенерированный домен нижнего уровня:

Первым запросом троянец отправлял на C&C IMEI зараженного устройства, а в ответ получал набор правил для обработки входящих SMS (номера телефонов, ключевые слова, регулярные выражения), касающихся преимущественно сообщений от банков, платежных систем и операторов сотовой связи. Например, троянец мог автоматически ответить на SMS и сразу удалить его.

Запрос у C&C шаблонов обработки SMS и ответ от сервера

После этого Rotexy пересылал на сервер информацию о смартфоне, включающую в себя его модель, номер телефона, название оператора сотовой связи, версию операционной системы, страну и IMEI.

С каждым следующим запросом генерировался новый поддомен. Алгоритм генерации доменного имени нижнего уровня был зашит в троянце.

Зловред также регистрировался в Google Cloud Messaging (GCM), после чего мог получать команды через этот сервис. Список возможных команд троянца практически не менялся за все время его существования и будет подробно описан ниже.

В каталоге assets троянца содержался файл data.db со списком возможных значений (порядка нескольких тысяч) поля User-Agent для команды PAGE (загрузить указанную веб-страницу). Если значение этого поля не пришло от C&C, то оно выбиралось из файла data.db псевдослучайным алгоритмом.

Содержимое data.db

2015–2016

Начиная с середины 2015 года троянец стал шифровать данные, пересылаемые между зараженным устройством и командным сервером, алгоритмом AES:

Также, начиная с этой версии, данные передаются POST-запросом на относительный адрес формата «/[number]» (псевдослучайно сгенерированное число от 0 до 9999).

В части семплов, начиная с января 2016 года, реализована распаковка зашифрованного исполняемого DEX-файла из каталога assets. В этой версии Rotexy не использовалась динамическая генерация доменов нижнего уровня.

2016

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

Запрос от троянца на командный сервер

В конце 2016 года появились версии зловреда, содержащие в каталоге assets/www фишинговую страницу card.html для кражи данных банковской карты пользователя:

2017–2018

С начала 2017 года в каталоге assets стали встречаться фишинговые HTML-страницы bank.html, update.html и extortionist.html. Плюс в некоторых версиях названия файлов представляли собой случайное сочетание букв.

В 2018 году появились версии Rotexy, обращающиеся к командному серверу по IP, а также «одноразовые» домены с именами, состоящими из случайного набора букв и цифр, и доменами верхнего уровня .cf, .ga, .gq, .ml, .tk.

Тогда же троянец стал активно использовать различные способы обфускации. Например, DEX-файл забивается мусорными строками и операциями и содержит ключ для расшифровки основного исполняемого файла из APK.

Современная версия (2018)

Наконец, вернемся в наши дни и подробно опишем функциональность одного из современных представителей семейства Rotexy (SHA256: ba4beb97f5d4ba33162f769f43ec8e7d1ae501acdade792a4a577cd6449e1a84).

Старт приложения

При первом запуске зловред проверяет, не запущен ли он на эмуляторе и в какой стране происходит запуск. Если устройство находится не в России или представляет собой эмулятор, приложение показывает «заглушку»:

При этом для записей в логах троянца на русском языке характерны грамматические ошибки и опечатки:

Если проверка проходит успешно, Rotexy регистрируется в GCM и запускает сервис SuperService, который отслеживает наличие у зловреда прав администратора устройства и собственное состояние, перезапускаясь в случае отключения. Наличие прав проверяется раз в секунду, и если они отсутствуют, то зловред начинает запрашивать их у пользователя в бесконечном цикле:

Если пользователь соглашается дать приложению желаемые права, на экране показывается еще одна заглушка и приложение скрывает свою иконку:

В случае обнаружения попыток отзыва администраторских прав зловред начинает циклично выключать экран телефона, мешая пользователю. Если же попытка удается, цикл запросов прав администратора запускается заново.

Если же по какой-либо причине SuperService не выключает экран при попытке отобрать у приложения права администратора устройства, троянец запугивает пользователя:

В ходе работы Rotexy следит за:

  • включением и перезагрузкой телефона;
  • прекращением своей работы — в таком случае происходит перезапуск;
  • отправкой SMS самим приложением — в таком случае телефон переводится в беззвучный режим.

Общение с C&C

Адрес командного сервера по умолчанию прописан в коде Rotexy:

Относительный адрес, на который троянец будет отправлять информацию с устройства, генерируется псевдослучайным способом. В зависимости от версии зловреда также могут использоваться динамически генерируемые поддомены.

В рассматриваемом экземпляре троянца значение Plugs.DynamicSubDomain равно false, и поддомены не генерируются

Информацию о командных серверах, а также полученные с зараженного устройства данные троянец хранит в локальной базе данных SQLite.

Первым делом троянец регистрируется в административной панели и получает с сервера недостающую информацию для работы (шаблоны перехвата SMS-сообщений, текст для отображения на HTML-страницах):

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

Троянец помимо общей информации об устройстве отправляет на C&C список всех запущенных процессов и установленных приложений. Возможно, злоумышленники используют этот список для того, чтобы находить запущенные антивирусные или банковские приложения.

Дальнейшие действия Rotexy будет выполнять после получения соответствующих команд:

  • START, STOP, RESTART — запустить, остановить, перезапустить SuperService.
  • URL — обновить адрес C&C.
  • MESSAGE — отправить SMS на указанный номер с заданным текстом.
  • UPDATE_PATTERNS — заново зарегистрироваться в панели.
  • UNBLOCK — разблокировать телефон (отозвать у приложения права администратора устройства).
  • UPDATE — скачать с сервера APK-файл и установить его; эта команда может быть использована не только для обновления самого приложения, но и для установки любой другой программы на зараженное устройство.
  • CONTACTS — разослать текст, полученный с сервера, всем контактам пользователя; скорее всего, таким образом приложение распространяется.
  • CONTACTS_PRO — запросить уникальный текст сообщений для контактов из адресной книги.
  • PAGE — обратиться к полученному с сервера URL с полем User-Agent, которое было получено либо также с сервера, либо из локальной базы данных.
  • ALLMSG — отправить на C&C-сервер все принятые и отправленные пользователем SMS из памяти телефона.
  • ALLCONTACTS — отправить на C&C-сервер все контакты из памяти телефона.
  • ONLINE — отправить на сервер информацию о текущем состоянии троянца: есть ли у него права администратора устройства, какая HTML-страница показана в данный момент, включен ли экран и т. д.
  • NEWMSG — записать в память устройства SMS с текстом и номером отправителя, полученным с сервера.
  • CHANGE_GCM_ID — изменить GCM ID.
  • BLOCKER_BANKING_START — показать фишинговую HTML-страницу ввода данных банковской карты.
  • BLOCKER_EXTORTIONIST_START — показать HTML-страницу вымогателя.
  • BLOCKER_UPDATE_START — показать поддельную HTML-страницу обновления.
  • BLOCKER_STOP — остановить показ всех HTML-страниц.

Роль C&C для Rotexy может выполнять не только веб-сервер, но еще и любое устройство с возможностью отправки SMS — зловред перехватывает сообщения и может получать из них такие команды:

  • «3458» — отозвать права администратора устройства у приложения;
  • «hi», «ask» — включить и выключить мобильный интернет;
  • «privet», «ru» — включить и выключить Wi-Fi;
  • «check» — отправить на адрес, с которого пришло SMS, сообщение «install: [IMEI устройства]«;
  • «stop_blocker» — остановить показ всех блокирующих HTML-страниц;
  • «393838» — изменить адрес C&C на указанный в теле SMS;

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

Показ HTML-страниц

Разберем HTML-страницы Rotexy и выполняемые с ними действия.

  • Зловред показывает поддельную HTML-страницу обновления (update.html), блокирующую экран устройства на длительное время.
  • Зловред показывает страницу-вымогатель (extortionist.html), блокирующую устройство и требующую «заплатить штраф» для его разблокировки. На скриншоте черным прямоугольником закрыты порнографические материалы.
  • Зловред показывает фишинговую страницу для ввода данных банковской карты (bank.html). Страница маскируется под легитимную банковскую форму и блокирует экран устройства до ввода всей требуемой информации. Она даже имеет свою виртуальную клавиатуру, которая якобы защищает жертву от кейлоггеров.

Вместо «{text}» на странице выводится текст, полученный Rotexy от командного сервера. Как правило, это сообщение о том, что пользователю пришел денежный перевод, и для его зачисления на банковскую карту необходимо ввести ее реквизиты.

Далее происходит проверка введенных данных, а также последних четырех цифр карты на соответствие тем, что были получены в поступившей с сервера команде. Возможен следующий сценарий: Rotexy согласно шаблонам обработки входящих SMS перехватывает сообщение от банка, в котором содержатся последние четыре цифры номера привязанной к телефону карты. Эти цифры троянец отправляет на C&C, а затем с сервера приходит команда на показ поддельного окна ввода данных карты с проверкой этих цифр. Если пользователь вводит не свою банковскую карту, то ему показывается такое окно:

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

После ввода всех данных карты и успешной проверки их корректности вся информация пересылается на сервер злоумышленников.

Способы разблокировки телефона

Немного хороших новостей: у Rotexy не очень продуманный модуль обработки команд, полученных через SMS. Благодаря этому в некоторых случаях устройство, заблокированное одной из вышеописанных HTML-страниц, можно без проблем разблокировать. Для этого надо отправить на номер заблокированного устройства SMS с текстом «3458» — это отключит права администратора устройства у троянца. Потом надо отправить на этот же номер SMS с текстом «stop_blocker» — это отключит показ HTML-страниц, вымогающих деньги и блокирующих экран. После этого Rotexy может заново начать бесконечно запрашивать права администратора устройства — в этом случае нужно перезагрузить устройство в безопасном режиме и удалить вредоносную программу.

Но возможна ситуация, когда этот способ не поможет, так как злоумышленники могут быстро отреагировать на попытку удаления приложения. В таком случае можно попробовать повторить все вышеописанные действия, предварительно отправив на номер зараженного устройства SMS с текстом «393838» — эта команда изменит адрес C&C на «://», и телефон больше не будет принимать команды с реального командного сервера.

Отметим, что инструкция по разблокировке смартфона основана на анализе текущей версии Rotexy и корректно работает для нее. Нельзя исключать, что в следующих версиях троянца набор команд может быть изменен.

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

По нашим данным, 98% атак с использованием Rotexy приходятся на Россию, что объясняется явной нацеленностью троянца на русскоговорящих пользователей. Также были задеты пользователи из Украины, Германии, Турции и других стран.

Приложения Kaspersky Internet Security для Android и «Сбербанк Онлайн» надежно защищают пользователей от атаки этого троянца.

IOCs

SHA256

0ca09d4fde9e00c0987de44ae2ad51a01b3c4c2c11606fe8308a083805760ee7
4378f3680ff070a1316663880f47eba54510beaeb2d897e7bbb8d6b45de63f96
76c9d8226ce558c87c81236a9b95112b83c7b546863e29b88fec4dba5c720c0b
7cc2d8d43093c3767c7c73dc2b4daeb96f70a7c455299e0c7824b4210edd6386
9b2fd7189395b2f34781b499f5cae10ec86aa7ab373fbdc2a14ec4597d4799ba
ac216d502233ca0fe51ac2bb64cfaf553d906dc19b7da4c023fec39b000bc0d7
b1ccb5618925c8f0dda8d13efe4a1e1a93d1ceed9e26ec4a388229a28d1f8d5b
ba4beb97f5d4ba33162f769f43ec8e7d1ae501acdade792a4a577cd6449e1a84
ba9f4d3f4eba3fa7dce726150fe402e37359a7f36c07f3932a92bd711436f88c
e194268bf682d81fc7dc1e437c53c952ffae55a9d15a1fc020f0219527b7c2ec
С&C

2014–2015:

  • secondby.ru
  • darkclub.net
  • holerole.org
  • googleapis.link

2015–2016:

  • test2016.ru
  • blackstar.pro
  • synchronize.pw
  • lineout.pw
  • sync-weather.pw

2016:

  • freedns.website
  • streamout.space

2017–2018:

  • streamout.space
  • sky-sync.pw
  • gms-service.info