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.
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:
Wenn man dann nach unseren Dienst sucht, findet sich schnell dieser Eintrag:
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