Vorrei condividere con gli utenti del forum questa esperienza maturata nel tentativo di recupero delle password salvate nel browser chrome di un Cliente (client joinato in AD) a seguito dell’impossibilità di avvio del sistema operativo.
Tale richiesta ha richiesto non poco tempo da parte mia visto che non avevo esperienza in tal senso: per questo ho voluto condividere gli step necessari per risolvere la problematica.
Su os Microsoft la gestione del password manager integrato in chrome passa attraverso le “Windows Data Protection API”.
Per evitare di entrare nei tecnicismi e crare un post enorme segnalo un’ottima risorsa online che spiega molto bene il funzionamento della API: https://www.exploit-db.com/docs/48589.
Entrando nel merito della procedura, macroscopicamente dobbiamo eseguire i seguenti step:
- recupero della master key dalla macchina target
- recupero del db dalla macchina target
- recupero della backup key da un domain controller
- decifratura della master key del target
- craft di una nuova master key associata ad altro utente su altro host
Per quanto riguarda il primo punto, la chiave si trova in “C:\Users<TARGETUSER>\AppData\Roaming\Microsoft\Protect<SSID><GUID>” e si può recuperare (ad esempio da console di ripristino) con un xcopy su dispositivo esterno (xcopy /h /s /e C:\Users\<TARGETUSER>\AppData\Roaming\Microsoft\Protect\<SSID>\<GUID> .
)
I file di chrome necessari sono invece: “C:\Users<TARGETUSER>\AppData\Local\Google\Chrome\User Data\Default\Login Data” (DB delle password, sqlite) e “C:\Users<TARGETUSER>\AppData\Local\Google\Chrome\User Data\Local State” (contiene la encrypted key)
Per il recupero della backup key dal domain controller, che permette di decifrare ogni key degli utenti AD(conservare / cancellare con cura!), ho optato per l’utilizzo dei moduli DSInternals, dal momento che funzionano anche sulle implementazioni AD Samba (mio caso). A titolo informativo i comandi utilizzati sono i seguenti:
Install-Module DSInternals -RequiredVersion 4.3
Import-Module DSInternals
Get-ADReplBackupKey -Domain domain.tld -Server dc01.domain.tld | Save-DPAPIBlob -DirectoryPath .\keys
In questo modo otteniamo, nella cartella keys, il file della backup private key (.pvk)
Decifriamo la chiave con mimikatz, su altro host:
dpapi::masterkey /in:<GUID> /pvk:"keys\ntds_<...>.pvk"
# key : f7<...>1e
e creiamo, sempre con mimikatz, una nuova master key su tale host, legata all’utente locale:
dpapi::create /guid:{<GUID>} /key:f7<...>1e /password:<LOCALUSERPASSWORD> /protected
copiandola, successivamente, nella directory corretta:
xcopy /H <GUID> C:\Users\<LOCALUSER>\AppData\Roaming\Microsoft\Protect\<LOCALSSID>\
A questo punto abbiamo tutti gli elementi per decifrare qualunque segreto DPAPI dell’utente, comprese le password di chrome (e i cookies). Per le password è sufficiente copiare i due files prelevati al punto 2 nelle corrette directory dell’host e aprire chrome!
Lesson learned: non fidarsi troppo del DPAPI, specialmente su sistemi in dominio; massimizzare la sicurezza dei domain controller (compresi i loro backup!); privilegiare l’utilizzo di password manager che richiedano l’inserimento manuale della master key in fase di autofill.