В мае 2024 года мы обнаружили новую продолжительную атаку повышенной сложности (advanced persistent threat, APT), нацеленную на российские государственные организации. Мы дали ей название CloudSorcerer. Это сложное средство кибершпионажа, предназначенное для скрытого мониторинга, сбора и эксфильтрации данных через облачные службы Microsoft Graph, Yandex Cloud и Dropbox. Зловред использует их как командные серверы и взаимодействует с ними через API с помощью токенов аутентификации. Кроме того, в роли начального командного сервера CloudSorcerer выступает репозиторий GitHub.
По принципу действия CloudSorcerer напоминает APT-угрозу CloudWizard, о которой мы сообщали в 2023 году. Однако код новой вредоносной программы совершенно иной. Мы полагаем, что за CloudSorcerer стоит новая APT-группа, применившая аналогичный метод взаимодействия с публичными облачными службами.
Кратко о наших находках:
APT-угроза CloudSorcerer использует публичные облачные службы в качестве основных командных серверов.
Зловред взаимодействует с командными серверами с помощью специальных команд и декодирует их, руководствуясь заданной таблицей символов.
Для осуществления вредоносных операций злоумышленник также применяет интерфейсы COM-объектов Microsoft.
CloudSorcerer работает как отдельные модули (связи и сбора данных) в зависимости от запущенного процесса, но запускается из одного исполняемого файла.
Оглавление
Техническая информация
Первичный запуск
MD5
f701fc79578a12513c369d4e36c57224
SHA1
f1a93d185d7cd060e63d16c50e51f4921dd43723
SHA256
e4b2d8890f0e7259ee29c7ac98a3e9a5ae71327aaac658f84072770cf8ef02de
Время компоновки
Н/д
Компилятор
Н/д
Тип файла
Исполняемый файл Windows x64
Размер файла
172 КБ
Имя файла
Н/д
Вредоносная программа запускается злоумышленником вручную на уже зараженном компьютере. Изначально она представляет собой один бинарный файл Portable Executable (PE), написанный на языке C. Функциональность этого файла зависит от процесса, в котором он выполняется. После запуска вредоносная программа вызывает функцию GetModuleFileNameA, чтобы определить имя процесса, в котором она запущена. Затем она сравнивает это имя с заданным набором строк: browser, mspaint.exe и msiexec.exe. В зависимости от полученного имени процесса вредоносная программа активирует различные функции.
Если имя процесса — mspaint.exe, то CloudSorcerer функционирует как модуль бэкдора, осуществляя сбор данных и выполняя вредоносный код.
Если имя процесса — msiexec.exe, то зловред инициирует свой модуль связи с командным сервером.
Наконец, если имя процесса содержит строку browser или не совпадает ни с одним из имен в списке, то зловред пытается внедрить шелл-код в процессы msiexec.exe, mspaint.exe или explorer.exe, прежде чем завершить исходный процесс.
Шелл-код, используемый CloudSorcerer для миграции первичного процесса, демонстрирует довольно стандартную функциональность:
анализ блока операционного окружения процесса (PEB), чтобы определить смещения на необходимые DLL-библиотеки ядра Windows;
идентификация необходимых API Windows по хешам с помощью алгоритма ROR14;
внедрение кода CloudSorcerer в память одного из целевых процессов и запуск этого кода в отдельном потоке.
Весь обмен данными между модулями организован через каналы Windows — механизм межпроцессного взаимодействия (IPC).
Модуль бэкдора CloudSorcerer
Модуль бэкдора, выполняемый в отдельном потоке, начинает со сбора различной системной информации о пораженном компьютере. Вредоносная программа собирает следующие данные:
имя компьютера;
имя пользователя;
сведения о подверсии Windows;
время работы системы.
Все собранные данные сохраняются в специально созданной структуре. Когда информация собрана, данные записываются в именованный канал \.PIPE[1428], подключенный к процессу модуля командного сервера. Важно отметить, что весь обмен данными организован с помощью четко определенных специализированных структур, таких как структуры команд бэкдора и сбора информации.
Далее зловред пытается считать данные из канала \.PIPE[1428]. В случае успеха он парсит входящие данные, помещает их в структуру COMMAND и считывает из нее один байт, который представляет собой идентификатор COMMAND_ID.
В зависимости от идентификатора COMMAND_ID вредоносная программа выполняет одно из следующих действий:
0x1 — сбор информации о жестких дисках в системе, включая имена, емкость и свободное пространство логических дисков;
0x2 — сбор информации о файлах и папках, такой как имя, размер и тип;
0x3 — выполнение команд терминала с помощью API ShellExecuteExW;
0x4 — копирование, перемещение, переименование или удаление файлов;
0x5 — считывание данных из любого файла;
0x6 — создание и запись данных в любой файл;
0x8 — получение шелл-кода из канала и внедрение его в любой процесс путем выделения памяти и создания нового потока в удаленном процессе;
0x9 — получение вредоносного PE-файла и внедрение его в удаленный процесс;
0x7 — выполнение дополнительных расширенных функций.
Когда зловред получает COMMAND_ID 0x7, он выполняет одну из следующих дополнительных задач.
ID команды
Действие
Описание
0x2307
Создать процесс
Создает любой процесс с помощью COM-интерфейса.
0x2407
Создать процесс от имени определенного пользователя
Создает любой процесс от имени определенного пользователя.
0x2507
Создать процесс с каналом
Создает любой процесс с поддержкой межпроцессного взаимодействия для обмена данными с созданным процессом.
0x3007
Очистить кэш DNS
Очищает кэш DNS.
0x2207
Удалить задачу
Удаляет любую задачу Windows с помощью интерфейсов COM-объектов.
0x1E07
Открыть службу
Открывает службу Windows и считывает ее состояние.
0x1F07
Создать новую задачу
Создает новую задачу Windows и устанавливает триггер для ее выполнения, используя COM-объекты.
0x2007
Получить задачи
Получает список всех задач Windows, используя интерфейс COM-объекта.
0x2107
Остановить задачу
Останавливает любую задачу, используя интерфейс COM-объекта.
0x1D07
Получить службы
Получает список всех служб Windows.
0x1907
Удалить значение из раздела реестра
Удаляет любое значение из любого раздела реестра Windows, выбранного злоумышленником.
0x1A07
Создать службу
Создает новую службу Windows.
0x1B07
Изменить службу
Вносит изменения в конфигурацию любой службы Windows.
0x1807
Удалить раздел реестра
Удаляет любой раздел реестра Windows.
0x1407
Получить таблицу обновлений TCP/UDP
Получает информацию из таблицы обновлений Windows TCP/UDP.
0x1507
Собрать процессы
Собирает данные обо всех запущенных процессах.
0x1607
Задать значение раздела реестра
Вносит изменения в любой раздел реестра Windows.
0x1707
Перечислить разделы реестра
Перечисляет разделы реестра Windows.
0x1307
Перечислить ресурсы
Перечисляет сетевые ресурсы Windows.
0x1007
Задать сведения о пользователе сети
Задает сведения об учетной записи пользователя в сети Windows с помощью NetUserSetInfo. Эта операция позволяет администраторам изменять свойства учетной записи пользователя на локальном или удаленном компьютере.
0x1107
Получить участников сети
Получает участника группы локальной сети.
0x1207
Добавить участника
Добавляет пользователя в группу локальной сети.
0xE07
Получить сведения о пользователе сети
Собирает информацию о пользователе сети.
0xB07
Перечислить пользователей сети
Перечисляет пользователей сети.
0xC07
Добавить пользователя сети
Добавляет нового пользователя сети.
0xD07
Удалить пользователя
Удаляет пользователя сети.
0x907
Отменить подключение
Отменяет существующее сетевое подключение. Эта функция позволяет отключать сетевые ресурсы, например общие каталоги.
0x507
Выполнить файловую операцию
Копирует, перемещает или удаляет любой файл.
0x607
Получить сведения о сети
Собирает информацию о сети и интерфейсах.
0x707
Перечислить подключения
Перечисляет все сетевые подключения.
0x807
Подключить сетевой ресурс
Подключает удаленный сетевой диск.
0x407
Считать файл
Считывает любой файл в виде текстовых строк.
0x107
Перечислить RDP
Перечисляет все сеансы протокола удаленного рабочего стола (RDP).
0x207
Выполнить WMI
Выполняет любой запрос WMI, используя интерфейсы COM-объектов.
0x307
Получить файлы
Создает список файлов и папок.
Вся собранная информация или результаты выполненных задач добавляются в специально созданную структуру и передаются в процесс модуля командного сервера по именованному каналу.
Модуль командного сервера
При запуске модуль командного сервера создает новый канал Windows с именем \.PIPE[1428]. Затем он настраивает соединение с начальным командным сервером, предоставляя необходимые аргументы последовательности функций API Windows, отвечающих за подключение к интернету:
InternetCrackUrlA;
InternetSetOptionA;
InternetOpenA;
InternetConnectA;
HttpOpenRequestA;
HttpSendRequestA.
Вредоносная программа задает тип запроса (GET), настраивает информацию о прокси, устанавливает заголовки по заданным значениям и предоставляет URL-адрес командного сервера.
Затем вредоносная программа подключается к исходному командному серверу, который представляет собой страницу GitHub с адресом https://github[.]com/alinaegorovaMygit. Зловред считывает всю веб-страницу в буфер памяти, используя вызов InternetReadFile.
Репозиторий GitHub содержит форки трех публичных проектов без каких-либо изменений или обновлений. Таким образом создается впечатление, что это легитимная и активная страница GitHub. Однако в разделе «Автор» на странице GitHub есть интересная строка:
Это строка в шестнадцатеричной кодировке, которая начинается и заканчивается одинаковой последовательностью байтов: CDOY. Вредоносная программа полностью загружает HTML-страницу GitHub, после чего парсит ее в поисках именно этой последовательности символов — CDOY. Найдя ее, зловред копирует все символы до второго разделителя CDOY и сохраняет их в буфере памяти. Затем он анализирует эти символы, преобразуя строковые значения в шестнадцатеричные. После этого программа декодирует строку с помощью заданной таблицы символов. Каждый байт из анализируемой строки является индексом в таблице символов и указывает на байт для подстановки. Таким образом формируется новый шестнадцатеричный массив байтов.
Вместо подключения к GitHub вредоносная программа CloudSorcerer также пытается получить те же данные с hxxps://my.mail[.]ru/ — российского облачного фотохостинга. Имя фотоальбома злоумышленников содержит ту же шестнадцатеричную строку.
Первый расшифрованный байт шестнадцатеричной строки — это магическое число, которое указывает вредоносной программе, какую облачную службу использовать. Например, если это байт 1, то вредоносная программа использует облако Microsoft Graph, а если 0 — Yandex Cloud. Следующие байты представляют собой строку токена авторизации, который использует облачный API для аутентификации.
В зависимости от магического числа вредоносная программа создает структуру и указывает смещение на виртуальную таблицу функций, которая содержит подмножество функций для взаимодействия с выбранной облачной службой.
Далее вредоносная программа подключается к облачному API посредством следующих операций:
настройка исходного подключения с помощью InternetOpenA и InternetConnectA;
настройка всех необходимых заголовков и токена авторизации, полученного со страницы GitHub;
настройка путей API в запросе;
отправка запроса с использованием HttpSendRequestExA и проверка ошибок в ответе;
считывание данных из облака с помощью InternetReadFile.
После этого вредоносная программа создает два отдельных потока: один отвечает за получение данных из канала Windows, а другой — за отправку данных в этот канал. Эти потоки обеспечивают асинхронный обмен данными между модулями командного сервера и бэкдора.
Наконец, модуль командного сервера взаимодействует с облачными службами: считывает данные, получает закодированные команды, декодирует их с помощью таблицы символов и отправляет через именованный канал в модуль бэкдора. И наоборот: получает результаты выполнения команд или эксфильтрованные данные от модуля бэкдора и записывает эти данные в облако.
Инфраструктура
Страница GitHub
Страница на GitHub была создана 7 мая 2024 года, и в тот же день на нее были скопированы два репозитория. 13 мая 2024 года был добавлен еще один репозиторий, и больше никаких взаимодействий с GitHub не происходило. Скопированные репозитории не подвергались изменениям. Имя репозитория командного сервера Alina Egorova — распространенное русское женское имя, однако на фотографии на странице GitHub изображен мужчина, а сам снимок скопирован из публичного фотобанка.
Фотохостинг Mail.ru
Эта страница содержит ту же закодированную строку, что и страница GitHub. Информация о том, когда был создан и опубликован альбом, отсутствует. В качестве фото владельца использована та же самая фотография из фотобанка.
Облачная инфраструктура
Служба
Главный URL-адрес
Исходный путь
Yandex Cloud
cloud-api.yandex.net
/v1/disk/resources?path=
/v1/disk/resources/download?path=
/v1/disk/resources/upload?path=
Microsoft Graph
graph.microsoft.com
/v1.0/me/drive/root:/Mg/%s/%s:/content
Dropbox
content.dropboxapi.com
/2/files/download
/2/files/upload
Атрибуция
Облачные службы применялись и ранее, и мы уже приводили подобный пример в сообщении об APT-угрозе CloudWizard (кампания в российско-украинском конфликте, связанная с Operation Groundbait и CommonMagic). Однако маловероятно, что автором CloudSorcerer является тот же злоумышленник, так как код и общая функциональность вредоносных программ различаются. Поэтому на данном этапе мы полагаем, что CloudSorcerer — это новый автор, который перенял методику взаимодействия с публичными облачными службами.
Жертвы
Государственные организации в Российской Федерации.
Выводы
Вредоносная программа CloudSorcerer — это комплексный набор инструментов, нацеленных на российские государственные организации. Применение облачных служб, таких как Microsoft Graph, Yandex Cloud и Dropbox в качестве инфраструктуры командного сервера, а также GitHub для первоначального обмена данными с командным сервером указывает на кибершпионаж с тщательно спланированным подходом. Способность вредоносной программы динамически адаптировать свое поведение в зависимости от процесса, в котором она запущена, а также использовать сложное межпроцессное взаимодействие через каналы Windows еще больше подчеркивает ее проработанность.
Несмотря на сходство с ранее зарегистрированной APT-угрозой CloudWizard, значительные различия в коде и функциональности указывают на то, что за CloudSorcerer стоит новая APT-группа. Возможно, она вдохновлялась ранее встречавшимися методами, но разработала свои собственные уникальные инструменты.
Индикаторы компрометации
Хеш-суммы файлов (вредоносные документы, троянцы, электронные письма, приманки)
F701fc79578a12513c369d4e36c57224
CloudSorcerer
Домены и IP-адреса
hxxps://github[.]com/alinaegorovaMygit
CloudSorcerer C2
hxxps://my.mail[.]ru/yandex.ru/alinaegorova2154/photo/1
CloudSorcerer C2
Правила для YARA
rule apt_cloudsorcerer {
meta:
description = «Detects CloudSorcerer»
author = «Kaspersky»
copyright = «Kaspersky»
distribution = «DISTRIBUTION IS FORBIDDEN. DO NOT UPLOAD TO ANY MULTISCANNER OR SHARE ON ANY THREAT INTEL PLATFORM»
version = «1.0»
last_modified = «2024-06-06»
hash = «F701fc79578a12513c369d4e36c57224»
strings:
$str1 = «Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko»
$str2 = «c:\windows\system32\mspaint.exe»
$str3 = «C:\Windows\system32\msiexec.exe»
$str4 = «\\.\PIPE\»
condition:
uint16(0) == 0x5A4D and
all of ($str*)
}
Сопоставление с базой знаний MITRE ATT&CK
Тактика
Метод
Название метода
Выполнение
T1059.009
Интерпретатор команд и сценариев: облачные API
T1559
Межпроцессное взаимодействие (IPC)
T1053
Запланированная задача, задание
T1047
Инструментарий управления Windows
Закрепление
T1543
Создание или изменение системного процесса
T1053
Запланированная задача, задание
Обход защиты
T1140
Деобфускация, декодирование файлов или информации
T1112
Внесение изменений в реестр
Исследование
T1083
Поиск файлов и каталогов
T1046
Обнаружение сетевых служб
T1057
Обнаружение процессов
T1012
Поиск данных в реестре
T1082
Получение информации о системе
Сбор данных
T1005
Поиск данных в локальных системах
Управление и контроль
T1102
Веб-служба
T1568
Динамическое разрешение
Эксфильтрация данных
T1567
Эксфильтрация через веб-службу
T1537
Передача данных в учетную запись в облаке
Securelist