Новая хак-группа
Эксперты Глобального центра исследований и анализа угроз «Лаборатории Касперского» (GReAT) сообщили в начале июля 2024 г. о том, что выявили кампанию кибершпионажа, нацеленную на российские государственные организации. Она получила название CloudSorcerer. Атакующие использовали сложный ИТ-инструмент, который обращается к облачным сервисам и Github в качестве командно-контрольных серверов.
Методы злоумышленников CloudSorcerer схожи с обнаруженной экспертами «Лаборатории Касперского» в 2023 г. кампанией CloudWizard, однако код вредоносного программного обеспечения (ПО) у CloudSorcerer совершенно иной.
Для проведения атак кибергруппа CloudSorcerer использует многоступенчатую стратегию. Сначала злоумышленники вручную разворачивают вредоносное ПО на зараженном устройстве. После запуска CloudSorcerer адаптирует свои возможности в зависимости от настроек ИТ-системы. В зависимости от полученного имени процесса вредоносная программа активирует различные функции, в том числе сбор, копирование, удаление данных, инициирование модуля связи с командным сервером, внедрение шелл-кода.
Способность вредоносной программы динамически адаптировать свое поведение в зависимости от процесса, в котором она запущена, а также использовать сложное межпроцессное взаимодействие через каналы Windows еще больше подчеркивает ее проработанность. Это сложное средство кибершпионажа, предназначенное для скрытого мониторинга, сбора и эксфильтрации данных через облачные службы Yandex Cloud, Microsoft Graph или же файловый хостинг компании Dropbox. Вредоносная программа использует их как командные серверы и взаимодействует с ними через API с помощью токенов аутентификации. Кроме того, в роли начального командного сервера CloudSorcerer выступает репозиторий GitHub.
Издание СNews обратилось к облачной платформе Yandex Cloud, разработанной российской интернет-компанией «Яндекс», за комментарием по данному материалу и к специалистам из «Лаборатории Касперского».
Хак-группа CloudSorcerer применяет оригинальные методы обфускации и шифрования, чтобы избежать обнаружения. Вредоносное ПО декодирует команды с помощью жестко закодированной таблицы кодов и манипулирует объектными интерфейсами Microsoft COM для выполнения атак.
«В этой хак-группе злоумышленники хитроумно используют публичные облачные сервисы для шпионажа, скрывая с их помощью свои действия. Это подтверждает, что защитная стратегия предприятия должна включать в себя ИТ-инструменты, которые позволят распознавать и смягчать последствия таких методов», - сказал ведущий эксперт «Лаборатории Касперского» по кибербезопасности Сергей Ложкин.
ИБ-специалисты продолжают отслеживать и анализировать деятельность кибергруппы CloudSorcerer и обновляет свои защитные решения и аналитические сервисы в соответствии с новой информацией.
Техническая информация
Вредоносная программа от CloudSorcerer запускается злоумышленником вручную на уже зараженном компьютере. Изначально она представляет собой один бинарный файл Portable Executable (PE), написанный на языке C. Согласно данным предоставленными GReAT, функциональность этого файла зависит от процесса, в котором он выполняется. После запуска вредоносная программа вызывает функцию 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, он выполняет одну из 35 дополнительных задач (0x2307, 0x2407, 0x2507, 0x3007, 0x2207 и т.п.). Вся собранная информация или результаты выполненных задач добавляются в специально созданную структуру и передаются в процесс модуля командного сервера по именованному каналу.
Модуль командного сервера
При запуске модуль командного сервера создает новый канал Windows с именем \\.\PIPE\[1428]. Затем он настраивает соединение с начальным командным сервером, предоставляя необходимые аргументы последовательности функций API Windows, отвечающих за подключение к интернету: InternetCrackUrlA; InternetSetOptionA; InternetOpenA; InternetConnectA; HttpOpenRequestA; HttpSendRequestA.
Вредоносная программа задает тип запроса (GET), настраивает информацию о прокси, устанавливает заголовки по заданным значениям и предоставляет URL-адрес командного сервера.
Затем вредоносная программа подключается к исходному командному серверу, который представляет собой страницу GitHub с адресом https://github[.]com/alinaegorovaMygit. Зловред считывает всю веб-страницу в буфер памяти, используя вызов InternetReadFile. Репозиторий GitHub содержит форки трех публичных проектов без каких-либо изменений или обновлений. Таким образом создается впечатление, что это легитимная и активная страница GitHub. Однако в разделе «Автор» на странице GitHub есть интересная строка.
Это строка в шестнадцатеричной кодировке, которая начинается и заканчивается одинаковой последовательностью байтов: CDOY. По данным GReAT, зловред полностью загружает 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, а другой - за отправку данных в этот канал. Эти потоки обеспечивают асинхронный обмен данными между модулями командного сервера и бэкдора. Наконец, модуль командного сервера взаимодействует с облачными службами: считывает данные, получает закодированные команды, декодирует их с помощью таблицы символов и отправляет через именованный канал в модуль бэкдора. И наоборот: получает результаты выполнения команд или эксфильтрованные данные от модуля бэкдора и записывает эти данные в облако.