Оглавление
- Введение
- Первое знакомство с бэкдором
- Версия CloudSorcerer RAT с инцидента
- Коммуникация с C2
- Другие образцы CloudSorcerer RAT
- Общее сравнение сэмплов CloudSorcerer
- Заключение
- IOCs
- Приложение 1. Расширенная информация по файловым IOCs
Введение
В июле 2024 исследователи “Лаборатории Касперского” рассказали об атаках новой APT-группировки CloudSorcerer. Среди ее особенностей эксперты выделили использование облачных сервисов и профилей соцсетей в качестве С2. В последней статье от 8 августа 2024 эксперты выявили связь CloudSorcerer и APT31.
Описанный в статьях RAT показался нам знакомым – что-то похожее мы уже встречали. Один образец мы обнаружили в ходе расследования в 2022 году, а два других – в ходе исследования открытых источников. Все образцы имеют идентичный способ получения токена для взаимодействия с C2 – через обработку данных профиля социальной сети. Серверами управления выступают облачные сервисы Yandex Cloud. Кроме того, технические особенности бэкдора, такие как выбор сценария поведения, оказались идентичными CloudSorcerer.
В данной статье мы расскажем о предыдущих версиях CloudSorcerer, а также покажем, что CloudSorcerer совершает атаки уже несколько лет как минимум с 2022 года.
Первое знакомство с бэкдором
В инциденте 2022 года, расследованием которого занималась команда Solar 4RAYS (на тот момент Solar JSOC CERT), злоумышленники проникли в сеть организации через подключение к VPN-сети, после чего им удалось получить административный доступ к одному из контроллеров домена и выполнить установку вредоносного ПО на других важных хостах в организации. Злоумышленники активно применяли технику DLL Side Loading. В этом инциденте хакеры использовали следующее вредоносное ПО:
1) GrewApacha;
Мы подробно описывали его в статье Yet Another RAT: особенности новой версии известного ВПО, а у коллег из Positive Technologies также имеется материал о его старой версии от 2021 года.
2) PlugX с функцией построения туннелей с уникальным протоколом взаимодействия;
Мы подробно описывали его в статье PlugX: особенности новой версии популярного вредоноса
3) Старая версия бэкдора CloudSorcerer.
Версия CloudSorcerer RAT с инцидента
В инциденте, описанном выше,CloudSorcerer RAT представлял собой x64 DLL-файл, который был обнаружен нами в виде зашифрованного файла privacy.rft.
MD5
fa4a49e4fb04037b98a903434c04fffb
SHA1
179abf982ae864a9e70d60365578f5b9819e2249
SHA256
e527f543c1ad70e4a7be4e592e3ed6ca765556250520e919a9392dc54107aefe
File name
privacy.rft
File path
C:\ProgramData\EXmanage\privacy.rft
C:\ProgramData\Microsoft\DeviceSync\privacy.rft
File size
60.53 КB (62071 bytes)
Вместе с ними на хост загружались RcDll.dll и EXmanage.exe. EXmanage.exe – это переименованный легитимный файл rc.exe, который является частью Visual Studio C++ Compiler и использовался для загрузки RcDll.dll с помощью техники DLL Side-Loading.
MD5
4b7aaccc8a3e5ffcdb5e894fff599d1e
SHA1
32aa411fede8f9a61144d7e6348e11bf06758b9d
SHA256
2c74d9afaa6976876572ccdb0dcc952916e8ab84bdda38d4eb3954286c230d01
EXmanage.exe
EXManage.exe
Original file name
rc.exe
File path
C:\ProgramData\EXmanage\EXManage.exe
C:\ProgramData\Microsoft\DeviceSync\EXManage.exe
File size
67.05 KB (68664 bytes)
Comp. timestamp
2008-06-04 05:46:01 UTC
RcDll.dll – это загрузчик, который считывал в память файл privacy.rft, расшифровывал, распаковывал и запускал CloudSorcerer RAT.
MD5
e7c69e12b50c65726f9bdf17405d2724
SHA1
5c48ea15716becf5fbf437f7ebf2f8e3ad6fc4eb
SHA256
2c74d9afaa6976876572ccdb0dcc952916e8ab84bdda38d4eb3954286c230d01
Module name
RcDll.dll
File path
C:\ProgramData\Microsoft\DeviceSync\RcDll.dll
File size
6.50 KB (6656 bytes)
Comp. timestamp
2021-08-31 06:52:15 UTC
DLL содержит те же самые экспортируемые функции, что RcDll.dll из Visual Studio C++ Compiler, но без реализации. На одном из хостов размер RcDll.dll был искусственно увеличен до 53 MB скорее всего для обхода AV/EDR.
MD5
c0308e591d6d84348ceb94134589d345
SHA1
a45a2980fd34184647f30c5c277452fbf423000f
SHA256
ec1b3533b97bdadf44a489349217afd056f28d009a4c1ec9a0de78a20ad9b436
Module name
RcDll.dll
File path
C:\ProgramData\EXmanage\RcDll.dll
File size
53.59 MB (56194560 bytes)
Comp. timestamp
2021-08-31 06:52:15 UTC
Одна из экспортируемых функций в DLL содержит код распаковки нагрузки. Расшифровка нагрузки происходит в шеллкоде, который содержится в секции .data RcDll.dll. Функция распаковки запускает этот шеллкод в отдельном потоке.
Для шифрования privacy.rft использовался кастомный алгоритм шифрования с 32-битным ключом. Функция шифрования одновременно является функцией расшифрования и выглядит следующим образом:
def ror(value, positions):
lost_bits = value & int("1"*positions, 2)
value = (value >> positions) | (lost_bits << (32 - positions))
return value
def crypt_data(plain_data, key):
counter = 0
register = key
encrypted_data = b''
while plain_data:
block = int.from_bytes(plain_data[:4], "little")
plain_data = plain_data[4:]
register = ror(register, 13)
encrypted_block = ((block - register) ^ register) +
register
encrypted_block = encrypted_block + 2**32 if
encrypted_block < 0 else encrypted_block
encrypted_bytes = encrypted_block.to_bytes(5, 'little')
register += counter
counter += 1
encrypted_data += encrypted_bytes[:4]
return encrypted_data
Расшифрованный CloudSorcerer RAT
MD5
c6203605ba0d86352421e394818e8a44
SHA1
365801c6253065e0b0528788a830fc65251ff1ad
SHA256
8c35b901d1e1110a19f16e9524b2dd511316bc54c9fca30b9375ce6eb81ef034
File name
-
File path
-
File size
94.21 КB (94208 bytes)
Comp. timestamp
2022-05-23 09:36:17 UTC
После старта бэкдор проверяет имя exe-файла, который его загрузил, и, в зависимости от имени, запускает соответствующий модуль. Для полноценной работы CloudSorcerer необходимо создание двух дочерних процессов: msiexec (модуль выполнения команд) и mspaint.exe (сетевой модуль взаимодействия с C2 - получение новых команд и отправка результатов их выполнения). Взаимодействие между модулями происходит через IPC по шине формата .\\PIPE\\YD[%d].
Для ясности изложения мы введем свою нумерацию версий, чтобы различать образцы. Обозначим эту версию вредоноса v0.2, а версию “Лаборатории Касперского” v0.3. В версии v0.2 всего 9 команд, часть из которых отличаются от тех, что есть в версии v0.3 . Так команда 0x7 не имеет расширенного списка функций и просто запускает командную оболочку. Команды 0x8 и 0xA аналогичны командам из версии v0.3, но вместо произвольного процесса используются жестко закодированные.
ID Команды |
Название |
Описание |
---|---|---|
0x1 |
ListDrives |
Вывести информацию о жёстких дисках в системе |
0x2 |
ListFiles |
Вывести содержимое директории |
0x3 |
ShellExecute |
Исполнить команду |
0x4 |
ManageFiles |
Удалить, скопировать, переименовать, переместить файлы |
0x5 |
ReadFile |
Прочитать файл |
0x6 |
WriteFile |
Записать файл |
0x7 |
NewShell |
Запустить интерактивную командную оболочку |
0x8 |
InjectTSTheme |
Инжектировать полезную нагрузку в TSTheme |
0xA |
InjectMsiexec |
Инжектировать полезную нагрузку в msiexec |
Коммуникация с C2
Для получения команд и отправки информации старые сэмплы CloudSorcerer RAT использовали только Yandex Cloud. Зашифрованный токен в новых версиях имеет специальный байт, который указывает к какому облачному сервису нужно подключаться (Yandex Cloud, Microsoft Graph и Dropbox), старые же версии содержат только сам токен. Доступ к Яндекс Диску осуществляется при помощи API токена, который ВПО получает из описания профиля на Github AndreyKazakovs. Профиль на Github имеет лишь один репозиторий с названием “1”.
Токен зашифрован при помощи таблицы замены. В начале и конце токена есть последовательность символов "YAND", которая нужна, чтобы распарсить токен c HTML-страницы профиля. На всех найденных нами страничках была именно эта последовательность. В новых версия злоумышленники, видимо, решили использовать случайную последовательность из 4 латинских букв – CDOY.
Hex-строка токена преобразуется в байты, которые являются индексом в таблице замены. После операции замены массив байтов преобразуется в строку, которая оказывается токеном для работы с Яндекс Диском. Примечательно, что таблица замены не меняется уже несколько лет и образец, обнаруженный “Лабораторией Касперского” содержит именно её.
Взаимодействие с C2 происходит по двум сценариям. Это скачивание команд и загрузка результатов. Для этого сетевой имплант запускает два отдельных потока. В начале имплант загружает информацию о системе, собранную имплантом с бэкдор-функциональностью (msiexec.exe). ВПО собирает имя компьютера, имя пользователя, информацию о системе, системное время. Мы не заметили в этом плане отличий в от новой версии CloudSorcerer.
Другие образцы CloudSorcerer RAT
В открытых источниках мы смогли найти самые ранние образцы CloudSorcerer. От других семплов они отличаются меньшим количеством команд, а также более ранней датой компиляции. Нам попались два идентичных по функционалу семпла с разным первичным C2. Обозначим эту версию ВПО v0.1.
MD5
711b947cefca97f81383fcce5253bee8
SHA1
244a9b9e1e2a0bf240667218322aa1d1e6e5278b
SHA256
8f0e837e089e18e3d643ca6e62d56513984a193f9fb64d3f16f7bb10d67261ee
Module name
-
File path
-
File size
88.00 KB (90112 bytes)
Comp. timestamp
2022-03-28 02:56:17 UTC
MD5
1a3a9bc223b1ea29d12b0dd01507217f
SHA1
f932b03f4def23a0ee80e53e3c491f6907b8ab92
SHA256
9d3468a74c43563bf443020e638af22e7116d586509c711f992e9afb507529bd
Module name
-
File path
-
File size
86.50 KB (88576 bytes)
Comp. timestamp
2022-03-28 02:56:17 UTC
Оба обнаруженных нами экземпляра этой версии работают по схожему сценарию с единственным отличием в запускаемых процессах. Выше на рисунке 2 видно, что после запуска процесса msiexec.exe ВПО создаёт процесс mspaint.exe для запуска в нём импланта, который взаимодействует с С2. В этот раз вместо mspaint.exe создаётся cttune.exe.
Интересно, что в версии из инцидента 2022 года содержался некий дебаг функционал, который выводит тип исполняемого сценария.
Взаимодействие с командно-контрольным сервером у образцов версии v0.1 происходит по тому же сценарию, что и в v0.2. В одном из образцов мы нашли ссылку на профиль на Github evancolby с характерным описанием. В другом же использовался профиль на social.microsoft.com – https://social.microsoft.com/profile/catrina232324/, который, видимо, был удалён, поэтому нам не удалось получить токен оттуда.
Общее сравнение сэмплов CloudSorcerer
В данном разделе мы отобрали основные отличия образцов CloudSorcerer и провели их сравнение в виде таблицы.
Образец |
“Лаборатория Касперского” |
Инцидент 2022 |
Сэмпл из открытых источников 1 |
Сэмпл из открытых источников 2 |
---|---|---|---|---|
“Версия” |
v0.3 |
v0.2 |
v0.1 |
v0.1 |
Хеш MD5 |
f701fc79578a12513c369d4e36c57224 |
c6203605ba0d86352421e394818e8a44 |
1a3a9bc223b1ea29d12b0dd01507217f |
711b947cefca97f81383fcce5253bee8 |
Дата компиляции, UTC |
- |
2022-05-23 09:36:17 |
2022-03-28 02:56:17 |
2022-03-28 02:56:17 |
Дата появления в открытом доступе, UTC |
- |
2024-02-22 13:18:09 |
2024-07-08 12:38:32 |
2022-05-30 21:54:39 |
Загружен из |
- |
Россия |
Россия |
Нидерланды |
Команды |
9 команд (7 команда содержит расширенный список команд) |
9 команд |
8 команд. Отсутствует инъекция в TSTheme.exe |
|
Основной C2 |
Microsoft Graph, Yandex Cloud, Dropbox |
Yandex Cloud |
||
Токен |
github.com, my.mail.ru |
github.com |
social.microsoft.com |
github.com |
Имена процессов для инжекта |
msiexec.exe, mspaint.exe, explorer.exe |
msiexec.exe, mspaint.exe |
msiexec.exe, cttune.exe |
Заключение
Судя по имеющимся у нас данным, старые версии бэкдора CloudSorcerer использовались с 2022 года. Инциденты показывают связь актора с APT31 в атаках на российскую инфраструктуру. Как мы показали, у бэкдора CloudSorcerer имеются предыдущие версии и не одна. А появление новых версий подтверждает его актуальность и востребованность.
А если вы увидели подозрительную активность в своей сети и считаете, что тоже стали жертвой хакерской группировки, пишите нам. Эксперты Solar 4RAYS проведут расследование, выявят проблемы и дадут необходимые рекомендации, чтобы защитить вашу инфраструктуру от хакеров.
IOCs
Внимание: Старые хеши из 2022 года.
File hashes
MD5
711b947cefca97f81383fcce5253bee8
1a3a9bc223b1ea29d12b0dd01507217f
c6203605ba0d86352421e394818e8a44
fa4a49e4fb04037b98a903434c04fffb
c0308e591d6d84348ceb94134589d345
e7c69e12b50c65726f9bdf17405d2724
SHA1
244a9b9e1e2a0bf240667218322aa1d1e6e5278b
f932b03f4def23a0ee80e53e3c491f6907b8ab92
365801c6253065e0b0528788a830fc65251ff1ad
179abf982ae864a9e70d60365578f5b9819e2249
a45a2980fd34184647f30c5c277452fbf423000f
5c48ea15716becf5fbf437f7ebf2f8e3ad6fc4eb
SHA256
8f0e837e089e18e3d643ca6e62d56513984a193f9fb64d3f16f7bb10d67261ee
9d3468a74c43563bf443020e638af22e7116d586509c711f992e9afb507529bd
8c35b901d1e1110a19f16e9524b2dd511316bc54c9fca30b9375ce6eb81ef034
e527f543c1ad70e4a7be4e592e3ed6ca765556250520e919a9392dc54107aefe
ec1b3533b97bdadf44a489349217afd056f28d009a4c1ec9a0de78a20ad9b436
2c74d9afaa6976876572ccdb0dcc952916e8ab84bdda38d4eb3954286c230d01
URLs
https://github.com/AndreyKazakovs
https://github.com/evancolby
https://social.microsoft.com/profile/catrina232324
Приложение 1. Расширенная информация по файловым IOCs
Путь |
MD5 |
SHA1 |
SHA256 |
Комментарий |
---|---|---|---|---|
- |
711b947cefca97f81383fcce5253bee8 |
244a9b9e1e2a0bf240667218322aa1d1e6e5278b |
8f0e837e089e18e3d643ca6e62d56513984a193f9fb64d3f16f7bb10d67261ee |
CloudSorcerer v0.1 из открытых источников |
- |
1a3a9bc223b1ea29d12b0dd01507217f |
f932b03f4def23a0ee80e53e3c491f6907b8ab92 |
9d3468a74c43563bf443020e638af22e7116d586509c711f992e9afb507529bd |
CloudSorcerer v0.1 из открытых источников |
- |
c6203605ba0d86352421e394818e8a44 |
365801c6253065e0b0528788a830fc65251ff1ad |
8c35b901d1e1110a19f16e9524b2dd511316bc54c9fca30b9375ce6eb81ef034 |
CloudSorcerer v0.2 |
C:\ProgramData\EXmanage\privacy.rft C:\ProgramData\Microsoft\DeviceSync\privacy.rft |
fa4a49e4fb04037b98a903434c04fffb |
179abf982ae864a9e70d60365578f5b9819e2249 |
e527f543c1ad70e4a7be4e592e3ed6ca765556250520e919a9392dc54107aefe |
Зашифрованный CloudSorcerer v0.2 |
C:\ProgramData\EXmanage\RcDll.dll |
c0308e591d6d84348ceb94134589d345 |
a45a2980fd34184647f30c5c277452fbf423000f |
ec1b3533b97bdadf44a489349217afd056f28d009a4c1ec9a0de78a20ad9b436 |
Загрузчик CloudSorcerer v0.2 с искусственно увеличенным размером |
C:\ProgramData\Microsoft\DeviceSync\RcDll.dll |
e7c69e12b50c65726f9bdf17405d2724 |
5c48ea15716becf5fbf437f7ebf2f8e3ad6fc4eb |
2c74d9afaa6976876572ccdb0dcc952916e8ab84bdda38d4eb3954286c230d01 |
Загрузчик CloudSorcerer v0.2 |