Оглавление
Привет, с вами снова отдел реагирования и цифровой криминалистики Angara MTDR. Наш эксперт Александр Гантимуров, руководитель направления обратной разработки Angara MTDR, продолжает исследовать новые версии вредоносных APK-файлов, которые распространяются в социальных сетях и мессенджерах под видом срочной продажи.
Новогодние праздники разработчики Android Mamont провели с пользой — улучшили защиту и усложнили жизнь исследователям. К примеру, новые модификации выявляют песочницы и факт исследования, а удалённые серверы злоумышленников теперь сложнее обнаружить и ещё сложнее заблокировать взаимодействие с ними. Подробно пройдёмся по нововведениям и посмотрим, что у них получилось.
Этой статьёй продолжаем серию публикаций по исследованию вредоносных APK.
«Evil»-бонус от банка, или как пройти опрос и потерять все деньги — об исследовании «МирСБП».
Шпион в твоём кармане — об исследовании BTMOB RAT.
Продам всё, что на фото. Недорого — об исследовании предыдущей версии.
Для тех, кому интересно, почему именно Mamont и откуда взялось это название, мы подготовили краткую историческую справку.
Если технические детали не так важны, то можно сразу пройти к советам, как не заражаться и как удалить ВПО с устройства.
Первое появление и возникновение названия
Вредоносные APK семейства Mamont представляют собой приложения для Android, которые используются для кражи финансовых средств и распространяются по России и странам СНГ. У таких APK разные разработчики и нюансы работы, но их объединяет способ доставки и схема работы. Первые упоминания появились в 2019 годy, и с лёгкой руки тогда ещё Group-IB с 2021 года стали называться «Мамонт» из-за схемы распространения и целевой аудитории. В дальнейшем сами злоумышленники подхватили термин Mamont/«Мамонт», и иногда его упоминание можно встретить в отладочных сообщениях вредоносных приложений.
В последние 5 лет большинство вредоносных APK, которые массово рассылаются в РФ, относят к семейству «Мамонт», если в самом приложении нет никаких других названий для идентификации. Отдельно стоят зловредные приложения, которые тоже распространяются по схеме MaaS: CraxsRat, BTMOB RAT, deVixor, Meet Cellik и другие.
Схема распространения
Злоумышленники маскируют APK под фотоархивы («Фото 24шт.apk»), видео в Telegram («Это ты на видео?») или приложения доставки и банков. Распространение происходит через WhatsApp, Telegram и фишинговые сайты с применением социальной инженерии для установки.
После установки Mamont запрашивает разрешения на SMS по умолчанию, разрешение на доступ к Accessibility Service и разрешение на установку других приложений. Приложение скрывается с рабочего экрана устройства и перехватывает SMS и уведомления (включая OTP-коды) с отправкой их на Telegram-бот или удалённый сервер. Дополнительно оно передаёт файлы, скриншоты и аудиозаписи с устройства, а также блокирует удаление и отзыв разрешений.
Такого рода приложения распространяются на коммерческой основе по той же схеме Malware-as-a-Service по закрытым каналам Telegram и хакерским форумам. От злоумышленника требуется подобрать иконку приложения, подготовить картинку и иногда развернуть свой сервер, чтобы сгенерировать новое вредоносное приложение. Дальше — только распространить и убедить пользователя установить приложение.
В 2025 году приложения семейства «Мамонт» заняли первые позиции в рейтинге по заражениям мобильных устройств, по данным «Мегафона», несмотря на примитивную схему распространения. Это достигается за счёт массовости рассылок — всегда найдётся пользователь, который установит и предоставит необходимые разрешения.
Краткое содержание технического исследования
Установка происходит в два этапа, при этом вредоносный код спрятан в зашифрованном APK внутри установщика.
Приложения содержат примитивную защиту от распаковки.
Расшифровка происходит в нативной библиотеке в месте с реквизитами отправки информации об установке.
Реквизиты сервера для взаимодействия приложение теперь получает во время работы через промежуточное доменное имя по DoH.
В процессе работы приложение проверяет устройство для защиты от песочниц и средств исследования.
Технический анализ установщика
Образец «Изображения 27шт.apk» непосредственно связан с тем, который описали в предыдущей статье.
Для него используются такие же способ распространения и предлог и даже та же картинка для усыпления бдительности пользователя.

Пример новогодней рассылки вируса, злоумышленники использовали различные названия файлов - «Изображения 27шт.apk», «снимки-17 шт.apk» и т.д.

По данным Kaspersky KTIP, образец в первый раз обнаружен 2 января, а 6 января приложение было загружено уже на VirusTotal. На момент исследования приложение нормально выявляется антивирусами, но просто как Android.Banker.
На устройстве приложение называется «Изображения 27шт» и устанавливается как пакет com.m511a4fb6b.core0566134c.

Как показало исследование, злоумышленники изменили схему установки и активации вредоносного кода.
Разрешения
Приложение теперь устанавливается в два этапа. На первом этапе запрашиваются только минимально необходимые разрешения.
Разрешение | Описание |
| Установка приложений |
| Возможность фоновой работы |
По сравнению с предыдущим образцом подозрительных разрешений существенно меньше: нет запроса на обработку SMS и доступ к сервису Accessibility.
Защита APK
Приложения для Android распространяются в виде файлов с расширением .apk. APK-файлы представляют собой архивы ZIP, в которых хранятся:
байткод приложения;
манифест с описанием разрешений и инструкцией, как запускать;
ресурсы (изображения, строки);
цифровая подпись;
библиотеки для каждой платформы, которые поддерживаются приложением;
дополнительные файлы, необходимые для работы приложения.
Стандартный APK распаковывается при помощи архиватора, который поддерживает ZIP, но не в нашем случае. При попытке распаковки архиватор будет требовать пароль для архива, хотя на устройство приложение нормально установится и будет работать.
Злоумышленник модифицировал записи в архиве и проставил для каждой пометку, что файл внутри зашифрован и требует пароль, хотя файлы внутри архива только сжаты без шифрования. Установщик Android эти флаги проигнорирует, а архиватор — нет.

Но для специализированных утилит для исследования Android, эта уловка не представляет проблемы.
Проверка устройства
Сразу после запуска приложение проверяет устройство по списку критериев:
Установленные пакеты и приложения. Проверяется количество приложений и установка технических приложений для разработки.
Наличие прав суперпользователя (root).
Наличие средства динамического исследования (Frida).
Время работы устройства после последней перезагрузки.
Наличие подключения по ADB (Android Debug Bridge).
Факт работы на программной эмуляции устройства (qemu).
В нативной библиотеке проверяется наличие эмулятора, прав суперпользователя и средств динамического исследования (checkNativeRoot, checkNativeEmulator, checkNativeFrida), остальные проверки — в коде приложения на Kotlin. Так как целевая аудитория — простые пользователи, то такие вещи говорят о факте исследования приложения.
Приведём часть кода, которая используется для проверки устройства. Комментарии на русском языке — от разработчика.
if (z2 && z6 && size <= 7 && jElapsedRealtime > 30) { arrayList2.add("Ленивая ферма: ADB включен + Мало приложений (" + size + ") на прогретом устройстве"); z2 = false; } if (z2 && !z6 && size <= 7 && jElapsedRealtime >= 30) { arrayList2.add("Пустой телефон: Критически мало приложений (" + size + ") при аптайме > 30 мин"); z2 = false; } if (z2 && zCheckNativeRoot) { if (size <= 12 jElapsedRealtime <= 15) { arrayList2.add("Root обнаружен: Недостаточно приложений или аптайма для доверия"); z2 = false; } else { sb2.append("⚠️ Примечание: Разрешенный Root (Продвинутый юзер)\n"); } } if (z2 && z6) { if (size > 12) { sb2.append("⚠️ Примечание: Разрешенный ADB (Много приложений)\n"); } else if (size <= 7 jElapsedRealtime <= 60) { arrayList2.add("ADB обнаружен: Недостаточно приложений или аптайма для доверия"); z2 = false; } else { sb2.append("⚠️ Примечание: Разрешенный ADB (Разработчик)\n"); } } if (z2) { sb2.append("\n✅ ВЕРДИКТ: ДОСТУП РАЗРЕШЕН\n"); } else { sb2.append("\n⛔️ ВЕРДИКТ: ЗАБЛОКИРОВАНО\nПричины:\n"); Iterator it = arrayList2.iterator(); pg.l(it, "iterator(...)"); while (it.hasNext()) { Object next = it.next(); pg.l(next, "next(...)"); sb2.append("• " + ((String) next) + "\n"); } }
Проверка наличия суперпользователя в нативной библиотеке
bool Java_com_example_MetaMask_pigeon_checkNativeRoot() { char haystack[92]; // [xsp+Ch] [xbp-64h] BYREF __int64 v2; // [xsp+68h] [xbp-8h] v2 = (_QWORD )(_ReadStatusReg(TPIDR_EL0) + 40); return !access("/system/app/Superuser.apk", 0) ||!access("/sbin/su", 0) ||!access("/system/bin/su", 0) ||!access("/system/xbin/su", 0) ||!access("/data/local/xbin/su", 0) ||!access("/data/local/bin/su", 0) ||!access("/system/sd/xbin/su", 0) ||!access("/system/bin/failsafe/su", 0) ||!access("/data/local/su", 0) || (int)__system_property_get("ro.build.tags", haystack) >= 1 && strstr(haystack, "test-keys"); }
Отправка сообщений в Telegram
Если проверка не пройдена, то приложение отправит сообщение в Telegram с информацией об устройстве.

Токен и идентификатор чата Telegram хранятся в нативной библиотеке в методах getSrvConfigA и getSrvConfigB.
Установка «цыпленка»
После проверки приложение:
извлекает и расшифровывает ещё один APK;
устанавливает его на устройство;
отображает страницу с изображением, которое приведено в начале статьи.
Приложение 2 этапа хранится в зашифрованном виде среди ресурсов (assets).
Для расшифровки используется метод decryptAndSaveChiken из нативной библиотеки. APK временно сохраняется в кеше приложения под именем chiken.apk, того самого «цыплёнка».
// ... File file = new File(mainActivity2.getCacheDir(), "chiken.apk"); AssetManager assets = mainActivity2.getAssets(); pg.l(assets, "getAssets(...)"); String absolutePath = file.getAbsolutePath(); pg.l(absolutePath, "getAbsolutePath(...)"); boolean zDecryptAndSaveChiken = mainActivity2.decryptAndSaveChiken(assets, "metadata.dat", absolutePath); // ...
Дальше переходим к основной части исследования — chiken.apk.
«Цыпленок» (сhiken)
Так разработчики назвали эту стадию работы ВПО — chiken (а не chiCken) или «чикен». Это подтверждается сообщениями об ошибке и названием переменных.
Приложение на устройстве называется «Изображения 27шт» и устанавливается как пакет com.m511a4fb6b.core0566134c. Иконка приложения точно такая же, как у его установщика.
При помощи приложения злоумышленник может выполнять следующие действия:
показ произвольной веб-страницы пользователю;
запись видео, снимок с экрана устройства;
запись видео, снимок с любой из камер телефона;
запись аудио с микрофона;
загрузка файлов на устройство;
отправка файлов на удалённый сервер;
отправка SMS, USSD, рассылка SMS по списку адресов;
получение SMS и сбор ранее доставленных на устройство;
сбор журнала звонков;
сбор контактов на устройстве, добавление контакта;
сбор информации об устройстве и системе Android;
отсле��ивание «положения» и состояния устройства (в кармане, на столе экраном вниз и т.п.);
По команде злоумышленника приложение может полностью отключить вредоносную активность и очистить данные, которые загрузило ранее.
Разрешения
Приложение запрашивает уже гораздо больше разрешений на работу:
Разрешение | Описание |
| Отправка SMS |
| Чтение состояние телефона (в том числе IMEI) |
| Чтение SMS |
| Получение MMS |
| Получение SMS |
| Чтение контактов |
| Запись звука с микрофона |
| Завершение других процессов |
| Работа с микрофоном в фоне |
| Поднятие трубки вместо пользователя |
| Работа с камерой в фоне |
Проверка устройства
Последовательность проверок повторяет ту, которую мы видели в установщике. Здесь все проверки осуществляются без нативной библиотеки — только на Kotlin.
Приложение отправит сообщение через Telegram-бота, если устройство не пройдёт проверку. Токен и номер чата для отправки хранятся в нативной библиотеке.

Проверка приложений
Перед получением команд образец проверяет список приложений:
ru.sberbankmobile— «СберБанк»;com.idamob.tinkoff.android— «T-Банк»;ru.rostel— приложение «Госуслуги»;ru.nspk.mirpay— приложение НСПК «MirPay»;ru.yandex.searchplugin— «Яндекс Старт»;ru.oneme.app— мессенджер MAX;ru.ozon.app.android— приложение Ozon;com.vkontakte.android— VK;com.wildberries.ru— Wildberries;ru.yandex.yandexmaps— «Яндекс Карты».
Сейчас эта проверка ни на что не влияет, но в следующих версиях всё может поменяться.
Сервер для команд
Приложение получает команды и отправляет результаты в формате JSON на удалённый сервер (C2). Для взаимодействия используется websocket и библиотека OkHttp.
Реквизиты удалённого сервера не хранятся на устройстве — приложение получает доменное имя при помощи специального DNS-запроса к промежуточному домену.
Имя промежуточного домена driver-store.online хранится в зашифрованном виде в коде приложения вместе со списком URL, через которые отправляются запросы DNS-over-HTTPs:
Приложение пытается обратиться последовательно к каждому из них с DNS-запросом типа TXT для доменного имени driver-store.online. В поле data будет храниться искомое доменное имя сервера для команд в зашифрованном виде.
Например, для https://dns.alidns.com/resolve?name=driver-store.online&type=TXT:
{ "Status": 0, "TC": false, "RD": true, "RA": true, "AD": false, "CD": false, "Question": { "name": "driver-store.online.", "type": 16 }, "Answer": [ { "name": "driver-store.online.", "TTL": 227, "type": 16, "data": "\"NQ4LEAQdHB4KD0sDBhkLWFA=\"" } ] }
После расшифровки получаем soedenenka.online.
Для шифрования используется Base64 и XOR с ключом Fantasypanelhub651241.
В таком подходе для получения C2 учитывается сразу несколько факторов для обеспечения устойчивости канала получения команд и отправки результатов:
Доменное имя C2 легко поменять, поэтому его нужно постоянно отслеживать, чтобы блокировать.
DNS-запросы идут в зашифрованном виде к легитимным DNS-серверам — их не заблокируешь просто так.
Доменное имя
driver-store.onlineуправляется через Cloudflare и находится вне российской юрисдикции — его сложно заблокировать и разделегировать.Доменное имя
soedenenka.onlineтоже прячется за Cloudflare — IP-адрес управляющего сервера скрыт, его трудно заблокировать.Для усложнения анализа трафика к каждому запросу добавляется поле random — оно меняет длину запроса и лучше маскирует его среди легитимного трафика.
Примечательно, что ни driver-store.online, ни soedenenka.online нигде не выявлялись как вредоносные на момент исследования.
Индикаторы компрометации
Значение | Описание |
| URL изображения для привлечения пользователей |
| MD5 установщика |
| Доменное имя для DNS-запросов |
| Доменное имя для получения команд |
| Название файла установщика |
| Название приложения на устройстве |
| Название пакета приложения установщика |
| Название пакета вредоносной нагрузки |
Рекомендации по защите
В комментариях к предыдущей публикации многие спрашивали: как вообще такие приложения удаётся установить и разве их вредоносность не очевидна с первого взгляда? К сожалению, есть пользователи, которые не разбираются в форматах файлов и особенностях мобильных устройств. Такие пользователи и являются целевой аудиторией злоумышленников.
В современных версиях Android гораздо сложнее установить приложение просто так, из неизвестного источника — система выдаёт сразу несколько предупреждений, но упорный пользователь всегда сможет это сделать. Особенно если злоумышленник подробно обоснует, зачем это надо, объяснит, как это сделать, и будет торопить пользователя.
Поэтому просвещать пользователей о такого рода угрозах — очень верная стратегия, но которую надо проводить постоянно. В комментариях были хорошие варианты для старшего поколения от пользователя @Viktor-T
Базовые рекомендации по защите всегда примерно одинаковы:
Отключить автозагрузку файлов в Telegram, осторожно открывать ссылки и проверять формат файлов перед открытием.
Не устанавливать приложения из неизвестных источников.
Установить на устройство антивирусное ПО и периодически делать полную проверку.
Дополнительные подходы, которые помогут бороться с угрозами от таких вредоносных приложений:
Для проверки файлов можно воспользоваться Telegram-ботом «Доктор Веб» или приложением от VirusTotal, но они имеют ограничение на размер проверяемого файла.
Две SIM-карты и устройства. SIM-карту для получения одноразовых кодов от банков и «Госуслуг» использовать на отдельном устройстве, где нет лишних приложений, — оно может быть даже кнопочным. В таком случае потерять деньги существенно сложнее, но большинству пользователей неудобно иметь два телефона. Кроме того, надо не забывать периодически пополнять и использовать вторую SIM-карту, чтобы её не заблокировали.
Родительский контроль на устройстве. В этом случае установить просто так новое приложение будет значительно сложнее без проблем для обновлений.
Для установки приложений использовать специального пользователя, а у основного пользователя такую возможность ограничить.
Инструкция по удалению
Здесь рассмотрим базовый алгоритм удаления, применимый для всех подобных угроз. Хоть этот образец не противодействует удалению и отзыву разрешений, нам на исследование попадали и более упорные.
Включаем режим полёта — при этом отключаются интернет, SMS и звонки.
Перезагружаем телефон в безопасный режим (Safe mode). В зависимости от модели устройства последовательность действий может меняться, но обычно нажимаем кнопку включения, ждём появления логотипа и зажимаем клавишу уменьшения звука. В этом режиме все сторонние приложения будут отключены.
Проверяем приложения для администрирования устройства.
Настройки — Защита и конфиденциальность — Дополнительные параметры — Администратор устройства. В зависимости от прошивки путь может быть другой, лучше воспользоваться поиском по слову «Администратор» или по сочетанию Device admin.Проверяем разрешения на доступ к Accessibility Service (специальные возможности).
Настройки > Специальные возможности > Установленные службы. Или ищем в настройках по словам Accessibility, «специальные возможности». В норме там не должно быть никаких приложений, особенно неизвестных.Проверяем разрешения на установку приложений.
Настройки — Приложения — Специальный доступ — Установка неизвестных приложений. Обычно там выданы разрешения только Google Play и RuStore.Проверяем остальные разрешения — доступ к SMS, камере и местоположению.
Настройки — Защита и конфиденциальность — Настройки конфиденциальности — Управление разрешениями.Удаляем подозрительные приложения, которые мы нашли на предыдущих этапах. Отзыв разрешений может провоцировать приложение постоянно выдавать уведомление, что его надо включить и «донастроить», поэтому сразу удаляем источник проблем.
Перезагружаемся.
Если у вас есть дополнения к рекомендациям, то рады будем увидеть их в комментариях к статье.
Выводы
Злоумышленники постоянно адаптируют свои инструменты под требования времени: усложняют защиту от исследования, пользуются актуальными информационными поводами и пытаются застать пользователя врасплох.
Как показывает практика, ещё есть пользователи, которые не отличают APK-файлы от картинок и видео в сообщениях групповых чатов и социальных сетях. Если злоумышленник убедительно обоснует запуск и выдачу разрешений, то заражения будет сложно избежать.
Данный образец сложнее исследовать и блокировать, чем прошлые. Тем не менее, ему ещё далеко до BTMOB, о котором мы писали ранее.
Не смотря на всё это, рекомендации по защите от таких угроз не меняются и остаются теми же, что и были ранее. Посмотрим, что будет через полгода.
To be continued...
