Lunex Stealer: новый инфостилер использует уязвимый драйвер AMD для обхода защиты и кражи данных

Исследователи кибербезопасности раскрыли детали сложной атаки с использованием нового malware-as-a-service платформ Lunex Stealer (также известного как Psychedelic Stealer), которая нацелена на украиноязычных пользователей через скомпрометированные веб-сайты с фейковыми CAPTCHA-страницами. Атака использует уязвимый драйвер AMD Radeon (CVE-2023-20598) через технику Bring-Your-Own-Vulnerable-Driver (BYOVD) для отключения мониторинга безопасности при сохранении видимости процессов, крадет учетные данные из семи Chromium-браузеров и криптовалютных кошельков, а также устанавливает персистентный удаленный доступ к файловой системе через Chrome Native Messaging Hosts.

Ключевые факты: Lunex использует CVE-2023-20598 в драйвере AMD PDFWKRNL.sys; техника BYOVD обнуляет kernel callbacks для ослепления EDR; крадет credentials из 7 Chromium-браузеров (Chrome, Edge, Brave, Yandex, Opera, Opera GX, Vivaldi); извлекает данные из 9 криптовалютных кошельков; 28 C2 панелей обнаружены в 13 странах; платформа создана русскоязычными разработчиками.

⚡ Четырехэтапная цепочка атаки: от fake CAPTCHA до полного контроля

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

🎯 Этап 1: Первоначальное заражение через MSI установщик

Атакующие компрометируют легитимные украинские веб-сайты, внедряя iframe элементы, которые обслуживают ClickFix-подобные фейковые CAPTCHA страницы. Эти страницы инструктируют жертву выполнить команду msiexec, которая тихо устанавливает вредоносный MSI пакет с сервера злоумышленника. MSI пакет elita.msi (1.1 MB) представляет собой неподписанный OLE Compound Document, представляющий себя как "Vertification" от "Internal Software" — намеренная опечатка соответствует украинскому слову в тексте приманки.

Установщик использует несколько техник для минимизации обнаружения: свойство LIMITUI=1 подавляет стандартный мастер Windows Installer, установка происходит в пользовательскую директорию %LOCALAPPDATA%\Programs\Internal Software\Vertification\ без запроса прав администратора и UAC elevation prompt. Свойства ARPNOMODIFY=1 и ARPNOREPAIR=1 скрывают кнопки Modify и Repair из панели Add/Remove Programs. Custom Action типа 226 на позиции 6700 автоматически запускает payload сразу после InstallFinalize, причем флаг "continue on error" означает, что MSI сообщает об успешной установке даже если payload не выполняется.

🔓 Этап 2: Loader с продвинутой обфускацией

Второй этап — это 2.3 MB 64-битный исполняемый файл psychedelic.exe (также config.exe), скомпилированный с MinGW-w64, который маскируется под несуществующий "Update Manager" от Canonical Ltd. Timestamp компиляции фальсифицирован на 2054 год, а два TLS callback выполняются до PE entry point — сильный индикатор malware. Все операционные строки в бинарнике зашифрованы AES-256 в CTR режиме с 32-байтным ключом и 16-байтным IV, встроенными в секцию .rdata.

Loader реализует сложную схему обфускации Import Address Table через dead-code функцию, защищенную условием GetTickCount() == 0x9E3779B9 (константа TEA/XTEA шифров, производная от золотого сечения). Это математически невозможно при нормальном выполнении. Функция вызывает 55 импортированных API с NULL параметрами, существуя исключительно для раздувания Import Address Table ложными записями из SHELL32, WINHTTP, WS2_32, CRYPT32, GDI32 и десяти дополнительных DLL.

Для эскалации привилегий Loader выполняет четырехшаговую цепочку: перезаписывает ImagePathName, CommandLine и InMemoryOrderModuleList в Process Environment Block путем из GetWindowsDirectoryA; вызывает CoGetObject с COM Elevation Moniker строкой для CMSTPLUA COM объекта, отмеченного как auto-elevate в реестре Windows; включает SeLoadDriverPrivilege через OpenProcessToken и AdjustTokenPrivileges; устанавливает и загружает BYOVD драйвер через OpenSCManagerA, CreateServiceA и StartServiceA.

🔧 Этап 3: BYOVD abuse с PDB-guided callback zeroing

Loader читает C:\Windows\system32\ntoskrnl.exe для извлечения RSDS PDB GUID из PE debug directory, затем запускает curl.exe с User-Agent Microsoft-Symbol-Server/10.1700.661.0 для загрузки ntkrnlmp.pdb с официального Microsoft Symbol Server. Загруженный PDB файл содержит точные смещения структур и определения типов для конкретной сборки Windows ядра. Loader memory-maps PDB и парсит его через восемь dbghelp.dll API, разрешая 15 kernel символов включая PspCreateProcessNotifyRoutine, PspCreateThreadNotifyRoutine, PspLoadImageNotifyRoutine, ActiveProcessLinks, Token, Protection, SignatureLevel и CallbackListHead.

Затем Loader дешифрует 2 MB AES-256-GCM зашифрованный overlay (91% размера файла), который оказывается нативным x64 kernel драйвером. Перед развертыванием драйвера Loader проверяет запущенные процессы и kernel модули против 20-элементного blocklist, включающего драйверы Microsoft Defender, Kaspersky (6 драйверов), Dr.Web (3 драйвера), ESET (3 драйвера), Elastic, Sysinternals, CrowdStrike и SentinelOne.Entry 20 — это fltMgr.sys, сам Windows Filter Manager; удаление hooks из этого драйвера отключает все minifilter-based продукты безопасности одновременно.

Loader устанавливает уязвимый AMD драйвер PDFWKRNL.sys (USB-C Power Delivery Firmware Update Utility Driver), который подписан через цепочку AMD → Sectigo → USERTrust → Microsoft Code Verification Root. Драйвер регистрирует устройство на .\PdFwKrnl и обрабатывает IRP_MJ_DEVICE_CONTROL через switch statement на 12 IOCTL control codes без каких-либо проверок доступа. IOCTL 0x80002028 копирует содержимое kernel callback table в user-mode buffer, а IOCTL 0x80002014 копирует нули в callback table entries, принадлежащие security продуктам. Loader использует read IOCTL для получения содержимого callback table, определяет какой kernel module владеет каждой записью через K32GetDeviceDriverBaseNameA, проверяет имя модуля против 20-элементного blocklist и обнуляет совпадающие записи через write IOCTL.

💀 Этап 4: LunexStealer с продвинутой персистентностью

После обнуления kernel callbacks Loader загружает финальный payload psychedeliclove.exe (275 KB 64-битный исполняемый файл, скомпилированный 12 сентября 2026) с http://107.175[.]82[.]242:9000/wilow/psychedeliclove.exe. Этот бинарник содержит 11 PE секций, 169 импортов через 11 DLL и встроенную 2,124-байтную JSON конфигурацию в кастомной .embed секции.

LunexStealer коммуницирует с Lunex панелью на 193.178.159[.]128 через HTTP с API-key аутентификацией. Протокол следует структурированному потоку: инициализация, дешифрование конфигурации, machine fingerprinting с 17 собранными полями, check-in с kill switch проверкой, кража credentials и кошельков со структурированной exfiltration, и persistent task polling с рандомизированными heartbeat интервалами (20-25 секунд jitter).

Для кражи browser credentials LunexStealer нацеливается на семь Chromium-based браузеров: Google Chrome, Microsoft Edge, Brave, Yandex Browser, Opera, Opera GX и Vivaldi. Browser процесс завершается через taskkill /F /IM для освобождения locks на SQLite database файлах. Бинарник не линкует SQLite library, а реализует custom B-tree page parser для чтения browser databases напрямую. Извлечение encryption key обрабатывает три Chrome версии: Version 10 использует AES-GCM с DPAPI-protected master key; Version 11 (Chrome's App-Bound Encryption, июль 2024) требует COM-based process injection с генерацией x64 shellcode для взаимодействия с Chrome's IElevator COM service; Version 20 использует ChaCha20-Poly1305 authenticated encryption.

Критическая персистентность: LunexStealer устанавливает три независимых канала персистентности: Registry Run key, скрытую scheduled task "psychedelicloveUtils" и Chrome Native Messaging Host через HKCU\Software\Google\Chrome\NativeMessagingHosts\com.lunex.explorer. NMH backed 13,200-байтным PowerShell скриптом, предоставляющим шесть filesystem actions: list_drives, list_dir, read_file (до 524 MB), write, download и run. Это переживает удаление stealer binary, перезагрузки системы и перезапуски браузера.

🌐 C2 инфраструктура: 28 панелей в 13 странах

Кампания работала через три хоста под разными провайдерами в разных странах. Payload server на 107.175.82[.]242 (OneProvider, Seattle) обслуживал LunexStealer на порту 9000 и управлялся через EasyPanel. Exfiltration server на 193.178.159[.]128 (UFO Technologies, Roubaix, France) хостил четыре сервиса: Lunex operator panel на порту 8000, REST API на порту 8080, публично暴露的 phpMyAdmin 5.2.3 на порту 8081 с root MySQL user и SSH. Delivery domain uasputnik[.]com разрешался в shared hosting в Варшаве, Польша.

Оба C2 хоста имели идентичный SSH HASSH fingerprint, подтверждая единого оператора, управляющего обоими серверами с одинаковым provisioning tooling. TLS не был сконфигурирован ни на одном C2 порту. phpMyAdmin instance предоставлял прямой, неаутентифицированный database access. Безопасность инфраструктуры оператора была плохой, что контрастировало с технической сложностью loader — это предполагает либо отдельных лиц, обрабатывающих разработку и операции, либо инфраструктуру, спроектированную как disposable.

Анализ Lunex panel frontend (React single-page application, обслуживаемый nginx) выявил 453 KB JavaScript bundle, содержащий полный operator interface. Internationalisation framework (i18next) загружает русский как default locale. Более 150 русскоязычных UI строк встроены, включая empty-state messages ("Ботов пока нет – подключи установщик с API-ключом"), error messages ("Неверный логин или пароль") и operational labels ("Команд в очереди"). Language selector перечисляет "Русский" как primary option. Placeholder пример в browser spoofing конфигурации использует "ya.ru" (домашнюю страницу Yandex Russia) как target domain.

  • Россия: 6 панелей (наибольшая концентрация)
  • США: 4 панели
  • Великобритания: 3 панели
  • Нидерланды, Франция, Германия, Турция, Бангладеш: по 2 панели каждая

UFO Technologies в Красногорске (Московская область) хостит четыре панели, делая это наиболее концентрированным кластером. Одна из этих панелей (193.178.158.61) находится в той же /24 сети, что и exfiltration server в этом анализе, предполагая shared operator infrastructure. Одна панель в Турции (103.101.85[.]123) разрешалась в пять phishing доменов: account-sams-club[.]com, teamwork-recover-password[.]com, namshi-uae[.]com, whatsappbusineses[.]com и ibraq-perfumes[.]com, подтверждая использование Lunex для brand impersonation и phishing наряду с credential theft.

🔍 Технические особенности и evasion техники

Lunex Stealer реализует несколько техник, превышающих типичную сложность stealer. FNV-1a hash-based API resolution, подобная Cobalt Strike's beacon, избегает plaintext API name strings в памяти. Бинарник извлекает raw syscall numbers напрямую из ntdll.dll для выполнения direct syscalls, обходя user-mode EDR hooks. Custom implementations throughout, включая hand-written JSON parser с linked-list dictionaries, SQLite B-tree page reader, ZIP builder с raw PK headers и Shell.Application COM-based extraction, устраняют external library dependencies, которые signature-based detection мог бы target.

Полная Ghidra decompilation через 275 functions произвела 992 KB pseudocode. Chrome Secure Preferences integrity bypass, присутствующий в LunexStealer, первоначально вызвал потенциальную связь с APT31's SUPERSTOMP tool, задокументированным Volexity 9 сентября 2026. Однако в течение сентября 2026 по крайней мере четыре независимые реализации того же bypass были идентифицированы в несвязанных операциях, указывая, что техника полностью proliferated и больше не является reliable indicator state-sponsored activity.

🎭 Advanced evasion техники

Техника Описание Назначение
PEB masquerade Перезапись ImagePathName, CommandLine в Process Environment Block Маскировка под легитимные Windows binaries для auto-elevate COM
PDB-guided symbol resolution Загрузка kernel debugging symbols с Microsoft Symbol Server Version-agnostic получение kernel structure offsets
Dead-code IAT anchor Недостижимая функция с 55 decoy API imports Раздувание Import Address Table ложными записями
AES-256 string encryption Все operational strings зашифрованы в CTR режиме Сокрытие API names, file paths, registry keys, C2 URLs
Direct syscalls Raw syscall numbers из ntdll.dll Обход user-mode EDR hooks
Custom B-tree parser Self-implemented SQLite database reader Устранение external library dependencies

🛡️ Рекомендации по защите и detection стратегии

Для защитников критическое понимание заключается в том, что detection должен фокусироваться на этапах до возникновения EDR blindness: PDB downloads из non-development processes, driver drops в temporary directories и service creation для unsigned drivers из non-standard paths. Post-blindness, Native Messaging Host registry key (NativeMessagingHosts\com.lunex.explorer) является наиболее reliable indicator of compromise и должен быть включен в любой remediation scope наряду с stealer binary, scheduled task и Run key.

✅ Ключевые меры защиты

  • Блокировка уязвимых драйверов: Включить PDFWKRNL.sys (CVE-2023-20598) в Microsoft Vulnerable Driver Blocklist; однако валидированное тестирование показало, что ни HVCI, ни текущий blocklist не предотвращают загрузку специфической использованной variant
  • Мониторинг PDB downloads: Аллертировать на загрузки с Microsoft Symbol Server из non-development processes с User-Agent Microsoft-Symbol-Server
  • Контроль driver installation: Мониторить CreateServiceA и StartServiceA вызовы для unsigned drivers из temporary directories
  • Audit Native Messaging Hosts: Регулярно проверять HKCU\Software\Google\Chrome\NativeMessagingHosts и аналогичные keys для Microsoft Edge на подозрительные записи
  • Network monitoring: Блокировать исходящие соединения на известные C2 IP адреса (193.178.159[.]128, 107.175.82[.]242) и домен uasputnik[.]com
  • Endpoint detection: Искать процессы с PEB masquerade, обращающиеся к CMSTPLUA COM объекту для privilege escalation без UAC prompt

🔍 Indicators of Compromise

Тип Индикатор SHA-256 / Значение
MSI installer elita.msi 38E90AFFE37342EE36917CDC535FE9BF04589AFA8430EB8D1BA1016ADCFC1878
Loader psychedelic.exe / config.exe bf14cd6c3328ebd08e940478b5d1da04e9e5aa576d045d41950bf4f1e2456dd8
BYOVD driver PDFWKRNL.sys (CVE-2023-20598) 6e8b49cf70bf854e8c59c7d27cefa89406caf8978461190dabb86dafcd8554e1
Stealer psychedeliclove.exe 06f434695f93d7fd11eeff71358ff69fed79d310a66d993bbcc4ff979c117c90
C2 server Exfiltration endpoint 193.178.159[.]128:8080
Delivery domain Fake CAPTCHA host uasputnik[.]com
API key X-API-Key header c9daf8dbafc5e1f63e4af742a14a8a6669365e106ab0247ab366621bbc1f6967
Registry persistence Native Messaging Host HKCU\Software\Google\Chrome\NativeMessagingHosts\com.lunex.explorer

Lunex Stealer представляет значительную эволюцию в тактике information stealers, комбинируя legitimate driver abuse с browser-based persistence mechanisms для evasion detection при сохранении long-term access к victim systems. Платформа быстро расширялась с июня 2026, с 28 unique command-and-control panels, идентифицированными в 13 странах, демонстрируя active development и distribution среди multiple criminal groups. Для организаций это подчеркивает необходимость многоуровневой защиты, включающей контроль driver installation, мониторинг kernel-level activities и regular audit browser extension и Native Messaging Host configurations.

«В мире кибербезопасности самая опасная атака — та, которую вы не видите. Когда malware ослепляет ваши инструменты защиты, но оставляет их работающими, вы думаете, что все в порядке, пока ваши данные уже не украдены».

— Микко Хиппонен, главный исследователь F-Secure

28.09.2026, 00:58