Earth Baku: как работают профессионалы кибершпионажа


Trend_Microсегодня в 12:04
В конце 2020 года мы зафиксировали новую кибершпионскую кампанию группировки Earth Baku, более известную как APT41. Атаки были направлены против различных организаций в странах Индо-Тихоокеанского региона. Как и в других кампаниях, Earth Baku использовала высококлассный инструментарий собственной разработки. В этом посте мы расскажем об этой кампании, а также о том, как Earth Baku развивала свои вредоносные инструменты для атак.

Коротко о деятельности Earth Baku​

С деятельностью этой группировки мы уже сталкивались в 2018-2020 годах. APT41 «отметилась» во множестве киберинцидентов, в которых использовались waterfall-атаки и фишинг. Основными целями атак были фармацевтические и телекоммуникационные компании.
Таймлайн кампаний и инструментов Earth Baku. Источник здесь и далее: Trend Micro
Таймлайн кампаний и инструментов Earth Baku. Источник здесь и далее: Trend Micro
В конце 2020 года мы обнаружили новый загрузчик, предназначенный для выполнения произвольного кода с функцией скрытого режима. С тех пор мы нашли несколько вариантов этого загрузчика, который назвали StealthVector и, кроме того, загрузчик шелл-кода, написанный на C#, получивший название StealthMutant.
Эти загрузчики кода имеют две разные полезные нагрузки: маяк Cobalt Strike и недавно найденный модульный бэкдор ScrambleCross. Их анализ показал, что преступники, стоящие за этой кампанией, связаны с Earth Baku/APT41.

Министерством юстиции США в августе 2020 года обвинило эту группу в преступлениях, связанных с проникновением в сети компаний, кражей данных, вымогательством и нелегальным майнингом криптовалюты.

Новая кампания Earth Baku, которая действует по крайней мере с июля 2020 года, связана с предыдущей кампанией, о которой сообщили Positive Technologies и Fireeye. В ней использовался другой загрузчик шелл-кода, который мы назвали LavagokLdr. Однако, поскольку группа полностью обновила свой набор инструментов, мы считаем эту атаку совершенно новой кампанией.

Кампания направлена на страны Индо-Тихоокеанского региона — Индию, Индонезию, Малайзию, Филиппины, Тайвань и Вьетнам. APT41 атакуют как предприятия, так и государственные структуры, включая организации в сфере авиаперевозок, компьютерной техники, автомобилестроения, инфраструктуры, издательского дела, СМИ и ИТ-индустрии. Многие страны, затронутые этой кампанией, значились и вышеупомянутом обвинительном заключении Минюста США в отношении Earth Baku.
В последней кампании Earth Baku использовали несколько векторов атак:
  • SQL-инъекцию в веб-приложениях жертвы;
  • атаки сервера MS Exchange через уязвимость ProxyLogon;
  • атаки через LNK-файлы в электронной почте;
  • запуск c помощью InstallUtil в планировщике Windows.
Рассмотрим эти векторы немного подробнее.

SQL-инъекция в веб-приложениях​

Для загрузки вредоносного файла злоумышленники использовали sqlmap, инструмент для пентеста MS SQL Server на основе Python.
Схема атаки через SQL-инъекцию
Схема атаки через SQL-инъекцию
Используя скрипт для sqlmap, преступники загружали на компьютер жертвы VBS-файл.
Скрипт для sqlmap
Скрипт для sqlmap
Скрипт декодирует VBS-файл из Base64-кодировки, сохраняет его на компьютер жертвы и запускает.
VBS-файл, созданный на компьютере жертвы
VBS-файл, созданный на компьютере жертвы
Этот VBS загружает закодированный в Base64 файл с сервера APT41 и декодирует его в файл install.bat в папке пользователя.
Файл install.bat устанавливает StealthVector в качестве службы Windows
Файл install.bat устанавливает StealthVector в качестве службы Windows

Эксплуатация ProxyLogon​

В этом варианте атаки участники Earth Baku проникали на сервер, используя уязвимость CVE-2021-26855 (ProxyLogon) в MS Exchange Server. Затем они разворачивали на сервере веб-оболочку China Chopper, после чего с её помощью загружали и устанавливали StealthVector.
Атака Earth Baku с использованием уязвимости ProxyLogon
Атака Earth Baku с использованием уязвимости ProxyLogon
Мы считаем, что APT41 и другие группировки будут продолжать использовать эксплойт для ProxyLogon, пока предприятия и организации не установят патчи для этой уязвимости.

Вредоносные письма с LNK-файлом​

После дальнейшего исследования на VirusTotal мы обнаружили, что EarthBaku пытались распространить StealthVector через LNK-файлы, отправленные как вложения в электронную почту.
Цепочка атаки с LNK-файлом
Цепочка атаки с LNK-файлом

LNK-файл переименовывает CertUtil.exe, легитимную утилиту Microsoft, после чего использует переименованный инструмент для загрузки документа-обманки и StealthVector. Однако мы никогда не видели этот тип вектора заражения в «дикой» природе.
Команды из LNK-файла
Команды из LNK-файла

InstallUtil в планировщике​

StealthMutant, в свою очередь, выполняется с помощью другого механизма. Хотя мы до сих пор не уверены в том, как именно злоумышленники получают доступ к системе, мы обнаружили, что StealthMutant выполняется программой InstallUtil.exe через запланированную задачу.
Запуск StealthMutant с помощью InstallUtil.exe
Запуск StealthMutant с помощью InstallUtil.exe

InstallUtil.exe — легитимное приложение-установщик под Microsoft .NET Framework, но он также известен как двоичный файл live-off-the-land (LOLBin), который используется в прокси-исполнении программ .NET Framework. В запланированном задании InstallUtil.exe регистрируется для запуска StealthMutant.

Технический анализ загрузчиков​

В кампании Earth Baku использовались два загрузчика, о которых говорилось выше: StealthMutant и StealthVector. Рассмотрим их более подробно.

StealthMutant​

StealthMutant — стелс-загрузчик шеллкода, написанный на C#, который используется по крайней мере с июля 2020 года. Он читает файл, зашифрованный AES-256-ECB, расшифровывает его в памяти, внедряет свою вредоносную полезную нагрузку в удалённый процесс, а затем выполняет его.
По нашим наблюдениям, в качестве полезной нагрузки используется агент Cobalt Strike или бэкдор ScrambleCross. Большинство образцов StealthMutant, с которыми мы столкнулись, обфусцированы ConfuserEx — обфускатором с открытым исходным кодом для приложений .NET Framework.
После деобфускации этих образцов мы обнаружили необработанные пространства имён и классы, которые описывают их назначение.
Пространство имён и классы из деобфусцированного образца
Пространство имён и классы из деобфусцированного образца
Расшифрованные строки выглядят следующим образом:
1) класс MagicString предоставляет свойство getter, которое расшифровывает строки при доступе;
2) класс MagicString имеет поле, содержащее зашифрованную строку;
3) класс MagicString предоставляет __Decrypt, метод-обёртку для расшифровки;
4) если StealthMutant впервые использует метод __Decrypt, то AES-ключ и вектор инициализации (IV) будут инициализированы на основе жёстко закодированного значения __factory, хотя этот IV не имеет смысла в режиме ECB. Ключ представляет собой хэш SHA-256, а IV — хэш MD5. Значения хэшей SHA-256 и MD5 отличаются для каждого образца StealthMutant;
5) метод __Decrypt вызывает метод Crypto.DecryptData;
6) метод Crypto.DecryptData расшифровывает заданные данные жёстко закодированным режимом или, в данном случае, режимом ECB.
Расшифрованные строки StealthMutant
Расшифрованные строки StealthMutant
Основная цель StealthMutant — выполнение второго этапа шеллкода в скрытом режиме. Для этого StealthMutant патчит API функции EtwEventWrite, чтобы отключить Event Tracing for Windows (ETW). Это делает его невидимым для встроенной системы журналирования Windows.
StealthMutant поддерживает как 32-битную, так и 64-битную архитектуру. В методе DoPatch StealthMutant определяет архитектуру динамически. Если он работает на 32-битной ОС, EtwEventWrite патчится с помощью инструкций «C2 14 00 (ret 0x14)», в то время как в 64-битной системе патч выглядит как «48 31 C0 C3 (xor rax, rax; ret)».

Архитектурно-зависимые патчи в StealthMutant
Архитектурно-зависимые патчи в StealthMutant

Имена файлов зашифрованной полезной нагрузки вшиты в код, но отличаются для каждого образца StealthMutant. Строка имени файла также шифруется с использованием AES-256-ECB. Если целевой зашифрованный файл существует в текущем каталоге, StealthMutant считывает и расшифровывает его в памяти.
Большинство образцов StealthMutant используют для расшифровки алгоритм AES-256-ECB, в то время как ранние версии обходились простым XOR. Однако мы с июля 2020 года не встречали эти разновидности StealthMutant.
Старая версия StealthMutant, в которой используется XOR
Старая версия StealthMutant, в которой используется XOR
Варианты StealthMutant, использующие AES-256-ECB и XOR, имеют одинаковые шаги расшифровки. Образцы StealthMutant, использующие AES, имеют зашифрованный файл, содержащий мусорные байты, подпись, семя (seed) ключа шифрования, семя вектора инициализации IV и зашифрованное тело полезной нагрузки. Размеры этих полей различны для разных вариантов вредоноса. Приведём алгоритм расшифровки одного из образцов StealthMutant, который содержит 128 мусорных байт, имеет длину семян ключа и IV в 12 байт:

1) вычислить MD5-хэш зашифрованного тела полезной нагрузки — тело состоит из семени ключа (key seed), семени IV (IV seed) и зашифрованной полезной нагрузки;
2) сравнить MD5-хэш с подписью в зашифрованном файле, чтобы проверить его целостность;
3) скопировать указанное количество байтов после подписи, а затем вычислить хэш SHA-256 для ключа AES;
4) скопировать указанное количество байтов, следующее за семенем ключа, а затем вычислитm хэш MD5 для AES IV, хотя это и бессмысленно в режиме ECB;
5) расшифровать оставшиеся байты с помощью AES-256-ECB со сгенерированным ключом SHA-256;
6) сравнить длину в верхней части расшифрованных байтов с жёстко закодированным значением в поле Protocol.Flag;
7) если StealthMutant прошёл все эти проверки, прочитать размер полезной нагрузки.
Алгоритм расшифровки StealthMutant
Алгоритм расшифровки StealthMutant
После расшифровки полезной нагрузки StealthMutant выполняет её в удалённом процессе с использованием техники внедрения. Эта техника содержит следующие шаги:
1) создаётся процесс в приостановленном режиме (CREATE_SUSPENDED);
2) создаётся новый раздел и отображается в локальном процессе с помощью NtCreateSection и ZwMapViewOfSection, после чего расшифрованный шеллкод копируется в этот раздел;
3) раздел отображается на удалённый процесс, что также приводит к отображению шеллкода;
4) ищется и патчится точка входа удалённого приостановленного процесса, чтобы изменить поток выполнения на точку входа отображённой полезной нагрузки;
5) основной поток приостановленного процесса возобновляется и выполняет полезную нагрузку.
Внедрение в процесс полезной нагрузки
Внедрение в процесс полезной нагрузки
Эта техника широко используется в качестве инструмента red-team в C#. Мы предполагаем, что автор StealthMutant использовал реализацию встраивания в процесс, опубликованную на GitHub.

StealthVector​

В октябре 2020 года мы обнаружили StealthVector, стелс-загрузчик шеллкода, написанный на C/C++. Это вредоносное ПО реализует различные техники маскировки и продолжает активно разрабатываться. По нашим наблюдениям, его полезной нагрузкой является либо агент Cobalt Strike, либо вредоносная программа ScrambleCross.
StealthVector предназначен для выполнения второго этапа полезной нагрузки в скрытом режиме. Его методы маскировки могут быть включены и отключены с помощью встроенной конфигурации.
Конфигурация StealthVector встроена в секцию данных с шифрованием ChaCha20, которая расшифровывается при инициализации. Процедура ChaCha20 использует фиксированное значение 0x13 для начального счётчика.
Расшифровка конфигурации StealthVector
Расшифровка конфигурации StealthVector
Зашифрованная конфигурация StealthVector и информация о ключе ChaCha20
Зашифрованная конфигурация StealthVector и информация о ключе ChaCha20
Фиксированное значение счётчика в функции ChaCha20
Фиксированное значение счётчика в функции ChaCha20
Согласно RFC7539, определяющей спецификацию потокового шифра ChaCha20 и аутентификатора Poly1305, алгоритм ChaCha20 использует 32-битный начальный счётчик.
Этот счётчик может быть любым числом, но обычно это 0 или 1. По нашим наблюдениям StealthVector всегда использует для начального счётчика 0x13, что является необычной практикой. Это затрудняет расшифровку конфигурации вредоносной программы помощью обычных методов, таких как библиотека Python pycryptodome, которая не поддерживает пользовательские начальные счётчики.

Расшифрованные данные конфигурации копируются в выделенный буфер. Встречаются два типа конфигураций. Один используется для локального запуска шеллкода и имеет размер 0x38 байт. Этот тип конфигурации содержит поля для контрольной суммы, флаги контекста, флаги для скрытия, и информацию для полезной нагрузки.
Конфигурация, которая загружает зашифрованную полезную нагрузку из двоичного файла StealthVector
Конфигурация, которая загружает зашифрованную полезную нагрузку из двоичного файла StealthVector
Конфигурация, которая загружает зашифрованную полезную нагрузку из внешнего файла
Конфигурация, которая загружает зашифрованную полезную нагрузку из внешнего файла
Второй тип конфигурации для удалённого инжектора шеллкода имеет длину 0x44 байта. Здесь содержатся поля для контрольной суммы, флаги контекста, флаги для скрытия, информация для инъекции и информация для полезной нагрузки.
Конфигурация, которая загружает зашифрованную полезную нагрузку из внешнего файла без внедрения в процесс
Конфигурация, которая загружает зашифрованную полезную нагрузку из внешнего файла без внедрения в процесс
Конфигурация, которая загружает зашифрованную полезную нагрузку из внешнего файла и выполняет внедрение в процесс
Конфигурация, которая загружает зашифрованную полезную нагрузку из внешнего файла и выполняет внедрение в процесс

Выводы и рекомендации​

Мы рассмотрели лишь небольшую часть технических особенностей свежей кибершпионской кампании Earth Baku. Больше подробностей содержится в нашем новом исследовании Earth Baku: An APT Group Targeting Indo-Pacific Countries With New Stealth Loaders and Backdoor.
Новые версии вредоносного ПО демонстрируют, что Earth Baku состоит из участников с разнообразными навыками. Использование группой загрузчиков StealthMutant и StealthVector показывает, что в её рядах есть как минимум один человек, знакомый с инструментами и методами, используемыми «красными командами» (red team).
Использование группой бэкдора ScrambleCross свидетельствует, что среди членов группы есть как минимум один человек, который обладает глубокими знаниями в области низкоуровневого программирования и разработки сложного программного обеспечения.
Вот несколько мер, которые помогут защитить сети компаний от кибершпионажа и минимизировать риск компрометации данных:
  • применяйте принцип наименьших привилегий: ограничьте доступ к конфиденциальным данным и тщательно контролируйте разрешения пользователей, чтобы затруднить латеральное перемещение злоумышленников;
  • помните об уязвимостях: регулярно обновляйте системы и приложения и применяйте строгую политику управления исправлениями, практикуйте виртуальное исправление, чтобы защитить системы, для которых исправления ещё недоступны;
  • применяйте проактивную стратегию реагирования на инциденты: внедряйте защитные меры, направленные на оценку угроз и смягчение их последствий, регулярно проводите учения по безопасности и проверки эффективности плана реагирования на инциденты;
  • соблюдайте правило 3-2-1: храните как минимум три копии корпоративных данных в двух разных форматах, причём одну копию вне офиса, регулярно обновляйте и тестируйте эти копии, чтобы убедиться в отсутствии ошибок.

Хабы:Блог компании Trend MicroИнформационная безопасность
 
Сверху Снизу