Отчеты о целевых атаках (APT)

CloudSorcerer: новая APT-угроза, нацеленная на российские государственные организации

В мае 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 для аутентификации.

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

Разные виртуальные таблицы для Яндекса и Microsoft

Разные виртуальные таблицы для Яндекса и Microsoft

Далее вредоносная программа подключается к облачному 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

Сопоставление с базой знаний 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 Передача данных в учетную запись в облаке

CloudSorcerer: новая APT-угроза, нацеленная на российские государственные организации

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Отчеты

CloudSorcerer: новая APT-угроза, нацеленная на российские государственные организации

«Лаборатория Касперского» обнаружила новую APT-угрозу CloudSorcerer, нацеленную на российские государственные организации и использующую облачные службы в качестве командных серверов аналогично APT CloudWizard.

StripedFly: двуликий и незаметный

Разбираем фреймворк StripedFly для целевых атак, использовавший собственную версию эксплойта EternalBlue и успешно прикрывавшийся майнером.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике