在命令列上以標準使用者身分解鎖位元鎖定資料驅動器

在命令列上以標準使用者身分解鎖位元鎖定資料驅動器

我有一台 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.exeWMI 都會使用:

Get-CimInstance
-Namespace "root\cimv2\Security\MicrosoftVolumeEncryption"
-ClassName Win32_EncryptableVolume

標準使用者無權存取此內容。

但可以直接使用(Bitlocker API 檔案)中的bdeunlock.exe功能,而無需先使用 WMI。FveOpenVolumeWFVEAPI.dll

有沒有辦法以標準使用者身分在命令列上解鎖 Bitlocked 固定資料磁碟機?

答案1

您可以根據您在 中找到的路徑向標準使用者或安全群組授予對 WMI 物件的明確存取權限的成員wmimgmt.msc

這樣,您不需要向帳戶授予本地管理員或提升的權限,他們只需根據需要對相關WMI 命名空間擁有所需的準確且顯式的訪問權限,而無需其他任何操作- 執行操作所需的最低權限。

指示

  1. 溫鍵+R, 輸入 wmimgmt.msc並按Enter。右鍵單擊WMI 控制(本地)左側的選項,然後選擇 Properties

  2. Security屬性視窗中的選項卡,然後展開Root到您需要明確授予存取權限的特定 WMI 命名空間物件的命名空間。

  3. 反白顯示適用的 WMI 命名空間物件後,您將從Security屬性視窗的右下角選擇選項,並相應地新增使用者帳戶或安全性群組,並根據需要授予和設定適用的權限。


螢幕截圖範例

在此輸入影像描述


更多資源

答案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,後面跟著磁碟機號碼。這似乎是一個提示輸入密碼的應用程式。這可以使用標準使用者權限進行。

相關內容