
Tenho um PC com Windows 10 Pro, sem domínio, não uso o BitLocker na unidade do sistema, mas criptografei algumas unidades de dados fixas usando o BitLocker e uma senha (sem TPM).
Quando gosto de desbloquear essas unidades posso selecioná-las no File Explorer e escolher Unlock Drive...
, após inserir minha senha a unidade é descriptografada e posso usá-la.
Como tenho algumas dessas unidades com a mesma senha, escrevi um script para desbloquear todas elas ao mesmo tempo.
Unlock-BitLocker -MountPoint X: -Password $myPassword
Isso funciona bem quando executado como administrador elevado, mas quando executo o script como usuário padrão normal, ele falha:
Get-CimInstance: Acesso negado
WBEM_E_ACCESS_DENIED (0x80041003) O usuário atual não tem permissão para executar a ação.
Presumo que o File Explorer e o módulo PowerShell BitLocker usem a mesma API Win32. Por que um funciona como usuário padrão e o outro não?
Ao usar:
manage-bde –unlock E: -rp password
Eu recebo:
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.
Usando o Process Monitor, posso ver que o acesso foi negado à seguinte chave de registro:
HKLM\Software\Microsoft\WBEM\CIMOM
Também descobri que o menu de conteúdo do File Explorer chama o executável:
%systemroot%\System32\bdeunlock.exe
que exibe a pequena janela pop-up para inserir a senha.
Ao usar, bdeunlock.exe
nenhum acesso HKLM\Software\Microsoft\WBEM\CIMOM
é mostrado no Process Monitor. Parece que desbloqueia a unidade sem acessar essa chave.
Parece que ambos os cmdlets do PowerShell manage-bde.exe
usam WMI:
Get-CimInstance
-Namespace "root\cimv2\Security\MicrosoftVolumeEncryption"
-ClassName Win32_EncryptableVolume
e um usuário padrão não tem acesso a isso.
Mas bdeunlock.exe
pode usar a função FveOpenVolumeW
em FVEAPI.dll
(arquivo API do Bitlocker) diretamente, sem usar o WMI primeiro.
Existe uma maneira de desbloquear uma unidade de dados fixa Bitlocked na linha de comando como usuário padrão?
Responder1
Você pode conceder ao usuário padrão ou a um grupo de segurança que ele seja membro do acesso explícito ao objeto WMI de acordo com o caminho encontrado em wmimgmt.msc
.
Dessa forma, você não precisa conceder à conta permissões de administrador local ou elevadas, e eles apenas terão o acesso exato e explícito necessário aos namespaces WMI correlacionados conforme necessário e nada mais – permissões mínimas necessárias para executar a operação.
Instruções
Imprensa
+
R
, digitarwmimgmt.msc
e pressioneEnter
. Clique com o botão direito noControle WMI (local)opção à esquerda e selecioneProperties
.Vá o
Security
guia nas janelas de propriedades e, em seguida, expanda oRoot
to namespace para o(s) objeto(s) de namespace WMI específico(s) aos quais você precisa conceder acesso explicitamente.Depois de destacar o objeto Namespace WMI aplicável, a partir daí você selecionará a
Security
opção no lado inferior direito das janelas de propriedades e adicionará a conta de usuário ou grupos de segurança de acordo, e também concederá e definirá as permissões aplicáveis conforme necessário.
Exemplo de captura de tela
Recursos adicionais
Responder2
Continuando minha pesquisa que expliquei na própria pergunta, analisei mais detalhadamente isso.
Usando o cmdlet do PowerShell Unlock-Bitlocker
porque seu código está disponível em texto não criptografado em todas as máquinas Windows.
O primeiro erro durante a execução do cmdlet acontece durante a chamada:
Get-CimInstance
-Namespace "root\cimv2\Security\MicrosoftVolumeEncryption" `
-ClassName Win32_EncryptableVolume
eu recebo umAccess Denied
@Homey_D_Clown_IT sugeriu alterar a segurança do objeto WIM em questão, para isso abra, wmimgmt.msc
clique com o botão direito no WMI Control (Local)
nó à esquerda e clique em Properties
. Selecione a Security
guia e encontre o objeto Root\CIMV2\Security\MicrosoftVolumeEncryption
, clique no Security
botão. Adicione um grupo ou usuário ao qual deseja permitir o desbloqueio das unidades bitlocked. Verifique a Execute Methods
permissão Permitir.
Depois de fazer isso, o usuário padrão pode usar a manage-bde.exe
ferramenta para desbloquear a unidade:
manage-bde -unlock X: -pw
o problema é que isso solicita a senha do usuário e tenho quatro unidades para desbloquear no momento e prefiro inserir a senha apenas uma vez.
Usar o cmdlet Unlock-Bitlocker no PowerShell agora passa pelo erro anterior, mas exibe outro:
Acesso negado em Get-BitLockerVolumeInternal...
Olhando para o código do módulo PowerShell ele quebra no momento em que o código tenta acessar a senha de recuperação que só pode ser feita por um administrador. Se eu alterar o código para ignorar esse erro e continuar em vez de interromper, tudo funcionará bem.
Mas este é um truque ruim, porque tive que me apropriar do arquivo do módulo, alterar as permissões e depois editar o código. Todas as coisas que não devo fazer com um arquivo de sistema do Windows, além da próxima vez que a Microsoft atualizar esse módulo do PowerShell, minha alteração será substituída.
Uma solução é copiar os trechos de código relevantes em meu próprio módulo do PowerShell e usá-lo. Isso pode até não ser legal.
Outra solução é remover a senha de recuperação:
manage-bde -protectors -delete X: -type recoverypassword
Isso me deixa apenas com um único protetor para a unidade Bitlocked, a senha normal.
Por que é uma boa ideia remover a senha de recuperação de uma unidade de dados fixa criptografada com BitLocker?
Qualquer administrador pode ver a senha de recuperação e usá-la para descriptografar a unidade, WFT!
Meu objetivo era proteger os dados nas unidades de outras pessoas. Alguém poderia roubar meu PC, inicializar em um live-CD Linux e obter acesso a uma conta de administrador na instalação do Windows.
Depois de remover as senhas de recuperação, posso usar o Unlock-Bitlocker
cmdlet original como usuário padrão para desbloquear minhas unidades. Ainda precisei alterar as permissões no objeto WMI conforme descrito acima.
Editar:Após uma atualização do Windows 10, neste caso 14939.222
as permissões root\cimv2\Security\MicrosoftVolumeEncryption
foram redefinidas e tive que alterá-las novamente. Portanto, esta não parece ser uma solução permanente, afinal.
Devido a essa redefinição pelo Windows Update, decidi criar um script para a alteração da permissão WMI. Estou usando Set-WmiNamespaceSecurity.ps1
o que está disponível nestePostagem no blog da Microsoft, então posso usar:
.\Set-WmiNamespaceSecurity.ps1 -namespace "root/cimv2/Security/MicrosoftVolumeEncryption" -operation add -account MyUserName -permissions MethodExecute,Enable
Responder3
Receio que você não possa fazer isso executando o script sozinho, a menos que desative completamente o UAC em seu computador. Porém, se sua dúvida estiver relacionada à simplificação do uso do seu script, encontrei uma solução há algum tempo e a uso sempre que preciso executar scripts com permissões elevadas.
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
}
Após inserir este código no início de um script ele irá automaticamente reexecutar o script com permissões elevadas, passando novamente todos os seus argumentos para a nova "instância elevada".
Responder4
Analisei o processo usando o Process Monitor para descobrir o que o Windows Explorer faz exatamente ao selecionar "Desbloquear unidade" no Gui. Acontece que o bdeunlock.exe é iniciado seguido pela letra da unidade. Este parece ser um aplicativo que solicita a senha. Isso funciona usando permissões de usuário padrão.