Active Directory 域控制器上的 DPAPI 备份密钥

Active Directory 数据库包含一组称为 DPAPI 备份密钥的对象。 这些对象包括:

  • BCKUPKEY_P机密
  • BCKUPKEY_PREFERRED机密
  • BCKUPKEY_guid1
  • BCKUPKEY_guid2

这些对象是架构类“secret”的一部分,它们存在于域分区中的“CN=System,DC=contoso,DC=com”容器中。

通常,域用户使用从自己的密码派生的密钥来加密受 DPAPI 保护的数据。 但是,如果用户忘记了密码,或者从另一台设备管理重置或重置其密码,则不能再使用从用户的新密码派生的新密钥解密以前加密的数据。

发生这种情况时,仍可使用存储在 Active Directory 域控制器上的备份密钥解密数据。 然后,可以使用用户的新密码派生密钥重新加密它们。 这意味着,拥有域 DPAPI 备份密钥的任何人都可以为任何域用户解密 DPAPI 加密的数据,即使在用户的密码发生更改之后也是如此。

在初始创建域期间,Active Directory 域控制器上的 DPAPI 备份密钥仅随机生成一次。

由于这些密钥的敏感性质,必须保护对这些密钥的访问,并将其视为整个 Active Directory 域中最机密的信息片段之一。 默认情况下,域管理员只能访问这些密钥。

目前没有官方支持的方法在域控制器上更改或轮换这些 DPAPI 备份密钥。 根据文档 MS-BKRP,第三方能够开发应用程序或脚本,以创建新的 DPAPI 备份密钥并将新密钥设置为域的首选密钥。 但是,Microsoft 不支持这些第三方解决方案。

如果域的 DPAPI 备份密钥泄露,建议创建一个新域并将用户迁移到该新域。 如果恶意参与者能够获取对 DPAPI 备份密钥的访问权限,则可能是他们已获取域管理员级别的访问权限,并对其资源具有完全访问权限。 攻击者还可以使用他们现在拥有的访问权限级别在域中安装其他后门系统,因此建议迁移到新域。

Active Directory 管理最佳做法是针对这种情况的防御措施。 向用户授予域访问权限时,请提供用户所需的最低访问权限级别。 保护 Active Directory 备份与保护域控制器本身的警惕性同样重要。

另请参阅

CNG DPAPI

MS-BKRP:BackupKey 远程协议文档