На волне активности мобильных банковских троянцев мы решили провести подробный анализ и проследить эволюцию других популярных семейств зловредов помимо 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