Windows Auto-Login Passwort auslesen
« | 13 Nov 2021 | »Da schaue ich in eine lange nicht genutzte Mailbox und finde dort die Quellen eines Windows Programms, das ich vor über 10 Jahren schnell schreiben musste. Es sollte folgendes Problem lösen:
Das Auslesen des Auto-Login Default-Passworts eines angemeldeten Accounts.
Auto-Login, aber Passwort vergessen
Wozu sollte man ein Passwort auslesen wollen, wenn der Account bereits angemeldet ist?
Tja, man stelle sich vor, man hätte ein Passwort auf Industrie-Terminals
gesetzt, das beim Start zum automatischen Login benutzt wird.
Dieses Passwort wurde vergessen, da es im Windows Deployment-Image integriert
war.
Und dann muss man plötzlich versuchen, diese Terminals “remote” zu
administrieren, wofür man das Passwort wieder braucht.
Zum Glück steht noch ein verstaubtes Demo-Gerät mit automatischem Login im
firmen-eigenen Museum. Vielleicht kann man das Passwort dort irgendwie
extrahieren.
Dieses Passwort wurde leider nicht einfach in der Registry unter
SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon
in DefaultPassword
abgelegt, sondern über System-Tools wie netplwiz
intern gesetzt.
Wo wird also ein solches “verschlüsseltes” Passwort gespeichert?
Lösung: LsaRetrievePrivateData
Windows kann Schlüssel-Wert Paare verdeckt speichern und wenn der automatische
Login auf einem System aktiviert wird, dann wird das Passwort im Feld
DefaultPassword
gespeichert.
Um es wieder auszulesen nutzt man folgenden Weg:
LsaOpenPolicy(NULL, &attribs, POLICY_ALL_ACCESS, &lsa_handle)
öffnet einLSA_HANDLE
Objekt- Man erzeugt eine
LSA_UNICODE_STRING
Struktur und lässt es auf einenwchar_t
Datenpuffer verweisen, in demDefaultPassword
enthalten ist. - Und dann ruft man
LsaRetrievePrivateData(lsa_handle, &key, &ptr_value)
auf, welchem die String-Struktur alskey
übergeben wird. - Der zurückgegebene Pointer (
ptr_value
) hält eine neue Unicode-String Datenstruktur, wo das entschlüsselte Passwort enthalten sein sollte, oder eben nicht, wenn keines existiert.
Der Aufruf muss unter Administrator-Rechten erfolgen, ansonsten wird
der Zugriff verwehrt.
(Zum Glück hatte der Account damals auch Admin-Rechte.)
Der Beispiel-Quellcode ist nun auch im BLOG Classroom verfügbar.
Fazit
Wenn ich es richtig verstehe, wurden klassische Tools wie
netplwiz
bzw. der Aufruf control userpasswords2
auf Windows 10
deaktiviert, mit dem man zur UI kam, wo man den automatischen Login
aktivieren und das zu verschlüsselnde Passwort eintippen konnte.
Das Codeschnipsel ist also kein “Sicherheitsbruch” mehr und er hatte (wenn ich mich nicht irre) auch nur im Nicht-Domänen-Betrieb funktioniert.
Die alten Windows XP und Windows 7 Terminals, an denen ich damals arbeitete,
existieren (hoffentlich) nicht mehr, aber ich möchte diesen Aufruf trotzdem
dokumentieren.
Wenn also jemand ein Passwort zu einem Autologin braucht, das nicht im
Klartext in der Registry steht, dann hat man zumindest einen Ansatz.