Entsperren Sie das Bitlocked-Datenlaufwerk als Standardbenutzer in der Befehlszeile

4506
Peter Hahndorf

Ich habe einen Windows 10 Pro-PC, keine Domäne. Ich verwende BitLocker nicht auf dem Systemlaufwerk, sondern habe einige feste Datenlaufwerke mit BitLocker und einem Kennwort (kein TPM) verschlüsselt.

Wenn ich diese Laufwerke entsperren möchte, kann ich sie im Datei-Explorer auswählen und auswählen Unlock Drive.... Nach der Eingabe meines Passworts wird das Laufwerk entschlüsselt und ich kann es verwenden.

Da ich einige dieser Laufwerke mit demselben Kennwort habe, habe ich ein Skript geschrieben, um alle gleichzeitig zu entsperren.

Unlock-BitLocker -MountPoint X: -Password $myPassword 

Dies funktioniert gut, wenn es als Administrator mit erhöhten Rechten ausgeführt wird, aber wenn ich das Skript als normaler Standardbenutzer ausführte, schlägt es fehl:

Get-CimInstance: Zugriff verweigert

WBEM_E_ACCESS_DENIED (0x80041003) Der aktuelle Benutzer hat keine Berechtigung zum Ausführen der Aktion.

Ich gehe davon aus, dass sowohl der Datei-Explorer als auch das PowerShell BitLocker-Modul dieselbe Win32-API verwenden. Warum funktioniert einer als Standardbenutzer und der andere nicht?

Beim Benutzen:

manage-bde –unlock E: -rp password 

Ich bekomme:

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. 

Mit Process Monitor kann der Zugriff auf den folgenden Registrierungsschlüssel verweigert werden:

HKLM\Software\Microsoft\WBEM\CIMOM 

Ich fand auch heraus, dass das Datei-Explorer-Inhaltsmenü die ausführbare Datei aufruft:

%systemroot%\System32\bdeunlock.exe 

Daraufhin wird das kleine Popup-Fenster zur Eingabe des Passworts angezeigt.

Bei Verwendung wird in Process Monitor bdeunlock.exekein Zugriff auf HKLM\Software\Microsoft\WBEM\CIMOMangezeigt. Es scheint also, dass das Laufwerk ohne Zugriff auf diesen Schlüssel entsperrt wird.

Es sieht so aus, als würden sowohl die PowerShell-Cmdlets als manage-bde.exeauch WMI verwendet:

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

und ein Standardbenutzer hat keinen Zugriff darauf.

Aber bdeunlock.exekann die Funktion FveOpenVolumeWin FVEAPI.dll(Bitlocker API - Datei) direkt, ohne zuerst mit WMI.

Gibt es eine Möglichkeit, ein Bitlocked-Festplattenlaufwerk als Standardbenutzer in der Befehlszeile zu entsperren?

3
Die Berechtigung File Explorer und die PowerShell-Eingabeaufforderung unterscheiden sich standardmäßig. Dies ist der Grund, warum Ihr Skript nicht funktioniert. Während das Endergebnis des Explorer-Menüelements Unlock Drive und das PowerShell-Kommando 'Unlock-Bitlocker' gleich sind Wie sie damit umgehen, ist anders. Ramhound vor 7 Jahren 0
@ Ramhound - Ich kann sehen, dass sie etwas anderes machen, sonst hätte ich diese Diskrepanz nicht. Aber ich kaufe nicht, dass sie unterschiedliche Berechtigungen haben. Haben Sie einen Beweis für diese Behauptung? Peter Hahndorf vor 7 Jahren 0
Mein Beweis ist meine mehr als 20-jährige Programmiererfahrung unter Windows und das Verständnis der Standard-Prozessberechtigungen sowohl für die PowerShell-Eingabeaufforderung als auch für den Datei-Explorer und die genaue Funktionsweise dieses Kontextmenüs. Ich bin nicht bereit zu sagen, ohne Zweifel, es ist nicht möglich, das zu erreichen, was Sie wollen. * Deshalb habe ich keine Antwort eingereicht und gesagt, dass das, was Sie wollen, nicht möglich ist. * Ramhound vor 7 Jahren 1
Hmm, ich programmiere etwas länger als 20 Jahre unter Windows NT und das ist das erste Mal, dass ich höre, dass sich die Berechtigung eines Shell-Kontextmenüeintrags von einer Konsolen-App unterscheidet. Ich bin ernsthaft neugierig, warum das so wäre. Peter Hahndorf vor 7 Jahren 0
Diese Erklärung würde mehr als 600 Zeichen erfordern, wahrscheinlich um 1800 Zeichen, und nicht etwas, das ich noch 48 Stunden lang versuchen möchte. In einem Satz besteht der Unterschied zwischen der PowerShell-Umgebung und der Interaktion des Kontextmenüs mit "manage-bde.exe" Ramhound vor 7 Jahren 0
Stellen Sie sicher, dass in einer nicht erhöhten Eingabeaufforderung, dass mit "manage-bde -unlock E: -rp password" das bereitgestellte Laufwerk ohne erhöhte Berechtigungen entsperrt wird. Wenn der Laufwerksbuchstabe "X" ist, verwenden Sie diesen stattdessen. Ramhound vor 7 Jahren 0
@ Ramhound - Vielen Dank für Ihre bisherige Eingabe. Ich habe der Frage mehr Details hinzugefügt. Der vorgeschlagene Befehl führt auch zu einer Zugriffsverweigerung. Peter Hahndorf vor 7 Jahren 0
@Homey_D_Clown_IT - Danke, aber was Sie vorschlagen, ändert nur die Art und Weise, wie ich "Unlock-BitLocker" nenne. Am Ende wird jedoch dasselbe Cmdlet ausgeführt, und es wird mir derselbe Fehler "Zugriff verweigert" angezeigt. Peter Hahndorf vor 7 Jahren 0
@Homey_D_Clown_IT - Das Skript fängt einfach erhöht an, was funktioniert, aber genau das will ich nicht. Die Frage ist, wie dies als Standardbenutzer zu tun ist. Peter Hahndorf vor 7 Jahren 0
Pete - Wie wäre es, wenn Sie dem Standardbenutzer oder einer Gruppe gewähren, dass sie explizit auf den WMI-Pfad zugreifen können, wie Sie ihn aus 'wmimgmt.msc' gefunden haben? Würde dies Ihren Anforderungen genügen, wenn dies auf diese Weise funktionieren würde der standardmäßige / nicht lokale Administrator die Fähigkeit, das nicht-erhöhte Skript für den Zugriff auf den Namespace `root \ cimv2 \ Security \ MicrosoftVolumeEncryption` auszuführen? Schauen Sie hier: https://technet.microsoft.com/de-de/library/cc771551(v=ws.11).aspx Pimp Juice IT vor 7 Jahren 0
In diesem Screenshot sehen Sie, wovon ich spreche, wenn Sie dem Standardbenutzerkonto die ausdrückliche Berechtigung über "wmimgmt.msc" https://i.imgur.com/7HT4Udi.png erteilen Pimp Juice IT vor 7 Jahren 0
@Homey_D_Clown_IT - Die Berechtigung zum Ausführen von Methoden für das WMI-Objekt hat mir den ersten Zugriff verweigert. Aber dann bekam ich den nächsten. Derzeit debuggen Sie das BitLocker PowerShell-Modul. Der zweite KeyProtector hat einen Zugriff verweigert. Peter Hahndorf vor 7 Jahren 0
Im PowerShell BitLocker-Modul hat ein Standardbenutzer keinen Zugriff auf das Wiederherstellungskennwort, sondern auf das normale Kennwort. Durch das Ändern einer Zeile im Modul kann mein Standardbenutzer jetzt das Laufwerk entsperren. Aber das ist natürlich keine Option. Ich könnte eine Kopie dieses Moduls erstellen und es stattdessen verwenden. "Ja" ist keine Option in meiner UAC-Eingabeaufforderung. Ich muss ein langes Kennwort eingeben, da ich ein Standardbenutzer bin. Aber ich sehe deinen Punkt. Ich schätze, ich werde selbst eine Antwort schreiben, um das alles zu erklären. Peter Hahndorf vor 7 Jahren 0
Sie können Ihr Skript nach Ihrer Anmeldung als geplante Aufgabe ausführen und als Administrator ausführen harrymc vor 7 Jahren 0
@ harrymc - das kann funktionieren, aber ich möchte kein automatisches Entsperren der bitlocked-Laufwerke. Ich möchte trotzdem, dass der Benutzer das Kennwort eingibt. Wenn es als geplante Task ausgeführt wird, müsste ich das gesamte Kennwort an einer Stelle wie im Anmeldeinformationsmanager des Administrators speichern. Der Administrator sollte nicht einmal das Kennwort für die gesperrten Laufwerke kennen. Peter Hahndorf vor 7 Jahren 0
@Homey_D_Clown_IT - Wenn Sie die Belohnung wünschen, schreiben Sie eine kurze Antwort zu den WIM-Berechtigungen. Es half mir, eine Lösung zu finden. Peter Hahndorf vor 7 Jahren 0

5 Antworten auf die Frage

1
Peter Hahndorf

Ich setzte meine Forschung in der Frage selbst fort und untersuchte dies weiter.

Verwenden des PowerShell-Cmdlets, Unlock-Bitlockerda der Code auf jedem Windows-Computer in Klartext verfügbar ist.

Der erste Fehler während der Ausführung des Cmdlets tritt beim Aufruf auf:

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

Ich bekomme eine Access Denied

@Homey_D_Clown_IT schlug vor, die Sicherheit für das betreffende WIM-Objekt zu ändern. Öffnen wmimgmt.mscSie dazu WMI Control (Local)den linken Knoten und klicken Sie mit der rechten Maustaste Properties. Wählen Sie die SecurityRegisterkarte aus und suchen Sie das Objekt Root\CIMV2\Security\MicrosoftVolumeEncryption. Klicken Sie auf die SecuritySchaltfläche. Fügen Sie eine Gruppe oder einen Benutzer hinzu, der die Freigabe der bitlockierten Laufwerke zulassen soll. Überprüfen Sie die Execute MethodsBerechtigung Zulassen .

Danach kann der Standardbenutzer das manage-bde.exeTool zum Entsperren des Laufwerks verwenden:

manage-bde -unlock X: -pw 

Das Problem ist, dies fordert den Benutzer zur Eingabe des Passworts auf, und ich habe zu diesem Zeitpunkt vier Laufwerke zum Entsperren, und ich würde es vorziehen, das Passwort nur einmal einzugeben.

Bei Verwendung des Cmdlets Unlock-Bitlocker in PowerShell wird jetzt der vorherige Fehler übergeben, es wird jedoch ein anderer angezeigt:

Zugriff in Get-BitLockerVolumeInternal verweigert ...

Ein Blick in den Code des PowerShell-Moduls bricht zu einem Zeitpunkt, zu dem der Code versucht, auf das Wiederherstellungskennwort zuzugreifen, das nur von einem Administrator durchgeführt werden kann. Wenn ich den Code ändere, um diesen Fehler zu ignorieren und einfach fortzufahren, anstatt zu brechen, funktioniert das einwandfrei.

Dies ist jedoch ein schlechter Hack, weil ich den Besitz der Moduldatei übernehmen musste, Berechtigungen ändern und dann den Code bearbeiten muss. Alle Dinge, die ich nicht mit einer Windows-Systemdatei machen sollte, und wenn Microsoft das PowerShell-Modul das nächste Mal aktualisiert, wird meine Änderung überschrieben.

Eine Lösung besteht darin, die relevanten Codeteile in mein eigenes PowerShell-Modul zu kopieren und stattdessen dieses zu verwenden. Das kann nicht einmal legal sein.

Eine andere Lösung besteht darin, das Schlüsselwort recoveryp zu entfernen:

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

So bleibt mir nur ein einziger Schutz für das Bitlocked-Laufwerk, das normale Passwort.

Warum empfiehlt es sich, das Wiederherstellungskennwort von einem mit BitLocker verschlüsselten festen Datenlaufwerk zu entfernen?

Jeder Administrator kann das Wiederherstellungskennwort sehen und damit das Laufwerk entschlüsseln. WFT!

Es ging mir darum, die Daten auf den Laufwerken vor anderen Personen zu schützen. Jemand könnte meinen PC stehlen, von einer Live-CD-Linux booten und bei meiner Windows-Installation auf ein Administratorkonto zugreifen.

Nachdem ich die Wiederherstellungskennwörter entfernt habe, kann ich das ursprüngliche Unlock-BitlockerCmdlet als Standardbenutzer zum Entsperren meiner Laufwerke verwenden. Ich musste noch die Berechtigungen für das WMI-Objekt wie oben beschrieben ändern.

Edit: Nach einem Windows 10 Update wurde in diesem Fall 14939.222die Berechtigung auf die root\cimv2\Security\MicrosoftVolumeEncryptionzurückgesetzt und ich musste sie erneut ändern. Das scheint also keine dauerhafte Lösung zu sein.

Aufgrund dieses Zurücksetzens durch Windows Update habe ich mich entschlossen, die Änderung für die WMI-Berechtigung als Skript auszuführen. Ich verwende, Set-WmiNamespaceSecurity.ps1was in diesem Microsoft Blog Post verfügbar ist. Dann kann ich Folgendes verwenden:

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

Sie können dem Standardbenutzer oder einer Sicherheitsgruppe erteilen, dass sie Mitglied des expliziten Zugriffs auf das WMI-Objekt sind wmimgmt.msc.

Auf diese Weise müssen Sie dem Konto keine lokalen Administratoren oder erhöhte Berechtigungen erteilen, und er hätte nur den genauen und expliziten Zugriff auf die korrelierten WMI-Namespaces, wenn dies erforderlich ist, und keine weiteren erforderlichen Berechtigungen, um die Operation auszuführen.

Anleitung

  1. Drücken Sie +, geben Sie und drücken . Klicken Sie mit der rechten Maustaste auf die Option WMI-Steuerung (Lokal) links und wählen Sie dann aus .WinKeyRwmimgmt.mscEnterProperties

  2. SecurityWechseln Sie von den Eigenschaftenfenstern aus auf die Registerkarte, und erweitern Sie dann den RootNamespace to um die spezifischen WMI-Namespaceobjekte, denen Sie explizit den Zugriff gewähren möchten.

  3. Nachdem Sie das entsprechende WMI-Namespace-Objekt markiert haben, wählen Sie von dort aus die SecurityOption rechts unten in den Eigenschaftsfenstern aus, fügen Sie das Benutzerkonto oder die Sicherheitsgruppen entsprechend hinzu und erteilen und setzen Sie die entsprechenden Berechtigungen nach Bedarf.


Screenshot Beispiel


Weitere Ressourcen

Danach kann ein Standardbenutzer mit "manage-bde -unlock X: -pw" ein Laufwerk entsperren. Da dies mir dabei geholfen hat, die akzeptierte Antwort zu finden, gebe ich dieser Antwort die Prämie. Peter Hahndorf vor 7 Jahren 0
Diese Änderung bleibt nur bis zum nächsten Windows-Update bestehen. Ich habe erklärt, wie diese Änderung in meiner Antwort skriptiert wird. Peter Hahndorf vor 7 Jahren 0
0
harrymc

In Anbetracht der obigen Diskussion kann ich zwei Lösungen sehen:

  1. Schreiben Sie ein C / C ++ / C # -Programm, das die Mounts mithilfe der gefundenen APIs ausführt
  2. Schreiben Sie Skripte (die Administratorrechte benötigen).

Für den zweiten Punkt sehe ich eine (etwas umständliche) Methode, mit der ein Standardbenutzer ein Skript als Administrator starten kann, vorausgesetzt, Sie haben Zugriff auf das Administratorkonto, möchten es aber nicht für den täglichen Gebrauch verwenden.

Die Idee ist, eine geplante Task zu verwenden, die jede Minute nach der Anmeldung wiederholt als Administrator ausgeführt wird und das Vorhandensein einer Datei überprüft, die den BitLocker-Schlüssel enthält, und nur dann agieren, wenn die Datei vorhanden ist. Ein solcher Auslöser wird nicht zu viele Ressourcen beanspruchen und den Computer nicht verlangsamen.

In der folgenden Diskussion wird die DOS-Befehlssyntax verwendet. PowerShell verfügt jedoch bei Bedarf über eine ähnliche Funktionalität.

Wenn sich die Datei mit dem Schlüssel befindet /path/to/keyfile.txt, ähnelt der geplante Task-Auslöser zum Entsperren dem folgenden .bat-Skript:

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" ) 

Um den Trigger zu starten, erstellen Sie die Datei mit einem anderen Skript, das unter einem Standardbenutzerkonto ausgeführt wird:

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

Details zu diesen DOS-Befehlen finden Sie im Artikel:
Ein AZ-Index der Windows CMD-Befehlszeile

0
hagier

Ich fürchte, Sie können dies nicht mit dem Ausführen von Skripts als sich selbst tun, wenn Sie die Benutzerkontensteuerung auf Ihrem Computer nicht vollständig deaktivieren. Wenn sich Ihre Frage jedoch auf die Vereinfachung der Verwendung Ihres Skripts bezieht, habe ich vor einiger Zeit eine Lösung gefunden, die ich jedes Mal verwende, wenn ich Skripts mit erhöhten Berechtigungen ausführen muss.

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  } 

Nachdem Sie diesen Code am Anfang eines Skripts eingefügt haben, wird das Skript automatisch mit erhöhten Berechtigungen erneut ausgeführt, wobei alle Argumente erneut an die neue "erhöhte Instanz" übergeben werden.

0
Jo Jacobs

Ich habe den Prozess mithilfe von Process Monitor untersucht, um herauszufinden, was Windows Explorer genau macht, wenn "Unlock Drive" in der Gui ausgewählt wird. Es wird gestartet, bdeunlock.exe gefolgt vom Laufwerksbuchstaben zu starten. Dies scheint eine App zu sein, die Sie zur Eingabe des Passworts auffordert. Dies funktioniert mit Standardbenutzerberechtigungen.

Ich habe bereits in meiner Frage `bdeunlock.exe` erwähnt. Es hat eine GUI, ich möchte keine GUI. Peter Hahndorf vor 5 Jahren 0