В последнее время злоумышленники все чаще используют в качестве управляющего сервера (C2) Telegram. Вспомним хотя бы группировку Lazy Koala, о которой рассказывали здесь недавно. Колоссальное количество сообщений, огромное число жертв и каждодневное появление новых ботов и чатов в Telegram привлекли наше внимание, и мы занялись исследованием этого «всплеска». В ходе исследования мы обнаружили связанные с чатами СМС-стилеры из Индонезии. Подробнее об этом можно почитать в расширенном материале.
В этой статье мы расскажем про источники заражения и разберем уникальные экземпляры стилеров, которые имели нестандартные названия, форматы сообщений или особенности кода. Намерений злоумышленников нам не удалось узнать наверняка. Предполагаем, что все атаки совершены с целью наживы и кражи личных данных пользователей. Итак, команда PT ESC снова в деле!
Источники заражения
По данным индонезийским СМИ, самый большой источник распространения стилеров — мессенджер WhatsApp. В статье CNN Indonesia рассказывается, что существуют авторы стилеров, зарабатывающие на продаже вредоносных программ. Этим можно объяснить однотипность приложений и массовость их распространения.
Что касается способа доставки ВПО, то в основном используется фишинг. Жертве присылают сообщение с вложением в виде APK-файла. Пользователи кликают на вложение, не заметив его расширения. В результате этого действия на телефон устанавливается СМС-стилер. Само вредоносное приложение маскируется под различные сервисы и документы: курьерскую доставку посылок, свадебные приглашения, электронные штрафы за проезд, интернет-счета, сообщения о вакансиях, уведомления комитетов по голосованию.
Кроме фишинга присутствует и другой, менее популярный способ распространения ВПО через фишинговые сайты. В ходе анализа мы обнаружили несколько ссылок, с которых скачивались вредоносные приложения. Поскольку их срок действия давно истек, только по названию скачиваемых с них приложений можно догадаться, подо что маскировались эти сайты:
http[:]//otp-bni.rf[.]gd
https[:]//pinjaman-pribadi[.]com
https[:]//wwwww.hengwin888.biz[.]id
https[:]//octoclicks.quizfinansial[.]cloud
https[:]//665c7425f6ef0924050d5bc7812d2870.cdn.bubble[.]io
https[:]//281057a700b761e04b22986e2c5809f2.cdn.bubble[.]io
https[:]//18598dc911409c4f002efc088d87a908.cdn.bubble[.]io
https[:]//upgradekartukrediitdbs00.getnew.my.id
На удивление, бóльшая часть адресов — это имитация свадебных приглашений. Вторую по величине долю составили фишинговые ссылки, имитирующие банковские приложения или просто официальные страницы настоящих банков. Следом за ним идут сайты доставок, ссылки на приложения в Google Play и различного рода формы для заполнения (опросники). Из экзотических ссылок — имитация чековых транзакций, сайт для покупки и продаже недвижимости, коллекция фотографий в Pinterest с распечатками чеков и даже статья про изучение английского языка.
Во многих образцах в качестве фишинга использовалась ссылка google.com. Мы предполагаем, что злоумышленники могли использовать некий шаблон стилера. Чаще всего для развертывания фишинговых сервисов использовались облачные платформы и онлайн-конструкторы сайтов, такие как Vercel, Bubble и Tilda. Огромной популярностью также пользуются открытые индонезийские сервисы для создания свадебных онлайн-приглашений, такие как Our Wedding или Undang Kami. По классике, остаются в ходу и сервисы для создания коротких ссылок, такие как s.id.
Основная цель такой атаки — обычные пользователи. Во многих СМС-сообщениях, которые приходят на телефон, содержатся одноразовые коды. С их помощью можно получить подтверждение для входа в аккаунты, например в мессенджерах. Но самыми уязвимыми являются одноразовые пароли от банковских аккаунтов: перехватив их, злоумышленник может вывести средства жертвы со счета.
Анализ уникальных образцов
В ходе анализа встречались standalone-«чудаки», которые отличались от двух самых распространенных образцов SMS Webpro и NotifySmsStealer или они были их редкой модификацией. Ниже рассмотрены некоторые экземпляры, которые показались нам наиболее интересными.
Gallery Stealer
В начале февраля 2024 года был зарегистрирован бот под названием Sms Bombing Gallery Hack. Все пересылаемые им сообщения не содержали никакого текста: вся переписка состояла из одних фотографий.
Хотя в качестве основного языка чата в Telegram, куда отправлялись украденные данные, стоял английский, на фотографиях встречались лица людей с азиатской внешностью, а также города Индии.
На вход приложение-стилер требовало приличное количество разрешений: от очевидного доступа к памяти до непонятного разрешения на вибрацию. Ко всему прочему, ему нужен был доступ к контактам на чтение и запись, а также на установление контактов по умолчанию. Последние три требования характерны для таких приложений, как менеджер контактов. Однако в приложении фильтруется только намерение на его запуск. Исходя из логики манифеста, первым запустится класс MainActivity
.
Перейдем к классу MainActivity
в пространстве имен com.my.newproject39
. При старте в методе OnCreate
запускают приманку. После инициализации графического интерфейса и создания полей для ввода приложение требует от пользователя ввести номер телефона и некоторое число. Если в поле ничего нет, он выводит сообщения Enter Number и Enter Amount. После ввода данных пользователь видит сообщение об успешной отправке СМС. При этом на самом деле введенный телефонный номер отправляется на сервер bkashotp-siam[.]vercel[.]app
по четырем различным URL-адресам. После нескольких тысяч таких реквестов телефон «радостно» вибрирует.
На фоне же (если пользователь одобрил нужные разрешения) начинается настоящая активность приложения в методе initializeLogic
. Приложение пытается получить названия всех файлов с разрешением .jpg при помощи функции getJpgFilesinDirectory
. На вход подается путь к папке /storage/emulated/0/DCIM/Camera, отвечающей за хранение в системе фотографий, а на выход отдается массив названий файлов. Итерируясь по списку найденных файлов, стилер читает файл картинки и посылает ее на управляющий сервер с помощью функции TelegramImageUploader
.
Если перейти в метод, отвечающий за отправку фото в Telegram, то можно отметить довольно ожидаемую функциональность. Создается POST-запрос на API Telegram — sendPhoto
, где и фигурирует токен телеграм-бота. Данные посылаются в необработанном виде, начало и конец фотографии отделены символами *****.
Разработчик не доделал проект: в нём присутствует много неиспользованных методов и даже классов. Другой факт, подтверждающий неопытность автора – кнопка со ссылкой на его телеграм-канал Dark_Cyber_Security, а также примечание: «𝐃𝐞𝐯𝐞𝐥𝐨𝐩𝐞𝐝 𝐁𝐲 𝐀𝐛𝐮 𝐓𝐚𝐥𝐡𝐚 𝐀𝐥 𝐍𝐚𝐲𝐞𝐞𝐦». По имени находятся связанные аккаунты в соцсетях разработчика Abu Talha Al Nayeem.
Текст в Instagram-аккаунте* бенгальский, а телеграм-канал публикует посты из Бангладеша. Кроме того, с таким именем есть аккаунт в threads.net, в котором опубликована фотография хакера.
* Instagram принадлежит компании Meta Inc., которая признана экстремистской и запрещена в РФ.
FalseCaller
Мы также обнаружили бота MyNotificationListenerBot, отличавшегося нестандартным форматом сообщений, и связанное с ботом приложение Truecaller_13.47.9_sign.apk, загруженное из Индии.
Несмотря на название, можно заметить, что это не настоящее приложение: его сертификат сгенерирован на скорую руку, и подписывающая компания называется fast, в то время как у настоящего приложения это Truecaller. Из-за такого подражания оригинальному приложению мы назвали этот стилер FalseCaller.
Certificate Subject | FalseCaller | Clean TrueCaller |
Distinguished Name | C:IN, CN:fast, ST:IN | CN:truecaller |
Common Name | fast | truecaller |
Country Code | IN | - |
State | IN | - |
В манифесте приложения порядка 1000 строк. Большинство из них принадлежит настоящему приложению Truecaller. Однако в самом конце манифеста присутствуют три записи, не относящиеся к настоящему приложению (выделены фиолетовым на рисунке ниже). Классы com.truecaller.MyNotificationListener
, com.truecaller.SmsReceiver
и com.truecaller.AnswerCallBroadcastReceiver
фильтруют намерения на прием уведомлений, СМС и звонков соответственно.
Исследуя сообщения в телеграм-боте, мы обнаружили среди 100 тысяч сообщений по меньшей мере 24 жертвы данного стилера. Номера принадлежали телекоммуникационным компаниям Bharti Airtel и Reliance Jio Infocomm. Обе компании в основном работают в Индии.
ICARD
Еще один обнаруженный нами бот — ICARD. APK-файл для установки вредоноса имел примечательное название — ICICI BANK.apk.apk. Злоумышленники подделывали оригинальное приложение банка ICICI. При этом официальное название приложения в Google Play отличается — оно называется iMobile Pay. Сертификат у вредоносного приложения явно поддельный, хотя сделан заметно лучше, чем у предыдущего стилера, и выглядит достоверным.
Непрофессиональным взглядом сложно заметить что-то подозрительное. Внизу приведено сравнение сертификатов оригинального и поддельного приложения.
Certificate Subject | ICARD | iMobile Pay |
Distinguished Name | C:US, CN:Android, L:Mountain View, O:Android, ST:California, OU:Android, email:android@android.com | C:91, CN:ICICI BANK, L:MUMBAI, O:ICICI BANK, ST:MAHARASHTRA, OU:ICICI BANK |
Common Name | Android | ICICI BANK |
Country Code | US | 91 |
State | California | MAHARASHTRA |
Перейдем в ресурсы самого стилера и посмотрим внешний вид страницы. При запуске появляется лого банка ICICI, и спустя некоторое время загружается форма аутентификации на сайте. Злоумышленники поставили тайм-аут на загрузку страницы регистрации для более достоверной имитации запуска приложения.
При вводе любых значений в форму происходит редирект на следующую страницу, которая подгружает картинку с информацией о том, что сервис не доступен по техническим причинам. Такая уловка не только отвлекает внимание пользователей, но и заставляет их через какое-то время повторно выполнять вход, гарантируя дополнительный запуск вредоноса.
После того, как у пользователя открылась фишинговая страница, стилер извлекает из ресурсов данные для коммуникации с управляющим сервером: ID телеграм-бота и ID чата.
Далее приложение проверяет, чтобы было не более пяти попыток запустить эту функцию. При успешном запуске приложение пытается настроить автостарт для телефонов модели OPPO. После этого стилер отправляет приветственное сообщение.
К базе данных телефона siminfo происходит обращение с запросом следующего вида:
Query = getApplicationContext().getContentResolver().query(
Uri.parse("content://telephony/siminfo"),
new String[]{
"_id", "sim_id", "imsi","icc_id","number","display_name"
},
"0=0",
new String[0],
null
);
При таком запросе злоумышленник получает все строки данных из всех вышеперечисленных столбцов. Однако, перебирая все результаты, он извлекает только поля number и display_name, которые и отправляет на сервер в дополнение к приветственному сообщению.
В ресивере для входящих СМС ничего интересного не происходит. По уже классической схеме из сообщения извлекается текст и отправитель. Потом данные отсылаются на сервер с пометкой бренда и модели телефона в качестве идентификатора.
Сам банк разместил информацию о распространении ложных версий на своей официальной страничке в LinkedIn. Цепочка заражения начинается через СМС и сообщения в WhatsApp под видом уведомлений от банковского сотрудника о том, что текущая версия приложения банка не работает. В качестве решения этой проблемы присылается якобы новое обновленное приложение — APK-файл, который и содержит вредонос.
Как защититься?
Чтобы уберечься от подобных атак, стоит следовать простым правилам безопасности:
Проверять расширения передаваемых вам файлов.
Не скачивать приложения от незнакомых вам номеров, даже если отправители представляются банковскими работниками.
При загрузке приложения из Google Play убедиться в правильности названия приложения, проверив его в официальных источниках.
Не загружать и не устанавливать приложения, требующие подозрительных разрешений для данного типа приложения.
Будьте начеку, не принимайте приглашения на свадьбу и следите за безопасностью своих данных.
Группа исследования сложных угроз
PT Expert Security Center