Современные фишинговые кампании всё активнее отказываются от классических макросов Microsoft Office, заменяя их многоступенчатыми схемами заражения. Каждый этап такой цепочки выполняет лишь одну небольшую задачу, что делает вредоносную активность менее заметной для средств защиты. В ходе анализа одного из образцов была выявлена изощрённая кампания, начинающаяся с электронного письма и заканчивающаяся запуском Lua-скрипта, который собирает конфиденциальные данные: учётные записи, пароли, информацию из браузеров, криптовалютных кошельков и мессенджеров. Особый интерес представляет использование файлов с нестандартными расширениями .PIF и .TTF, которые на самом деле не являются ни ярлыком, ни шрифтом.
Описание
Вредоносная рассылка начинается с письма, содержащего вложение с именем "Номер заказа 6482.xls". При открытии документа пользователь не видит никакой подозрительной активности - лист практически пуст. Однако внутри файла, если рассматривать его как Compound File Storage (OLE Structured Storage), скрыт поток [1]Ole, содержащий строку с длинным URL. Адрес включает поддомен, имитирующий новостной портал WindowsLatest, но на самом деле это лишь маскировка вредоносной инфраструктуры. После открытия документа происходит последовательность HTTP-запросов: первый запрос ведёт на IP-адрес 192.236.217[.]77, который возвращает код 301 (Moved Permanently). Затем следует редирект на короткую ссылку melalui короткий URL-сервис, а уже оттуда - ещё один 302-редирект на конечный адрес, где расположен файл fdd.hta. Применение нескольких перенаправлений усложняет анализ, позволяет злоумышленникам быстро менять конечный сервер и обходить простые URL-фильтры.
Загруженный HTA-файл представляет собой HTML Application, исполняемый движком Internet Explorer с практически полными правами текущего пользователя. Предоставленный анализ VBScript-кода внутри HTA показывает, что его единственная задача - загрузить следующий этап. Сначала создаётся объект WScript.Shell, затем через командную строку (cmd.exe) запускается скрытый сеанс PowerShell с отключённой политикой выполнения скриптов (ExecutionPolicy Bypass) и без загрузки профиля. PowerShell скачивает JavaScript-файл с удалённого сервера и сразу его исполняет. Сам HTA, таким образом, не содержит вредоносной нагрузки - он лишь загрузчик, запускающий последующую стадию.
JavaScript-скрипт с длинным именем goodpeoplesgivingbestserviceforbest.js выполняет схожую функцию: он скачивает два файла - JJGIMJPBTQUZEYUL.PIF и JJGIMJPBTQUZEYUL.ttf. На первый взгляд, PIF ассоциируется со старыми ярлыками Windows, а TTF - с файлами шрифтов. Однако на самом деле PIF является исполняемым загрузчиком LuaJIT (Just-In-Time компилятора для Lua), а файл с расширением .ttf - обычный Lua-скрипт. При запуске PIF принимает путь к TTF-файлу и интерпретирует его как исходный Lua-код. Такая маскировка позволяет обходить простые сигнатуры, скрывать истинное назначение файлов и снижать количество детектов со стороны антивирусов.
Lua-скрипт начинает активное изучение заражённой системы. Прежде всего он считывает ключи реестра, формируя уникальный идентификатор машины: MachineGuid, ComputerName, InstallationType, версию таблиц сортировки NLS. Затем для сокрытия следов вредоносная программа изменяет параметры трассировки Windows, отключая файловое журналирование RAS API (соответствует технике T1562.002 из MITRE ATT&CK, направленной на ослабление защиты). Помимо этого, скрипт проверяет настройки безопасности Internet Explorer, включая DisableSecuritySettingsCheck и RunBinaryControlHostProcessInSeparateAppContainer, хотя сам браузер считается устаревшим, его компоненты по-прежнему используются системными механизмами.
Одной из примечательных особенностей является запуск браузеров Google Chrome и Microsoft Edge с необычными параметрами: --no-sandbox, --disable-gpu, --disable-audio, --mute-audio и --user-data-dir со значением временной папки. Это позволяет создать полностью изолированный профиль пользователя, избегая конфликтов с основной сессией и незаметно выполняя операции в фоне. Далее начинается поиск конфиденциальной информации: скрипт проверяет наличие почтовых клиентов (Thunderbird, Mailbird, Microsoft Outlook), в Outlook обращается к ключам, отвечающим за пароли POP3. Также проверяются браузеры: Google Chrome, Microsoft Edge, Opera, Opera GX - считываются Cookies, Local State, настройки профилей. Отдельно производится поиск расширений менеджеров паролей и криптовалютных кошельков, идентифицируемых по уникальным идентификаторам (например, kkpllkodjeloidieedojogacfhpaihoh и другие). Не остаётся без внимания и мессенджер Discord: скрипт ищет его локальное хранилище, где могут сохраняться токены авторизации.
Финальный этап - отправка всех собранных данных на IP-адрес 38.49.217[.]157. Полная цепочка заражения представляет собой семь последовательных звеньев:
письмо -> Excel -> OLE-объект -> редиректы через 301 и 302 -> HTA -> VBScript -> PowerShell -> JavaScript -> LuaJIT Loader (.PIF) -> Lua-скрипт (.TTF) -> сбор информации и эксфильтрация.
Каждый компонент выполняет строго одну функцию, благодаря чему общая активность остаётся малозаметной для систем обнаружения. Использование нескольких языков сценариев (VBScript, PowerShell, JavaScript, Lua) и нестандартных расширений (.pif, .ttf) значительно усложняет статический анализ и помогает обходить простые средства защиты.
Данная кампания демонстрирует современный подход к распространению вредоносного ПО: вместо монолитного исполняемого файла злоумышленники строят многоуровневые цепочки, где каждое звено можно заменить или модифицировать независимо. В результате перед нами полноценный инфостилер, нацеленный на кражу учётных данных, паролей, криптовалютных активов и токенов доступа. Для защиты организаций и обычных пользователей рекомендуется усилить фильтрацию входящих почтовых вложений с макросами и OLE-объектами, внедрить поведенческий анализ на конечных точках, а также регулярно обновлять правила для систем предотвращения вторжений.
Индикаторы компрометации
IPv4
- 192.236.217.77
- 38.49.217.157
Domain
- masuk.to
URL
- http://192.236.217.77/33
SHA256
- 52f0c0230b580e2fdf53a378b5c6d0db9829af900dae43e0df8f18635cd9f0c1
- 540a0c9d12b13a3b084fac354c6c3cf7bfaea52bdf7c00ef69f9bb1881060498
- a95dedfe8471179b42d61538954be3d42aec68321181ac9bc74fefc30160991d
- c33c556661cb27e1277702cbba93dfd466742690edca38ea55bf5532387068a6