
Недавно на исследование в департамент комплексного реагирования на киберугрозы Positive Technologies (PT ESC IR) поступил ряд образцов банковского трояна для Android с функциями удаленного управления — Drama RAT. Это вредоносное семейство распространяется с помощью фишинговых сообщений в мессенджерах и маскируется под VPN-сервисы, банковские приложения и другие взломанные утилиты со встроенной платной функциональностью. Ранее о нем писали в УБК МВД.

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

После нажатия кнопки Update Now («Обновить сейчас») и выдачи прав на установку приложений из неизвестных источников на сервер злоумышленников передаются сведения об устройстве и списке установленных на нем программ. Затем на устройство загружается вредоносное приложение, выполняющее функции банковского трояна.
Работа приложения-дроппера
Во всех анализируемых приложениях обнаружена библиотека, в которой реализована логика связи с C2-сервером, а также механизмы идентификации конкретного устройства. При запуске дроппера на сервер управления отправляется «слепок устройства»: хеш-сумма SHA-256 от конкатенации ANDROID_ID и SHA-256 от подписи приложения.
В ответ C2-сервер отправляет полезную нагрузку и часть ключа, с помощью которого впоследствии она будет расшифрована. Файл полезной нагрузки расшифровывается на устройстве с помощью ключа, состоящего из трех компонентов:
ключа, ранее полученного с C2-сервера вместе с полезной нагрузкой;
ключа, зашитого в код приложения;
хеш-суммы SHA-256 от подписи приложения-дроппера.

По окончании расшифровки полезной нагрузки на устройство пользователя устанавливается вредоносное приложение, а сам файл нагрузки и часть ключа удаляются.
Принцип работы трояна
После установки приложение отправляет на C2-сервер информацию об устройстве: присвоенный ему идентификатор, версию Android, уровень заряда аккумулятора, тип сетевого подключения, изображение обоев рабочего стола, данные о SIM-картах, предоставленных разрешениях и другую информацию. Кроме того, с определенной периодичностью приложение отправляет на C2-сервер фоновые запросы, чтобы подтвердить работоспособность подключения. В этих запросах также содержатся общие сведения о состоянии устройства и данные акселерометра.

Автоматическая выдача разрешений
При установке Drama RAT запрашивает разрешение на использование специальных возможностей (Accessibility). После этого вредонос с помощью библиотеки libnative_core.so самостоятельно определяет, какие дополнительные разрешения ему нужны (в их числе — права доступа к SMS-сообщениям, контактам, микрофону, к записи экрана), находит на экране кнопку «Разрешить» и выдает их себе. В этот момент поверх системного окна «Разрешить приложению доступ к…» появляется непрозрачный черный блок, который скрывает процесс выдачи прав от пользователя.
На рисунке ниже представлена функция, которая в зависимости от сценария может как отрисовать непрозрачное черное поле, так и вывести фишинговое окно.

Похожие приемы используются и для сокрытия записи экрана: приложение может включать ее фоном, чтобы анализировать действия пользователя. Начиная с Android 12 при включении камеры или записи звука на устройстве отображается заметная цветовая индикация. Чтобы обойти это, в верхней части интерфейса поверх экрана рисуется почти прозрачное изображение.
В коде трояна также предусмотрена дополнительная проверка кнопки «Запретить», чтобы приложение случайно не отозвало доступ для некоторых функций.
Возможности трояна
Приложение выполняет широкий набор действий:
перехват и отправка SMS-сообщений, установка в качестве приложения для работы с SMS по умолчанию;
использование Accessibility-сервиса для чтения элементов активного экрана, для получения доступа к содержимому буфера обмена и его подмены, для кражи данных из браузеров;
кейлоггинг — позволяет в режиме реального времени отслеживать нажатия (например, при вводе пароля для телефона или внутри конкретного приложения);
оверлей-фишинг — подмена экрана приложения с целью кражи данных пользователя;
сбор информации об установленных приложениях и извлечение из них данных, представляющих интерес для злоумышленника;
контроль аудиовызовов — для подмены отображаемого номера на устройстве и выполнения звонков на номера, указанные злоумышленником;
запись и трансляция происходящего на экране с помощью функции удаленного доступа (virtual network computing);
ведение записи с помощью микрофона и камеры — при этом у пользователя отсутствует индикация происходящей записи;
сбор всей доступной информации — контактов, логинов и паролей от аккаунтов, геопозиции устройства;
смена и сокрытие иконки приложения;
сокрытие уведомлений сторонних приложений.
Устройство также может использоваться для участия в DDoS-атаках на ресурс, указанный C2-сервером.
Для выполнения ряда действий приложение ожидает соответствующую команду от C2-сервера. Обработку поступающих команд выполняет диспетчер SaveMonitorUtilsPanelHandlers – для каждой из них реализован отдельный обработчик с уникальным кодом. Ниже представлен пример функции handDds, отвечающей за DDoS-атаки.

Кроме того, C2-сервер дополнительно отправляет на устройство список приложений, из которых планируется похищать данные.
В коде трояна обнаружены мультиязычные оверлеи: введите PIN/пароль, завершите настройку, другие разрешения, ожидание входа. Шаблоны представлены для 29 языков: азербайджанского, английского, арабского, венгерского, вьетнамского, греческого, датского, иврита, индонезийского, испанского, итальянского, казахского, китайского, корейского, немецкого, нидерландского, польского, португальского, румынского, русского, тайского, турецкого, узбекского, украинского, финского, французского, чешского, шведского, японского.
Общение с сервером
Основной канал для взаимодействия с сервером — WebSocket поверх TLS с взаимной аутентификацией (mTLS). В библиотеке libnative_core.so зашит собственный сертификат (получен из функции nb_getClientP12) с приватным ключом (получен из функции nb_getClientP12Pass).

Есть и резервный канал связи: на случай, если WebSocket заблокируют, команды передаются посредством HTTPS-запросов через CDN-домены, а трафик маскируется под обращение к легитимным ресурсам.

Закрепление в системе
В коде трояна присутствует функциональность закрепления в системе:
Планировщик заданий с помощью системного сервиса AlarmManager ставит два «будильника»: основной на 8 секунд и резервный на 30 секунд — на случай, если основной не сработает.
Каждые 8 секунд проверяются подключение к C2-серверу, наличие требуемых разрешений и доступность Accessibility, а также работоспособность всех функций приложения. Если сетевое подключение отсутствует или не выполняется какая-либо активность, неактивные компоненты перезапускаются.
В приложении реализован обход встроенного в Android режима экономии заряда батареи (Doze), а также перезапуск служб после перезагрузки устройства (BOOT_COMPLETED/QUICKBOOT_POWERON).

Что при этом видит пользователь
После установки полезной нагрузки пользователю демонстрируется серия экранов, которые представляют собой HTML-страницы, хранящиеся в assets приложения.
«Установите PIN-код» (pin_setup.html) — экран выглядит как окно настройки защиты, но введенный PIN-код или паттерн сохраняется в приложении.

«Требуется VPN» (vpn_required.html) — уведомление о том, что сервис недоступен в стране и необходимо подключиться к VPN.

Окно отображается, если приложению не удается подключиться к C2-серверу. Ниже приведен фрагмент кода, отвечающий за отображение этого окна при недоступности сервера злоумышленников:

«Устройство несовместимо, приложение удаляется…» (compat_check.html) — экран устроен так, чтобы пользователь решил, что приложение удалено. На самом деле оно скрывает свою иконку с рабочего стола и продолжает работать в фоновом режиме.

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

Accessibility-сервис постоянно следит за тем, какой экран открыт. Как только пользователь заходит в настройки устройства, чтобы отозвать разрешения, остановить или удалить приложение, сервис распознает «опасный» экран и нажимает кнопку «Назад» или «Отмена».

Антианализ
Интересно, что файл полезной нагрузки дополнительно защищен от анализа:
При исследовании приложения обнаружено более 1200 «мусорных» артефактов и несколько фейковых DEX-файлов: они содержат некорректные идентификаторы и структуры, которые не несут никакой пользы и, вероятно, предназначены для затруднения работы аналитика.
Файл AndroidManifest.xml поломан: злоумышленники специально повредили его на уровне бинарных структур, чтобы затруднить проверку популярными декомпиляторами. Восстановить AndroidManifest.xml можно с помощью утилиты apkInspector.
Присутствует дополнительная самозащита (в libnative_core.so): детектирование root-прав su/Magisk/KernelSU (/data/adb/ksu)/SuperSU/Xposed/EdXposed, антиотладка и перехват функций Frida (checkHooksJava, initSecurity), проверка отладки ptrace.

В коде приложения также реализована собственная логика обфускации строк: они представлены в формате Base64 и расшифровываются в рантайме, а у каждого класса есть своя функция расшифровки, отличающаяся операциями и ключами.
Расшифровка осуществляется примерно по такому алгоритму:
plaintext[i] = base64_decoded[i] <±/^> (coef & 0xFF) ^ key[i % key.length]
То есть весь процесс выглядит следующим образом:
1) декодирование строки формата Base64;
2) генерация ключа переменной длины путем вычисления каждого байта простой арифметической операцией (пример на рис. 17);

3) непосредственно расшифровка.
Различия заключаются в арифметических операциях сложения, вычитания или исключающего «или», а также в дополнительном коэффициенте, который для каждой строки кода свой.
В библиотеке libnative_core.so также присутствуют дополнительные функции для расшифровки отдельных строк кода приложения:
функция nb_nativeDecStr — расшифровывает строки, которые раскрывают логику работы некоторых вредоносных функций, включая внедрение кода, наложение поддельных окон для кражи пользовательских данных, кражу пароля для разблокировки экрана, перечисление списка пакетов приложений для кражи с помощью Accessibility, автоматическую выдачу прав, захват экрана устройства и другие;
функция nb_nativeDcrptStr — расшифровывает отображаемые пользователю HTML-шаблоны, которые поступают с C2-сервера.
Заключение
Drama RAT — это не просто банковский троян, а инструмент для захвата полного контроля над устройством: он автоматически выдает себе разрешения, скрывается в системе, противодействует удалению и поддерживает независимые каналы связи с сервером. Приложение затрудняет анализ и старается максимально скрыть вредоносную функциональность.
Как защитить ваши устройства
Устанавливайте обновления ОС и средств защиты.
Включите «Google Play Защиту» и не игнорируйте предупреждения антивирусных программ.
Устанавливайте приложения только из официальных магазинов и с сайтов разработчиков.
Не включайте установку из неизвестных источников.
Выдавайте разрешение на использование специальных возможностей (Accessibility) только проверенным приложениям, которым оно действительно необходимо.
Регулярно проверяйте разрешения, предоставленные приложениям: откройте «Настройки», выберите нужное приложение и ознакомьтесь со списком доступом.
Будьте внимательны к приложениям, которые сразу после установки предлагают установить обновление: под видом обновления на устройство может загрузиться вредоносное ПО.
Отслеживайте сетевой трафик вашего устройства: к каким доменам или серверам выполнялось подключение, какой объем данных отправляется на эти ресурсы и принимается с них.
Следите за расходом аккумулятора: если в неактивном состоянии устройство сильно греется или быстро разряжается, возможно, на нем выполняется нелегитимная активность.
Обращайте внимание на необычное поведение устройства: например, если после установки приложения исчезла его иконка, не удается отозвать предоставленные разрешения или попытка удалить или отключить приложение возвращает вас на главный экран.
Индикаторы компрометации (IoC)
IP-адрес
135.181.77[.]58
Домен
drama-connect[.]com
SHA-256 приложений-дропперов:
SnakeVPN.apk
e3a0ee854063c54a3e799908fd0e49453796f60f111634c7d127bd042c33b667;
bbbdd1672ef398351adc6b74b26577b5d24dd4b5417953ccaf700c622ad991b8;
3748d29ca7b116c2190fdb2178bf6389f0ccd86ff369cf39cfe9ecd2b22d4648;
be3abc9aa5aeac5693f221214ce1d0504caee854d3b2dcd08f608301c0b53e93;
134e4344542fb4a5c0e89f073bef16664c310ec5e0bc6b809a2e1127c4121029;
428d734540a8e3ff97e6ded55048cd0db58cedfe34360de16628c02674276a95;
aebf0e8d135485c7677c86b3d2d929e7d9953b51ceb19be35a30f257312fa55a;
ca783469b23c4749ad028b30e8ff096da9e8b549db6c9bf5e5b0c89401fa384b;
ae4308a417b0419dbae8412216e65b559165a4b9e3194c5af5e17a3e953747f0;
474e08c5f268006b7e5878ca672170a410ae0950d3d310fbd919a94713877df1.
AutoCheck.apk
e729c9bda96886b8a795112b3362ecc5588749f9e084f386cf6b058546394197.
FlashVPN.apk
eccb2ea0a2c2d3a2924a08aa1d36318ca3b78d0bac34a05719d1122b5561ba6b;
0636c13af264c0ffe3eec977509a07c0ec811c0a41d53358322d656148990a30;
71152291e8a98900a20d91ba06e3d81635c76a7611896279a296cb921bbee3c5;
98f83d54ea5ef0901a4f438799d223b9444dd67e66141d3ba84a0d4c9c528d7c;
f47b5f7d400a799cb137b48b39861f2fd6deea14b28929fb7835b155c8ce0c7c;
65b41dce0888e28dd740aac40226bcf98c517d9a8bc309b69c01303b94808bd7;
f6c35693c6ca69252961a1a531acdd6a89e34db36b1a4625df7f10e4567f0ac7;
d60f5511c42ddba24760894c8cb6ab955a42ba7f30e087766df4bff0f244370c;
752d310f31ff40f762c2108352f4d2b667a7fd155fc225341e6861658608e142;
64e6a39ca15abbe62aace92d91251efb67f8ef98d9d5508af54383b320c3ac6a;
5f8d7c94520da9b2b87e744efdd9f0e7d11fbac8c26511e08e7a8299653ea47f;
d9c7c42ec728e3fd522226e3feea0904437129a68688ce5db65c0888c445fd6f;
7869ad43f27fb8d8f7bd3c51717077b42d847043df1d734327281eaafa8caf82;
fb10f82062c1bf1a5d7623d352785a2a2865275921092ec53d703382d0289428;
430b4ece9eeba04f1b3549890116a821366a67aaf42d8db0f63ff58006921e55.
TikTok18+.apk
8ce36f8847771df44a2f92fd78637dc9419de4a5adcfed7f1b4caf22f658fa5f;
bf4e65bcc1a370e1291781fceacdb2b1fa309ee7c206029efdb80aadef1e3b2b;
acf19ddfe0013264b0f9090eb952b28057a2245fb51f12c2a43c4a97a0968e07;
e3ef7701894b51307480339a5c6fad1880379cd246e10b3f7e0e9c6aeaf56e60.
Pipl VPN.apk
89c886a1689a03eb6208809fc12b7fae7fcf6391604ffb7534ae522729cc4637;
dc11ec4ae5b019b0149d78c41a4871a3fe644bc00d6436318feef69b2bf30fd8;
62ebc8b0460ef9beded45dd0f94347b68153cb69f353e69aeabcd34ba2a3e4b2;
aa676b560fc5399601b4211f2d00f6fa4559c8f6e2c5a6582f0e9f282dd255df;
c03abe5e38f7d78aecff46612e32b67294f5532a690d6df027e9482cd71865db;
58fd8e5fb330ce4bed1d8e39854da86cab6432629f125d3290cfe4466123831e;
73ece579cbec57da79e68e16e133938e3023531aef045b17c3557fbfc081209f;
01c8df326a9672edfbb342c3a6f934181bba6ed9a7d925c59b039c3224ea0601.
Sovavpn.apk
d6b4ad931beb502155399c3f8b0bff3e167167249a2d635de63e04e01356e5fa;
39537c7c2374aaec0ce3be7a5e01bd4cd1507ddebf996517b54cadab2ecea7eb.
Quark.apk
130796c03558c97d4fd6aceca17ba0b208274f27f72d8d409c83dd29d4df86c3.
Dogovor.apk
23185e5ac461c987370e8fccc27bc428d618d517e586a8d3fdf0d20d50476eaf.
FreewayVPN.apk
5dbc33dd2c667201ac743715f6842588f8aecb68bbfe9b3934cd3bff344a6eb7;
a5bd309e1eb5e2e8bfc37ff21fb74ddae14ced1b1dca7cc4fa71ac5e0e505870;
2f5605b5c877a96584c8be2404f9bff4cd5aff093dd7ce9eab8b11444dcba0eb;
9e81e92d9a7f6bf280405de857b68aa6250b75b127cec365d17d1fafaff97294;
d798d70e2053242aa3b8a501e822a1efc2c9def93c9fc05d3c36148718b4b2c6.
Google Photo.apk
cfc5ea465545363e89f9c0e622f10449587a13eab6d7d2c177686d250786a79a.
ClearVPN.apk
6a27ac5b26fac24d692769c3b2d8bc3c66b010c005cd7bb5875995e8078f26b9;
ac9c0fbd7c85f7e40592c8568a26a3eed45497e4d13f82e264624d58d83e31be.
HairPlan.apk
6e9e07d309ae5ea3ed1f2c2f36409b1ca2eceb61f5e46f941b0bc9e876d618d6.
Fastervpn.apk
99798872886afdf99d58c433a1d24896420d263afb151670f75eeb77a512806e.
ObhodVPN.apk
10d06871e8424fd5a89038e3d224e93c5f7e9df17ac6858643935216c8d4860f;
67a499d48f0d628a2b09a331bb9da923132ee58d1a8fe5be8cd0726ceb71723f;
45e4b7188f105f9d2d4615b9d22e3933c64c5fdea2399b7ec63c8762c349b0c0;
dab4a509dfd2fbadeada1a8a5dda9e2a4da215498ea0698b14e90a3a07399517;
73ecca2b8286d9e35d89cbb0abf2593fa79136e8c0e561aa8a4a594f2c1c5ed7.
SvobodaVPN.apk
af9378cd45ce317b078929db2940767b6be83426a6a29fbf0f798709fc90aa34;
97e308ab86b38e5b44cd7ab356c4e2a0361856c51edcf5c2be3539eae344e531;
67a1bd0030c30a67b22e8e64f6e62f3502671240b5df1f04a2aae6a5a43ddae6;
4c288f0b3028a979e870ac0600c61bec27690b719d1e05bef451e369f46839e1;
71d8fe466ee58c9e446d3e6ac5ae1db4236e1cd5d6436e2174afc5a3546f40dc;
44ffc34b3688a3f3ef49ef4253ff34ad65792f5c7b252e3a61c9270aa1ebbf43;
b6bda6da0a393a038d9fc457ddbcd3d0ee0521e7ab7ae72d0e07e0761e7a0c92;
0744f25b8601f53bfaf2f29152088240c84c1322ceedaae034f8bd7c4fc30c1d;
0c0f338649141ad291fa85bc3ec989b329af8c592fc578de8b5a2f414ef85f44.
EagleVPN.apk
006c5f84fb292fabea84e10e14d9cd8f07a5c989ae579820babcaec110cce9b3;
f4c60970f0bdbbb6432218b59ded3926c00e76a0e43106e04cb42a6337c39ed8.
Qrproverka.apk
93630745f58dfdaa4d3d6dffc00cb18fa0d19342f891323f9a297c05d46be770.
eat2cal.apk
c471f93f9ec04732e3672d1c1bcf3403f870b341ac50924a7b32263df911b867.
KlevGid.apk
f3f1daadd4ce9ac38f16d0cc638710f55aad465b5fd21652c43a5bda56279a2a.
RouteGid.apk
8b0d74ea100f12c3adcb32361c5cce150ac203925415a5ec84f714aaf0fd7b37.
SHA-256 полезной нагрузки:
d1062e6bd4ec13c6bea5b484f42cb5034b3a2cd68a1c634a071cc4c65e9a3e33.
