带有Windows DPAPIencryption密钥pipe理的BitLocker

我们需要对可从Hyper-V虚拟机内访问的iSCSI LUN执行静态encryption

我们已经在使用Windows Server 2012的Hyper-V虚拟服务器上实施了一个使用BitLocker的工作解决scheme,该服务器可以通过iSCSI访问我们的SAN上的LUN。 我们可以通过使用本文定义的“软盘密钥存储”破解程序成功完成此操作。 但是,这个方法对我来说似乎是“hokey”。

在我的持续研究中,我发现亚马逊公司的IT团队发布了一个WHITEPAPER ,在没有“软盘破解”的情况下,我们可以用更优雅的解决scheme精确地描述我正在寻找的东西。 在本白皮书的第7页,他们声明他们实施了Windows DPAPIencryption密钥pipe理,以安全地pipe理他们的BitLocker密钥。 这正是我期望做的,但他们表示,他们必须写一个脚本来做到这一点,但他们不提供脚本,甚至没有提供如何创build一个脚本。

有没有人有关于如何创build一个“脚本与服务和受服务器的机器帐户DPAPI密钥保护的密钥存储区文件结合使用” (如在白皮书中所述)以pipe理和自动解锁BitLocker卷的详细信息? 任何意见表示赞赏。

—编辑1 —

基于埃文的回应,下面是我所知道的,但我仍然坚持。

我假定使用PsExec并运行以下命令,PowerShell在System帐户下运行,并且将像Evan所说的那样“encryptionstringw /机器帐户的密码”。 它是否正确?

PsExec.exe -i -s Powershell.exe 

然后从PS内部(使用这个post作为参考),我运行这个命令来生成SecureString密码:

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

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

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

但是,如果我只是将encryption的密码作为文件存储在硬盘上,那么对密码进行encryption和解密有什么意义呢? 难道这不会像以纯文本forms存储密码那样不安全(使用下面的命令而不需要创build安全string文件)?

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

你还有什么办法呢? 我在哪里可以存储SecureString密钥,以便只有系统帐户可以访问它?

它看起来像所有的亚马逊正在做的是存储在DPAPI的SYSTEM上下文中的Bitlocker密钥。 虽然这比在TPM中存储密钥要安全得多(因为如果TPM没有暴露给虚拟机,则明文密钥可以通过作为SYSTEM运行的任何服务与存储在不能恢复的TPM中的密钥来获取)这可能是你唯一的select。

要完成类似于他们所描述的事情,我可能会使用ConvertFrom-SecureString和免费的ConvertTo-SecureString PowerShell API。 根据Microsoft文档,如果没有指定静态键,则ConvertFrom-SecureString cmdlet将使用DPAPI。 在SYSTEM上下文中运行脚本,DPAPI将把你的stringencryption到机器帐号的密码中。

从这一点来说,使用manage-bde工具使用检索到的密码来解锁驱动器是一个问题(例如, manage-bde -unlock x: -password