Positive Technologies
PT Expert Security Center

СМС-стилеры Азии: 1000 ботов и одно исследование

СМС-стилеры Азии: 1000 ботов и одно исследование

Введение

В последнее время злоумышленники все чаще используют в качестве управляющего сервера (C2) Telegram. Группировка Lazy Koala, недавно обнаруженная и изученная нашими специалистами, — одна из них. Исследуя ботов в Telegram, мы обнаружили множество чатов индонезийского происхождения. Колоссальное количество сообщений, огромное число жертв и каждодневное появление новых ботов и чатов в Telegram привлекло наше внимание, и мы занялись исследованием этого «индонезийского всплеска».

В ходе исследования мы обнаружили связанные с чатами СМС-стилеры из Индонезии. Мы назвали их SMS Webpro и NotifySmsStealer из-за присутствующих в теле стилеров строк. Кроме того, были обнаружены единичные случаи атак на Бангладеш и Индию. Намерений злоумышленников не удалось узнать наверняка. Мы сделали предположение, что все атаки совершены с целью получить денежную выгоду и украсть личные данные пользователей.

В число потенциальных жертв, если судить по региону загрузки вредоносных образцов, также вошли пользователи из России и Белоруссии. Однако доля этих стран очень маленькая (менее 0,1%) на фоне общей массы загрузок ВПО из Индонезии.

Начало исследования

Просматривая содержимое чатов, мы заметили много однотипных индонезийских ботов, в которых сообщения имели следующий вид:

Рис. 1. Примеры сообщений в Telegram-ботах.png
Рис. 1. Примеры сообщений в Telegram-ботах

Количество такого рода сообщений в среднем составляло 10–30 тысяч. В некоторых случаях оно достигало 100 тысяч, и это только в одном чате. Даже непрофессионалу легко понять, что такие сообщения связаны с телефонами и поступающими на них СМС. Исходя из этой эвристики мы решили выделить ботов, собирающих данные с телефонов.

Рис. 2. Пример одного из ботов и связанного с ним чата с сообщениями жертв.png
Рис. 2. Пример одного из ботов и связанного с ним чата с сообщениями жертв

По сообщениям в ботах Telegram мы высекли ключевые слова и конструкции (например, фразы «SmsManager» или «Sadap Sonic»). Затем при помощи YARA отфильтровали чаты и получили порядка 1500 уникальных ботов. На рис. 1 можно заметить небольшое сходство сообщений в ботах: все они явно передают данные о поступающих уведомлениях или сообщениях с каких-то устройств. Тем не менее боты никак не были связаны между собой общими пользователями. Кроме того, у большинства ботов (рис. 2) основным языком выбран индонезийский.

В конце концов мы решили копать дальше и провели анализ связанных с телеграм-ботами файлов, от которых исходили данные сообщения. Все они оказались APK-файлами, которые заражали огромное количество телефонов на Android в Юго-Восточном регионе Азии.

Анализ основного ВПО

Среди всех встреченных нами файлов мы выделили два основных вредоносных APK: SMS Webpro и NotifySmsStealer. Их массово использовали в атаках на пользователей. Структура классов, их названия, а также сам код этих вредоносов идентичны друг другу, словно сделаны по шаблону. Отличаются только С2-серверы внутри образцов, а также формат или слова для отправки сообщений в Telegram.

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

SMS Webpro

Это приложение является стилером СМС. Жертва устанавливает его на телефон, дает нужные права. И в то время как стилер крадет телефонную переписку, ничего не подозревающая жертва видит только заготовленную приманку — декой.

Перейдем к разбору самого стилера. Первое, на что бросается взгляд при беглом осмотре приложения, — это требуемые разрешения для работы приложения в манифесте. Исходя из этих требований можно сделать вывод, что приложение может читать, отправлять и перехватывать СМС, а также иметь доступ к сети.

Рис. 3. Манифест приложения SMS Webpro.png
Рис. 3. Манифест приложения SMS Webpro

Основная функциональность содержится в пространстве имен com.example.myapplication, а именно — в классах MainActivity, ReceiveSms, SendSMS.

Рис. 4. Классы SMS Webpro.png
Рис. 4. Классы SMS Webpro

Возвращаясь к манифесту, можно заметить, что класс MainActivity является отправной точкой при запуске приложения. Этому свидетельствует тот факт, что данный класс фильтрует намерения (Intent) android.intent.action.MAIN и android.intent.category.LAUNCHER. Классы же ReceiveSms и SendSMS фильтруют намерения (Intent) android.provider.Telephony.SMS_RECEIVED, срабатывающие при получении входящих сообщений. Они являются ресиверами, значит, этот участок кода срабатывает всякий раз, когда происходит событие, подходящее под фильтрующие его намерения.

Рис. 5. Основные намерения и их обработка SMS Webpro.png
Рис. 5. Основные намерения и их обработка SMS Webpro

Сперва рассмотрим основной класс — MainActivity. При первичном запуске приложения используется класс WebView. С его помощью открывается интерактивный сайт по заданной ссылке. Это сделано для отвлечения внимания пользователя от основного вредоносного действия программы. Затем идет запрос на необходимые разрешения для успешной работы стилера.

Рис. 6. Класс MainActivity.png
Рис. 6. Класс MainActivity

Ссылку можно также просмотреть в браузере. В данном случае приложение маскируется под свадебное приглашение, и ничего вредоносного в открытой странице нет. Свадебные приглашения — далеко не единственный пример маскировки SMS Webpro. Однако об этом речь пойдет позже.

Рис. 7. Пример сайта, открывающегося при запуске apk.png
Рис. 7. Пример сайта, открывающегося при запуске .apk

После уже делается запрос на требуемые разрешения для кражи СМС-сообщений. В случае успеха в бот посылается сообщение об успешной установке файла .apk приложения SMS Webpro и о подключении нового пользователя. Каждый пользователь идентифицируется уникальными для телефона параметрами:

  • Build.FINGERPRINT — уникальный идентификатор сборки; 
  • Build.TIME — UNIX-время создания сборки, выраженное в миллисекундах.
     

Возвращаясь к исходному манифесту, можно заметить, что классы ReceiveSms и SendSMS в том же пространстве имен являются ресиверами на событие получения СМС:

Рис. 8. Манифест SMS Webpro.png
Рис. 8. Манифест SMS Webpro

Рассмотрим класс ReceiveSms. Проверяется, произошло нужное событие или нет. Если сработало событие android.provuder.Telephony.SMS_RESEVED, из события извлекаются текст и номер телефона отправителя. После этого формируется сообщение, которое отправляется в телеграм-бот.

Рис. 9. Класс ReceiveSms.png
Рис. 9. Класс ReceiveSms

Класс SendSMS принимает те же события на вход и так же отправляет сообщения на сервер, но с одним отличием. Если полученное сообщение (без спецсимволов «&» и «#») начинается со строки 55555 и подходит под следующий шаблон, то на извлеченный из события телефонный номер отправляется сообщение с исходным текстом.

55555,<telephone_num>,<sms_text>


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

NotifySmsStealer

Это ВПО можно считать продолжением SMS Webpro, поскольку в нем переиспользованы классы RecieveSms и SendSMS. Общая логика та же: это стилер, прикрывающий свою деятельность открытой страничкой в браузере. Но важное отличие этого вредоноса — функциональность кражи не только сообщений, но и уведомлений.

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

Рис. 10. Манифест NotifySmsStealer.png
Рис. 10. Манифест NotifySmsStealer

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

Рис. 11. Объявление NotificationService в манифесте.png
Рис. 11. Объявление NotificationService в манифесте

Пространство имен и классы, если оценивать их по названию, особенно не поменялись. Класс MainActivityAlias расширяет класс MainAcivity, добавляя гарантированную дефолтную имитацию веб-страницы, в основном страницы google.com.

Рис. 12. Классы NotifySmsStealer.png
Рис. 12. Классы NotifySmsStealer

В основном классе MainActivity добавился новый элемент класса onNotice — BroadcastReceiver для обработки событий из класса NotificationService. Для того чтобы он начал обрабатывать события, надо его динамически зарегистрировать. Это делается методом registerReciver в самом конце работы функции onRequestPermissionsResult для прослушивания намерений с пометкой msg.

Рис. 13. Создание локального ресивера.png
Рис. 13. Создание локального ресивера

А вот сам NotificationService просто получает события появления уведомлений на телефоне. Из полученного события он извлекает параметры Title, Text, Data.

Рис. 14. Класс сервиса уведомлений.png
Рис. 14. Класс сервиса уведомлений

Затем создается намерение с пометкой msg. К нему добавляются в качестве дополнительных параметров все извлеченные данные. Это намерение направляют при помощи sendBroadcast в приложение. Так как до этого в классе MainActivity был настроен BroadcastReciver на это намерение, оно попадает в интересовавший нас изначально класс.

Рис. 15. Ресивер onNotice.png
Рис. 15. Ресивер onNotice

В созданном ресивере onNotice при получении на вход нужного намерения срабатывает метод OnRecive. В нем извлекаются ранее описанные параметры сообщения, которые содержат информацию о приходящем уведомлении. После этого формируется сообщение для отправки в телеграм-бот.

Анализ уникальных образцов

В ходе анализа встречались и standalone-«чудаки», которых нельзя причислить ни к одному из предыдущих видов стилеров (или они являются редкой модификацией остальных стилеров). Телеграм-боты, которые использовали в качестве C2 такие семплы, имели связь только с одним файлом. Ниже рассмотрены некоторые экземпляры, которые имели нестандартные названия, форматы сообщений или особенности кода.

Gallery Stealer

В начале февраля 2024 года был зарегистрирован бот под названием Sms Bombing Gallery Hack. Все пересылаемые им сообщения не содержали никакого текста. Вся переписка состояла из одних фотографий. Это привлекло наше внимание, и мы решили подробнее исследовать приложение, связанное с этим ботом.

Рис. 16. Пример содержимого чата с Sms Bombing Gallery Hack.png
Рис. 16. Пример содержимого чата с Sms Bombing Gallery Hack

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

Посмотрим, как работает само приложение. На вход оно требует приличное количество разрешений: от очевидного доступа к памяти до пока непонятного разрешения на вибрацию. Ко всему прочему, ему требуется доступ к контактам на чтение и запись, а также на установление контактов по умолчанию. Последние три требования характерны для таких приложений, как менеджер контактов. Однако в приложении фильтруется только намерение на его запуск. Исходя из логики манифеста, первым запустится класс MainActivity.

Рис. 17. Манифест Gallery Stealer.png
Рис. 17. Манифест Gallery Stealer

Перейдем к классу MainActivity в пространстве имен com.my.newproject39. При старте в методе OnCreate запускают приманку. После инициализации графического интерфейса и создания полей для ввода приложение требует от пользователя ввести номер телефона и некоторое число. Если в поле ничего нет, он выводит сообщения Enter Number и Enter Amount. После ввода данных пользователь видит сообщение об успешной отправке СМС. При этом на самом деле введенный телефонный номер отправляется на сервер bkashotp-siam[.]vercel[.]app по четырем различным URL-адресам. После нескольких тысяч таких реквестов телефон «радостно» вибрирует.

Рис. 18. Код для создания приманки в Gallery Stealer.png
Рис. 18. Код для создания приманки в Gallery Stealer

На фоне же (если пользователь одобрил нужные разрешения) начинается настоящая активность приложения в методе initializeLogic. Приложение пытается получить названия всех файлов с разрешением .jpg при помощи функции getJpgFilesinDirectory. На вход подается путь к папке /storage/emulated/0/DCIM/Camera, отвечающей за хранение в системе фотографий, а на выход отдается массив названий файлов. Итерируясь по списку найденных файлов, стилер читает файл картинки и посылает ее на управляющий сервер с помощью функции TelegramImageUploader.

Рис. 19. Сбор фотографий.png
Рис. 19. Сбор фотографий

Если перейти в метод, отвечающий за отправку фото в Telegram, то можно отметить довольно ожидаемую функциональность. Создается POST-запрос на API Telegram — sendPhoto, где и фигурирует токен телеграм-бота. Данные посылаются в необработанном виде, начало и конец фотографии отделены символами *****.

Рис. 20. Отправка картинок в телеграм-бот.png
Рис. 20. Отправка картинок в телеграм-бот

Можно отметить, что в проекте присутствует много неиспользованных методов и даже классов. Это свидетельствует о некоторой недоработанности проекта или слабых навыках в программировании у разработчика.

Внутри стилера автор оставил кнопку со ссылкой на свой телеграм-канал Dark_Cyber_Security, а также примечание: «Developed By Abu Talha Al Nayeem». По имени находятся связанные аккаунты в соцсетях разработчика Abu Talha Al Nayeem.

Рис. 21. Аккаунт разработчика.png
Рис. 21. Аккаунт разработчика

Текст в Instagram-аккаунте бенгальский, а телеграм-канал публикует посты из Бангладеша. Эти факты указывают на то, что автор стилера родом из страны Бангладеш. Кроме того, с таким именем есть аккаунт в threads.net, в котором опубликована фотография хакера.

Рис. 22 Фото хакера в соцсетях.png
Рис. 22 Фото хакера в соцсетях

В одном из аккаунтов у Abu Talha Al Nayeem указан родной город — Alekhar Char, Chittagong, Bangladesh, что подтверждает сказанное ранее.

Модификация SMS Webpro

Рассматриваемый в этой главе образец является модификацией обычного стилера SMS Webpro. Сам стилер был замечен по необычным сообщениям в телеграм-боте HACK SMS BOT. Начиная с декабря прошлого года в чат с этим ботом приходят сообщения, которых набралось порядка 19 тысяч. При установке приложения к С2, в роли которого опять выступает телеграм-бот, отправляется сообщение с заголовком Aplikasi Sudah Terisntal, а также приходит много информации о самом устройстве.

Рис. 23. Сообщения в боте HACK SMS BOT.png
Рис. 23. Сообщения в боте HACK SMS BOT

К сожалению, нам не удалось получить сам APK-файл, а только один из его DEX-файлов. Но названия классов в пространстве имен com.example.myapplication полностью идентичны с обычной версией SMS Webpro. При открытии класса MainActivity мы сразу понимаем, из-за чего идет такой большой поток данных в Telegram. При сборе информации об устройстве в бота отправляются следующие дополнительные параметры из общедоступного класса Build:

  • ID
  • User
  • Product
  • Brand
  • Device
  • Board
  • BOOTLOADER
  • DISPLAY
  • FINGERPRINT
  • HARDWARE
  • HOST
  • MANUFACTURER
  • MODEL
  • TAGS
  • TYPE
  • Product


В остальном приложение ничем не отличается от классической вариации стилера SMS Webpro. Несмотря на то что число сообщений в чате достигает 19 тысяч, число уникальных жертв составляет 16 человек, если выбирать по уникальному ID устройств.

FalseCaller

Мы обнаружили бота MyNotificationListenerBot, отличавшегося нестандартным форматом сообщений. Первое сообщение в чате датируется 26 декабря 2023 года. Мы нашли связанное с ботом приложение Truecaller_13.47.9_sign.apk, загруженное из Индии.

Рис. 24. MyNotificationListnerBot.png
Рис. 24. MyNotificationListnerBot

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

Certificate Subject

FalseCaller

Clean TrueCaller

Distinguished NameC:IN, CN:fast, ST:INCN:truecaller
Common Namefasttruecaller
Country CodeIN-
StateIN-

Посмотрим, что лежит внутри самого приложения. В манифесте порядка 1000 строк. Большинство из них принадлежит настоящему приложению Truecaller. Однако в самом конце манифеста присутствуют три записи, не относящиеся к настоящему приложению (выделены фиолетовым на рис. 25). Классы com.truecaller.MyNotificationListener, com.truecaller.SmsReceiver и com.truecaller.AnswerCallBroadcastReceiver фильтруют намерения на прием уведомлений, СМС и звонков соответственно.

Рис. 25. Дополнение манифеста вредоносными классами.png
Рис. 25. Дополнение манифеста вредоносными классами

Однако встает вопрос: неужели в приложении Truecaller нет своих обработчиков на те же намерения? И как в таком случае будет работать сервис и ресиверы, если они фильтруют одно и то же намерение? Дело в том, что если у фильтра намерений выставлен приоритет, то обработчик с наивысшим приоритетом и будет работать.

Для классов AnswerCallBroadcastReceiver и SmsReceiver все плохо: у самого Truecaller выставлен фильтр с приоритетом выше. Однако для сервиса уведомлений приоритеты одинаковые. Это значит, что сообщение отдается случайному сервису. При проверке сообщений на управляющем сервере и правда оказывается, что до него доходили только сообщения об уведомлениях.

Рассмотрим сам сервер поближе. Данный сервер расширяет класс NotificationListenerService, изначально определенный в системе. Теперь со 100%-ной уверенностью можно утверждать, что все сообщения об уведомлениях будут приходить сюда. Переписанный метод onNotificationPosted, вызываемый при появлении уведомления, выполняет две интересующие нас функции: firstAction и secondAction.

Рис. 26. Метод onNotificationPosted.png
Рис. 26. Метод onNotificationPosted

В функции firstAction хоть и узнается информация о системе, результаты запроса уходят в никуда. А вот в функции secondAction происходит вызов класса Async_TelegramNotifySender, который является асинхронным классом, дочерним по отношению к классу AsyncTask.

Рис. 27. Вызов асинхронного класса.png
Рис. 27. Вызов асинхронного класса

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

Рис. 28. Создание и отправка сообщения в Telegram.png
Рис. 28. Создание и отправка сообщения в Telegram

Исследуя сообщения в телеграм-боте, мы обнаружили среди 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 NameC:US, CN:Android, L:Mountain View, O:Android, ST:California, OU:Android, email:android@android.comC:91, CN:ICICI BANK, L:MUMBAI, O:ICICI BANK, ST:MAHARASHTRA, OU:ICICI BANK
Common NameAndroidICICI BANK
Country CodeUS91
StateCaliforniaMAHARASHTRA

Рассмотрим манифест. Кроме встречавшихся ранее классических разрешений для СМС-стилеров требуются еще два. Разрешения oppo.permission.OPPO_COMPONENT_SAFE и com.huawei.permission.external_app_settings.USE_COMPONENT нужны для доступа к функциям экономии заряда приложения.

Рис. 29. Манифест ICARD и требуемые разрешения.png
Рис. 29. Манифест ICARD и требуемые разрешения

Основной класс, вызываемый при запуске приложения, находится в пространстве имен nn.nn и называется MainActivity.

Рис. 30. Основной класс ICARD.png
Рис. 30. Основной класс ICARD

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

Рис. 31. Основной ресивер ICARD.png
Рис. 31. Основной ресивер ICARD

И первое, что мы замечаем в классе MainActivity, — что большинство строк зашифровано. Перейдем в функцию дешифратора. В классе для дешифровки строк реализован достаточно простой алгоритм: все строки сначала проходят расшивку base64, а потом на полученный массив байтов накладывается циклический Xor со строкой-ключом «UTF-8».

Рис. 32. Класс дешифровки строк ICARD.png
Рис. 32. Класс дешифровки строк ICARD

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

Рис. 33. Метод OnCreate в ICARD.png
Рис. 33. Метод OnCreate в ICARD

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

Рис. 34. Сокрытие функциональности внутренней html страницей.png
Рис. 34. Сокрытие функциональности внутренней html страницей

Перейдем в ресурсы самого стилера и посмотрим внешний вид страницы. При запуске появляется лого банка ICICI, и спустя некоторое время загружается форма аутентификации на сайте. Злоумышленники поставили тайм-аут на загрузку страницы регистрации для более достоверной имитации запуска приложения.

Рис. 35. Липовая форма для входа в ICICI Bank.png
Рис. 35. Липовая форма для входа в ICICI Bank

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

Рис. 36. Картинка-заглушка.png
Рис. 36. Картинка-заглушка

Если еще поковыряться в ресурсах самого приложения, то можно найти несколько неиспользуемых картинок, не относящихся к ICICI Bank.

Рис. 37. Картинки в ресурсах ICICI Bank.png
Рис. 37. Картинки в ресурсах ICICI Bank

Как видно, большая часть из них имеет логотип BIG BAZAAR. Данное логотип и название принадлежит сети индийских флагманских магазинов с таким же названием. У этой компании также есть мобильное приложение для совершения онлайн-покупок. Можно предположить, что злоумышленник ранее использовал тот же метод сокрытия вредоносной деятельности, но в качестве приманки использовал онлайн-магазин.

Вернемся к основному классу. После того, как у пользователя открылась фишинговая страница, стилер извлекает из ресурсов данные для коммуникации с управляющим сервером: ID телеграм-бота и ID чата.

Рис. 38. Получение ресурсов для коммуникации с C2.png
Рис. 38. Получение ресурсов для коммуникации с C2

Далее приложение проверяет, чтобы было не более пяти попыток запустить эту функцию. При успешном запуске приложение пытается настроить автостарт для телефонов модели OPPO. После этого стилер отправляет приветственное сообщение. Но кроме марки и модели телефона, стилер также пытается получить информацию об IMSI. Для этого он использует способ, не требующий никаких дополнительных разрешений, но работающий только для Android версии 11.

Рис. 39. Получение IMSI.png
Рис. 39. Получение IMSI

К базе данных телефона 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, которые и отправляет на сервер в дополнение к приветственному сообщению.

В ресивере для входящих СМС ничего интересного не происходит. По уже ставшей классической схеме из сообщения извлекается текст и отправитель. После данные отсылаются на сервер с пометкой бренда и модели телефона в качестве идентификатора.

Рис. 40. Ресивер ICARD.png
Рис. 40. Ресивер ICARD

Сам банк разместил информацию о распространении ложных версий на своей официальной страничке в LinkedIn. Цепочка заражения начинается через СМС и сообщения в WhatsApp под видом уведомлений от банковского сотрудника о том, что текущая версия приложения банка не работает. В качестве решения этой проблемы присылается якобы новое обновленное приложение — APK-файл, который и содержит вредонос.

Источники заражения

Судя по новостям в индонезийских СМИ, самый большой источник распространения стилеров в Индонезии — мессенджер WhatsApp. Согласно статье CNN Indonesia, существуют авторы стилеров, зарабатывающие на продаже вредоносных программ. Этот факт объясняет однотипность приложений и массовость их распространения.

Такая активность не осталась незамеченной и была освещена исследователями ранее, например в статье об СМС-стилерах. Но в ней освещена лишь верхушка айсберга.

Что касается способа доставки ВПО, то в основном используется фишинг. Жертве присылают сообщение с вложением в виде APK-файла. Пользователи кликают на вложение, не заметив его расширения. В результате этого действия на телефон устанавливается СМС-стилер. Само вредоносное приложение маскируется под различные сервисы и документы: курьерскую доставку посылок, свадебные приглашения, электронные штрафы за проезд, интернет-счета, вакансии, уведомления комитетов по голосованию.

Рис. 41. Пример фишинга через WhatsApp.png
Рис. 41. Пример фишинга через WhatsApp

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

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


В вышеупомянутых статьях перечислены различные виды маскировок приложений, которые согласуются с нашей статистикой по содержащимся во вредоносных APK отвлекающим внимание ссылкам. Мы извлекли ссылки из всех собранных нами образцов. На удивление, бóльшая часть адресов — имитация приглашений, преимущественно свадебных. Вторую по величине долю составили фишинговые ссылки, имитирующие банковские приложения или просто официальные страницы настоящих банков. Следом за ним идут сайты доставок, ссылки на приложения в Google Play и различного рода формы для заполнения (опросники). Из экзотических ссылок — имитация чековых транзакций, сайт для покупки и продаже недвижимости, коллекция фотографий в Pinterest с распечатками чеков и даже статья об изучении английского языка.

Таблица 1. Статистика по типам используемых приманок

Во многих образцах в качестве фишинга использовалась ссылка google.com. Мы предполагаем, что злоумышленники могли использовать некоторый шаблон стилера. И в этом случае ссылку на поисковую страничку могли оставить как дефолтную страницу в шаблоне. Если не учитывать эти данные в нашем исследовании, то складывается следующая картина. Чаще всего для развертывания фишинговых сервисов использовались облачные платформы и онлайн-конструкторы сайтов, такие как Vercel, Bubble и Tilda. Огромной популярностью также пользуются открытые индонезийские сервисы для создания свадебных онлайн-приглашений, такие как Our Wedding или Undang Kami. По классике, остаются в ходу и сервисы для создания коротких ссылок, такие как s.id.

Таблица 2. Самые популярные домены для фишинга

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

Заключение

Мы обнаружили более 1000 телеграм-ботов, используемых в качестве управляющих серверов для ВПО. Предположительной целью является атака на пользователей — получение денежных средств и, возможно, личных данных.

Несмотря на большое количество атак, львиная доля вредоносного ПО принадлежат двум типам стилеров — SMS Webpro и NotifySmsStealer. Это говорит о том, что стилеры не пишутся с нуля. Покупается его билдер или шаблон. Единственное, что меняют злоумышленники, — свой C2-сервер в Telegram.

Среди всей этой массы стилеров встречаются и уникальные случаи. Несмотря на отличия в коде и исполнения стилеров, предмет кражи остается тем же — СМС и уведомления пользователей. Уникальные стилеры действуют по Индии и Бангладеш.

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

По нашим наблюдениям, наибольшее число пострадавших — граждане Индонезии, если смотреть статистику по странам, из которых были загружены образцы ВПО. Количество предполагаемых жертв в Индонезии исчисляется тысячами. В таких странах, как Индия, Сингапур количество загрузок ВПО не превышала нескольких 10-ков. Единичными случаями были возможные атаки на Россию, Беларусь и Малайзию. Такая статистика не удивительна — основной декой рассчитан на граждан Индонезии.

Чтобы уберечься от подобной атаки, стоит следовать простым правилам безопасности:

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


Автор:

Варвара Ахапкина, специалист экспертного центра безопасности Positive Technologies (PT Expert Security Center, PT ESC)