带有 Windows DPAPI 加密密钥管理的 BitLocker

带有 Windows DPAPI 加密密钥管理的 BitLocker

我们需要对可从 Hyper-V 虚拟机内部访问的 iSCSI LUN 强制实施静态加密。

我们已经使用 BitLocker 实施了一个可行的解决方案,在 Hyper-V 虚拟服务器上使用 Windows Server 2012,该服务器具有对我们 SAN 上的 LUN 的 iSCSI 访问权限。我们能够通过使用“软盘密钥存储”黑客成功做到这一点,如这个帖子。然而,这种方法在我看来似乎有些“不靠谱”。

在我继续研究中,我发现亚马逊企业 IT 团队发布了一份白皮书正是我所寻找的更优雅的解决方案,而不是“软盘黑客”。在白皮书的第 7 页,他们表示他们实现了Windows DPAPI 加密密钥管理安全地管理他们的 BitLocker 密钥。这正是我想要做的,但他们说他们必须编写一个脚本来执行此操作,但他们没有提供脚本,甚至没有提供任何有关如何创建脚本的指示。

有谁知道如何创建“与受服务器的机器帐户 DPAPI 密钥保护的服务和密钥库文件结合使用的脚本”(正如白皮书中所述)如何管理和自动解锁 BitLocker 卷?任何建议都值得赞赏。

--- 编辑 1 ---

根据下面 Evan 的回复,我明白了以下问题,但我仍然遇到困难。

我假设使用执行程序并运行以下命令,PowerShell 在系统帐户下运行,并且它将“使用机器帐户的密码加密字符串”,正如 Evan 所述。这是正确的吗?

PsExec.exe -i -s Powershell.exe

然后在 PS 中(使用这个帖子作为参考)我运行此命令来生成 SecureString 密码:

ConvertTo-SecureString -String "MyBitLockerPassword" -AsPlainText –Force | ConvertFrom-SecureString | Out-File C:\securestring.txt

这样我就得到了一个文件,其中包含格式为“01000000d08c…”的安全字符串(总共 524 个字符)。然后,我现在可以创建一个在启动时运行的计划任务,使用以下内容加载密码(作为安全字符串)并将其传递给解锁BitLocker命令:

$SecureBitLockerPassword = Get-Content C:\securestring.txt | ConvertTo-SecureString
Unlock-BitLocker -MountPoint "E:" -Password $ SecureBitLockerPassword

但是,如果我只是将加密的密码作为文件存储在硬盘上,那么加密和解密密码有什么意义呢? 这难道不和以纯文本形式存储密码并使用以下内容一样不安全吗(无需创建安全字符串文件)?

$SecureString = ConvertTo-SecureString " MyBitLockerPassword " -AsPlainText –Force
Unlock-BitLocker -MountPoint "E:" -Password $SecureString

您还能用什么其他方法解决这个问题?我可以在哪里存储 SecureString 密钥,以便只有系统帐户才能访问它?

答案1

看起来亚马逊所做的只是将 Bitlocker 密钥存储在 SYSTEM 上下文中的 DPAPI 中。虽然这比将密钥存储在 TPM 中要不安全得多(因为纯文本密钥可以被以 SYSTEM 身份运行的任何服务检索,而存储在 TPM 中的密钥无法恢复),但如果 TPM 未暴露给虚拟机,这可能是您唯一的选择。

为了完成与他们描述类似的事情,我可能会使用ConvertFrom-SecureString和免费ConvertTo-SecureStringPowerShell API。根据 Microsoft 文档,ConvertFrom-SecureString如果未指定静态密钥,则 cmdlet 将使用 DPAPI。在 SYSTEM 上下文中运行脚本,DPAPI 将使用机器帐户的密码加密您的字符串。

从那时起,就可以使用该manage-bde工具使用检索到的密码解锁驱动器(例如manage-bde -unlock x: -password

相关内容