关于转储加密

转储加密可用于加密为系统生成的故障转储和实时转储。 使用为每个转储生成的对称加密密钥对转储进行加密。 然后使用受信任的主机管理员指定的公钥(故障转储加密密钥保护程序)对该密钥本身进行加密。 这可确保只有具有匹配私钥的人才能解密,从而访问转储的内容。 此功能在受保护的结构中得到利用。 注意:如果配置了转储加密,则还应禁用 Windows 错误报告。 WER 无法读取加密的故障转储。

配置转储加密

手动配置

若要使用注册表启用转储加密,请在以下注册表下配置以下注册表值 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl

值名称 类型 价值
DumpEncryption已启用 DWORD 1 启用转储加密,0 禁用转储加密
EncryptionCertificates\Certificate.1:PublicKey 二进制 用于加密数据转储的公钥(RSA,2048 位)。 这必须格式化为 BCRYPT_RSAKEY_BLOB
EncryptionCertificates\Certificate.1::指纹 字符串 证书指纹允许在解密故障转储时在本地证书存储中自动查找私钥。

使用脚本进行配置

为了简化配置, 可以使用示例脚本 基于证书中的公钥启用转储加密。

  1. 在受信任的环境中:使用 2048 位 RSA 密钥创建证书并导出公共证书
  2. 在目标主机上:将公共证书导入本地证书存储
  3. 运行示例配置脚本
    .\Set-DumpEncryptionConfiguration.ps1 -Certificate (Cert:\CurrentUser\My\093568AB328DF385544FAFD57EE53D73EFAAF519) -Force
    

解密加密转储

若要解密现有的加密转储文件,需要下载并安装适用于 Windows 的调试工具。 此工具集包含 KernelDumpDecrypt.exe 可用于解密加密转储文件。 如果当前用户的证书存储中存在包含私钥的证书,则可以通过调用来解密转储文件

    KernelDumpDecrypt.exe memory.dmp memory_decr.dmp

解密后,WinDbg 等工具可以打开解密的转储文件。

排查转储加密问题

如果在系统上启用了转储加密,但没有生成转储,请检查系统的 System 事件日志中的 Kernel-IO 事件 1207。 无法初始化转储加密时,将创建此事件并禁用转储。

详细错误消息 缓解步骤
缺少公钥或指纹注册表 检查这两个注册表值是否都存在于预期位置
公钥无效 确保存储在 PublicKey 注册表值中的公钥存储为 BCRYPT_RSAKEY_BLOB
不支持的公钥大小 目前仅支持 2048 位 RSA 密钥。 配置符合此要求的密钥

另请检查GuardedHost中的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\ForceDumpsDisabled值是否设置为 0 以外的值。 这会完全禁用故障转储。 如果是这种情况,请将其设置为 0。