В мире анализа вредоносного ПО за новизну часто принимают поверхностные изменения. Однако для специалистов по кибербезопасности гораздо показательнее то, что остаётся неизменным, и те точечные, преднамеренные модификации, которые всё же происходят. На примере серии загрузчиков на VBScript, связанных с APT-группой Gamaredon в конце 2025 года, можно наблюдать не скачок в инновациях, а продуманную, поэтапную эволюцию методов обфускации - запутывания кода.
Описание
В период с конца ноября по 30 декабря 2025 года появилось несколько функционально почти идентичных загрузчиков. Они используют один и тот же механизм исполнения и преследуют одну цель - доставку вредоносного полезного груза. Тем не менее, их код менялся. Анализ четырёх конкретных образцов, доступных для изучения, показывает чёткую траекторию развития.
Ноябрь 2025: Простой синтаксический шум
Самый ранний образец от 25 ноября использует примитивную, но объёмную тактику. Его код содержит сотни переменных, которые записываются один раз и никогда не используются, а также многочисленные арифметические операции без смысловой нагрузки. Здесь нет объявлений переменных или скрытия управления. Вся обфускация сводится к синтаксическому шуму, который, однако, легко отфильтровать. После удаления мёртвого кода логика выполнения сводится к короткой линейной последовательности.
Декабрь 2025: Наводнение индикаторами и смена полезного груза
К середине месяца подход меняется. Образец от 19 декабря демонстрирует резкий рост плотности индикаторов компрометации. В код в открытом виде добавлено множество URL-адресов, указывающих на легитимные и государственные домены, которые не используются для исполнения. Это не попытка скрыть строки, а их «наводнение». Цель - создать аналитическое трение: автоматические системы извлечения выдают десятки ложных следов, а ручной анализ требует больше времени, хотя логика работы загрузчика не усложняется.
Важный сдвиг происходит 22 декабря. Сам загрузчик практически не меняется, однако он впервые в этой серии доставляет GamaWiper - разрушительный полезный груз, предназначенный для выведения из строя сред анализа. Как отмечалось в более ранних исследованиях, GamaWiper нацелен на уничтожение данных и наказание за выполнение в нежелательном контексте. Это сигнал оборонительной реакции: Gamaredon начинает активно противодействовать анализу, сначала через враждебность полезного груза, и лишь потом - через усложнение самого загрузчика.
Конец декабря: Камуфляж потока управления и сборка строк
Образец от 25 декабря вносит неопределённость в поток управления (control flow). В код добавлены вызовы, которые не ведут к meaningful execution, а также объекты, которые никогда не используются. Это создаёт правдоподобные мёртвые пути, сбивая с толку автоматические эвристики и усложняя визуальное отслеживание реальной логики.
Финальный в этом периоде образец от 30 декабря представляет наиболее существенные структурные изменения. Код начинает использовать объявления переменных и систематически дробит критически важные строки на короткие, лишённые смысла фрагменты. Эти фрагменты собираются в полную команду исполнения только в момент её выполнения, путём многократной конкатенации в разных частях скрипта. Полная строка никогда не существует в коде статически. Это напрямую снижает эффективность статического анализа, сигнатурного обнаружения и инструментов, работающих на регулярных выражениях.
Январь 2026: Динамические параметры в URL
В начале января 2026 года появилось дополнение к этой тактике. Загрузчики начали динамически генерировать значение даты и встраивать его в путь для скачивания полезного груза. Это приводит к ежедневному изменению URL, мгновенному устареванию статических сигнатур и снижению надёжности повторного использования индикаторов компрометации между кампаниями.
Что изменилось, а что - нет
На протяжении всего этого периода неизменными остались базовый примитив исполнения, цель загрузчика и общий механизм доставки. Изменения затронули более тонкие аспекты: момент, когда значимые строки становятся полными, количество ложных путей выполнения и объём нерелевантного контекста вокруг реальной логики. Это не переписывание кода, а итеративное упрочнение.
Каждая новая итерация методично лишает аналитиков очередного удобного предположения: что строка существует в коде целиком, что путь выполнения очевиден, что мёртвый код легко отличим. Группа Gamaredon не добавляет сложность ради самой сложности. Она добавляет ровно столько фрикций, чтобы замедлить анализ, а затем останавливается. Эта сдержанность и точность в выборе мишеней для усложнения является, пожалуй, самым информативным сигналом, демонстрирующим высокий уровень внимания и адаптивности операторов.
Индикаторы компрометации
SHA256
- 2c69fd052bfaa03cd0e956af0f638f82bc53f23ee8d0c273e688e257dac8c550
- 6de9f436ba393744a3966b35ea2254dde2f84f5b796c6f7bee4b67ccf96ccf0a
- 846748912aa6e86b9d11f6779af6aae26b7258f8610d5e28eff0083779737824
- 9218528a40a48a3c96df3b49a7498f6ea2a961f43249081b17880709f73392c1