Открыть сервис

WMI

WMI (Windows Management Instrumentation) — это технология управления и мониторинга операционных систем семейства Microsoft Windows, реализующая стандарт WBEM (Web-Based Enterprise Management) и основанная на модели CIM (Common Information Model). WMI предоставляет унифицированный интерфейс для доступа к данным о конфигурации, состоянии и производительности системы, а также позволяет выполнять административные действия на локальных и удалённых компьютерах.

История

Разработка WMI началась в середине 1990-х годов как часть стратегии Microsoft по внедрению открытых стандартов управления в свои продукты. Технология впервые была представлена в составе Windows NT 4.0 Service Pack 4 (1998 год) и Windows 98. Основой послужила спецификация WBEM, разработанная Distributed Management Task Force (DMTF). WMI стала заменой более ранним проприетарным механизмам управления, таким как Windows Registry и SNMP (Simple Network Management Protocol) в ограниченном контексте.

В Windows 2000 WMI была интегрирована в ядро системы и получила расширенные возможности по работе с Active Directory. В Windows XP и Windows Server 2003 технология была значительно доработана: улучшена производительность, добавлена поддержка событий и асинхронных запросов. В Windows Vista и Windows 7 WMI стала основой для многих новых функций, включая мониторинг производительности и управление питанием.

В Windows 8 и Windows Server 2012 была представлена модель WMI Provider Extensions, позволяющая создавать провайдеры на управляемом коде (C#). В Windows 10 и Windows Server 2016 WMI частично вытесняется более современной технологией PowerShell Desired State Configuration (DSC) и CIM-сессиями, однако остаётся критически важной для обратной совместимости и работы многих сторонних решений.

Архитектура

Архитектура WMI состоит из трёх основных уровней:

Потребители (Consumers)

Это приложения, скрипты или командлеты, которые запрашивают данные или выполняют операции через WMI. Потребители взаимодействуют с WMI через COM-интерфейсы (например, IWbemServices) или через объектные модели, такие как System.Management в .NET Framework. Наиболее распространённые потребители:

  • PowerShell (командлеты Get-WmiObject, Invoke-WmiMethod и др.)
  • VBScript и JScript (объект SWbemServices)
  • Windows Script Host (WSH)
  • Сторонние средства мониторинга (например, Nagios, Zabbix)

Инфраструктура (Infrastructure)

Центральный компонент — CIM Object Manager (CIMOM), реализованный в виде службы Winmgmt (Windows Management Instrumentation). CIMOM отвечает за:

  • Приём и обработку запросов от потребителей
  • Маршрутизацию запросов к соответствующим провайдерам
  • Управление репозиторием WMI (хранилищем метаданных)
  • Генерацию событий и уведомлений

Провайдеры (Providers)

Это DLL-библиотеки, которые реализуют интерфейсы для доступа к конкретным данным или управляющим функциям. Каждый провайдер отвечает за определённую область, например:

  • Win32 Provider — основные данные о системе (процессы, службы, диски, сетевые адаптеры)
  • Registry Provider — доступ к реестру Windows
  • Event Log Provider — чтение и управление журналами событий
  • Active Directory Providerработа с объектами AD
  • SNMP Provider — интеграция с SNMP-устройствами

Классы WMI

WMI использует объектно-ориентированную модель, где все данные и методы представлены в виде классов. Классы организованы в иерархию пространств имён (namespaces). Основные пространства имён:

  • root\cimv2 — наиболее часто используемое, содержит классы для управления аппаратным и программным обеспечением
  • root\default — системные классы, связанные с безопасностью и реестром
  • root\security — классы для управления политиками безопасности
  • root\wmi — классы, связанные с производительностью и трассировкой событий

Примеры типовых классов:

  • Win32_Process — информация о запущенных процессах
  • Win32_Service — управление службами Windows
  • Win32_LogicalDisk — данные о логических дисках
  • Win32_NetworkAdapterConfiguration — настройки сетевых адаптеров
  • Win32_OperatingSystem — информация об ОС (версия, установка, загрузка)

Язык запросов WQL

WMI поддерживает собственный язык запросов — WQL (WMI Query Language), являющийся подмножеством SQL-92. WQL позволяет выполнять выборку данных, подписку на события и модификацию объектов. Основные операторы:

  • SELECTвыборка данных (например, SELECT * FROM Win32_Process WHERE Name = 'notepad.exe')
  • ASSOCIATORS OF — получение связанных объектов (например, ASSOCIATORS OF {Win32_Service.Name='Spooler'})
  • REFERENCES OF — получение ссылок на объекты
  • WITHIN — задание интервала опроса для событийных запросов

WQL не поддерживает операции JOIN, GROUP BY, ORDER BY и агрегатные функции, что ограничивает его возможности по сравнению с полноценным SQL.

Безопасность

WMI использует механизмы безопасности Windows, включая:

  • Аутентификация — проверка подлинности на основе Kerberos или NTLM
  • Авторизация — контроль доступа на основе прав пользователя и членства в группах безопасности
  • Шифрование — поддержка шифрования трафика между потребителем и CIMOM (начиная с Windows Vista)

По умолчанию доступ к WMI имеют только члены группы Администраторы (Administrators). Для удалённого управления требуется настройка брандмауэра (разрешение порта 135 для DCOM) и включение службы WMI.

Уязвимости и критика

WMI неоднократно становилась объектом атак злоумышленников. Основные проблемы:

  • Использование для скрытого выполнения кода — злоумышленники могут запускать скрипты через WMI без создания процессов, что затрудняет обнаружение антивирусами (например, атаки с использованием Invoke-WmiMethod или Win32_Process.Create)
  • Отсутствие детального логирования — стандартные журналы Windows не всегда фиксируют WMI-запросы, что позволяет злоумышленникам оставаться незамеченными
  • Уязвимости в провайдерах — в прошлом были обнаружены критические уязвимости (например, CVE-2016-0040, CVE-2017-8565), позволяющие повысить привилегии или выполнить произвольный код

В ответ на эти угрозы Microsoft внедрила в Windows 10 и Windows Server 2016 функцию WMI Control Security, позволяющую ограничивать доступ к WMI на уровне пользователей и групп, а также WMI Tracing для детального логирования.

Применение

WMI широко используется в следующих областях:

  • Системное администрирование — автоматизация рутинных задач (управление службами, установка обновлений, мониторинг дискового пространства)
  • Мониторинг и управление ИТ-инфраструктурой — сбор данных о производительности, состоянии оборудования и программного обеспечения
  • Разработка программного обеспечения — доступ к системным данным для создания диагностических утилит, инсталляторов и средств резервного копирования
  • Безопасность — обнаружение вредоносной активности (например, анализ запущенных процессов, проверка целостности системных файлов)

Альтернативы

Современной альтернативой WMI является PowerShell Remoting и CIM-сессии, которые используют протокол WS-Management (WSMan) и не требуют DCOM. CIM-сессии обеспечивают более высокую производительность, лучшую совместимость с не-Windows системами и повышенную безопасность. Однако WMI остаётся востребованной для обратной совместимости с устаревшими приложениями и скриптами.

Источники

  • Microsoft Docs: Windows Management Instrumentation (WMI)
  • Distributed Management Task Force (DMTF) — WBEM Standards
  • «Windows Internals» by Mark Russinovich, David Solomon, Alex Ionescu
  • CVE Database — уязвимости WMI
  • TechNet: WMI Security Best Practices

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →