Amazon-Ec2

具有 Windows DPAPI 加密密鑰管理的 BitLocker

  • July 15, 2013

我們需要在可從 Hyper-V 虛擬機中訪問的 iSCSI LUN 上強制執行靜態加密。

我們已經使用 BitLocker 實施了一個有效的解決方案,在 Hyper-V 虛擬伺服器上使用 Windows Server 2012,該虛擬伺服器具有對我們 SAN 上的 LUN 的 iSCSI 訪問權限。**通過使用THIS POST**中定義的“磁片密鑰儲存”hack,我們能夠成功地做到這一點。但是,這種方法對我來說似乎很“狡猾”。

在我的持續研究中,我發現亞馬遜企業 IT 團隊發布了一份**白皮書,其中準確地概述了我在更優雅的解決方案中尋找的內容,而沒有“磁片黑客”。在本白皮書的第 7 頁,他們聲明他們實施了Windows DPAPI 加密密鑰管理**來安全地管理他們的 BitLocker 密鑰。這正是我想要做的,但他們說他們必須編寫一個腳本來做到這一點,但他們沒有提供腳本,甚至沒有提供任何關於如何創建腳本的指示。

有沒有人詳細說明如何創建*“腳本與服務和受伺服器電腦帳戶 DPAPI 密鑰保護的密鑰儲存文件”*(如白皮書中所述)來管理和自動解鎖 BitLocker 卷?任何建議表示讚賞。

— 編輯 1 —

根據埃文在下面的回复,這是我想出來的,但我仍然卡住了。

我假設使用**PsExec**並執行以下命令,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 個字元)。然後,我現在可以創建一個在啟動時執行的計劃任務,它使用以下內容載入密碼(作為 SecureString)並將其傳遞給**Unlock-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 密鑰,以便只有系統帳戶才能訪問它?

看起來亞馬遜所做的只是將 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

引用自:https://serverfault.com/questions/520356