Оглавление



Введение

В июле 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. Функция распаковки запускает этот шеллкод в отдельном потоке.

Рисунок 1 – схема работы загрузчика
Рисунок 1 – схема работы загрузчика

Для шифрования 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].

Рисунок 2 – подробная схема работы CloudSorcerer v0.2
Рисунок 2 – подробная схема работы CloudSorcerer v0.2

Для ясности изложения мы введем свою нумерацию версий, чтобы различать образцы. Обозначим эту версию вредоноса 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.

Рисунок 3 – профиль на Github с токеном
Рисунок 3 – профиль на Github с токеном
Рисунок 4 – Таблица замены
Рисунок 4 – Таблица замены

Hex-строка токена преобразуется в байты, которые являются индексом в таблице замены. После операции замены массив байтов преобразуется в строку, которая оказывается токеном для работы с Яндекс Диском. Примечательно, что таблица замены не меняется уже несколько лет и образец, обнаруженный “Лабораторией Касперского” содержит именно её.

Взаимодействие с C2 происходит по двум сценариям. Это скачивание команд и загрузка результатов. Для этого сетевой имплант запускает два отдельных потока. В начале имплант загружает информацию о системе, собранную имплантом с бэкдор-функциональностью (msiexec.exe). ВПО собирает имя компьютера, имя пользователя, информацию о системе, системное время. Мы не заметили в этом плане отличий в от новой версии CloudSorcerer.

Рисунок 5 – взаимодействие с С2
Рисунок 5 – взаимодействие с С2


Другие образцы 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.

Рисунок 6 – Сравнение сценариев запуска
Рисунок 6 – Сравнение сценариев запуска

Интересно, что в версии из инцидента 2022 года содержался некий дебаг функционал, который выводит тип исполняемого сценария.

Взаимодействие с командно-контрольным сервером у образцов версии v0.1 происходит по тому же сценарию, что и в v0.2. В одном из образцов мы нашли ссылку на профиль на Github evancolby с характерным описанием. В другом же использовался профиль на social.microsoft.com – https://social.microsoft.com/profile/catrina232324/, который, видимо, был удалён, поэтому нам не удалось получить токен оттуда.

Рисунок 7 – github-профиль с токеном для версии v0.1
Рисунок 7 – github-профиль с токеном для версии v0.1


Общее сравнение сэмплов 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