Sblocca unità dati Bitlocked come utente standard sulla riga di comando


5

Ho un PC Windows 10 Pro, nessun dominio, non utilizzo BitLocker sull'unità di sistema ma ho crittografato alcune unità dati fisse utilizzando BitLocker e una password (senza TPM).

Quando mi piace sbloccare queste unità, posso selezionarle in Esplora file e scegliere Unlock Drive..., dopo aver immesso la mia password, l'unità viene decodificata e posso usarla.

Poiché ho alcune di queste unità con la stessa password, ho scritto uno script per sbloccarle tutte contemporaneamente.

Unlock-BitLocker -MountPoint X: -Password $myPassword

Funziona bene quando eseguito come amministratore elevato, ma quando eseguo lo script come il mio normale utente standard non riesce:

Get-CimInstance: accesso negato

WBEM_E_ACCESS_DENIED (0x80041003) L'utente corrente non dispone dell'autorizzazione per eseguire l'azione.

Presumo che sia File Explorer che il modulo BitLocker di PowerShell utilizzino la stessa API Win32, perché uno funziona come utente standard e l'altro no?

Quando si usa:

manage-bde –unlock E: -rp password

Ottengo:

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.

Utilizzando Process Monitor, posso vedere che l'accesso è negato alla seguente chiave di registro:

HKLM\Software\Microsoft\WBEM\CIMOM

Ho anche scoperto che il menu del contenuto di Esplora file chiama l'eseguibile:

%systemroot%\System32\bdeunlock.exe

che visualizza la piccola finestra popup per inserire la password.

Quando bdeunlock.exenon si utilizza alcun accesso a HKLM\Software\Microsoft\WBEM\CIMOMviene visualizzato in Process Monitor. Quindi sembra sbloccare l'unità senza accedere a quella chiave.

Sembra che sia i cmdlet di PowerShell sia l' manage-bde.exeuso di WMI:

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

e un utente standard non ha accesso a questo.

Ma bdeunlock.exepuò usare la funzione FveOpenVolumeWin FVEAPI.dll(file API Bitlocker) direttamente senza usare prima WMI.

Esiste un modo per sbloccare un'unità dati fissa Bitlocked sulla riga di comando come utente standard?


Le autorizzazioni di File Explorer e PowerShell per impostazione predefinita sono diverse, motivo per cui lo script non funziona Mentre il risultato finale della voce di menu di Explorer, Unlock Drive e il comando PowerShell Unlock-Bitlockersono gli stessi di come si comportano è diverso.
Ramhound,

@Ramhound - Vedo che stanno facendo qualcosa di diverso, altrimenti non avrei questa discrepanza. Ma non compro che hanno autorizzazioni diverse, hai qualche prova per quella richiesta?
Peter Hahndorf,

1
La mia prova sono i miei oltre 20 anni di esperienza di programmazione su Windows e la comprensione dei permessi di processo predefiniti sia del prompt dei comandi di PowerShell sia elevato e Esplora file e la natura esatta di come funziona quel menu di scelta rapida. Non sono disposto a dire, senza ombra di dubbio, non è possibile raggiungere quello che vuoi però. Qual è il motivo per cui non ho inviato una risposta dicendo che ciò che vuoi non è possibile.
Ramhound,

Hmm, sto programmando su Windows NT da un po 'più di 20 anni e questa è la prima volta che sento che i permessi di una voce del menu contestuale della shell sono diversi da un'app console. Sono seriamente curioso di sapere perché sarebbe così.
Peter Hahndorf,

Questa spiegazione richiederebbe più di 600 caratteri, probabilmente circa 1800 caratteri, e non qualcosa che sono pronto a tentare di fare per altre 48 ore. In una sola frase, è la differenza tra l'ambiente PowerShell e il modo in cui il menu di scelta rapida interagiscemanage-bde.exe
Ramhound

Risposte:


1

È possibile concedere all'utente standard o a un gruppo di sicurezza che sono membri dell'accesso esplicito all'oggetto WMI per il percorso trovato wmimgmt.msc.

In questo modo non è necessario fornire all'account l'amministratore locale o autorizzazioni elevate e avrebbero solo l'accesso esatto ed esplicito di cui hanno bisogno agli spazi dei nomi WMI correlati secondo necessità e nulla di più: autorizzazioni minime necessarie per eseguire l'operazione.

Istruzioni

  1. Premere + , digitare e premere . Fare clic con il pulsante destro del mouse sull'opzione WMI Control (Local) a sinistra, quindi selezionare .WinKeyRwmimgmt.mscEnterProperties

  2. Passare alla Securityscheda dalle finestre delle proprietà, quindi espandere lo Rootspazio dei nomi negli oggetti dello spazio dei nomi WMI specifici a cui è necessario concedere l'accesso in modo esplicito.

  3. Una volta evidenziato l'oggetto WMI Namespace applicabile, da lì selezionerai l' Securityopzione dal lato in basso a destra delle finestre delle proprietà e aggiungerai di conseguenza l'account utente o i gruppi di sicurezza e concederai e imposterai le autorizzazioni applicabili secondo necessità.


Esempio di schermata

inserisci qui la descrizione dell'immagine


Ulteriori risorse


Dopo averlo fatto, un utente standard può utilizzare manage-bde -unlock X: -pwper sbloccare un'unità. Poiché ciò mi ha aiutato a trovare la risposta accettata, conferisco la grazia a questa risposta.
Peter Hahndorf,

Questa modifica persiste solo fino al prossimo aggiornamento di Windows, ho spiegato come scrivere questa modifica nella mia risposta.
Peter Hahndorf,

1

Continuando la mia ricerca ho spiegato nella domanda stessa, ho approfondito ulteriormente questo aspetto.

Utilizzo del cmdlet di PowerShell Unlock-Bitlockerperché il suo codice è disponibile in chiaro su tutti i computer Windows.

Il primo errore durante l'esecuzione del cmdlet si verifica durante la chiamata:

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

Ho preso un Access Denied

@Homey_D_Clown_IT ha suggerito di modificare la sicurezza sull'oggetto WIM in questione, per farlo, apri wmimgmt.msc, fai clic con il tasto destro sul WMI Control (Local)nodo a sinistra e fai clic Properties. Seleziona la Securityscheda e quindi trova l'oggetto Root\CIMV2\Security\MicrosoftVolumeEncryption, fai clic sul Securitypulsante. Aggiungi un gruppo o un utente a cui desideri consentire lo sblocco delle unità bitlocked. Controlla l' Execute Methodsautorizzazione Consenti .

Al termine, l'utente standard può utilizzare lo manage-bde.exestrumento per sbloccare l'unità:

manage-bde -unlock X: -pw

il problema è che questo richiede all'utente la password e al momento ho quattro unità da sbloccare e preferirei inserire la password una sola volta.

L'uso del cmdlet Unlock-Bitlocker in PowerShell ora viene superato l'errore precedente, ma ne visualizza un altro:

Accesso negato in Get-BitLockerVolumeInternal ...

Esaminando il codice del modulo PowerShell si interrompe in un momento in cui il codice tenta di accedere alla password di ripristino che può essere eseguita solo da un amministratore. Se cambio il codice per ignorare quell'errore e continuo solo invece di interrompere, funziona bene.

Ma questo è un brutto trucco, perché ho dovuto prendere la proprietà del file del modulo, cambiare le autorizzazioni e quindi modificare il codice. Tutto ciò che non dovrei fare con un file di sistema di Windows, più la prossima volta che Microsoft aggiorna il modulo PowerShell, la mia modifica verrà sovrascritta.

Una soluzione è quella di copiare i pezzi di codice rilevanti nel mio modulo PowerShell e utilizzare quello. Potrebbe non essere nemmeno legale.

Un'altra soluzione è rimuovere la password recuperata:

manage-bde -protectors -delete X: -type recoverypassword

Questo mi lascia solo con un unico protettore per l'unità Bitlocked, la normale password.

Perché è una buona idea rimuovere la password di ripristino da un'unità dati fissa crittografata con BitLocker?

Qualsiasi amministratore può visualizzare la password di ripristino e utilizzarla per decrittografare l'unità, WFT!

Il mio punto era proteggere i dati sui dischi da altre persone. Qualcuno potrebbe rubare il mio PC, avviare un CD live-linux e ottenere l'accesso a un account amministratore sulla mia installazione di Windows.

Dopo aver rimosso le password di ripristino, è possibile utilizzare il Unlock-Bitlockercmdlet originale come utente standard per sbloccare le unità. Avevo ancora bisogno di cambiare le autorizzazioni sull'oggetto WMI come descritto sopra.

Modifica: dopo un aggiornamento di Windows 10, in questo caso 14939.222l'autorizzazione per il root\cimv2\Security\MicrosoftVolumeEncryptionripristino è stata ripristinata e ho dovuto modificarli di nuovo. Quindi, dopo tutto, questa non sembra essere una soluzione permanente.

A causa di questo ripristino da Windows Update, ho deciso di scrivere la modifica per l'autorizzazione WMI. Sto usando Set-WmiNamespaceSecurity.ps1quale è disponibile in questo post sul blog di Microsoft , quindi posso usare:

.\Set-WmiNamespaceSecurity.ps1 -namespace "root/cimv2/Security/MicrosoftVolumeEncryption" -operation add -account MyUserName -permissions  MethodExecute,Enable

0

Alla luce della discussione di cui sopra, posso vedere due soluzioni:

  1. Scrivi un programma C / C ++ / C # che esegue i montaggi utilizzando le API che hai trovato
  2. Scrivi script (che richiedono l'autorizzazione di amministratore).

Per il secondo punto, posso vedere un metodo (piuttosto ingombrante) per un utente standard di avviare uno script come amministratore, supponendo che tu abbia accesso all'account amministratore ma non desideri usarlo per l'uso quotidiano.

L'idea è di utilizzare un'attività pianificata che verrà eseguita ripetutamente come amministratore ogni minuto dopo l'accesso e verificherà la presenza di un file che conterrà la chiave BitLocker e agirà solo se il file esiste. Un tale trigger non utilizzerà troppe risorse e non rallenterà il computer.

La discussione seguente utilizza la sintassi del comando DOS, ma se necessario, PowerShell ha funzionalità simili.

Se il file contenente la chiave è presente /path/to/keyfile.txt, il trigger dell'attività pianificata per lo sblocco sarà simile a questo script .bat:

if exists "/path/to/keyfile.txt" (
  type "/path/to/keyfile.txt" | your-unlock-command-1
  type "/path/to/keyfile.txt" | your-unlock-command-2
  del "/path/to/keyfile.txt"
)

Per avviare il trigger, creare il file tramite un altro script che verrà eseguito con un account utente standard:

set /P key=Enter key:
if %key% neq '' echo %key% > "/path/to/keyfile.txt"

I dettagli su questi comandi DOS sono disponibili nell'articolo:
Un indice AZ della riga comandi CMD di Windows


0

Temo che non puoi farlo con l'esecuzione di script come te stesso, a meno che tu non disabiliti completamente UAC sul tuo computer. Tuttavia, se la tua domanda è correlata a semplificare l'utilizzo del tuo script, ho trovato una soluzione qualche tempo fa e la sto usando ogni volta quando ho bisogno di eseguire script con autorizzazioni elevate.

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 
}

Dopo aver inserito questo codice all'inizio di uno script, eseguirà di nuovo automaticamente lo script con autorizzazioni elevate, trasferendo nuovamente tutti i suoi argomenti alla nuova "istanza elevata".


0

Ho esaminato il processo usando Process Monitor per scoprire cosa fa esattamente Windows Explorer quando si seleziona "Unlock Drive" nella Gui. Succede a lanciare bdeunlock.exe seguito dalla lettera di unità. Questa sembra essere un'app che richiede la password. Funziona utilizzando le autorizzazioni utente standard.


Ho già menzionato bdeunlock.exenella mia domanda. Ha una GUI, non voglio una GUI.
Peter Hahndorf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.