© best_vector/Shutterstock.com
Was Admins brauchen, können Angreifer missbrauchen

WMI in Angreiferhand


Die Windows Management Instrumentation (WMI) hilft Administratoren sowohl bei der lokalen Administration als auch bei der Fernwartung ihrer Windows-Rechner. Die Cyberkriminellen können die gleichen Funktionen für Angriffe missbrauchen. Wenn man ihnen keinen Riegel vorschiebt.

Die WMI kann von Cyberkriminellen vielfältig missbraucht werden. Beispielsweise, um das System zu erkunden, Antivirussoftware und Virtualisierung zu erkennen, Code auszuführen, sich im lokalen Netz zu bewegen, Daten auszuspähen oder ihren Zugriff dauerhaft zu sichern. Ein Beispiel für einen Angriff „in the wild“ ist Stuxnet, der u. a. eine 0-Day-Schwachstelle im Drucker-Spooler ausnutzte. Die erlaubte das Schreiben beliebiger Dateien, und die Angreifer nutzten das aus, um eine WMI-Datei auf dem System zu speichern. Darüber konnten sie dann Code mit SYSTEM-Rechten ausführen [1].

Matthew Graeber von FireEye hat auf der Black Hat USA 2015 („Abusing Windows Management Instrumentation (WMI) to Build a Persistent, Asynchronous, and Fileless Backdoor“ [2]) und gemeinsam mit seinen Kollegen Willi Ballenthin und Claudiu Teodorescu auf der DEF CON 23 („WhyMI so Sexy? WMI Attacks, Real-Time Defense, and Advanced Forensic Analysis“ [3]) Angriffe auf die WMI vorgestellt und beschrieben, wie man sie verhindern kann. Zusätzlich wurde von FireEye ein White­paper veröffentlicht [4].

WMI im Überblick

WMI ist Microsofts Implementierung von zwei Standards der Distributed Management Task Force (DMTF): Web-Based Enterprise Management (WBEM [5]) und Common Information Model (CIM [6]). Damit ist es möglich, Informationen über verwaltete Komponenten in einem Unternehmen zu sammeln und zu übertragen. Im Fall von WMI können das z. B. laufende Prozesse, Registry Keys, installierte Dienste, Dateiinformationen usw. sein. Außerdem sind die Ausführung von Befehlen und die Reaktion auf Events möglich.

Die WMI-Architektur

Vereinfacht stellt sich Microsofts Implementierung folgendermaßen dar (Abb. 1): Die verwalteten Komponenten werden als WMI-Objekte repräsentiert. Es gibt Klasseninstanzen, die stark strukturiert Betriebssystemdaten repräsentieren, wie z. B. Win32_Process, Win32_Service, AntiVirusProduct, Win32_StartupCommand etc. Für die Verarbeitung von Daten und die Ausführung von WMI-Methoden gibt es verschiedene Möglichkeiten, außer fertigen Programmen auch z. B. PowerShell oder Windows Scripting Host. Für die Abfrage von Daten wie WMI-Objekten wird eine SQL-ähnliche Sprache, die WMI Query Language (WQL), verwendet. Sie erlaubt eine sehr genaue Kontrolle darüber, welche WMI-Objekte an den Benutzer zurückgegeben werden.

eilers-wmi-angriffe-1.tif_fmt1.jpgAbb. 1: Die WMI-Architektur im Überblick (nach Figure 1 im Whitepaper zu [2])

Wenn ein Benutzer ein spezifisches WMI-Objekt anfordert, muss der WMI-Service (Winmgmt) wissen, mit welchen Daten es gefüllt werden muss. Dazu werden die WMI-Provider verwendet, COM-basierte DLLs, die eine assoziierte GUID enthalten, die in der Registry registriert ist. Die WMI-Provider fragen z. B. alle laufenden Prozesse ab, zählen Registry Keys auf usw.

Wenn der WMI-Service WMI-Objekte befüllt, gibt es zwei Typen von Klasseninstanzen: dynamische und persistente Objekte. Dynamische Objekte werden „on the fly“ erzeugt, wenn eine spezifische Query ausgeführt wird. Win32_Process-Objekte werden beispielsweise auf diese Weise erzeugt. Persistente Objekte werden im CIM Repository gespeichert, das sich im Defaultfall unter %SystemRoot%\System32\wbem\Repository\OB­JECTS.DATA befindet.

Die Struktur bzw. das Schema der meisten WMI-Objekte wird in Managed-Object-Format-(MOF-)Dateien gespeichert. MOF-Dateien verwenden eine C++-ähnliche Syntax und stellen das Schema für ein WMI-Objekt bereit. Während WMI-Provider die Rohdaten erzeugen, liefern die MOF-Dateien das Schema, mit dem die erzeugten Daten formatiert werden. WMI-Objektdefinitionen können aber auch ohne MOF-Datei erzeugt werden, und man kann sie auch mit etwas .NET-Code direkt in das CIM Repository einfügen. Den Einsatz von MOF-Dateien haben Matthew Grae­ber und seine Kollegen auf der DEF CON ausführlich beschrieben [3].

Einige WMI-Objekte enthalten ausführbare Methoden. Eine von Angreifern oft für die Fortbewegung im Netz genutzte Methode ist die statische Methode Create in der Klasse Win32_Process. Außerdem stellt WMI ein Eventsystem bereit, bei dem die Benutzer Event Handler zur Reaktion auf das Erzeugen, Ändern oder Löschen beliebiger WMI-Objektinstanzen registrieren können.

WMI-Klassen und -Namensräume

Informationen des Betriebssystems werden in Form von WMI-Objekten repräsentiert. Ein WMI-Objekt ist eine Instanz einer Klasse. Viele der oft genutzten WMI-Klassen werden im MSDN ausführlich beschrieben, wie z. B. Win32_Process [7]. Es gibt aber auch viele undokumentierte WMI-Klassen. Zum Glück ist WMI „dis­co­ver­able“, und alle WMI-Klassen können mit der WQL abgefragt werden. Die WMI-Klassen sind hierarchisch in Namensräumen geordnet. Alle Namensräume werden vom ROOT-Namensraum abgeleitet, und wenn bei der Abfrage von Objekten kein Namensraum angegeben wird, verwendet Microsoft ROOT\CIMV2 als Defaultnamensraum. Alle WMI-Einstellungen inklusive des Defaultnamensraums befinden sich im Registry Key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM.

WMI-Queries

Für die Abfrage von WMI-Objektinstanzen, -Klassen und -Namensräumen wird, wie schon erwähnt, die WQL verwendet [8]. Deren Abfragen lassen sich in drei Kategorien einteilen:

Instanzabfragen (Instance Queries) werden für die Suche nach WMI-Objektinstanzen verwendet. Sie sind nach dem Muster

SELECT [Class property name|*] FROM [CLASS NAME] <WHERE [CONSTRAINT]>

aufgebaut. Zur Suche nach allen laufenden Prozessen, bei denen die Programmdatei den String chrome enthält, würde folgende Abfrage verwendet:

SELECT * FROM Win32_Process WHERE Name LIKE "%chrome%"

Eventabfragen (Event queries) sind äquivalent zur Registrierung eines Events auf das Erzeugen, Ändern oder Löschen einer WMI-Objektinstanz. Abhängig vom Event Type (intrinsisch oder extrinsisch) haben sie folgenden Aufbau:

SELECT [Class property name|*] FROM [INTRINSIC CLASS NAME] WITHIN [POLLING INTERVAL] <WHERE [CONSTR...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang