在命令行上以标准用户身份解锁 Bitlocked 数据驱动器

在命令行上以标准用户身份解锁 Bitlocked 数据驱动器

我有一台 Windows 10 Pro PC,没有域,我不在系统驱动器上使用 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。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!

我的目的是保护驱动器上的数据不被他人获取。有人可能会窃取我的电脑,启动实时 CD Linux,并获取我安装的 Windows 上的管理员帐户的访问权限。

删除恢复密码后,我可以使用原始Unlock-Bitlockercmdlet 作为标准用户来解锁我的驱动器。我仍然需要如上所述更改 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

我使用进程监视器查看了该进程,以找出在 Gui 中选择“解锁驱动器”时 Windows 资源管理器究竟做了什么。它恰好启动了 bdeunlock.exe,然后启动了驱动器号。这似乎是一个提示输入密码的应用程序。这在使用标准用户权限时有效。

相关内容