What is SharpDPAPI?
SharpDPAPI is a C# port of DPAPI functionality from Mimikatz that enables the extraction and decryption of Windows Data Protection API (DPAPI) protected data. It operationalizes Benjamin Delpy’s work to fit offensive security workflows, allowing practitioners to decrypt credentials, certificates, and other sensitive data protected by DPAPI.Understanding DPAPI
The Windows Data Protection API (DPAPI) is a cryptographic application programming interface that allows applications to protect sensitive data using encryption keys derived from user credentials or system secrets.User DPAPI
Protects user-specific data using keys derived from user passwords
Machine DPAPI
Protects system-level data using keys derived from machine secrets
Domain Backup Key
Domain controllers maintain backup keys that can decrypt any domain user’s masterkeys
Masterkeys
Intermediate keys that protect actual data encryption keys
DPAPI Architecture
Key Capabilities
- User Data Extraction
- Machine Data Extraction
- Domain Operations
- Utilities
Decrypt User DPAPI Protected Data:
- Credential Manager credentials
- Windows Vault data (IE/Edge saved passwords)
- RDP connection passwords (RDCMan.settings, .rdg files)
- KeePass master keys
- User certificates and private keys
- PowerShell credential objects
Operational Usage
Pre-Domain Compromise
Before obtaining domain administrator privileges, SharpDPAPI can leverage:Mimikatz DPAPI Masterkeys
Mimikatz DPAPI Masterkeys
Use Mimikatz
sekurlsa::dpapi to extract :SHA1 masterkey mappings from LSASS memory for currently logged-in users.User Credentials
User Credentials
If you have a user’s password, NTLM hash, or DPAPI prekey, use these directly:
Local Elevation
Local Elevation
With local admin rights, use machine triage commands to decrypt system-level DPAPI data:
Post-Domain Compromise
After obtaining domain admin privileges:1
Retrieve Domain Backup Key
2
Decrypt All User Masterkeys
3
Triage All User Data
4
Remote System Triage
Command Categories
User Triage Commands
masterkeys
Decrypt and extract user masterkey files
credentials
Decrypt Windows Credential Manager credentials
vaults
Decrypt Windows Vault data (browser passwords)
rdg
Decrypt RDP connection passwords
keepass
Extract KeePass master key material
certificates
Decrypt user certificate private keys
triage
Run all user DPAPI extraction commands
ps
Decrypt PowerShell credential XML files
Machine Triage Commands
machinemasterkeys
Decrypt machine masterkey files using DPAPI_SYSTEM
machinecredentials
Decrypt system Credential Manager credentials
machinevaults
Decrypt system Vault data
machinetriage
Run all machine DPAPI extraction commands
Utility Commands
backupkey
Retrieve domain DPAPI backup key from DC
blob
Decrypt arbitrary DPAPI blobs
search
Search for DPAPI blobs in registry and files
sccm
Extract SCCM Network Access Account credentials
Common Arguments
- Decryption Methods
- Targeting
- Output Options
Ways to Decrypt DPAPI Data:
| Argument | Description |
|---|---|
/pvk:BASE64... | Use base64-encoded domain backup key |
/pvk:key.pvk | Use domain backup key file |
/password:X | Decrypt using plaintext password |
/ntlm:X | Decrypt using NTLM hash |
/credkey:X | Use DPAPI credkey (SHA1 from Mimikatz) |
/rpc | Decrypt by asking domain controller |
{GUID}:SHA1 ... | Use explicit masterkey mappings |
/mkfile:FILE | Load masterkey mappings from file |
/unprotect | Use CryptUnprotectData() (current user context) |
Typical Workflows
Scenario 1: Domain Admin Compromise
Scenario 1: Domain Admin Compromise
Scenario 2: Local Admin on Workstation
Scenario 2: Local Admin on Workstation
Scenario 3: Compromised User Account
Scenario 3: Compromised User Account
Scenario 4: Offline Analysis
Scenario 4: Offline Analysis
Detection Considerations
Host-Based Detection
Host-Based Detection
- Reading sensitive DPAPI masterkey files
- Accessing LSASS for DPAPI_SYSTEM secret
- Bulk reading of Credential Manager and Vault files
- Token manipulation for SYSTEM elevation
Network Detection
Network Detection
- SMB enumeration of user profiles on remote systems
- MS-BKRP protocol usage for backup key retrieval
- Unusual DC RPC calls (LsaRetrievePrivateData)
Event Log Indicators
Event Log Indicators
- 4656/4663: Access to masterkey files
- 4662: Domain backup key access on DC
- 4624/4672: Privileged logon for remote triage
- 4688: SharpDPAPI.exe process execution
Defensive Measures
Defensive Measures
- Monitor access to
%APPDATA%\Microsoft\Protect\directories - Alert on MS-BKRP backup key retrieval
- Restrict DPAPI_SYSTEM LSA secret access
- Monitor for bulk Credential Manager file access
- Implement conditional access and MFA where possible
Prerequisites
Build Requirements
Build Requirements
- Visual Studio 2019 Community Edition or later
- .NET Framework 3.5 (default target)
- Can be retargeted to .NET 4.0 or 4.5
Execution Requirements
Execution Requirements
- Windows operating system
- .NET Framework installed on target
- Appropriate access rights for target data
Privilege Requirements
Privilege Requirements
User Commands:
- Standard user: Can decrypt own data with /unprotect
- Any user: With valid credentials or masterkeys
- Local Administrator: Required for DPAPI_SYSTEM access
- SYSTEM context: For full machine triage
- Domain Admin: For backup key retrieval
- Local Admin: For remote system triage
Technical Background
DPAPI Masterkey Hierarchy
DPAPI Masterkey Hierarchy
DPAPI uses a multi-layer key derivation system:
- User Credentials → Derives User Masterkey
- User Masterkey → Decrypts DPAPI Blob
- DPAPI Blob → Contains Protected Data
CryptUnprotectData vs Manual Decryption
CryptUnprotectData vs Manual Decryption
CryptUnprotectData():
- Windows API that automatically handles decryption
- Only works in the context of the user who encrypted the data
- Doesn’t require elevated privileges
- Used with
/unprotectflag
- Requires masterkeys or backup keys
- Works across user contexts
- Can decrypt other users’ data
- Necessary for remote triage
Additional Resources
DPAPI Attack Guidance
Operational Guidance for Offensive User DPAPI Abuse
Credential Manager Internals
How Credential Manager and Vaults work with DPAPI
GitHub Repository
Official SharpDPAPI repository
Mimikatz Project
Original DPAPI implementation source
Next Steps
Compilation Guide
Build SharpDPAPI from source
User Commands
Start with user DPAPI triage
Machine Commands
Learn system-level DPAPI extraction
Domain Operations
Extract domain backup key
License
SharpDPAPI is licensed under the BSD 3-Clause license.SharpDPAPI is a port of Mimikatz DPAPI functionality. All credit for the original implementation goes to Benjamin Delpy (@gentilkiwi).