browserforensics
Zurück zu allen Artikeln

Offline Windows DPAPI: den os_crypt-Schlüssel entkapseln

2026-06-17 · 3 min

Chromiums Cookie-Schlüssel ist ein DPAPI-Blob: ein AES-256-Schlüssel, verschlüsselt unter den Windows-Anmeldedaten des Benutzers. Der naive Weg, ihn zu entkapseln, besteht darin, CryptUnprotectData aufzurufen, während man als dieser Benutzer angemeldet ist. Auf einem erfassten Image haben Sie diesen Luxus nicht — aber DPAPI ist offline vollständig umkehrbar, wenn Sie die richtigen Eingaben haben. Hier ist die gesamte Kette.

Womit DPAPI schützt

DPAPI verschlüsselt Ihre Daten nie direkt mit Ihrem Passwort. Es verwendet einen Masterkey — ein 64-Byte-Geheimnis, das selbst verschlüsselt gespeichert ist in:

%APPDATA%\Microsoft\Protect\<SID>\<GUID>

Eine Datei pro Masterkey, benannt nach GUID; der Ordner ist nach der SID des Benutzers benannt. Ein DPAPI-Blob notiert in seinem Header die GUID des Masterkeys, der ihn versiegelt hat — das Blob verrät Ihnen also, welche Masterkey-Datei Sie benötigen.

Um ein Blob zu entschlüsseln, benötigen Sie daher drei Dinge auf der Platte plus ein Geheimnis:

  1. das Blob (hier Local States encrypted_key),
  2. die Masterkey-Datei für die GUID, die das Blob nennt,
  3. die SID des Benutzers (der Name des \Protect\-Ordners),
  4. den NT-Hash oder das Passwort des Benutzers.

Schritt 1 — den Masterkey entschlüsseln

Die Masterkey-Datei ist mit einem Schlüssel verschlüsselt, der aus dem Benutzergeheimnis und der SID abgeleitet wird. impackets deriveKeysFromUserkey ist die Referenz:

preKey = HMAC-SHA1( NT_hash, UTF16LE(sid + "\0") )

(Aus einem Passwort heraus verwendet das Äquivalent stattdessen SHA1(password) und MD4(password) — und MD4(password) ist der NT-Hash, weshalb der Hash allein genügt.) Dieser preKey speist dann Microsofts Masterkey-Ableitung, die kein standardmäßiges PBKDF2 ist — sie XOR-akkumuliert PRF(P, derived) statt PRF(P, U_prev). Macht man diese Schleife falsch, ist alles Nachgelagerte Müll.

Die abgeleiteten Bytes teilen sich in einen AES-256-Schlüssel und einen IV auf, entschlüsseln den Masterkey-Body per AES-CBC, und — entscheidend — das Ergebnis trägt einen HMAC, den Sie verifizieren. Diese Selbstprüfung macht Offline-DPAPI vertrauenswürdig: Eine falsche SID oder ein falscher Hash lässt den HMAC scheitern, sodass ein erfolgreicher Entschlüsselungsvorgang nachweislich korrekt ist. Es gibt keinen „sieht plausibel aus"-Fehlermodus.

Moderne Windows-10/11-Masterkeys verwenden AES-256 mit einem HMAC-SHA1- oder HMAC-SHA512-PRF. Ältere verwendeten 3DES; dieser Pfad ist selten und für einen Cookie-Schlüssel nicht portierungswert.

Schritt 2 — das Blob entschlüsseln

Mit dem 64-Byte-Masterkey in der Hand entschlüsselt sich das encrypted_key-Blob nach eigenen Regeln:

keyHash    = SHA1(masterkey)
sessionKey = HMAC-SHA512(keyHash, blob.salt)
plaintext  = AES-256-CBC-decrypt(blob.data, key = sessionKey[:32], iv = 0)

Entfernen Sie das PKCS#7-Padding, und Sie haben den 32-Byte-AES-Schlüssel — denselben Schlüssel, der jeden v10-Cookie-Wert entschlüsselt im Profil. Chrome ruft CryptProtectData ohne Entropie auf, es gibt also kein zusätzliches Geheimnis bereitzustellen.

Woher der NT-Hash kommt

Die Kette benötigt den NT-Hash (oder das Passwort) des Benutzers. Auf einem Datenträger-Image gewinnen Sie ihn genauso wie bei jeder anderen Credential-Arbeit: aus dem SAM-Hive, entschlüsselt mit dem Bootkey aus SYSTEM. Genau das produziert ein Tool im secretsdump-Stil. Die praktische Paarung lautet also:

  • SYSTEM + SAM → NT-Hash des Benutzers,
  • Local State + Masterkey-Datei + SID + dieser NT-Hash → Chrome-AES-Schlüssel,
  • AES-Schlüssel + Cookies → Klartext.

Bei einem Domänenkonto, dessen Passwort Sie nicht haben, funktioniert das Klartext-Passwort des Benutzers (falls bekannt) direkt; andernfalls ist der Masterkey möglicherweise über den Domain-Backup-Key wiederherstellbar — hier nicht im Umfang.

Eine Anmerkung zu app-bound (v20) Schlüsseln

Alles oben Genannte entkapselt den klassischen v10-encrypted_key. Der v20-app_bound_encrypted_key fügt eine System-DPAPI-Schicht hinzu (wiederherstellbar aus dem Maschinenschlüssel im SECURITY-Hive) plus einen app-bound Dienstschritt, der keine reine Offline-Kryptografie ist. Behandeln Sie v20 als teilweise offline, bis das Tooling aufgeholt hat.

Es ohne eine Windows-Maschine erledigen

Nichts davon benötigt die Originalmaschine — es sind HMAC, SHA, AES-CBC und eine schrullige KDF. Genau deshalb kann es vollständig in einem Browser-Tab laufen, ohne dass jemals ein Passwort oder Schlüssel die Seite verlässt.

Weiterführende Lektüre