
我有一台 Windows 10 Pro 電腦,沒有網域,我不在系統磁碟機上使用 BitLocker,但使用 BitLocker 和密碼(無 TPM)加密了一些固定資料磁碟機。
當我想解鎖這些磁碟機時,我可以在檔案總管中選擇它們並選擇Unlock Drive...
,輸入密碼後,磁碟機將被解密,我可以使用它。
因為我有幾個驅動器具有相同的密碼,所以我編寫了一個腳本來同時解鎖所有驅動器。
Unlock-BitLocker -MountPoint X: -Password $myPassword
當以提升的管理員身份執行時,這可以正常工作,但是當我以普通標準用戶身份運行腳本時,它會失敗:
Get-CimInstance:存取被拒絕
WBEM_E_ACCESS_DENIED (0x80041003) 目前使用者無權執行該操作。
我假設檔案總管和 PowerShell BitLocker 模組都使用相同的 Win32 API,為什麼一個可以作為標準使用者工作,而另一個則不能?
使用時:
manage-bde –unlock E: -rp password
我得到:
BitLocker Drive Encryption: Configuration Tool version 10.0.14393
ERROR: An attempt to access a required resource was denied.
Check that you have administrative rights on the computer.
使用進程監視器,我可以看到對以下註冊表項的存取被拒絕:
HKLM\Software\Microsoft\WBEM\CIMOM
我還發現文件資源管理器內容選單調用可執行檔:
%systemroot%\System32\bdeunlock.exe
它會顯示一個小彈出視窗來輸入密碼。
使用時,進程監視器中將顯示bdeunlock.exe
無存取權限。HKLM\Software\Microsoft\WBEM\CIMOM
因此,它似乎在不訪問該密鑰的情況下解鎖了驅動器。
看起來 PowerShell cmdlet 和manage-bde.exe
WMI 都會使用:
Get-CimInstance
-Namespace "root\cimv2\Security\MicrosoftVolumeEncryption"
-ClassName Win32_EncryptableVolume
標準使用者無權存取此內容。
但可以直接使用(Bitlocker API 檔案)中的bdeunlock.exe
功能,而無需先使用 WMI。FveOpenVolumeW
FVEAPI.dll
有沒有辦法以標準使用者身分在命令列上解鎖 Bitlocked 固定資料磁碟機?
答案1
您可以根據您在 中找到的路徑向標準使用者或安全群組授予對 WMI 物件的明確存取權限的成員wmimgmt.msc
。
這樣,您不需要向帳戶授予本地管理員或提升的權限,他們只需根據需要對相關WMI 命名空間擁有所需的準確且顯式的訪問權限,而無需其他任何操作- 執行操作所需的最低權限。
指示
螢幕截圖範例
更多資源
答案2
繼續我在問題本身中解釋的研究,我進一步研究了這一點。
使用 PowerShell cmdlet,Unlock-Bitlocker
因為其程式碼在每台 Windows 電腦上都以明文形式提供。
執行 cmdlet 期間的第一個錯誤發生在呼叫時:
Get-CimInstance
-Namespace "root\cimv2\Security\MicrosoftVolumeEncryption" `
-ClassName Win32_EncryptableVolume
我得到一個Access Denied
@Homey_D_Clown_IT 建議更改相關 WIM 物件的安全性,為此,請打開wmimgmt.msc
,右鍵單擊WMI Control (Local)
左側的節點,然後按一下Properties
。選擇Security
選項卡,然後找到對象Root\CIMV2\Security\MicrosoftVolumeEncryption
,按一下Security
按鈕。新增您想要允許解鎖位鎖定磁碟機的群組或使用者。檢查允許Execute Methods
權限。
完成此操作後,標準使用者可以使用該manage-bde.exe
工具解鎖驅動器:
manage-bde -unlock X: -pw
問題是,這會提示使用者輸入密碼,而我此時有四個磁碟機需要解鎖,我寧願只輸入一次密碼。
現在,在 PowerShell 中使用 Unlock-Bitlocker cmdlet 可以解決上一個錯誤,但會顯示另一個錯誤:
Get-BitLockerVolumeInternal 中的存取被拒絕...
檢視 PowerShell 模組的程式碼,它會在程式碼嘗試存取恢復密碼時中斷,而該操作只能由管理員完成。如果我更改程式碼以忽略該錯誤並繼續而不是中斷,則它可以正常工作。
但這是一個糟糕的駭客行為,因為我必須獲得模組檔案的所有權,更改權限,然後編輯程式碼。我不應該對 Windows 系統檔案執行的所有操作,加上下次 Microsoft 更新該 PowerShell 模組時,我的變更將被覆寫。
一種解決方案是將相關程式碼片段複製到我自己的 PowerShell 模組中並使用該模組。這甚至可能不合法。
另一個解決方案是刪除恢復密碼:
manage-bde -protectors -delete X: -type recoverypassword
這只給我留下了一個 Bitlocked 驅動器的保護器,即普通密碼。
為什麼從使用 BitLocker 加密的固定資料磁碟機中刪除復原密碼是個好主意?
任何管理員都可以看到恢復密碼並使用它來解密驅動器,WFT!
我的全部目的是保護驅動器上的資料免受其他人的侵害。有人可能會竊取我的 PC,啟動到 live-CD linux,並存取我的 Windows 安裝上的管理員帳戶。
刪除恢復密碼後,我可以Unlock-Bitlocker
以標準使用者身分使用原始 cmdlet 來解鎖我的磁碟機。我仍然需要如上所述更改 WMI 物件的權限。
編輯:Windows 10 更新後,在這種情況下,14939.222
權限被root\cimv2\Security\MicrosoftVolumeEncryption
重置,我必須再次更改它們。所以這似乎畢竟不是一個永久的解決方案。
由於 Windows 更新進行了此重置,我決定編寫 WMI 權限更改腳本。我正在使用Set-WmiNamespaceSecurity.ps1
此中可用的微軟部落格文章,那我可以使用:
.\Set-WmiNamespaceSecurity.ps1 -namespace "root/cimv2/Security/MicrosoftVolumeEncryption" -operation add -account MyUserName -permissions MethodExecute,Enable
答案3
恐怕您無法透過自己運行腳本來執行此操作,除非您在電腦上完全停用 UAC。但是,如果您的問題與簡化腳本的使用有關,我不久前找到了一個解決方案,並且每次需要以提升的權限運行腳本時我都會使用它。
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
$arguments = $myInvocation.mycommand.definition
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
在腳本的開頭插入此程式碼後,它將自動以提升的權限重新執行腳本,再次將其所有參數傳遞給新的「提升的實例」。
答案4
我使用 Process Monitor 查看了這個過程,以了解 Windows 資源管理器在 GUI 中選擇「解鎖磁碟機」時到底執行什麼操作。它恰好啟動了 bdeunlock.exe,後面跟著磁碟機號碼。這似乎是一個提示輸入密碼的應用程式。這可以使用標準使用者權限進行。