通过Dpapi获取Windows身份凭证
字数 1762 2025-08-26 22:11:56

Windows DPAPI 身份凭证提取技术详解

1. DPAPI 概述

Data Protection Application Programming Interface (DPAPI) 是 Windows 2000 及以后版本提供的数据保护接口,主要用于敏感信息的加密和解密。

核心功能

  • 加密函数: CryptProtectData
  • 解密函数: CryptUnprotectData

应用范围

DPAPI 保护的数据包括但不限于:

  • 浏览器自动填充凭证(IE、Chrome)
  • PowerShell 加密函数
  • 邮件客户端密码(Outlook、Windows Mail)
  • FTP 管理账户密码
  • 共享资源文件夹访问密码
  • 无线网络账户密钥和密码
  • 远程桌面身份凭证
  • EFS(加密文件系统)
  • EAP/TLS 和 802.1x 身份凭证
  • 凭据管理器数据
  • 第三方应用数据(Skype、Windows Media、MSN Messenger 等)

2. Master Key 机制

DPAPI 使用对称加密,关键在于获取 Master Key。

Master Key Files

  • 存储路径: %APPDATA%/Microsoft/Protect/%SID%
  • 本质: 随机 64 位字节码经用户密码等信息加密后的密文
  • 解密条件: 需要用户明文密码/NTLM/SHA1 哈希

Preferred 文件

  • 记录当前使用的 Master Key 文件及其过期时间
  • 未加密,可直接修改
  • Master Key 默认每 90 天更新一次

CREDHIST 文件

  • 路径: %APPDATA%/Microsoft/Protect/
  • 内容: 保存用户历史密码(NTLM hash/SHA1 hash)
  • 用途: 确保接口在密码更改后仍能正常工作

3. 获取 Master Key 的方法

3.1 使用用户凭证

  • 工具: Mimikatz
  • 命令: dpapi::masterkey 指定目标用户 Master Key 文件
  • 参数:
    • /password: 输入明文密码
    • /hash: 输入密码哈希

3.2 获取 DPAPI_SYSTEM

  • DPAPI_SYSTEM 作为 Master Key 本地备份文件的密钥
  • 存储位置: LSA secret
  • 获取方法:
    • 内存转储
    • 注册表提取
    • Mimikatz 命令: lsadump::secrets

3.3 从 LSASS 进程转储

  1. 提升权限: privilege::debug
  2. 获取 Master Key: sekurlsa::dpapi
  3. 查看缓存: dpapi::cache

4. 使用 Master Key 解密

4.1 凭据文件解密

  • 凭据存储路径: %APPDATA%/Microsoft/Credentials/
  • 解密步骤:
    1. 使用 dpapi::cred /in:<文件路径> 查看结构体
    2. 获取 guidMasterKey 值(即 Master Key 文件名)
    3. 使用对应 Master Key 解密

4.2 自动化工具

SharpDPAPI

  • 项目地址: https://github.com/GhostPack/SharpDPAPI
  • 功能:
    • 批量解密 credentials/vaults/RDP 凭据文件
    • 与 Mimikatz 集成,自动匹配 Master Key
  • 使用命令:
    • sharpDPAPI -dump: 自动提取并解密
    • sharpDPAPI -allkeys: 使用凭据存储中的所有 DPAPI 密钥

SharpChrome

  • 功能: 解密 Chrome 浏览器数据
  • 命令示例:
    SharpChrome.exe cookies /target:"C:\Users\user\AppData\Local\Google\Chrome\User Data\Default\Cookies" /unprotect
    SharpChrome.exe logins /target:"C:\Users\user\AppData\Local\Google\Chrome\User Data\Default\Login Data" /unprotect
    

SharpWeb

  • 项目地址: https://github.com/djhohnstein/SharpWeb
  • 特点: 更好的输出格式,但不支持 Cookie 导出

5. 防御建议

  1. 限制对 LSASS 进程的访问
  2. 启用 Credential Guard
  3. 定期轮换 Master Key
  4. 监控对 DPAPI 相关文件的异常访问
  5. 限制高权限账户的使用

6. 参考资源

  1. DPAPI 操作指南
  2. Passcape DPAPI 文档
  3. Mimikatz DPAPI 模块文档
  4. 解密 EFS 文件指南
Windows DPAPI 身份凭证提取技术详解 1. DPAPI 概述 Data Protection Application Programming Interface (DPAPI) 是 Windows 2000 及以后版本提供的数据保护接口,主要用于敏感信息的加密和解密。 核心功能 加密函数: CryptProtectData 解密函数: CryptUnprotectData 应用范围 DPAPI 保护的数据包括但不限于: 浏览器自动填充凭证(IE、Chrome) PowerShell 加密函数 邮件客户端密码(Outlook、Windows Mail) FTP 管理账户密码 共享资源文件夹访问密码 无线网络账户密钥和密码 远程桌面身份凭证 EFS(加密文件系统) EAP/TLS 和 802.1x 身份凭证 凭据管理器数据 第三方应用数据(Skype、Windows Media、MSN Messenger 等) 2. Master Key 机制 DPAPI 使用对称加密,关键在于获取 Master Key。 Master Key Files 存储路径: %APPDATA%/Microsoft/Protect/%SID% 本质: 随机 64 位字节码经用户密码等信息加密后的密文 解密条件: 需要用户明文密码/NTLM/SHA1 哈希 Preferred 文件 记录当前使用的 Master Key 文件及其过期时间 未加密,可直接修改 Master Key 默认每 90 天更新一次 CREDHIST 文件 路径: %APPDATA%/Microsoft/Protect/ 内容: 保存用户历史密码(NTLM hash/SHA1 hash) 用途: 确保接口在密码更改后仍能正常工作 3. 获取 Master Key 的方法 3.1 使用用户凭证 工具: Mimikatz 命令: dpapi::masterkey 指定目标用户 Master Key 文件 参数: /password : 输入明文密码 /hash : 输入密码哈希 3.2 获取 DPAPI_ SYSTEM DPAPI_ SYSTEM 作为 Master Key 本地备份文件的密钥 存储位置: LSA secret 获取方法: 内存转储 注册表提取 Mimikatz 命令: lsadump::secrets 3.3 从 LSASS 进程转储 提升权限: privilege::debug 获取 Master Key: sekurlsa::dpapi 查看缓存: dpapi::cache 4. 使用 Master Key 解密 4.1 凭据文件解密 凭据存储路径: %APPDATA%/Microsoft/Credentials/ 解密步骤: 使用 dpapi::cred /in:<文件路径> 查看结构体 获取 guidMasterKey 值(即 Master Key 文件名) 使用对应 Master Key 解密 4.2 自动化工具 SharpDPAPI 项目地址: https://github.com/GhostPack/SharpDPAPI 功能: 批量解密 credentials/vaults/RDP 凭据文件 与 Mimikatz 集成,自动匹配 Master Key 使用命令: sharpDPAPI -dump : 自动提取并解密 sharpDPAPI -allkeys : 使用凭据存储中的所有 DPAPI 密钥 SharpChrome 功能: 解密 Chrome 浏览器数据 命令示例: SharpWeb 项目地址: https://github.com/djhohnstein/SharpWeb 特点: 更好的输出格式,但不支持 Cookie 导出 5. 防御建议 限制对 LSASS 进程的访问 启用 Credential Guard 定期轮换 Master Key 监控对 DPAPI 相关文件的异常访问 限制高权限账户的使用 6. 参考资源 DPAPI 操作指南 Passcape DPAPI 文档 Mimikatz DPAPI 模块文档 解密 EFS 文件指南