В ходе нашего недавнего расследования в Seqrite В ходе лабораторных исследований мы выявили сложный вариант вредоносной программы Masslogger, предназначенной для кражи учетных данных и распространяющейся через файлы .VBE (закодированные в VBScript). Первоначально этот вариант казался типичной угрозой на основе скриптов, но при более глубоком анализе выяснилось, что это многоступенчатая бесфайловая вредоносная программа, которая в значительной степени использует реестр Windows для хранения и выполнения своей вредоносной нагрузки.
В этой публикации мы проанализировали внутренний поток кода VBScript, используемый механизм обфускации и то, как он манипулирует системой, чтобы она оставалась безфайловой. Кроме того, мы рассказали о Stagers и возможностях финальной полезной нагрузки Masslogger.
Первичный вектор заражения:
Заражение начинается с файла .VBE, вероятно, распространяемого через спам-сообщения или скрытые загрузки. Файл .VBE представляет собой VBScript, закодированный с помощью встроенной схемы кодирования Microsoft для обнаружения случайного просмотра. После декодирования скрипт обнаруживает несколько уровней обфускации, модульные процедуры и реальную функциональность.
Анализ декодированного файла .VBS – [VBScript]:
Изначально файл .VBS подготавливает и записывает несколько значений реестра в определённый раздел, используемый вредоносной программой. Он настраивает среду выполнения для хранения безфайловой полезной нагрузки.
Имена разделов и значений реестра жёстко запрограммированы и понятны. Однако лишь немногие критически важные данные хранятся в закодированном виде и декодируются во время выполнения файла.
-Настройка реестра для команд и конфигурации Stager:
Подпрограмма AKAAU() используется для подготовки ключей и значений перед их записью в реестр. Имена значений и данные значений хранятся в отдельных массивах — «QORXG» и «ZBZLV» соответственно. Оба массива записываются в реестр с помощью функции «RegWrite».

После заражения системы мы можем найти следующие вредоносные записи реестра в редакторе реестра:

Ниже приведен список записей реестра, записанных в систему по пути реестра «HKCU\Software\»:
| Имя значения | Значение | Резюме |
| cn | Stop-Process -Name conhost -Force | Принудительно завершить процесс conhost.exe. |
| i | «AddInProcess32.exe» | Целевой процесс для внедрения кода. |
| in | "0" | Управляющий флаг, проверяющий, запущена ли уже команда PowerShell или нет. |
| мгновение | ЛПОИТ | Запутанные команды PowerShell. Деобфусцируйте и загрузите Stager-1 в память. |
| Тропа | esBbIgyFlZcXjUl | Имя пути к разделу реестра. Добавляется к «HKCU\Software\». |
| r | ВАДЖЛА | Сборка .Net, сохранённая в формате перевёрнутой строки. Stager-2. |
| s | РКФЙИ(ДГСЛП) | Декодированная шестнадцатеричная строка. Сборка .Net, сохраненная в обратном формате Base64. Stager-1. |
| v | ХИКГО() | Запутанные команды для PowerShell. Деобфусцируют и загружают Stager-1 в память. Специально для имитации пользовательского ввода. |
Таблица 1: Сводка добавленных записей реестра
Перед записью этих реестров вредоносная программа вызывает подпрограмму «ZGYHW()», которая проверяет, является ли файл «C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe» присутствует на месте.
В зависимости от наличия вредоносное ПО использует разные версии Stager. В частности, Stager-2 в данном сценарии:

– Настройка реестра для окончательного развертывания полезной нагрузки:
После настройки и записи указанных выше реестров вызывается другая подпрограмма «XSSAY()». Эта функция отвечает за чтение ещё одного строкового массива данных большего размера (фактически представляющего собой полезную нагрузку Masslogger, хранящуюся в закодированном виде). Эти данные затем разбиваются на фрагменты по 25,000 XNUMX символов и записываются в другие значения реестра в сегментированном виде.

Каждый фрагмент записывается в реестр по следующим путям:
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment1
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment2
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment*

-Планировщик задач:
Вредоносное ПО устанавливает персистентность через запланированную задачу Windows, обеспечивая бесперебойную работу вредоносного ПО в системе. Запуск задачи начинается с даты заражения (20xx-xx–xxT00:00:00) и повторяется каждую минуту (PT1M). Задание запланировано к запуску с учетом ограничений, связанных с аккумулятором.

Задача использует то же имя, что и созданный раздел реестра, т.е. esBbIgyFlZcXjUl и запускается для запуска файла .VBS. Этот .VBS действует как постоянный цикл выполнения, проверяющий наличие созданных реестров, указывающих, следует ли выполнять полезную нагрузку.
-Скрипт планировщика заданий — способен имитировать пользовательский ввод:
Как мы видим на изображении ниже:
- Он запускается примерно 10000 раз, делая перерыв в 10 секунд между каждым циклом.
- Он считывает значение реестра «i», чтобы получить имя процесса и подтвердить, запущен он или нет.
- Затем он проверяет, установлено ли значение реестра «in» на 1,
- если да, он молча выполняет вредоносную команду, сохраненную в реестре «instant».
- Когда значение в «in» не равно 1.
- Он запускает PowerShell в режиме видимого окна и использует методы «.SendKeys» для ввода значений реестров «v» и «cn», за которыми следует «{ENTER}».
- Этот метод похож на имитацию ввода данных пользователем в PowerShell.

Как мы увидели в сводной таблице,
реестр «cn» используется для принудительной остановки запущенного экземпляра процесса conhost.exe.
«мгновенное» и «v» Реестры используются как PowerShell для деобфусцации, подготовки и загрузки сборки Stager .Net в память, без обращения к диску.
Проверьте состояние защиты системы:
Вредоносное ПО проверяет состояние защиты целевой системы и, возможно, остаётся незамеченным во время выполнения. Оно делает это, обращаясь к некоторым важным реестрам. Ниже приведены некоторые реестры, в которых антивирусные и защитные продукты обычно регистрируют своё присутствие:
- «HKLM\SOFTWARE\Microsoft\Security Center\Provider\Av»,
- «HKLM\SOFTWARE\Microsoft\Центр безопасности\Мониторинг»,
- «HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Security and Maintenance\Providers»,
- «HKLM\SOFTWARE\Microsoft\Защитник Windows\Центр безопасности\Поставщики»
Эти реестры определены в скрипте в закодированном формате. Вредоносное ПО пытается перебрать подключи указанных выше разделов и прочитать значение «DisplayName». DisplayName содержит имя установленного антивируса/средства безопасности. Если в целевой системе обнаружено несколько установленных антивирусных продуктов, вредоносное ПО останавливает выполнение.

-Триггер для Stager:
Подпрограмма SQSKP() в VBE-файле является критически важным звеном цепочки выполнения вредоносного ПО. Она динамически конструирует и запускает команду PowerShell, которая выполняет в памяти стейджер .NET, извлеченный из реестра Windows.

Здесь декодированный текст представляет собой деобфусцированные команды PowerShell после замены |path| на RVOYN.

Как мы видим на рис. 10 –
- Эта команда PowerShell формируется и назначается переменной «LPICU».
- Затем содержимое переменной записывается в значение реестра «\instant», которое создается внутри ключа реестра «Computer\HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl».
- Функция запускает сконструированную команду PowerShell в фоновом режиме, где «0» — скрывает окно PowerShell.
- Затем PowerShell считывает раздел реестра «HKCU\Software\esBbIgyFlZcXjUl\s» — этот раздел реестра содержит Stager-1, сохраненный в уважаемом формате с кодировкой Base64.

Мы видели, как авторы вредоносных программ применяли эту комбинацию кодировок во многих современных похитителях учетных данных, включая VIPKeylogger, Remcos, AsyncRAT и т. д.
- Команда PowerShell переворачивает строку, объединяет их, декодирует строки в формате base64 и загружает их как сборку .Net с помощью функции «[AppDomain]::CurrentDomain.Load()» в памяти. Такой подход позволяет вредоносному ПО:
- Избегайте записи реальных вредоносных файлов на диск (возможность уклонения).
- Динамически конструируйте и загружайте полезную нагрузку во время выполнения.
- Вызывает метод записи «[vv]::v('esBbIgyFlZcXjUl')», который ссылается на путь реестра.
Мы взяли дамп деобфусцированной полезной нагрузки Stager-1 для дальнейшего анализа. Наши наблюдения следующие:
Анализ Stager-1:
Stager-1 — это небольшой исполняемый файл, закодированный в реестре «HKCU\Software\esBbIgyFlZcXjUl\s». Он скомпилирован в .Net и занимает около 14 КБ.
Анализируя его код, мы обнаружили, что файл пытается прочитать содержимое из другого ключа реестра с именем «r» – [HKCU\Software\esBbIgyFlZcXjUl\r].
Это содержимое меняется на противоположное, и формируется другой скомпилированный двоичный файл .Net — stager-2.
Затем этот двоичный файл загружается в память с помощью метода Assembly.Load(). Stager-1 пытается найти метод r() внутри класса r сборки Stager-2. Это точка входа для выполнения stager-2.

Анализ Stager-2:
После завершения настройки Stager-1 вредоносная программа переходит к загрузчику Stager-2. Этот этап заражения направлен на извлечение полезной нагрузки Masslogger из реестра и внедрение её в целевой процесс.
Stager-2 изначально конструирует потенциальные пути к файлам для запуска процесса и выполнения внедрения кода.
Он проверяет, существует ли файл (имя которого извлекается из значения реестра «i») по любому из этих путей.
В нашем случае мы обнаружили, что путь к целевому файлу/процессу следующий:
«%WINDIR%\Microsoft.NET\Framework\v4.0.30319\AddInProcess32.exe»

Кроме того, вредоносная программа извлекает фактическую полезную нагрузку Masslogger, которая была ранее записана (подпрограммой «XSSAY()») в нескольких подразделах реестра в указанных ниже реестрах, которые мы видели ранее «.
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment1
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment2
- HKEY_CURRENT_USER\SOFTWARE\esBbIgyFlZcXjUl\donn\segment*
Функция BBX() класса «r» отвечает за сбор всех записей значений, их объединение, переворачивание объединённой строки и её декодирование из шестнадцатеричного представления в необработанные байты. Этот метод позволяет авторам вредоносных программ скрывать полный двоичный PE-файл в нескольких разделах реестра. Декодированная полезная нагрузка затем используется для подмены процесса. Подмена процесса выполняется с помощью функции .XGP().
Это умный способ хранить все данные в реестре и использовать память только для выполнения.

- Доставка специальной полезной нагрузки во Францию:
Геотаргетинговая доставка полезной нагрузки теперь широко распространена в современных вредоносных программах для изменения поведения в зависимости от местоположения жертвы. Stager-2 этого заражения проверяет, установлен ли в текущей системе французский язык ввода (Fr) и содержит ли локаль «France».

При выполнении условий он пытается загрузить специально созданную дополнительную полезную нагрузку с жёстко заданного URL-адреса – hxxps://144.91.92.251/MoDi.txt. На момент анализа URL-адрес был недоступен.
-Завершение трассировок и выход:
В конце своего выполнения вредоносная программа принудительно завершает работающие экземпляры процессов conhost.exe и PowerShell.exe.

Завершая эти процессы, вредоносная программа, вероятно, стремится скрыть следы своей активности. Наконец, она завершает приложение с помощью ProjectData.EndApp(), завершая жизненный цикл stager-2.
Анализ окончательной полезной нагрузки Masslogger:
После успешной деобфускации финальной полезной нагрузки из реестра, Masslogger внедряется в целевой процесс – «AddInProcess32.exe». Маркер этой вредоносной программы виден в дампе памяти внедренного процесса, как показано ниже:

Мы сделали дамп памяти этой полезной нагрузки, представляющей собой финальный этап цепочки вредоносного ПО. Она отвечает за выполнение основных функций по краже учётных данных.
-Сбор данных:
Как и многие вредоносные программы для кражи информации, эта вредоносная программа также нацелена на несколько веб-браузеров и несколько почтовых клиентов для кражи конфиденциальной информации, такой как сохраненные имена пользователей, пароли, данные автозаполнения и т. д. Ниже приведен список веб-браузеров и нескольких почтовых клиентов, на которые пытается нацелиться Masslogger.

Давайте подробно рассмотрим один из модулей, в котором вредоносное ПО пытается собрать сохраненные учетные данные для входа в браузер Chrome.

Он находит данные пользователя для входа в систему, обращаясь к своей базе данных SQLite «Данные для входа». Он извлекает URL-адреса веб-сайтов вместе с соответствующими именами пользователей и паролями и собирает их для дальнейшего использования. Если найдены действительные данные для входа, они сохраняются в структурированном формате: веб-сайт, имя пользователя и пароль.
Помимо атаки на браузеры и почтовые клиенты с целью кражи информации, Masslogger также обладает возможностями:
- Активность кейлоггера.
- Создание и удаление файлов снимков.
- Извлечь данные из буфера обмена.
- Попробуйте отслеживать активность пользователя, вызывая GetForegroundWindow, GetWindowText и т. д.
- Прочтите сведения о системе, такие как IP-адрес и страна.
- Загрузка нескольких файлов на сервер.
-Удаление данных:
Метод SpeedOffPWExport() в финальной полезной нагрузке позволяет осуществлять кражу данных путем отправки собранных учетных данных и системной информации в удаленные местоположения по нескольким каналам, таким как FTP, SMTP или Telegram.
Если FTP включен, метод загружает украденные данные в виде файла .txt на удаленный FTP-сервер, используя жестко запрограммированные учетные данные.

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

Если включена функция эксфильтрации Telegram, данные отправляются в виде документа с использованием API Telegram Bot, включая подпись с именем пользователя и IP-адресом жертвы.

Вывод:
Бесфайловый вариант Masslogger демонстрирует развивающуюся тенденцию вредоносного ПО для кражи информации. Распространяясь через скрипт .VBE, он использует реестр Windows для хранения исполняемого файла и загружает его непосредственно в память, не затрагивая диск. Он способен собирать сохранённые учётные данные из нескольких браузеров и почтовых клиентов, используя различные каналы [FTP, SMTP, Telegram Bot] для кражи данных.
Этот вариант демонстрирует переход вредоносного ПО для кражи учётных данных к бесфайловой архитектуре и многоэтапному функционированию (Stager-1, Stager-2). Это бросает вызов традиционным антивирусным и сигнатурным методам обнаружения. Чтобы преодолеть эту проблему, специалистам по безопасности необходимо использовать передовые механизмы обнаружения, такие как поведенческое детектирование, мониторинг аномалий реестра и т. д.
Индикаторы компрометации (IoC):
Файл MD5:
.VBE: 29DBD06402D208E5EBAE1FB7BA78AD7A
.VBS: F30F07EBD35B4C53B7DB1F936F72BE93
Stager-1: 2F1E771264FC0A782B8AB63EF3E74623
Stager-2: 37F0EB34C8086282752AF5E70F57D34C
MassLogger Payload: 1E11B72218448EF5F3FCA3C5312D70DB
URL:
hxxps://144.91.92.251/MoDi.txt
Seqrite Обнаружение:
Script.trojan.49618.GC
Trojan.MSIL
Trojan.YakbeexMSIL.ZZ4
MITRE ATT & CK
| тактика | Идентификатор техники | Название техники | Идентификатор подтехники | Название подтехники |
| Первоначальный доступ | T1566 | Фишинг | T1566.001 | Вложение для фишинга |
| Типы | T1059 | Интерпретатор команд и сценариев | T1059.005 | Визуальный Бейсик |
| Типы | T1059 | Интерпретатор команд и сценариев | T1059.001 | PowerShell |
| Настойчивость | T1053 | Запланированная задача/задание | T1053.005 | Запланированная задача |
| Уклонение от защиты | T1140 | Деобфусцировать/декодировать файлы или информацию | – | – |
| Уклонение от защиты | T1112 | Изменить реестр | – | – |
| Уклонение от защиты | T1055 | Инъекция процесса | T1055.012 | Обработка полостей |
| Уклонение от защиты | T1562 | Ослабить защиту | T1562.001 | Отключить или изменить инструменты |
| Уклонение от защиты | T1059 | Интерпретатор команд и сценариев | T1059.001 | PowerShell |
| Дискавери | T1518 | Обнаружение программного обеспечения | T1518.001 | Обнаружение программного обеспечения безопасности |
| Дискавери | T1082 | Обнаружение системной информации | – | – |
| Дискавери | T1012 | Реестр запросов | – | – |
| Доступ к учетным данным | T1555 | Учетные данные из хранилищ паролей | T1555.003 | Учетные данные из веб-браузеров |
| Доступ к учетным данным | T1056 | Захват ввода | T1056.001 | Keylogging |
| | T1113 | Захват экрана | – | – |
| | T1115 | Данные буфера обмена | – | – |
| | T1056 | Захват ввода | T1056.001 | Keylogging |
| | T1083 | Обнаружение файлов и каталогов | – | – |
| Управление и контроль | T1071 | Протокол прикладного уровня | T1071.001 | Веб-протоколы |
| Управление и контроль | T1071 | Протокол прикладного уровня | T1071.002 | Протоколы передачи файлов |
| Управление и контроль | T1071 | Протокол прикладного уровня | T1071.003 | Почтовые протоколы |
| Управление и контроль | T1105 | Входной инструмент передачи | – | – |
| эксфильтрации | T1041 | Эксфильтрация через канал C2 | – | – |
| эксфильтрации | T1567 | Эксфильтрация через веб-сервис | T1567.002 | Эксфильтрация в облачное хранилище |
| эксфильтрации | T1567 | Эксфильтрация через веб-сервис | T1567.001 | Эксфильтрация в репозиторий кода |



