Post-Image

Kennwörter von Diensten trotz Credential Guard auslesen

Einleitung

Mit Windows 10 wurden mehrere Sicherheitsfeatures von Microsoft eingeführt, darunter auch der sogenannte “Credential Guard”, der davor schützen soll, dass Credentials wie Passwörter von Domänen-Accounts mit Tools wie Mimikatz ausgelesen werden können.

Funktionsweise

Während vorherige Windowsversionen die Credentials der Nutzeraccounts im lokalen RAM gespeichert hatten, erstellt Credential Guard einen virtuellen Container, auf den das Betriebssystem selbst nicht direkt zugreifen kann. Für die Virtualisierung wird der mitgelieferte Hyper-V verwendet.

Wie Credentials bisher kompromittiert wurden

Konnte ein Hacker Zugriff auf ein System erlangen, war es einfach, die nicht weiter geschützten Credentials abzugreifen. Laterale Bewegungen innerhalb einer Domäne bis hin zum Erlangen des Passworts des Domänenadministrators, war damit relativ einfach.

Credential Guard soll diese Schwachstelle nun beheben und den oben beschriebenen Angriffsweg - wenn möglich - sogar ganz unterbinden.

Und nun?

Credential Guard schützt zwar die Credentials von angemeldeten Benutzer, lässt aber zwei kritische und häufig verwendete Anwendungen von Windows aus. Nämlich geplante Tasks und Dienste.

Credentials eines Dienstes auslesen

Häufig werden eigene oder Drittanbieter-Dienste im Kontext eines Benutzers ausgeführt. Im folgenden Beispiel wird einfach der Geolocation Service im Kontext eines fiktiven Benutzers names user2 ausgeführt.

Dienste

Wie speichert Windows Credentials von Diensten?

Erstaunlicherweise wird trotz eingeschaltetem Credential Guard das Passwort und der Benutzername für den Geolocation Dienst nicht in dem oben erwähnten Container, sondern in der Registry abgelegt. Die Credentials finden sich also unter HKLM\SECURITY\Policy\Secrets\. Dort werden normalerweise mehrere Registry-Keys zu finden sein.

Der Geolocation Dienst hat den internen Namen lfsvc, im Key HKLM\SECURITY\Policy\Secrets\_SC_lfscv steht also der Benutzer und das Kennwort, welches wir für den Dienst hinterlegt haben.

SC im Registry Key steht übrigens für Service.

Das Passwort für den Benutzer steht allerdings nicht im Klartext in der Registry, sondern ist verschlüsselt. Damit aber auch andere Applikationen und Windows selbst das Passwort entschlüsseln kann, ist das Passwort für die Entschlüsselung ebenfalls unter HKLM\SECURITY\Policy\Secrets\ zu finden :D

Auslesen mit Mimikatz

Mimikatz bietet die Entschlüsselung dieser Credentials mit dem oben genannten Key als nettes Modul an. Das Modul nennt sich lsadump::secrets und die Abfrage für unseren Dienst sieht folgendermaßen aus:

lsadump

Wenn man dann nach unseren Dienst sucht, findet sich schnell dieser Eintrag:

lsadump

Das Passwort ist also ausgelesen und laterale Bewegungen zumindest fast so einfach wie davor, da sich im Unternehmenskontext häufig Dienste finden, die sogar im Kontext von hochprivilegierten Accounts laufen.

IT-Security, Windows, Credential-Guard, Mimikatz