Вам звонит пользователь: «Компьютер что-то делает сам по себе. Сетевая активность странная. Но Kaspersky / ESET / Defender — всё чисто». Знакомая ситуация? Именно в такие моменты важно не ограничиваться стандартным сканированием, а копнуть туда, куда большинство антивирусов просто не смотрит: в WMI-подписки (Windows Management Instrumentation).
Большинство антивирусных движков ориентированы на сигнатурный анализ файлов и поведенческий мониторинг запущенных процессов. WMI-подписки хранятся в собственной базе данных WMI — в файле %WINDIR%\System32\wbem\Repository. Там нет исполняемого файла, который можно просканировать. Тело вредоносного скрипта может быть зашито прямо в объект CommandLineEventConsumer, и антивирус просто не имеет повода на него смотреть.
Кроме этого, атакующие нередко используют обфускацию PowerShell или fileless-технику — вредоносный код живёт только в памяти и в WMI-репозитории, не касаясь диска. Именно поэтому классические сканеры молчат, а система продолжает вести себя подозрительно.
Откройте PowerShell от имени администратора. WMI-подписки состоят из трёх объектов: EventFilter (что отслеживать), EventConsumer (что делать) и FilterToConsumerBinding (связь между ними). Проверяем каждый.
Это самая ёмкая команда — она покажет все установленные «триггер → действие» пары:
Get-WmiObject -Namespace "root\subscription" -Class __FilterToConsumerBinding | Select-Object -Property Filter, Consumer
Если вывод пустой — WMI-подписок нет. Если появились строки с Filter и Consumer — читайте дальше.
Узнаём, на какое событие настроена подписка — на старт системы, на определённое время или на что-то другое:
Get-WmiObject -Namespace "root\subscription" -Class __EventFilter | Select-Object Name, Query, QueryLanguage
Обратите внимание на поле Query. Легитимные подписки обычно имеют понятные имена и прозрачные запросы. Подозрительно выглядит: случайные строки в имени, запросы на Win32_LocalTime или __InstanceModificationEvent от незнакомого ПО.
Это самое важное — здесь хранится команда, которая выполнится при срабатывании триггера:
Get-WmiObject -Namespace "root\subscription" -Class CommandLineEventConsumer | Select-Object Name, CommandLineTemplate
Поле CommandLineTemplate покажет запускаемую команду. Любое упоминание powershell.exe, cmd.exe, wscript.exe, mshta.exe с непонятными аргументами — серьёзный повод для расследования. Особенно если путь ведёт в %TEMP%, %APPDATA% или содержит Base64-строку.
Команды выше могут обрезать длинные значения. Чтобы увидеть полный текст команды, которую запускает потребитель:
Get-WmiObject -Namespace "root\subscription" -Class CommandLineEventConsumer | Format-List *
А вот удобный способ сразу вывести всё в один читаемый отчёт — фильтры, потребители и связки — в один проход:
# Полный аудит WMI-подписок
Write-Host "`n=== EventFilters ===" -ForegroundColor Cyan
Get-WmiObject -Namespace "root\subscription" -Class __EventFilter | Format-List Name, Query
Write-Host "`n=== CommandLineEventConsumers ===" -ForegroundColor Cyan
Get-WmiObject -Namespace "root\subscription" -Class CommandLineEventConsumer | Format-List Name, CommandLineTemplate
Write-Host "`n=== ActiveScriptEventConsumers ===" -ForegroundColor Cyan
Get-WmiObject -Namespace "root\subscription" -Class ActiveScriptEventConsumer | Format-List Name, ScriptText
Write-Host "`n=== FilterToConsumerBindings ===" -ForegroundColor Cyan
Get-WmiObject -Namespace "root\subscription" -Class __FilterToConsumerBinding | Format-List Filter, Consumer
CommandLineEventConsumer существует ещё ActiveScriptEventConsumer — он может содержать VBScript или JScript прямо внутри объекта WMI. Обязательно проверяйте оба класса.
Нашли подозрительный объект? Удаляем его. Допустим, вредоносный фильтр называется MaliciousFilter, а потребитель — MaliciousConsumer. Последовательность важна: сначала связка, потом фильтр и потребитель.
# 1. Удаляем связку
$binding = Get-WmiObject -Namespace "root\subscription" -Class __FilterToConsumerBinding | Where-Object { $_.Filter -like "*MaliciousFilter*" }
$binding | Remove-WmiObject
# 2. Удаляем фильтр
$filter = Get-WmiObject -Namespace "root\subscription" -Class __EventFilter -Filter "Name='MaliciousFilter'"
$filter | Remove-WmiObject
# 3. Удаляем потребителя
$consumer = Get-WmiObject -Namespace "root\subscription" -Class CommandLineEventConsumer -Filter "Name='MaliciousConsumer'"
$consumer | Remove-WmiObject
После удаления — перезагрузите машину и повторите аудит, чтобы убедиться, что объекты не восстановились (некоторые дропперы могут пересоздавать их из другого механизма закрепления).
По умолчанию Windows не пишет в журнал создание WMI-подписок. Включите это немедленно — особенно на рабочих станциях с доступом к чувствительным данным.
# Включить расширенный аудит WMI-операций (требует Windows 10 / Server 2016+)
wevtutil sl Microsoft-Windows-WMI-Activity/Operational /e:true
После включения в журнале Microsoft-Windows-WMI-Activity/Operational появятся события:
Если у вас ещё не установлен Sysmon от Sysinternals — самое время. Он отслеживает WMI-активность значительно детальнее штатных средств.
# Установка Sysmon (предварительно скачайте с sysinternals.com)
sysmon64.exe -accepteula -i sysmonconfig.xml
Ключевые Event ID Sysmon для WMI-угроз:
ParentCommandLine — увидите, что родителем является WMI)WMI — не единственное место, где могут прятаться угрозы, невидимые антивирусу. Проверьте параллельно:
Get-ScheduledTask | Where-Object {$_.TaskPath -notlike "\Microsoft\*"} | Select-Object TaskName, TaskPathHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon — ключи Userinit и ShellGet-WmiObject Win32_Service | Where-Object {$_.PathName -like "*Temp*" -or $_.PathName -like "*AppData*"}Если вы обнаружили активную вредоносную WMI-подписку, действуйте по следующему плану:
Format-List * для последующего анализа.Подозреваете компрометацию? Нужен аудит безопасности инфраструктуры, настройка Sysmon или реагирование на инцидент? Мы занимаемся IT-аутсорсингом и информационной безопасностью для бизнеса в Москве и удалённо по всей России.
Не хватает времени или своих специалистов — мы настроим, оптимизируем и возьмём вашу IT-инфраструктуру на постоянное сопровождение. Работаем с юридическими лицами в Москве и регионах. Собственный дата-центр, команда из 8 серверов Dell Xeon Platinum 8280 на базе МТС.