Наступательный WMI - Основы (Часть 1)

Наступательный WMI — Основы (Часть 1)

Эта статья является первой из многих статей, посвященных WMI, и предназначено для довольно новой аудитории. Базовое понимание Powershell определенно поможет читателю при просмотре блога, однако это не является обязательным требованием. Вот и все, давайте перейдем к изучению наступательного WMI-его основы.

Вступление

Почему именно WMI?

WMI — это набор спецификаций от Microsoft, разработанный для быстрого и эффективного администрирования систем Windows. И, как вы, возможно, знаете, правило безопасности гласит, что «все, что полезно для администрации, отлично подходит для злоупотреблений со стороны злоумышленников». WMI действительно может многое — от сбора статусов компьютеров и настройки параметров до запуска приложений и выполнения кода. Более того, WMI присутствует во всех доступных версиях ОС Windows, поэтому целевая область здесь довольно широка.

Что такое WMI?

Давайте быстро рассмотрим несколько важных терминов. WMI расшифровывается как Windows Management Instrumentation, которая представляет собой реализацию Microsoft CIM (Common Information Model) и WBEM (Web-ориентированное управление предприятием), которые в целом являются стандартами DMTF (Distributed Management Task Force). WMI дает нам аккуратный и единообразный интерфейс для приложений / сценариев для управления компьютером (возможно, удаленным и локальным), в т.ч. процессами, услугами и т. д.

Архитектура WMI

Понимание архитектуры очень важно для понимания того, как работает вся экосистема WMI. Ниже представлен общий обзор архитектуры WMI (взят из выступления Грэбера из BHUSA 15):
 
Architecture   Наступательный WMI - Основы (Часть 1)
 
Давайте разберем основные компоненты один за другим:
 
  • Клиенты / потребители: по сути, это конечные потребители, которые взаимодействуют с классами WMI для запроса данных, выполнения методов и т. д. Некоторые известные клиенты включают wmic.exe, wbemtest.exe, winrm.exe, VBScript / JScript и, в некоторых случаях, командлеты Powershell.
  • Языки запросов: так же, как SQL предоставляет вам способ запроса базы данных, WMI также имеет WQL (язык запросов WMI) / CQL для запросов к службе WMI. Когда дело доходит до управления удаленными ящиками, вступает в действие стандарт WBEM, который включает DCOM и WS-Man (не волнуйтесь, если вы не понимаете эти термины, читайте дальше). WQL — это в основном синтаксис SQL для WMI, поэтому регистр не учитывается.
Простой запрос может выглядеть так:
 
select * from win32_bios
 
который дает нам информацию о нашем BIOS.
 
  • Репозитории: это базы данных, о которых мы говорили ранее, в которых хранятся все статические данные (определения) классов. Репозитории определяются файлами MOF (формат управляемого объекта), которые определяют структуру, классы, пространства имен и т. д. Файлы базы данных можно найти в каталоге% WINDIR% \ System32 \ Wbem \ Repository.
 
repositories   Наступательный WMI - Основы (Часть 1)
 
  • Файлы MOF: файлы MOF в основном используются для определения пространств имен WMI, классов, поставщиков и т. д. Обычно они находятся в каталоге % WINDIR% \ System32 \ Wbem с расширением .mof. В более поздней части этой серии мы рассмотрим, как мы можем писать наши собственные файлы MOF для расширения набора функций WMI.
  • Поставщики: все, что определено в репозиториях, можно получить с помощью поставщиков WMI. Обычно они представляют собой файлы DLL и связаны с файлом MOFcimwin32.dll, stdprov.dll и т. д., Чтобы назвать несколько, однако они также могут принимать форму других типов (класс, событие, потребитель события, метод и т. д.) . Провайдеры важны для экосистемы, потому что они отслеживают события и данные от определенных объектов. Поставщики как драйверы, которые обеспечивают мост между управляемыми объектами и WMI.

На снимке экрана ниже файлы DLL являются поставщиками связанных файлов MOF:

MOF files   Наступательный WMI - Основы (Часть 1)

  • Управляемые объекты: это псевдонимы ресурсов в контексте, то есть управляемый объект может быть службой, процессом или ОС, управляемыми WMI.
Пространства имен: Проще говоря, пространства имен — это логические подразделения классов, предназначенные для легкого обнаружения и использования. Они делятся на 3 группы:
  • система
  • основной 
  • расширение 

и 3 вида:

  • Аннотация
  • статический 
  • динамичный 

По умолчанию используются следующие известные пространства имен: root \ cimv2, root \ default, root \ security, root \ subscription и т. д.

Вот и все с архитектурой. Теперь давайте узнаем немного об использовании WMI с Powershell.

Использование WMI с Powershell

Теперь, когда мы закончили с теоретической частью, давайте быстро создадим терминал PS. Важно помнить, что до Powershell версии 2 было всего несколько командлетов для взаимодействия с WMI. Мы быстро проверим нашу версию Powershell и изменим версию на 2:

version   Наступательный WMI - Основы (Часть 1)

Теперь давайте запустим командлет Get-Command -CommandType * wmi * в командной строке Powershell. Это приводит нас к:

WMI

СОВЕТ. Названия команд говорят сами за себя (и мы еще поговорим об этом позже). В любой момент вы можете использовать стандартный синтаксис Powershell: help <command>, чтобы получить дополнительную информацию о том, что делает конкретная команда. например вы можете попробовать help Invoke-WmiMethod для просмотра того, что делает команда — очень похоже на справочные страницы Linux.

Начиная с Powershell v3, MS представила командлеты CIM, которые используют стандарты WS-MAN и CIM для управления объектами. Доступ к командлетам CIM имеет преимущества в двух контекстах:

  • На машинах, где запуск WMI / DCOM заблокирован (возможно, из-за правила брандмауэра на основе хоста?), но включен WinRM / WS-MAN (удаленное управление Windows), мы все равно можем использовать CIM, чтобы делать именно то, что мы можем делать с WMI.
  • Сам CIM является отраслевым стандартом и реализован кросс-платформенным, что означает, что его можно использовать также для работы с устройствами, отличными от Windows.

DCOM: псевдоним для объектной модели распределенных компонентов, DCOM — это проприетарный протокол Microsoft для связи между программными компонентами на сетевых компьютерах. WMI использует распределенный COM (DCOM) для подключения к удаленному компьютеру. Однако DCOM не поддерживает брандмауэр.

WS-MAN: WS-MAN или WS-Management — это стандарт DMTF, который предоставляет системам общий способ доступа к управляющей информации через ИТ-инфраструктуру. WS-MAN, с другой стороны, использует HTTP, поэтому он определенно дружественен к брандмауэрам.

Мы повторим то, что делали выше, но после изменения версии Powershell на значение по умолчанию (в моем случае это Powershell v5):

CIM

Повторяя сказанное выше, командлеты CIM могут делать все, что могут командлеты WMI. Если мы хотим сопоставить функциональные возможности командлетов WMI и CIM, вот табличное представление сравнения функциональных возможностей обоих типов:

Использование и типы WMI Командлеты CIM Командлеты
Получить информацию о классах Get-WmiObject Get-CimInstance
Вызов метода  Invoke-WmiMethod Invoke-CimMethod
Подписка на событие Register-WmiEvent Register-CimIndicationEvent
Создание / обновление экземпляров класса Set-WmiInstance Set-CimInstance
Удаление экземпляров класса Remove-WmiObject

Remove-CimInstancе

Выполнение запросов WMI с помощью Powershell

Теперь, когда мы знаем о различных доступных для использования командлетах, мы можем попробовать выполнить приведенный выше образец WQL-запроса. Мы уже знаем, что Get-WmiObject можно использовать для получения информации о классах. Итак, давайте запустим командлет с параметром -Query:

Get-WmiObject -Query 'select * from win32_bios'

WQL

Заключение

Эта статья была предназначена для обзора того, чем мы будем заниматься в следующих частях этой серии. Здесь много технических модных словечек, но понимать их необходимо. Надеюсь, вам понравилось читать, и я жду нашего совместного путешествия по изучению WMI.

 

 

 

 

 

 

 

 
 

 

 

 

 

 

 

 

Click to rate this post!
[Total: 1 Average: 5]

Leave a reply:

Your email address will not be published.