Отслеживание PavinLoader в ClickFix и кампаниях по поддельным загрузкам.

| 24 августа 2026 г.
Отслеживание PavinLoader в ClickFix и кампаниях по поддельным загрузкам.

В ходе нашего предыдущего анализа вредоносных кампаний RenPy мы выявили многоступенчатый загрузчик, используемый в качестве части цепочки заражения.

Дальнейший анализ угроз показал, что тот же самый загрузчик, который мы отслеживаем как PavinLoader , используется в нескольких различных кампаниях, включая атаки ClickFix и загрузку поддельного программного обеспечения. 

Несмотря на различия в способах распространения этих атак среди жертв, мы обнаружили несколько общих элементов. К ним относятся многоступенчатые цепочки заражения с использованием сильно обфусцированных и троянизированных DLL-файлов .NET; злоупотребление MSBuild, .csproj, и .bat файлы для их выполнения; и EtherHiding для получения домена управления и контроля (C2). 

Как выглядит нападение

Все мошеннические схемы начинаются по-разному. Жертва может столкнуться с поддельной CAPTCHA, которая предлагает выполнить команду, загрузить якобы легитимное программное обеспечение или установить вредоносную игру.

Дальнейшие события развиваются гораздо более предсказуемо. PavinLoader использует легитимные методы. Windows Вредоносная программа использует инструменты, а также вредоносные файлы .NET для запуска нескольких этапов вредоносного ПО. Она также использует EtherHiding — технологию, которая применяет блокчейн для сокрытия информации о своей инфраструктуре, чтобы найти сервер, с которого следует загрузить дополнительное вредоносное ПО.

В проанализированной нами кампании RenPy этот процесс в конечном итоге привел к появлению Amatera Stealer — вредоносной программы, предназначенной для кражи информации с зараженного компьютера. Мы также наблюдали случаи заражения PavinLoader, распространяющей дополнительное вредоносное ПО.

PavinLoader используется в нескольких рекламных кампаниях.

Мы выявили PavinLoader в нескольких группах кампаний: 

  • Вредоносные кампании RenPy, как мы уже писали в нашем предыдущем посте в блоге.
  • Несколько кампаний ClickFix, включая недавнюю активность оператора (операторов), рассмотренных в нашем предыдущем анализе.
  • Поддельные рекламные кампании, в которых для загрузки PavinLoader использовался Dropbox. 

Использование загрузчика в нескольких кампаниях позволяет предположить, что PavinLoader может предлагаться как услуга «Загрузчик как сервис».

Мы также обнаружили несколько артефактов, подтверждающих эту возможность, хотя их недостаточно для её полного подтверждения. Один конкретный артефакт на VirusTotal встречается более чем в 200 файлах, связанных с PavinLoader, что позволяет предположить, что он может быть артефактом компиляции в процессе сборки.

Мы также обнаружили скрипт PowerShell, загруженный на VirusTotal, содержащий комментарии, подобные следующим: EDIT HERE и REPLACE with a real direct link to your .batСоответствующий BAT-файл содержит строку Automated builder helper.

Однако мы не нашли ни панели управления, ни каналов продаж, которые бы подтвердили коммерческую доступность PavinLoader.

Несмотря на то, что PavinLoader со временем изменился, проанализированные нами рекламные кампании имеют ряд общих характеристик:

  • Установщики Inno Setup или MSI, созданные для различных сборщиков компьютеров, на которых они работают. .bat и/или .csproj файлы
  • Троянизированные DLL-файлы .NET, включая DotNetZip, Nancy, Renci.SshNet и OpenXML. В большинстве проанализированных случаев внедренные вредоносные методы следуют определенной последовательности. TwoWords или TwoWordsNumber шаблон именования, например DefaultEvaluator5, и FallbackFactory5
  • Распространенный метод обфускации, используемый во всех DLL-библиотеках .NET.
  • Система именования, основанная на двух случайных словах, например: GollopDevest, UnbrandRunover, и PavinWideдля имен DLL-файлов, функций, строк, путей к C2-серверам и других артефактов.
  • Для получения домена C2 используется EtherHiding, после чего выполняются HTTP-запросы с использованием таких путей, как... assets/{two random words}.json для получения последующих этапов. Домены C2 обычно используют .lat, .icu, .shop, и .cfd домены верхнего уровня
  • Механизмы MSBuild для загрузки и выполнения кода из DLL-библиотек, включая функции свойств, такие как [System.Reflection.Assembly]::Load(...) и UsingTask
  • Повторяющиеся шаблоны имен файлов, такие как name_4characters.cmd/bat/msi/exe-например, prefetch_9a59.cmd, telemetry_55db.cmd, и bootstrap_64be.cmd—или случайные имена из девяти символов, например aegZpQ4C7.batМы также заметили короткие имена, в том числе Small.msi, small.bat, и small.cmd

PavinLoader состоит из нескольких DLL-библиотек .NET, и в проанализированных случаях мы выявили следующие этапы: 

  • DLL-загрузчик : Троянизированный DLL-файл — например, тот, что анализировался в нашей предыдущей статье о RenPy, — или пользовательский DLL-файл. Он выполняет операции по защите от криминалистического анализа, изменяет сетевые настройки, необходимые для последующих операций, и загружает загрузчик EtherHiding.
  • EtherHiding Loader DLL : Получает доступ к C2 через EtherHiding и загружает оттуда следующие этапы. 
  • DLL-библиотека для защиты от анализа : выполняет расширенные проверки на предмет защиты от анализа для обнаружения виртуализированных сред. 
  • DLL-библиотека PE Loader : Загружает окончательный PE-пакет.

Промежуточные полезные нагрузки могут различаться в зависимости от конфигурации кампании. Сначала мы рассмотрим некоторые методы, используемые для распределения начальных этапов PavinLoader. Затем мы вернемся к кампании загрузчика RenPy, которую мы анализировали в нашей предыдущей статье, чтобы изучить более поздние этапы работы загрузчика. 

Технический анализ

В оставшейся части статьи мы более подробно рассмотрим, как распространяется PavinLoader и как работает каждый этап работы загрузчика.

Как доставляется PavinLoader

Мы наблюдали, как PavinLoader демонстрировался в рамках нескольких рекламных кампаний ClickFix.

В частности, мы обнаружили, что кластер ClickFix, проанализированный ранее, статья Недавно начал использовать PavinLoader. Злоупотребление MSBuild и использование .csproj и .bat Файлы остаются общими для всех наблюдаемых нами цепочек заражения.

В нашем предыдущем анализе RenPy мы рассмотрели один пример. Здесь же мы рассмотрим несколько других методов распределения. 

Как мы видели в нашем предыдущем анализе этих кампаний ClickFix, связанные с ними сценарии PowerShell часто меняются. В ходе этой активности мы обнаружили несколько версий, включая как обфусцированные, так и необфусцированные сценарии.

В этом примере загруженный из хранилища Cloudflare файл MSI называется Installer_57be78.msi. 

В комплект входит:

  • prefetch_2f76.exe: Легитимный исполняемый файл MSBuild
  • prefetch_2f76.csprojИспользуется для выполнения DLL-файла загрузчика. UsingTask
  • DotNetZip.dll: DLL-файл загрузчика

Сайт .csproj Файл выполняется с помощью:

"C:\Users\{USER}\AppData\Local\Logitech\Device Configuration Helper\prefetch_2f76.exe" /nologo "C:\Users\{USER}\AppData\Local\Logitech\Device Configuration Helper\prefetch_2f76.csproj" /nr:false

DLL-файл загрузчика представляет собой троянизированную версию DotNetZip и запускается с помощью... UsingTask элемент.

В отличие от примера RenPy, рассмотренного в нашей предыдущей статье, загрузчик EtherHiding Loader извлекается из самой DLL. Встроенный ресурс используется в качестве индекса для извлечения байтов непосредственно из DLL, а не для получения этих индексов из... .csproj файл.

Мы обнаружили еще одну кампанию, использующую BAT-файлы, содержащие поддельные данные. BUILD VERIFICATION REPORT комментарии, по всей видимости, призванные затруднить анализ и обнаружение.

В данном случае, MSI CustomAction Выполняет BAT-скрипт со следующим содержимым:

cmd.exe /c C:\Users\{USER}\AppData\Local\Conexant\lite_bootstrap_2.1.7\updater_8219.cmd /launched

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

BAT-файл определяет местоположение conhost.exe и перезапускается со следующими преимуществами:

"C:\WINDOWS\System32\conhost.exe" --headless cmd.exe /c "C:\Users\{USER}\AppData\Local\Conexant\lite_bootstrap_2.1.7\updater_8219.cmd" /launched

Затем он устанавливает MSBUILDENABLEALLPROPERTYFUNCTIONS=1 переменная среды, местоположение MSBuild.exeи выполняет его, используя тот же файл в качестве входных данных:

"C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" "C:\Users\{USER}\AppData\Local\Conexant\lite_bootstrap_2.1.7\updater_8219.cmd"

В данном случае DLL-библиотека загрузчика восстанавливается путем конкатенации и декодирования четырех переменных, закодированных в Base64.

DLL-файл загрузчика имеет случайное имя и, по всей видимости, является более старой версией, поскольку в его ресурсах отсутствуют пользовательский байт-код и зашифрованные строки.

Как и в ранее проанализированной кампании RenPy, на этом этапе извлекается загрузчик EtherHiding Loader, хранящийся между... Build-... маркер в CMD-файле через _vezr Затем эта переменная окружения декодируется с помощью операции XOR с 32-байтовым ключом.

Рассмотрев несколько методов распространения первых двух этапов PavinLoader, мы теперь вернемся к цепочке заражения RenPy из нашего предыдущего анализа и более подробно изучим сам загрузчик.

Анализ PavinLoader

DLL-файлы .NET, связанные с PavinLoader, сильно обфусцированы с использованием упрощения потока управления, пользовательского байт-кода и косвенных вызовов. calli/ldftnшифрование строк с использованием различных алгоритмов, хеширование через API и делегаты, избыточные методы, а также мусорный код и строки.

Мы не обнаружили известного обфускатора, связанного с этими образцами, поэтому, насколько нам известно, PavinLoader использует собственный обфускатор.

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

Этот подход не обеспечивает полного охвата потока выполнения, но позволил нам определить основную функциональность загрузчика и выделить его промежуточные этапы. Поскольку разные функции часто имеют одинаковые имена, мы используем метаданные для идентификации методов на протяжении всего анализа.

Nancy троянизированная DLL: DLL-загрузчик 

Этот этап мы подробно рассмотрели в нашей предыдущей статье в блоге, поэтому здесь мы приведем лишь краткий обзор.

В большинстве проанализированных случаев загрузчик DLL представляет собой троянизированный легитимный DLL-файл. Вредоносный метод обычно использует {RandomWord} или {RandomWord_Number} Соглашение об именовании.

DLL-библиотека содержит ресурс, связанный с пользовательским байт-кодом, интерпретируемым основным методом, два ресурса, содержащих зашифрованные строки, и, в некоторых случаях, дополнительные ресурсы, используемые в качестве индекса для извлечения следующего этапа. Другие ресурсы, по-видимому, являются ложными целями, предназначенными для замедления анализа. В проанализированных нами образцах эта DLL-библиотека обычно:

  • Расшифровывает строки из ресурсов с помощью многоключевого XOR-оператора.
  • Определяет API с помощью хеширования API и GetDelegateForFunctionPointer()
  • Изменяет сетевые настройки, включая отключение проверки TLS-сертификатов и установку системного прокси-сервера по умолчанию.
  • Выполняет проверку синхронизации с целью предотвращения анализа с использованием CreateEventW(), GetTickCount(), и WaitForSingleObject()
  • Проводит операции по противодействию криминалистике.
  • Загружает EtherHiding Loader либо путем извлечения его из маркера внутри .csproj или BAT-файлы, либо используя ресурс в качестве индекса для прямого извлечения байтов из DLL.

GollopDevest: Загрузчик EtherHiding 

Загрузчик EtherHiding выполняет две основные функции: получение домена C2 через EtherHiding, а также загрузка и выгрузка последующих этапов с этого домена C2.

Сорт 0x02000762 отвечает за расшифровку строк, связанных с блокчейном и сетевым взаимодействием.

Строки расшифровываются с помощью 0x060027BD следующее: 

  • Функция 0x060027BB Инициализирует S-блок, используя операцию XOR с главным ключом. activeValues и расшифрованный Base64 optionsCollection нить
  • Функция 0x060027BE берет childSyncObject в качестве входных данных и возвращает байты индекса, используя операцию XOR и перестановки на основе значений заголовка, закодированных в первых двух символах строки.
  • Функция 0x060027B9 Возвращает расшифрованную строку, используя индексы и ранее сгенерированный S-блок.

Это был единственный класс, в котором параметры шифрования были закодированы в таком формате.

Для оставшихся строк мы определили функции, возвращающие расшифрованные данные на основе сигнатур их параметров — например, методы, возвращающие строки или байты, — и вызвали их с помощью рефлексии. Это позволило нам восстановить более 1300 строк.

Среди них были строки, связанные с патчингом AMSI и ETW:

AmsiScanString
System.Management.Automation.AmsiUtils
System.Management.Automation.AmsiUtils+AmsiNativeMethods
ntdll
EtwEventWrite

NtQueryInformationProcess
NtSetInformationThread
VirtualProtect

Более 100 URL-адресов, принадлежащих легитимным сервисам, также расшифровываются и используются для генерации HTTP-запросов и сетевого шума. Мы не наблюдали такого поведения во всех образцах, что позволяет предположить, что оно может быть специфичным для конкретной сборки.

Класс Server (0x02000052) генерирует X-Timestamp, X-Nonce, и X-Signature HTTP-заголовки и запросы используются для получения информации на последующих этапах.

Для синхронизации параметров и получения полезной нагрузки выполняются два HTTP-запроса, при этом для проверки запросов используется HMAC. С помощью рефлексии мы выполнили метод. 0x06000A77 для получения значений заголовка, необходимых для получения данных на последующих этапах.

Домен C2 получают путем выполнения удаленного вызова процедуры (RPC) ETH. bsc-dataseed.binance.org со следующим телом JSON-RPC:

{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x328a1fadff154290f0ce1389a4e633698cdfdaa7","data":"0x06fdde03"},"latest"],"id":1783436775} 

Следующие этапы включают загрузку данных из полученного домена C2. Закодированная с помощью XOR полезная нагрузка сохраняется в JSON-ответе в указанном месте. cache.content:

{"type":"cache-binary","meta":{"version":"2.3.1","timestamp":"…","platform":"win32-x64"},"cache":{"id":"e2b69…","content":"1c.."}} 

В данном случае, пути C2 и ключи XOR, расшифрованные на этом этапе, а также DLL-библиотека для защиты от анализа, следующие:

Путь Ключ XOR Тип/Функция 
/assets/ExponeAboard.json QBBBfWow4lb PavinWride .NET DLL, Антианализ  
/assets/MailersKogasin.json WjcsVTKmuoBRqe GollopDevest .NET DLL, PE Loader 
/assets/LanoseThrip.json WwUX66Br Исполняемый файл WPA.exe PE, Amatera Stealer 

Следующим этапом является выполнение DLL-библиотеки для защиты от анализа. 

PavinWride: Антианализ DLL 

Данная DLL-библиотека отвечает за выполнение нескольких проверок на предмет защиты от анализа. 

DLL-библиотека для защиты от анализа выполняет системные вызовы различными способами: 

  • Standard Вызовы базовой библиотеки классов .NET (BCL), в том числе для операций с реестром и сетью.
  • Вызовы Win32 P/Invoke, включая GetCurrentThread, NtQueryInformationThread, NtQueryInformationProcess, и NtCurrentTeb
  • API Win32 разрешаются с помощью хеширования API и обхода таблицы экспорта Process Environment Block (PEB).

Функция MenuItemService.ProcessDirectory (0x06000151) Это основной метод, отвечающий за кэширование делегатов и разрешение API Win32:  

  • Он проверяет, был ли делегат уже разрешен, используя managerMap.TryGetValue() 
  • В противном случае, он звонит. ProcessDirectory (0x06000150) для получения дескриптора HMODULE
  • Оно звонит ProcessDirectory (0x0600003A) который выполняет обход таблицы экспорта PE и сопоставляет хеш. Мы обнаружили, что одинаковый результат хеширования получается и при использовании нескольких других методов (например, 0x06000039, 0x0600003B, 0x0600004E)
  • Оно получает делегата с помощью GetDelegateForFunctionPointer() и сохраняет это в словаре.

Мы использовали тот же метод отражения для получения строк. Многие строки зашифрованы с помощью ключа XOR. 4B729A1F5CE387D6

Погрузчик получает LCID системы, используя GetKeyboardLayoutList() и сравнивает его с более чем 17 языками, включая русский, украинский, белорусский и армянский.

Она также выполняет обширную разведку системы, включая перечисление ключей реестра и вызов API Win32, таких как GetSystemFirmwareTable() и EnumSystemFirmwareTables() для идентификации виртуализированных сред.

Категория Ценить 
Идентификаторы поставщиков/устройств PCI VEN_80EE, VEN_15AD, VEN_1AB8, VEN_5853, VEN_1AF4, VEN_1234&DEV_111
Идентификаторы OEM SMBIOS/ACPI VMWARE, VBOX, BOCHS, VRTUAL, MSFTVM, MSHYPR, Xen, Parall, BHYVE, AMAZON, Google
Сигнатуры таблиц ACPI VBOX, BXPC, VMW, Xen, PRLS, AMZN, MICR
Строки BIOS/производитель/продукт vmware, vmw, innotek, virtualbox, vbox, qemu, seabios, bochs, standard pc, kvm virtual machine, xen, hvm domu, parallels
Строки, связанные с проверками на защиту от анализа.

Мы также обнаружили расшифрованные ссылки на API, в том числе GetCurrentProcess(), CreateToolhelp32Snapshot(), Process32First(), Process32Next(), и OpenMutex()хотя мы не наблюдали вызова этих функций в процессе выполнения программы.

Также отправляется HTTP-запрос к одному из этих сервисов: 

  • https://ipv4[.]ipleak[.]net/json/
  • https://get[.]geojs[.]io/v1/ip/geo[.]json
  • https://ipapi[.]co/json/
  • https://api[.]ipapi[.]is/
  • https://ipinfo[.]io/json

Кроме того, программа проверяет полученные данные по 96 хостинг-провайдерам или поставщикам инфраструктуры и определяет, соответствует ли код региона одному из следующих: RU, UA, BY, AM, KZ, KG, TJ, UZ, GE, AZ, или MD.

Расшифрованные строки, связанные с поставщиками услуг . Нажмите, чтобы увеличить изображение.

Если проверки на защиту от анализа пройдут успешно, следующие два этапа будут загружены и расшифрованы с использованием ключей XOR.

Мы установили патч. SelectionScope.ProcessDirectory (0x06000014) для восстановления путей C2 и ключей XOR для этих этапов:

/assets/MailersKogasin.json|WjcsVTKmuoBRqe|/assets/LanoseThrip.json|WwUX66Br

GollopDevest: PE Loader DLL и Amatera Stealer

Третья DLL-библиотека имеет то же имя, что и вторая. GollopDevestно выполняет загрузку полиэтилена.

Среди расшифрованных строк:

'GollopMailers LDR DllBase VeneryCondole EdiyaFoully=0x{0:X} EdiyaStelae=0x{1:X}'
'GollopMailers LDR Flags missing IMAGE_DLL 0x{0:X8}'
'GollopMailers LDR SaranPisco invalid 0x{0:X}'
'GollopMailers LDR TlsIndex invalid {0}'
'GollopMailers LDR sanity exception: '
'HIGHLOW relocation'
'Import DLL name'
'Import FunctusAurata'
'Import INT'
'Import descriptor'
'Import hint/name'
'Import thunk'
'LdrpHandleTlsData outside ntdll .text'
'LdrpReleaseTlsEntry outside ntdll .text'
'LoadConfig32'
'OK'
'PE headers'
'Required API resolve failed: type={0}, FreshBubals={1}, module=0x{2:X}'
'TLS32'
'TLS64'
'x86 disabled until ABI proof'
ntdll.dll
kernel32.dll
LdrpInitializeTls
"STATUS_SUCCESS"
UNKNOWN(0x00000001)
UNKNOWN(0x00000002)
UNKNOWN(0x00000003)

Сайт ServerEditor.SortMemory метод (0x06000014) проверяет структуру PE-файла и флаги перед загрузкой полезной нагрузки.

Для подтверждения этого поведения мы вызвали метод с помощью рефлексии, используя загруженный файл. WPA.exe Файл в качестве входных данных. PE-файл успешно загружен.

Скомпилированный на C++ PE-файл маскируется под WPA.exe ( Windows (Анализатор производительности). Мы определили, что полезная нагрузка представляет собой обфусцированную версию Amatera Stealer 4.2.3-alpha1.

В нем используются методы сглаживания потока управления, хеширование API, проверки на отсутствие отладки и непрозрачные предикаты, что усложняет анализ. Мы также обнаружили использование техники Heaven's Gate, разрешения DNS-over-HTTPS (DoH) через Google DNS и необработанных сокетов. \Device\Afd\Endpoint для сетевой связи. 

После выполнения этого этапа мы также наблюдали загрузку и запуск дополнительных полезных нагрузок с IP-адресов C2.

В некоторых случаях пакеты WiX Burn загружали другую полезную нагрузку, связанную с PavinLoader. В других случаях мы обнаружили HijackLoader. Это дает операторам кампании возможность развертывать несколько полезных нагрузок на скомпрометированной машине.

МНК 

Хэши SHA-256

bdf313a019e025ebf58ccef4619444ee70e661bd444e0644ebeabd8f5caad14c 

e3830f5747e3f46537d217124d80c9f3bb4d89f8d4f5138dce69ee54ea4fb6b9 

a4f03272cf96732dc9f58bb466d16f358e7f50d46dba30526a9fbebfec11717b 

bf04160dd1ce3571e0eb6d6dda1713c788797b5599399d4a93665a757eec376e 

54fa8083c05334aa360256fbbb0ca901ce7e244a0359dd664cae78977371ec91 

c1ea6d169565c70ac5d812e73483814929e9b3548ead6633595937e71a334adb 

001337488c32d8610c2aef6f9330acca825f0afacd071bf6ebfc06b5a1a69f09 

2837099af431e9afee76ce5e6ab5cb86bedce06e31c22be46250cb453cfdb978 

252c5a3d150275013f52b4820097d7163ced4aa2f1be0fca032f8a5017673816 

0c9c64b7383ec249bcf6271a4b73206d94de130ca401d16ab77fe01e5193a312 

6700f62e1a3b33340cd678c388ecc8bac2e5943c0627df5d1b99b879c3ca42c9 

IP-адреса 

93.152.224[.]75: загрузки PavinLoader 

65.21.80[.]170: загрузки PavinLoader 

195.63.142[.]49: загрузки PavinLoader 

Домены 

perfectverified[.]com: ClickFix 

PavinLoader C2 

catalyst-pro[.]lat 

twigoamwu[.]cfd 

trusaifi[.]cfd 

stellar-minds[.]cfd 

pinnacle-labs[.]lat 

nexahub[.]lat 

fimwoglea[.]shop 

velodium[.]lat 

rpcsecnoweb[.]pro 

more-arpc[.]icu 

echo-systems[.]cfd 

kelemet[.]shop 

zarwieciv[.]cfd 

URL-адреса 

telegra[.]ph/Project-PySynth-06-28: Тайник Аматера 

Благодарности   


От сообщения об угрозах до их устранения.

Риски кибербезопасности не должны выходить за рамки заголовка. Загрузите Malwarebytes сегодня, чтобы предотвратить угрозы на своих устройствах.

Об авторе

Габриэле — инженер-исследователь в области вредоносного ПО, который обожает бороться с вредоносными программами. В свободное от работы время он любит наслаждаться природой, искусством и общением с животными.