В августе 2025 года мы обнаружили вредоносную кампанию, нацеленную на пользователей в Турции. Злоумышленники распространяли банковский троянец для Android, который мы назвали Frogblight. Изначально зловред маскировался под приложение для просмотра судебных дел на портале госуслуг. Позднее появились более универсальные варианты маскировки, например под браузер Chrome.
Frogblight может задействовать официальные веб-сайты, например турецкий портал госуслуг, в качестве посредников для кражи банковских данных. Кроме того, троянец обладает рядом шпионских функций: он способен собирать SMS-сообщения, список установленных на устройстве приложений и информацию о файловой системе, а также отправлять произвольные SMS. Примечательно, что в сентябре мы зафиксировали появление обновленных версий Frogblight с дополнительными возможностями. Вполне вероятно, что злоумышленники разрабатывают многофункциональный Android-зловред, который в будущем может распространяться по модели «вредоносное ПО как услуга» (MaaS).
Продукты «Лаборатории Касперского» детектируют эту угрозу как HEUR:Trojan-Banker.AndroidOS.Frogblight.*, HEUR:Trojan-Banker.AndroidOS.Agent.eq, HEUR:Trojan-Banker.AndroidOS.Agent.ep и HEUR:Trojan-Spy.AndroidOS.SmsThief.de.
Техническая информация
Предыстория
В ходе анализа мобильного вредоносного ПО из различных источников мы выявили несколько образцов, относящихся к новому семейству зловредов. Хотя они выглядели недоработанными, они уже обладали множеством функций, позволяющих отнести их к банковским троянцам. Новые версии зловреда продолжали регулярно появляться, и мы начали отслеживать его развитие. Кроме того, нам удалось обнаружить его панель управления, а в ней — название fr0g, поэтому мы присвоили семейству имя Frogblight.
Начальный вектор заражения
Как мы полагаем, одним из каналов распространения Frogblight является SMS-фишинг (смишинг), при этом пользователи должны сами загрузить и установить вредоносное ПО. В интернете мы нашли жалобы турецких пользователей на фишинговые SMS, которые убеждали их, что они стали участниками судебного разбирательства, и предлагали загрузить зловред по вложенной ссылке. Некоторые версии Frogblight, включая самые ранние, маскировались под приложение для просмотра судебных дел на портале госуслуг и имели те же названия, что и файлы, распространявшиеся по ссылкам, о которых шла речь выше.
Изучая в Сети упоминания названий, используемых троянцем, мы обнаружили один из фишинговых сайтов, распространявших Frogblight. Он был замаскирован под портал для просмотра судебных дел.
Нам удалось получить доступ к административной панели этого сайта, где отображается статистика загрузок вредоносного ПО Frogblight. Однако механизм обновления статистики реализован не полностью, и злоумышленникам видны только данные о собственных загрузках.
Кроме того, мы нашли исходный код этого фишингового сайта в публичном репозитории GitHub. Судя по описанию, он адаптирован для быстрого развертывания на Vercel — платформе для хостинга веб‑приложений.
Возможности приложения
Как уже упоминалось, изначально зловред Frogblight был замаскирован под приложение для просмотра судебных дел на портале госуслуг. Рассмотрим один из образцов с этим вариантом маскировки (MD5 9dac23203c12abd60d03e3d26d372253). Для анализа мы выбрали ранний образец, однако не самый первый из обнаруженных, чтобы продемонстрировать более полноценную версию Frogblight.
После запуска приложение запрашивает у жертвы разрешения на отправку и чтение SMS, а также на чтение и запись данных во внутреннем хранилище Android якобы для отображения материалов судебного дела, связанного с пользователем.
Вот полный список запрошенных разрешений из файла манифеста приложения:
- MANAGE_EXTERNAL_STORAGE
- READ_EXTERNAL_STORAGE
- WRITE_EXTERNAL_STORAGE
- READ_SMS
- RECEIVE_SMS
- SEND_SMS
- WRITE_SMS
- RECEIVE_BOOT_COMPLETED
- INTERNET
- QUERY_ALL_PACKAGES
- BIND_ACCESSIBILITY_SERVICE
- DISABLE_KEYGUARD
- FOREGROUND_SERVICE
- FOREGROUND_SERVICE_DATA_SYNC
- POST_NOTIFICATIONS
- QUICKBOOT_POWERON
- RECEIVE_MMS
- RECEIVE_WAP_PUSH
- REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
- SCHEDULE_EXACT_ALARM
- USE_EXACT_ALARM
- VIBRATE
- WAKE_LOCK
- ACCESS_NETWORK_STATE
- READ_PHONE_STATE
После получения всех необходимых разрешений зловред открывает через WebView официальную веб-страницу для просмотра судебных дел на реальном портале госуслуг и предлагает жертве войти туда. Портал предлагает несколько способов авторизации, один из которых — через онлайн-банкинг. При выборе этого варианта пользователь должен указать банк, к которому привязано приложение для онлайн-банкинга, и ввести данные для входа на официальном сайте банка. Именно эти данные нужны Frogblight, поэтому спустя две секунды троянец самостоятельно открывает экран входа через онлайн-банкинг, игнорируя выбор пользователя. В каждую веб-страницу, загруженную через WebView, Frogblight внедряет JavaScript-код, который перехватывает вводимые пользователем данные и отправляет их на командный сервер через REST API.
Троянец также меняет свое имя на Davalarım, если версия Android выше 12, а в остальных случаях скрывает свой значок.
![]() |
![]() |
В рассматриваемом образце Frogblight использует для взаимодействия с командным сервером REST API, реализованный с помощью библиотеки Retrofit. Каждые две секунды вредоносное приложение в режиме переднего плана (foreground) отправляет ping на командный сервер и, если команда выполняется без ошибок, вызывает клиентские методы REST API: fetchOutbox и getFileCommands. Другие методы вызываются в ответ на определенные события — например, после включения экрана, запуска высокоприоритетной службы com.capcuttup.refresh.PersistentService, получения SMS-сообщения и т. п. Ниже приведен полный список клиентских методов REST API с их параметрами и описанием.
| Клиентский метод REST API | Описание | Параметры |
| fetchOutbox | Запрос содержимого сообщения, которое должно быть отправлено через SMS или отображено в уведомлении. | device_id — уникальный идентификатор Android-устройства |
| ackOutbox | Отправка результатов обработки сообщения, полученного после вызова API-метода fetchOutbox. | device_id — уникальный идентификатор Android-устройства msg_id — идентификатор сообщения status — статус обработки сообщения error — ошибка обработки сообщения |
| getAllPackages | Запрос имен пакетов приложений, запуск которых должен приводить к открытию веб-сайта через WebView для перехвата данных, вводимых пользователем. | action — имя метода API |
| getPackageUrl | Запрос URL-адреса веб-сайта, который будет открыт через WebView при запуске приложения с указанным именем пакета. | action — имя метода API package — имя пакета целевого приложения |
| getFileCommands | Запрос команд для файловых операций.
Доступные команды: |
device_id — уникальный идентификатор Android-устройства |
| pingDevice | Проверка подключения к командному серверу. | device_id — уникальный идентификатор Android-устройства |
| reportHijackSuccess | Отправка перехваченных данных, введенных пользователем на веб-сайте, который был открыт через WebView при запуске приложения с указанным именем пакета. | action — имя метода API package — имя пакета целевого приложения data — перехваченные данные, введенные пользователем |
| saveAppList | Отправка информации о приложениях, установленных на устройстве. | device_id — уникальный идентификатор Android-устройства app_list — список приложений, установленных на устройстве app_count — количество приложений, установленных на устройстве |
| saveInjection | Отправка перехваченных данных, введенных пользователем на веб-сайте, который был открыт через WebView. Если сайт не был открыт вследствие запуска целевого приложения, значение параметра app_name определяется на основе URL-адреса сайта. | device_id — уникальный идентификатор Android-устройства app_name — имя пакета целевого приложения form_data — перехваченные данные, введенные пользователем |
| savePermission | Метод не используется, но предположительно предназначен для отправки информации о разрешениях. | device_id — уникальный идентификатор Android-устройства permission_type — тип разрешения status — статус разрешения |
| sendSms | Отправка информации об SMS-сообщении с устройства. | device_id — уникальный идентификатор Android-устройства sender — номер телефона отправителя/получателя message — текст сообщения timestamp — время получения/отправки type — тип сообщения (входящее/отправленное) |
| sendTelegramMessage | Отправка перехваченных данных, введенных пользователем на веб-страницах, которые Frogblight открыл через WebView. | device_id — уникальный идентификатор Android-устройства url — URL-адрес веб-сайта title — заголовок веб-страницы input_type — тип данных, введенных пользователем input_value — данные, введенные пользователем final_value — данные, введенные пользователем, с дополнительной информацией timestamp — время захвата данных ip_address — IP-адрес пользователя sms_permission — наличие разрешения на доступ к SMS file_manager_permission — наличие разрешения на доступ к файлам |
| updateDevice | Отправка информации об устройстве. | device_id — уникальный идентификатор Android-устройства model — производитель и модель устройства android_version — версия Android phone_number — номер телефона пользователя battery — текущий уровень заряда батареи charging — состояние зарядки устройства screen_status — состояние экрана (включен/выключен) ip_address — IP-адрес пользователя sms_permission — наличие разрешения на доступ к SMS file_manager_permission — наличие разрешения на доступ к файлам |
| updatePermissionStatus | Отправка информации о разрешениях. | device_id — уникальный идентификатор Android-устройства permission_type — тип разрешения status — статус разрешения timestamp — текущее время |
| uploadBatchThumbnails | Отправка миниатюр изображений на командный сервер. | device_id — уникальный идентификатор Android-устройства thumbnails — миниатюры |
| uploadFile | Отправка файла на командный сервер. | device_id — уникальный идентификатор Android-устройства file_path — путь к файлу download_id — идентификатор файла на командном сервере (сам файл отправляется как неименованный параметр) |
| uploadFileList | Отправка информации обо всех файлах в указанном каталоге. | device_id — уникальный идентификатор Android-устройства path — путь к каталогу file_list — информация о файлах в каталоге |
| uploadFileListLog | Отправка информации обо всех файлах в указанном каталоге на другую конечную точку, отличающуюся от используемой в uploadFileList. | device_id — уникальный идентификатор Android-устройства path — путь к каталогу file_list — информация о файлах в целевом каталоге |
| uploadThumbnailLog | Метод не используется, но предположительно служит для загрузки миниатюр изображений на другую конечную точку, отличающуюся от используемой в uploadBatchThumbnails. | device_id — уникальный идентификатор Android-устройства thumbnails — миниатюры |
Удаленное управление устройством, закрепление в системе и защита от удаления
Приложение содержит несколько классов, отвечающих за удаленный доступ к зараженному устройству, закрепление в системе и защиту зловреда от удаления.
capcuttup.refresh.AccessibilityAutoClickService
Предназначен для предотвращения удаления приложения, а также для открытия указанных злоумышленниками веб‑сайтов через WebView при запуске целевых приложений. Этот класс присутствует в рассматриваемом образце, но больше не используется и был удален в последующих версиях.capcuttup.refresh.PersistentService
Служба, предназначенная главным образом для взаимодействия с командным сервером и регулярного выполнения вредоносных задач.capcuttup.refresh.BootReceiver
Приемник широковещательных сообщений, который отвечает за настройку механизмов закрепления в системе, таких как планировщик задач и таймеры, после загрузки устройства.
Дальнейшая разработка
Более поздние версии зловреда содержали новую функциональность. Некоторые из них были замаскированы уже под браузер Chrome. Давайте рассмотрим один из таких образцов поддельного Chrome (MD5 d7d15e02a9cd94c8ab00c043aef55aff).
В этом образце появились новые клиентские методы REST API для взаимодействия с командным сервером.
| Клиентский метод REST API | Описание | Параметры |
| getContactCommands | Получение команд для выполнения действий с контактами. Доступные команды: ● ADD_CONTACT — добавление контакта на устройство пользователя; ● DELETE_CONTACT — удаление контакта с устройства пользователя; ● EDIT_CONTACT — изменение контакта на устройстве пользователя. |
device_id — уникальный идентификатор Android-устройства |
| sendCallLogs | Отправка журнала вызовов на командный сервер. | device_id — уникальный идентификатор Android-устройства call_logs — данные журнала вызовов |
| sendNotificationLogs | Отправка истории уведомлений на командный сервер. В рассматриваемом образце эта функция реализована не полностью, и на момент подготовки отчета нам не встречались варианты с ее полноценной реализацией. | action — имя метода API notifications — данные истории уведомлений |
Кроме того, злоумышленники реализовали собственный метод ввода, использующий службу com.puzzlesnap.quickgame.CustomKeyboardService для записи нажатий клавиш в файл.
Мы также обнаружили другой образец Frogblight (MD5 115fbdc312edd4696d6330a62c181f35), который пытался избежать запуска в эмуляторах и использовал технику геозонирования. В этом образце зловред проверяет окружение () и завершает работу, если обнаруживает эмулятор или если устройство находится в США.
Позднее злоумышленники решили перейти с REST API на WebSocket. Рассмотрим реализацию этого подхода в одном из недавних образцов (MD5 08a3b1fb2d1abbdbdd60feb8411a12c7). Этот образец маскируется под приложение для получения социальной поддержки через турецкий портал госуслуг. Его функциональность во многом совпадает с предыдущими образцами, но есть и несколько новых возможностей. Команды передаются через WebSocket в формате JSON. Пример шаблона команды приведен ниже:
|
1 2 3 4 5 |
{ "id": <ID команды>, "command_type": <имя команды> "command_data": <данные команды> } |
Также следует отметить, что некоторые команды в этой версии имеют одинаковое назначение, но различаются по структуре, а функциональность отдельных команд пока реализована не полностью. Это указывает на то, что на момент нашего исследования зловред Frogblight находился в активной разработке. Поскольку после сентября его активность не фиксировалась, возможно, вредоносное ПО доводится до полностью рабочего состояния перед возобновлением операций. Полный список команд с их параметрами и описанием приведен ниже:
| Команда | Описание | Параметры |
| connect | Отправка регистрационного сообщения на командный сервер. | – |
| connection_success | Отправка на командный сервер различной информации, например журналов вызовов; запуск отправки ping-запросов на командный сервер и ожидания команд от него. | – |
| auth_error | Запись сведений о недействительном ключе авторизации в системный лог Android. | – |
| pong_device | Не выполняет никаких действий. | – |
| commands_list | Выполнение команд. | Список команд |
| sms_send_command | Отправка произвольного SMS-сообщения. | recipient — получатель сообщения message — текст сообщения msg_id — идентификатор сообщения |
| bulk_sms_command | Отправка произвольного SMS-сообщения нескольким получателям. | recipients — получатели сообщения message — текст сообщения |
| get_contacts_command | Отправка всех контактов на командный сервер. | – |
| get_app_list_command | Отправка на командный сервер информации об установленных на Android-устройстве приложениях. | – |
| get_files_command | Отправка на командный сервер информации обо всех файлах в определенных каталогах. | – |
| get_call_logs_command | Отправка журнала вызовов на командный сервер. | – |
| get_notifications_command | Отправка истории уведомлений на командный сервер. В рассматриваемом образце эта функция реализована не полностью, и на момент подготовки отчета нам не встречались варианты с ее полноценной реализацией. | – |
| take_screenshot_command | Создание скриншота. В рассматриваемом образце эта функция реализована не полностью, и на момент подготовки отчета нам не встречались варианты с ее полноценной реализацией. | – |
| update_device | Отправка регистрационного сообщения на командный сервер. | – |
| new_webview_data | Сбор данных из WebView. В рассматриваемом образце эта функция реализована не полностью, и на момент подготовки отчета нам не встречались варианты с ее полноценной реализацией. | – |
| new_injection | Внедрение кода. В рассматриваемом образце эта функция реализована не полностью, и на момент подготовки отчета нам не встречались варианты с ее полноценной реализацией. | code — внедряемый код target_app — предположительно, имя пакета целевого приложения |
| add_contact_command | Добавление контакта на устройство пользователя. | name — имя контакта phone — телефон контакта email — электронная почта контакта |
| contact_add | Добавление контакта на устройство пользователя. | display_name — имя контакта phone_number — телефон контакта email — электронная почта контакта |
| contact_delete | Удаление контакта с устройства пользователя. | phone_number — телефон контакта |
| contact_edit | Изменение контакта на устройстве пользователя. | display_name — новое имя контакта phone_number — телефон контакта email — новая электронная почта контакта |
| contact_list | Отправка всех контактов на командный сервер. | – |
| file_list | Отправка информации обо всех файлах в указанном каталоге на командный сервер. | path — путь к каталогу |
| file_download | Отправка указанного файла на командный сервер. | file_path — путь к файлу download_id — идентификатор, получаемый вместе с командой и отправляемый обратно на командный сервер вместе с запрошенным файлом; с высокой вероятностью используется для упорядочивания данных на командном сервере |
| file_thumbnail | Создание миниатюры указанного изображения и отправка на командный сервер. | file_path — путь к файлу изображения |
| file_thumbnails | Создание миниатюр изображений в указанном каталоге и отправка на командный сервер. | folder_path — путь к каталогу |
| health_check | Отправка информации о текущем состоянии Android-устройства, такой как уровень заряда батареи и состояния экрана. | – |
| message_list_request | Отправка всех SMS-сообщений с устройства на командный сервер. | – |
| notification_send | Отображение произвольного уведомления. | title — заголовок уведомления message — текст уведомления app_name — дополнительный текст уведомления |
| package_list_response | Сохранение имен пакетов целевых приложений. | packages — список всех имен пакетов целевых приложений Каждый элемент списка содержит: package_name — имя пакета целевого приложения active — статус активности вредоносного кода для данного имени пакета |
| delete_contact_command | Удаление контакта с устройства пользователя. В рассматриваемом образце эта функция реализована не полностью, и на момент подготовки отчета нам не встречались варианты с ее полноценной реализацией. | contact_id — идентификатор контакта name — имя контакта |
| file_upload_command | Отправка указанного файла на командный сервер. В рассматриваемом образце эта функция реализована не полностью, и на момент подготовки отчета нам не встречались варианты с ее полноценной реализацией. | file_path — путь к файлу file_name — имя файла |
| file_download_command | Загрузка файла на устройство пользователя. В рассматриваемом образце эта функция реализована не полностью, и на момент подготовки отчета нам не встречались варианты с ее полноценной реализацией. | file_url — URL-адрес загружаемого файла download_path — путь для загрузки |
| download_file_command | Загрузка файла на устройство пользователя. В рассматриваемом образце эта функция реализована не полностью, и на момент подготовки отчета нам не встречались варианты с ее полноценной реализацией. | file_url — URL-адрес загружаемого файла download_path — путь для загрузки |
| get_permissions_command | Отправка на командный сервер регистрационного сообщения, включающего сведения о предоставленных разрешениях. | – |
| health_check_command | Отправка информации о текущем состоянии Android-устройства, такой как уровень заряда батареи и состояние экрана. | – |
| connect_error | Запись сведений об ошибках подключения в системный лог Android. | Список ошибок |
| reconnect | Отправка регистрационного сообщения на командный сервер. | – |
| disconnect | Прекращение отправки ping-запросов на командный сервер и ожидания от него команд. | – |
Для аутентификации через WebSocket используется специальный ключ.
По IP‑адресу, с которым устанавливалось WebSocket‑соединение, оказалась доступна административная панель Frogblight, в которую можно было войти, используя приведенный выше ключ аутентификации. После входа в веб-панель с определенным ключом через нее можно управлять только теми образцами, которые используют тот же ключ. Это наводит на мысль, что Frogblight может распространяться по модели MaaS.
Судя по меню веб-панели, злоумышленники могут сортировать устройства жертв по различным параметрам, например по наличию банковских приложений, а также рассылать SMS‑сообщения и выполнять другие групповые действия.
Жертвы
Поскольку некоторые версии Frogblight открывали турецкий портал госуслуг для перехвата данных, вводимых пользователями на сайтах турецких банков, можно с высокой степенью уверенности предположить, что этот зловред нацелен прежде всего на пользователей из Турции. По данным нашей телеметрии, большинство атакованных пользователей действительно находятся в этой стране.
Атрибуция
Хотя доступная информация не позволяет однозначно отнести Frogblight к какой‑либо известной группе злоумышленников, в ходе анализа Android‑троянца и поиска в Сети упоминаний используемых в нем названий мы обнаружили на GitHub профиль с репозиториями Frogblight, который также создавал репозитории с вредоносным ПО Coper, распространяемым по модели MaaS. Возможно, этот профиль принадлежит злоумышленникам, которые распространяют Coper и начали продвигать Frogblight.
Кроме того, так как комментарии в коде Frogblight написаны на турецком языке, можно предположить, что его разработчики владеют этим языком.
Заключение
Новый Android-зловред, получивший название Frogblight, появился недавно и преимущественно нацелен на пользователей из Турции. Это продвинутый банковский троянец, предназначенный для кражи денежных средств. Уже есть реальные жертвы этой угрозы, при этом вредоносное ПО продолжает развиваться, а с выходом новых версий его функциональность расширяется. Возможно, использующие его злоумышленники уже имеют опыт распространения вредоносного ПО, и в этом случае оно может представлять более серьезную угрозу. Мы продолжим следить за его развитием.
Индикаторы компрометации
Эти и другие индикаторы компрометации, а также все обновления связанной с ними информации доступны клиентам нашего сервиса отчетов о crimeware-угрозах. Чтобы узнать об этом подробнее, свяжитесь с нами по адресу crimewareintel@kaspersky.com.
Хэш-суммы APK-файлов
8483037dcbf14ad8197e7b23b04aea34
105fa36e6f97977587a8298abc31282a
e1cd59ae3995309627b6ab3ae8071e80
115fbdc312edd4696d6330a62c181f35
08a3b1fb2d1abbdbdd60feb8411a12c7
d7d15e02a9cd94c8ab00c043aef55aff
9dac23203c12abd60d03e3d26d372253
Домены командных серверов
1249124fr1241og5121.sa[.]com
froglive[.]net
IP-адрес командного сервера
45.138.16.208[:]8080
URL-адрес репозитория на GitHub с исходным кодом фишингового веб-сайта Frogblight
https://github[.]com/eraykarakaya0020/e-ifade-vercel
URL-адрес профиля на GitHub, содержащего APK‑файлы Frogblight и Coper
https://github[.]com/Chromeapk
URL-адреса веб-сайтов, используемых для распространения
https://farketmez37[.]cfd/e-ifade.apk
https://farketmez36[.]sbs/e-ifade.apk
https://e-ifade-app-5gheb8jc.devinapps[.]com/e-ifade.apk












Новый банковский троянец Frogblight запугивает турецких пользователей Android судом