关于转储加密

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

配置转储加密

手动配置

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

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

使用脚本进行配置

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

  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 密钥。 配置与此要求匹配的密钥

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