Windows Management Instrumentation
(WMI) ist eine leistungsfähige Schnittstelle, die es Administratoren ermöglicht, nahezu alle Aspekte eines Windows-Systems zu überwachen und zu verwalten. Eine der wichtigsten Komponenten von WMI sind die so genannten WmiObjects
. Diese Objekte stellen Instanzen von WMI-Klassen dar und bieten Zugriff auf eine Vielzahl von Systeminformationen und Funktionen. Vom Abrufen von Details über die Hardware eines Computers bis hin zur Verwaltung von Prozessen und Diensten ermöglichen WmiObjects eine effiziente und automatisierte Steuerung von Windows-Systemen.
WMI
dient als Schnittstelle zur Kommunikation und Abfrage von Systemkomponenten wie Hardware, Software, Netzwerkdiensten und Prozessen. Es basiert auf dem Web-Based Enterprise Management (WBEM)
Standard und bietet eine standardisierte Möglichkeit, Informationen aus dem Betriebssystem abzurufen, zu verändern und zu überwachen.
Mit WMI
können Skripte und Anwendungen auf wichtige Informationen zugreifen und sogar Systemkonfigurationen ändern, ohne direkt mit der Benutzeroberfläche des Betriebssystems interagieren zu müssen. So können beispielsweise Daten über Prozesse, Systemressourcen wie CPU und RAM, Netzwerkkarten, Festplatten und viele andere Aspekte eines Systems gesammelt werden. Es wird über verschiedene APIs wie die WMI Scripting API
und Tools wie PowerShell
und WBEMTest
zugänglich gemacht.
WmiObjekte und WMI-Klassen
WmiObjekte
sind Instanzen von WMI-Klassen
und stellen die grundlegenden Bausteine für die Interaktion mit Windows-Systemen über WMI
dar. Jede WMI-Klasse
beschreibt einen bestimmten Typ von Systemobjekt, wie z.B. die Festplatte, den Arbeitsspeicher, einen Prozess oder das Betriebssystem selbst. Ein WmiObjekt
repräsentiert dann eine konkrete Instanz dieser Klasse, z.B. einen bestimmten Prozess oder eine bestimmte Festplatte auf einem Computer.
Jede WMI-Klasse
enthält eine Sammlung von Eigenschaften und Methoden, die mit den entsprechenden Systemobjekten verknüpft sind. Diese Eigenschaften können Werte enthalten, die Systeminformationen liefern, wie z.B. die CPU-Auslastung, die Version des Betriebssystems oder der freie Speicherplatz auf einer Festplatte. Methoden wiederum ermöglichen die Interaktion mit den Systemobjekten, z.B. das Starten oder Beenden von Prozessen.
Ein einfaches Beispiel für eine WMI-Klasse
ist die Klasse Win32_OperatingSystem
. Sie beinhaltet mehrere WmiObjekte
, die Informationen über das Betriebssystem eines Computers enthalten, wie z.B. die Version
und die BuildNumber
des Systems. Dies kann hilfreich sein, wenn z.B. im Rahmen einer WMI-Filterung
Gruppenrichtlinien nur auf bestimmte Versionen des Betriebssystems angewendet werden sollen.
PS C:\Windows\system32> Get-WmiObject Win32_OperatingSystem
SystemDirectory : C:\Windows\system32
Organization :
BuildNumber : 19045
RegisteredUser : pronto
SerialNumber : 00331-10000-00001-AA865
Version : 10.0.19045
Ein ähnliches Beispiel mit einer einfachen Abfrage könnte die Klasse Win32_ComputerSystem
sein. Sie zeigt rudimentäre Parameter oder Eigenschaften des Computers an:
PS C:\Windows\system32> Get-WmiObject Win32_ComputerSystem
Domain : PROSYS.intern
Manufacturer : VMware, Inc.
Model : VMware Virtual Platform
Name : 10-PC-1
PrimaryOwnerName : pronto
TotalPhysicalMemory : 8589369344
Eine Liste aller verfügbaren WMI-Objekte
kann mit dem Parameter -List
in der Powershell angezeigt werden, allerdings ist die Liste ohne geeignete Filter sehr lang und unübersichtlich:
PS C:\Windows\system32> Get-WmiObject -List
Ein Beispiel für einen Filter könnte so aussehen:
PS C:\Windows\system32> Get-WmiObject -List | Where-Object { $_.Name -like "Win32*" }
Unter den folgenden Links finden Sie weitere Quellen und Beschreibungen von WMI-Klassen
:
WQL (WMI Query Language)
WQL
(Windows Management Instrumentation Query Language) ist eine SQL
-ähnliche Abfragesprache, die speziell für die Interaktion mit WMI
entwickelt wurde. Sie ermöglicht gezielte Abfragen, um Informationen über verschiedene Systemkomponenten zu erhalten. WQL ist nicht so mächtig wie SQL, da es nicht für relationale Datenbanken, sondern für die Abfrage von Systemobjekten in WMI entwickelt wurde. Es verwendet jedoch viele der gleichen Konzepte wie das Schlüsselwort SELECT
, WHERE
-Klauseln und logische Operatoren.
WQL-Abfragen
sind besonders nützlich, wenn man nach bestimmten WMI-Klassen oder Eigenschaften innerhalb eines Systems suchen möchte, ohne alle Daten auf einmal zu laden. Stattdessen kann man mit WQL die Abfrage verfeinern, um nur die gewünschten Informationen zu erhalten.
Um nur Informationen über die Version des Betriebssystems zu erhalten, aber nicht alle Daten von der Klasse Win32_OperatingSystem zu erhalten, kann eine WQL-Abfrage verwendet werden, um gezielt die Version des Betriebssystems zu erhalten. Mit dem Parameter -Query
kann eine vollständige WQL-Abfrage ausgeführt werden, bei der bestimmte Eigenschaften ausgewählt und Filter angewendet werden können:
PS C:\Windows\system32> (Get-WmiObject -Query "SELECT Version FROM Win32_OperatingSystem").Version
10.0.19045
Das PowerShell-Cmdlet Get-WmiObject
verwendet intern WQL
, um mit WMI zu kommunizieren und Systeminformationen zu erfassen. Bei der Verwendung von Get-WmiObject wird im Hintergrund eine WQL-Abfrage ausgeführt, um die entsprechenden WMI-Daten abzurufen. Mit zusätzlichen WQL-Anweisungen kann die Ausgabe jedoch expliziter gesteuert werden.
Randnotiz
Das gleiche Ergebnis wie zuvor kann jedoch auch ohne WQL-Anweisungen erreicht werden. Mit dem Parameter -Class
wird die Klasse angegeben, aus der alle verfügbaren Eigenschaften und Objekte abgerufen werden sollen. PowerShell führt intern eine SELECT * FROM <Klassenname>
-Abfrage aus, um alle Objekte der Klasse abzurufen. Es ist jedoch sinnvoll, sich mit den WQL-Anweisungen vertraut zu machen, da diese von einigen APIs oder Tools benötigt werden.
PS C:\Windows\system32> (Get-WmiObject -Class Win32_OperatingSystem).Version
10.0.19045
Sicherheitsaspekte
Die Verwendung von WMI (Windows Management Instrumentation) bietet viele Vorteile, aber es gibt auch Sicherheitsaspekte, die bei der Arbeit mit WMI berücksichtigt werden müssen. WMI bietet umfassenden Zugriff auf Systeminformationen und -konfigurationen, daher ist es wichtig sicherzustellen, dass nur autorisierte Benutzer und Prozesse Zugriff auf diese Informationen haben. Eine unsachgemäße Konfiguration oder unsachgemäße Verwendung von WMI kann zu Sicherheitslücken führen, die von Angreifern ausgenutzt werden können.
Berechtigungen und Zugriffskontrollen
WMI bietet eine Reihe von Sicherheitsmechanismen, die es ermöglichen, den Zugriff auf Systeminformationen zu steuern. Die wichtigsten Sicherheitsaspekte, die dabei berücksichtigt werden müssen, sind:
- Benutzerberechtigungen: Nur Benutzer mit den entsprechenden Berechtigungen sollten WMI-Abfragen durchführen können. Standardmäßig müssen Benutzer in der Gruppe
Administratoren
sein, um vollständigen Zugriff auf WMI zu erhalten. Normale Benutzer können in der Regel nur auf einen begrenzten Satz von WMI-Daten zugreifen. - Verwaltung von WMI-Berechtigungen: Administratoren können mit den WMI-Berechtigungsrichtlinien (
wmimgmt.msc
) und über die Windows-Sicherheitsrichtlinien steuern, welcher Benutzer oder welche Gruppe Zugriff auf bestimmte WMI-Ressourcen hat. Mit der Verwaltung von WMI-Berechtigungen können Administrationsrechte speziell für verschiedene Namenräume und Klassen zugewiesen werden. - Zugriffssteuerung über DCOM: WMI verwendet
DCOM
(Distributed Component Object Model), um auf entfernte Computer zuzugreifen. DCOM muss korrekt konfiguriert werden, um sicherzustellen, dass der Fernzugriff auf WMI-Daten sicher ist. Unzureichende DCOM-Sicherheitskonfigurationen können dazu führen, dass Angreifer auf entfernte Systeme zugreifen.
Im Alltag nützlich
Dienste überwachen
Um Informationen über laufende Dienste zu erhalten, kann die Klasse Win32_Service
verwendet werden:
PS C:\Windows\system32> Get-WmiObject -Class Win32_Service | Select-Object DisplayName, Name, State, StartMode | Sort-Object StartMode
DisplayName Name State StartMode
----------- ---- ----- ---------
Windows-Verbindungs-Manager Wcmsvc Running Auto
Lokaler Sitzungs-Manager LSM Running Auto
Arbeitsstationsdienst LanmanWorkstation Running Auto
IP-Hilfsdienst iphlpsvc Running Auto
Server LanmanServer Running Auto
Manager für heruntergeladene Karten MapsBroker Stopped Auto
VMware Tools VMTools Running Auto
Anmeldedienst Netlogon Running Auto
.
.
.