Кампания CHAMELEON#NET: глубокий анализ многоступенчатой .NET-угрозы с отраженной загрузкой и кастомным шифрованием

remote access Trojan

Группа анализа угроз Securonix исследовала сложную кампанию вредоносного спама, распространяющую трояны удаленного доступа через семейство DarkTortilla. Атака начинается с фишинговых писем, заманивающих пользователей в загрузке архива .BZ2, что инициирует многоступенчатую цепочку заражения. Исходная полезная нагрузка представляет собой сильно обфусцированный JavaScript-файл, действующий как дроппер, который приводит к выполнению сложного VB.NET-загрузчика. Этот загрузчик использует продвинутые механизмы рефлексии и кастомный условный XOR-шифр для расшифровки и выполнения финальной полезной нагрузки - трояна FormBook RAT - полностью в памяти. Кампания демонстрирует многоуровневое уклонение от обнаружения: от обфускации скриптов до безфайлового выполнения, в конечном счете стремясь к установлению долгосрочного контроля над скомпрометированной системой.

Описание

Исследователи отслеживают кампанию по распространению DarkTortilla - высокомодульного и скрытного .NET-вредоноса, активного с 2015 года. Известный своей способностью развертывать широкий спектр массовых вредоносов, включая AgentTesla, AsyncRAT и различные стилеры информации, DarkTortilla остается постоянной угрозой. Конкретная кампания начинается с целевых фишинговых писем, заманивающих жертв в секторе национального социального обеспечения в загрузку якобы безобидного архива. Однако это действие запускает сложный многоступенчатый процесс заражения, предназначенный для тщательной распаковки и выполнения финальной полезной нагрузки с одновременным уклонением от обнаружения.

CHAMELEON#NET

Цепочка атаки использует обфусцированные JavaScript-дропперы, которые, в свою очередь, развертывают сложный VB.NET-исполняемый файл. Этот исполняемый файл является основным загрузчиком, ответственным за расшифровку встроенной DLL с использованием уникального индексного XOR-шифра и последующей отраженной загрузки в память. Финальная полезная нагрузка, идентифицированная как FormBook RAT, устанавливает устойчивость через ключи автозапуска реестра и модификации папки автозагрузки, отключает средства безопасности и предоставляет злоумышленнику полный удаленный доступ к машине жертвы.

Кампания демонстрирует изощренный многоуровневый подход к доставке вредоносного ПО. Злоумышленники комбинируют социальную инженерию, интенсивную обфускацию скриптов и передовые методы уклонения .NET для успешного компрометирования целей. Использование кастомной процедуры расшифровки с последующей отраженной загрузкой позволяет выполнить финальную полезную нагрузку безфайловым методом, что значительно усложняет обнаружение и судебный анализ. Маскируя свои файлы и ключи реестра под легитимные имена, вредонос пытается слиться с нормальной системной активностью для поддержания долгосрочной устойчивости.

Исходное проникновение осуществляется через вредоносный спам. Атака начинается с тщательно составленных фишинговых писем. Эти письма направляют жертв на поддельный веб-портал, имитирующий легитимную службу, побуждая их ввести свои институциональные учетные данные социального обеспечения. Это служит двойной цели сбора учетных данных и выступает в качестве шлюза для полезной нагрузки. После ввода пользователем своих учетных данных они запускают загрузку сжатого архива 81__POP1.BZ2. Когда архив загружен, пользователь уже находится в режиме завершения задачи, ожидая увидеть документ, связанный с грантом. Файл внутри архива, POP2.js, почти наверняка продолжает обман, выглядя как текстовый файл. Жертва, полагая, что она просто открывает обещанную информацию о гранте, соблазняется двойным щелчком по файлу, инициируя цепочку заражения.

На первом этапе многоступенчатый JavaScript-дроппер при выполнении действует как многоступенчатый дроппер. Его код сделан почти нечитаемым несколькими слоями обфускации, предназначенными для обхода статических сигнатур антивируса. Скрипт содержит много шума, переменные инициализируются, но никогда не используются, и присутствуют бессмысленные строковые присваивания. Он использует String.fromCharCode и арифметические операции для генерации символов, что является классическим признаком декодирования во время выполнения. После деобфускации функциональность скрипта становится понятной. Он использует серию ActiveXObjects для декодирования и запуска следующего этапа.

Файл JavaScript функционирует как многоступенчатый дроппер. Его основная цель - декодировать две различные, более крупные полезные нагрузки, встроенные в его собственный код в виде строк Base64. Эти декодированные полезные нагрузки затем записываются в каталог %TEMP% как adobe.js и svchost.js соответственно. Наконец, скрипт использует WScript.Shell для выполнения обоих сброшенных JavaScript-файлов, инициируя следующий этап цепочки заражения.

На втором этапе скрипты второго уровня, adobe.js и svchost.js, функционируют аналогично первому. Каждый из них содержит другую полезную нагрузку, закодированную в Base64. Скрипт svchost.js сбрасывает основной компонент следующего этапа: исполняемый файл .NET с именем QNaZg.exe, который представляет собой штамм Darktortilla. Сначала он проверяет путь к папке Temp с помощью FileSystemObject, а затем декодирует встроенную полезную нагрузку с использованием техник MSXML DOM. Декодированные двоичные данные извлекаются через свойство nodeTypedValue. Как только двоичная полезная нагрузка становится доступной в памяти, скрипт использует объект ADODB.Stream для записи этих данных на диск. Затем он запускает сброшенный двоичный файл с помощью объекта WScript.Shell.

Скрипт adobe.js сбрасывает файл с именем PHat.jar, который, как показал наш анализ, является пакетом установщика MSI. Он ведет себя аналогично svchost.js. DarkTortilla (QNaZg.exe) - это 32-битный исполняемый файл VB.NET, который служит основным загрузчиком для финальной полезной нагрузки. Его высокая энтропия предполагает, что он либо упакован, либо сильно обфусцирован. Оказалось, что он сильно обфусцирован.

Основная ответственность этого загрузчика - расшифровать и выполнить встроенную DLL, хранящуюся в его собственных ресурсах. Это достигается с помощью многоступенчатого процесса, предназначенного для уклонения от анализа. Загрузчик содержит большой, хардкодный массив байтов, который является зашифрованной финальной полезной нагрузкой. Для его расшифровки вредонос использует кастомный многоступенчатый алгоритм. Весь массив байтов переворачивается с использованием операции LINQ .Reverse<byte>(). Затем применяется кастомная функция к каждому байту перевернутого массива. Эта функция выполняет условную операцию XOR: если индекс байта в новом, перевернутом массиве четный, он подвергается XOR с ключом 193 (0xC1). Если индекс нечетный, байт остается без изменений. Эта простая процедура эффективно расшифровывает массив байтов, открывая в памяти действительный PE-файл, идентифицируемый по заголовку MZ.

С финальной полезной нагрузкой сборки, теперь полностью расшифрованной в памяти, загрузчик DARKTORTILLA организует ее выполнение таким образом, чтобы обеспечить максимальную скрытность: отраженную загрузку. Это техника, которая полностью обходит традиционный загрузчик Windows Portable Executable. Вместо записи полезной нагрузки на диск как физического файла вредонос использует метод System.AppDomain.Load(byte[]). Это инструктирует общеязыковую среду выполнения .NET загрузить сборку непосредственно из представления массива байтов в виртуальной памяти процесса.

Представьте AppDomain как легковесный контейнер или песочницу в рамках одного процесса операционной системы. Один процесс ОС может содержать несколько AppDomains. Каждый AppDomain обеспечивает уровень изоляции для кода, выполняемого в нем. Когда вы запускаете .NET-приложение, оно обычно выполняется в AppDomain по умолчанию. Все сборки загружаются в этот домен. Вредоносное ПО, такое как DARKTORTILLA, использует AppDomain.Load(byte[]), потому что это позволяет им загружать вредоносную сборку непосредственно из массива байтов, который они расшифровали в памяти. Она загружается исключительно из пространства памяти процесса. Это классическая безфайловая техника, которая помогает уклоняться от сигнатурных антивирусных решений, которые в основном сканируют файлы на диске.

Как только полезная нагрузка отображается в домен приложения, загрузчик использует позднее связывание и расширенную рефлексию .NET для ее активации. Вместо хардкодинга прямых вызовов методов полезной нагрузки во время компиляции загрузчик специально использует метод Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(). NewLateBinding.LateGet() вызывается путем передачи отражательно загруженной полезной нагрузки в качестве аргумента, позволяя загрузчику динамически извлекать и выполнять назначенную точку входа полезной нагрузки. Этот механизм позднего связывания является тактикой сложного уклонения от защиты; он эффективно обфусцирует истинный поток управления и возможности вредоноса. Разрешая и вызывая вызовы методов динамически во время выполнения, он заставляет аналитиков работать в динамических средах выполнения, добавляя слои сложности к обнаружению и усилиям обратного проектирования. Эта комбинация отраженной загрузки и динамического вызова гарантирует, что FormBook RAT достигает своих вредоносных целей с минимальным следом и максимальной скрытностью.

Сборка в памяти, Segwenservice.dll, является финальной полезной нагрузкой, которую мы идентифицировали как вариант трояна FormBook RAT. Она высокомодульна, с различными классами, ответственными за конкретные задачи, такие как установка, устойчивость, проверки на анти-VM и расшифровка. Поведение вредоноса диктуется файлом конфигурации, хранящимся как зашифрованный ресурс. Этот ресурс расшифровывается во время выполнения с использованием AES, что затрудняет извлечение его конфигурации без динамического анализа. Его первое действие - расшифровать свою собственную конфигурацию, которая является зашифрованным ресурсом.

Процедура шифрования, обрабатывающая закодированный ресурс, является стандартной реализацией AES. Она расшифровывает через поток памяти с производным ключом IV. Расшифрованный массив байтов AES создает двоичный ридер над потоком памяти из данных, используя кодировку UTF-8, и создает список как контейнер. Список оказался конфигом, который содержит объекты/пары ключ-значение. Этот словарь конфигурации диктует поведение вредоноса, включая устойчивость, пути установки и функции анти-анализа.

На основе своей конфигурации RAT устанавливает устойчивость. Команда конструируется для копирования загрузчика в новое место: $APPDATA\Roaming\word\word.exe, которое является папкой автозагрузки, маскируясь под компонент Microsoft Word. Сначала проверяется скрытая папка автозагрузки. Это распространенная техника для устойчивости. Таким образом, вредонос гарантирует, что он снова запустится при перезагрузке/входе в систему. Имена, такие как word.exe в папке word в AppData, легко упускаются пользователями и многими базовыми средствами контроля безопасности.

Он также управляет устойчивостью через реестр Windows. Он открывает ключ автозапуска реестра под HKCU и проверяет, существует ли значение с именем svchost.exe. Проверяется word.exe в AppData\Roaming\word. Добавляет себя под Run, гарантируя, что сброшенный вредонос word.exe запускается при входе пользователя. Имя значения реестра имитирует svchost.exe, который является легитимным системным процессом Windows.

Вредонос ожидает запуска в автоматизированных средах анализа и использует классическую технику для их поражения. Он конструирует и выполняет команду cmd.exe, которая включает две команды ping 127.0.0.1 -n 39 > nul. Каждая команда ping вводит задержку приблизительно 38 секунд. Многие автоматизированные песочницы имеют ограниченное время выполнения; они прекращают анализ, если образец кажется неактивным слишком долго. Вводя эти значительные задержки, вредонос может переждать песочницу, предотвращая наблюдение и анализ его полного поведения.

Наш анализ наблюдал, как RAT пытается модифицировать ключи реестра, связанные с Защитником Windows, чтобы отключить его мониторинг в реальном времени. Это снижает вероятность обнаружения встроенной защитой конечной точки. Основной функцией FormBook RAT в этой кампании является постоянный кейлоггинг. Вредонос реализует низкоуровневый перехват клавиатуры, вероятно, используя Windows API, для перехвата нажатий клавиш во всех приложениях. Это позволяет ему захватывать каждую нажатую пользователем клавишу, независимо от активного окна.

Захваченные нажатия клавиш не сразу эксфильтрируются, а буферизуются и записываются в локальные файлы для последующей передачи. Во время нашего анализа мы наблюдали, как RAT создает файлы с именами, соответствующими шаблону KB_*.dat, в его каталоге устойчивости. Этот пакетный подход минимизирует сетевой трафик, затрудняя обнаружение, и гарантирует, что данные не потеряны, если подключение к C2 временно недоступно. Типичный файл журнала кейлоггера от FormBook следует структурированному формату, позволяющему легкий парсинг злоумышленником. Специальные клавиши часто логируются с определенными тегами или описаниями в скобках, чтобы отличить их от стандартного ввода символов.

FormBook RAT инициирует связь со своей инфраструктурой командования и управления для получения команд и эксфильтрации собранных данных. Во время нашего анализа мы наблюдали, как RAT пытается подключиться к динамическому DNS-домену duckdns.org. Службы динамического DNS являются распространенной тактикой для операторов вредоносного ПО, поскольку они позволяют IP-адресу C2 часто меняться, в то время как доменное имя остается постоянным, что затрудняет блокировку командам безопасности. В частности, сетевые перехваты выявили исходящие TCP-подключения к 51.79.62[.]89, который разрешается в домен duckdns.org, указанный в конфигурации вредоноса. Конкретно, мы наблюдаем множественные попытки установить соединение на порту назначения 57652.

Индикаторы компрометации

IPv4

  • 51.79.62.89

SHA256

  • 4ebef5d23ce0fe6c2940ba7a2f6bfc512b1ec5f01458284d2ce0e71ee8787b81
  • 56d627adc6e6e8967ade649f707134a501cfea5ec66322514536ee8ace3053fb
  • 67c00ede3964cb78c64575b65b301f808958311b99779b71597f6282b1a4e9f2
  • 7c9128d197301fcd89d6fd1b0077d2a35f2a98c6219386900d7e8c89e4799a86
  • 8bcfc6dd444f3f577f026d465d826194db45cd205b24f77b9080debba96e3b7b
  • a428d2602ad3bad2d590ed68b17a308cff8ab7ff61da2a51acb83fd202b5358d
  • aab2b9cd5a946739bbb41ae2234adaf34ba9761445315c2b5ba270a7b931a2e2
  • d4c097412ab05630e6cb97b544dc7c0a0e238a4bdf5c79da679c7545face2dad
  • eba24c92b51d8fb24697952135a7d7bdf4a7511ab94be850fda1fc512675f6ad
Комментарии: 0