Pet*_*orf 6 non-admin command-line bitlocker windows-10
我有一台 Windows 10 Pro PC,没有域,我不在系统驱动器上使用 BitLocker,但使用 BitLocker 和密码(无 TPM)加密了一些固定数据驱动器。
当我想解锁这些驱动器时,我可以在文件资源管理器中选择它们并选择Unlock Drive...
,输入密码后驱动器被解密,我可以使用它。
因为我有几个使用相同密码的驱动器,所以我编写了一个脚本来同时解锁所有驱动器。
Unlock-BitLocker -MountPoint X: -Password $myPassword
Run Code Online (Sandbox Code Playgroud)
当以提升的管理员身份执行时,这可以正常工作,但是当我以普通标准用户身份运行脚本时,它会失败:
Get-CimInstance :访问被拒绝
WBEM_E_ACCESS_DENIED (0x80041003) 当前用户无权执行该操作。
我假设文件资源管理器和 PowerShell BitLocker 模块使用相同的 Win32 API,为什么一个作为标准用户工作而另一个不工作?
使用时:
manage-bde –unlock E: -rp password
Run Code Online (Sandbox Code Playgroud)
我得到:
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.
Run Code Online (Sandbox Code Playgroud)
使用进程监视器,我可以看到对以下注册表项的访问被拒绝:
HKLM\Software\Microsoft\WBEM\CIMOM
Run Code Online (Sandbox Code Playgroud)
我还发现文件资源管理器内容菜单调用可执行文件:
%systemroot%\System32\bdeunlock.exe
Run Code Online (Sandbox Code Playgroud)
它显示了输入密码的小弹出窗口。
当使用bdeunlock.exe
无访问权限时HKLM\Software\Microsoft\WBEM\CIMOM
,进程监视器中会显示。因此,它似乎无需访问该密钥即可解锁驱动器。
看起来 PowerShell cmdlet 和manage-bde.exe
使用 WMI:
Get-CimInstance
-Namespace "root\cimv2\Security\MicrosoftVolumeEncryption"
-ClassName Win32_EncryptableVolume
Run Code Online (Sandbox Code Playgroud)
标准用户无权访问此内容。
但bdeunlock.exe
可以直接使用(Bitlocker API 文件)中的函数FveOpenVolumeW
,FVEAPI.dll
而无需先使用 WMI。
有没有办法以标准用户的身份在命令行上解锁 Bitlocked 固定数据驱动器?
继续我在问题本身中解释的研究,我进一步研究了这一点。
使用 PowerShell cmdlet Unlock-Bitlocker
,因为其代码在每台 Windows 计算机上都以明文形式提供。
执行 cmdlet 期间的第一个错误发生在调用时:
Get-CimInstance
-Namespace "root\cimv2\Security\MicrosoftVolumeEncryption" `
-ClassName Win32_EncryptableVolume
Run Code Online (Sandbox Code Playgroud)
我得到一个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
Run Code Online (Sandbox Code Playgroud)
问题是,这会提示用户输入密码,而我此时有四个驱动器需要解锁,我宁愿只输入一次密码。
现在,在 PowerShell 中使用 Unlock-Bitlocker cmdlet 可以解决上一个错误,但会显示另一个错误:
Get-BitLockerVolumeInternal 中的访问被拒绝...
查看 PowerShell 模块的代码,它会在代码尝试访问恢复密码时中断,而该操作只能由管理员完成。如果我更改代码以忽略该错误并继续而不是中断,则它可以正常工作。
但这是一个糟糕的黑客行为,因为我必须获得模块文件的所有权,更改权限,然后编辑代码。我不应该对 Windows 系统文件执行的所有操作,加上下次 Microsoft 更新该 PowerShell 模块时,我的更改将被覆盖。
一种解决方案是将相关代码片段复制到我自己的 PowerShell 模块中并使用该模块。这甚至可能不合法。
另一个解决方案是删除恢复密码:
manage-bde -protectors -delete X: -type recoverypassword
Run Code Online (Sandbox Code Playgroud)
这只给我留下了一个用于 Bitlocked 驱动器的保护器,即普通密码。
为什么从使用 BitLocker 加密的固定数据驱动器中删除恢复密码是个好主意?
任何管理员都可以看到恢复密码并使用它来解密驱动器,WFT!
我的全部目的是保护驱动器上的数据免受其他人的侵害。有人可能会窃取我的 PC,启动到 live-CD linux,并访问我的 Windows 安装上的管理员帐户。
删除恢复密码后,我可以Unlock-Bitlocker
以标准用户身份使用原始 cmdlet 来解锁我的驱动器。我仍然需要如上所述更改 WMI 对象的权限。
编辑: Windows 10 更新后,在这种情况下,14939.222
权限被root\cimv2\Security\MicrosoftVolumeEncryption
重置,我不得不再次更改它们。所以这似乎毕竟不是一个永久的解决方案。
由于 Windows 更新进行了此重置,我决定编写 WMI 权限更改脚本。我正在使用此Microsoft 博客文章Set-WmiNamespaceSecurity.ps1
中提供的内容,然后我可以使用:
.\Set-WmiNamespaceSecurity.ps1 -namespace "root/cimv2/Security/MicrosoftVolumeEncryption" -operation add -account MyUserName -permissions MethodExecute,Enable
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12403 次 |
最近记录: |