Специалисты Elastic Security Labs выявили ранее недокументированный загрузчик вредоносного кода, получивший название OXLOADER. Этот инструмент используется для доставки информационного стилера CASTLESTEALER. Распространение происходит через вредоносные объявления Google Ads, а уровень обнаружения как статическими антивирусными движками, так и при запуске в изолированных средах остаётся крайне низким.
Описание
Новый загрузчик привлёк внимание аналитиков в ходе активной кампании, нацеленной на одного из клиентов Elastic Security Labs. Характер используемых механизмов - в частности, проверка на принадлежность к странам СНГ и настройки русского языка в системе - указывает на финансово мотивированного злоумышленника, предположительно говорящего на русском языке. Публичных упоминаний этого семейства вредоносного ПО ранее не было.
Вредоносная реклама, задействованная в кампании, имитировала официальные объявления о загрузке Node.js. Жертва, переходя по спонсируемой ссылке, направлялась на поддельный сайт, внешне похожий на легитимную платформу для развёртывания Node.js. Далее срабатывала цепочка переадресаций, которая в итоге приводила к загрузке пакетного скрипта с файлообменного сервиса Storj. Именно этот скрипт скачивал и запускал OXLOADER. Как показал анализ цепочки заражения, рекламодатель был зарегистрирован под именем ВОЛОДИМИР ТЕРЕЩЕНКО с адресом в Украине, однако достоверно установить, является ли это реальным оператором кампании или подставным аккаунтом, не представляется возможным. К середине мая 2026 года рекламодатель и его объявления были полностью удалены из Google.
Пакетный скрипт, полученный жертвой, отображал поддельное окно установки программного обеспечения, после чего через PowerShell загружал исполняемый файл следующей стадии. При этом он запускался с повышенными привилегиями через запрос контроля учётных записей (UAC). В рассматриваемом случае сработали правила поведенческого анализа Elastic Defend, которые зафиксировали подозрительную активность, в том числе загрузку .NET-сборки, характерной для стилера CASTLESTEALER.
Техническое устройство OXLOADER демонстрирует высокий уровень проработки. Первый обнаруженный образец маскировался под легитимную утилиту API Monitor. Наличие значительного объёма безвредного кода и применение методов сокрытия позволяют загрузчику проходить мимо статических анализаторов.
Запуск вредоносного кода происходит на этапе инициализации среды выполнения C++, до выполнения пользовательского кода. Злоумышленник перехватил одну из записей таблицы инициализации, направив её на собственную функцию, которая затем переходит к первой стадии расшифровки. Загрузчик использует самоизменяющийся код: в память поочерёдно подгружаются небольшие заглушки дешифрования, каждая из которых расшифровывает следующую область. Всего выполняется три раунда расшифровки с использованием скользящего ключа XOR, где каждый предыдущий расшифрованный байт влияет на ключ для следующего.
Для обхода статического обнаружения OXLOADER применяет четыре слоя обфускации. Контрольный поток программы сплющивается (control-flow flattening), что затрудняет восстановление логики работы дизассемблерами. Используется смешанная булево-арифметическая (MBA) обфускация, а также введение заведомо истинных или ложных предикатов (opaque predicates). Функции разбиваются на несмежные блоки кода, соединённые безусловными переходами, причём часть адресов вычисляется динамически через MBA-арифметику. Такой подход делает невозможным автоматическое выявление границ функций инструментами вроде IDA Pro без ручной правки.
Строки в загрузчике расшифровываются во время выполнения, а динамическое разрешение импортов осуществляется с помощью хеширования API через алгоритм Adler-32 в комбинации с функцией расшифровки строк.
Перед запуском полезной нагрузки OXLOADER выполняет ряд проверок на выявление песочниц и виртуальных машин. Он пытается подключить заведомо некорректный сетевой ресурс через функцию WNetAddConnection2W и проверяет, вернулась ли ожидаемая ошибка. Эмуляторы или изолированные среды, которые безусловно "успешно" отрабатывают такой вызов, будут распознаны. Загрузчик также проверяет количество процессоров (не менее трёх), объём физической памяти (не менее 3 ГБ) и частоту обновления экрана (не менее 20 Гц, в то время как головные виртуальные машины часто показывают 0 или 1). Кроме того, выполняется проверка географического региона через GetUserGeoID и сравнение со списком стран СНГ, а также проверка языка интерфейса на русский. Если какое-либо условие не выполняется, загрузчик прекращает работу.
После прохождения всех проверок OXLOADER создаёт копию системной библиотеки dui70.dll, сохраняя её во временной папке с расширением .ocx и случайным именем. В эту копию добавляется новый раздел с правами на чтение, запись и выполнение. После этого загрузчик извлекает шелл-код, расположенный в разделе .reloc исходного вредоносного файла (что нетипично, поскольку в легитимных программах этот раздел содержит только таблицы перемещения), и копирует его в созданный раздел, после чего выполняет.
Этот шелл-код оказывается полезной нагрузкой, сгенерированной DonutLoader - открытым инструментом для упаковки .NET-сборок в позиционно-независимый шелл-код. После расшифровки с использованием блочного шифра Chaskey-LTS в режиме CTR и декомпрессии через aPLib, DonutLoader запускает финальный payload. Им и является стилер CASTLESTEALER, ранее описанный исследователями Huntress. Атрибуция основана на совпадении ключа AES, используемого для связи с командным сервером.
Во втором варианте загрузчика, обнаруженном позднее, OXLOADER маскировался под установщик Node.js, а не под API Monitor. Механизм загрузки и действия полностью идентичны. Это говорит о том, что оператор кампании, вероятно, по ошибке использовал первый вариант, ориентированный на API Monitor, вместо целевой темы Node.js.
Высокая степень инженерной проработки OXLOADER, использование многослойной обфускации, антипесочничных проверок и нестандартных приёмов размещения кода позволяет загрузчику длительное время оставаться незамеченным как статическими, так и динамическими средствами анализа. Кампания находится на ранней стадии, но уже демонстрирует серьёзный потенциал.
Индикаторы компрометации
IPv4
- 89.124.115.82
- 89.124.95.161
Domains
- app.miloyannopoulos.com
- node-js.prentiva99.info
SHA256
- 39019279686c820c3af5684012a0085a7e2109f612c9fab886dd0577ace5b5c6
- 4ec9d9d4d10ad78fc6d7bda7cb17d52984878ccd2dd4302fd1cef152313b9741
- 9a9939dff297997732aaade9b243d695632cbd64033c5fbcb9de3d09b7e6c28d
- c85f2765a6c3c3f3907c17e57df12f8f68826f74bff3bbfd272af50666d065fe
- de4f51649ec1a33071854aefe93ffb3fc225e19f802d8dd914676dd5dfef2615
- fdfc7831e5c24cfa80152860dfe8c056ba079f7df1393bf6bb7b18ed974eda37