Entsperren Sie das Bitlock-Datenlaufwerk als Standardbenutzer in der Befehlszeile

5

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

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

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

Unlock-BitLocker -MountPoint X: -Password $myPassword

Dies funktioniert einwandfrei, wenn es als Administrator mit erhöhten Rechten ausgeführt wird. Wenn ich das Skript jedoch als normalen Standardbenutzer ausführe, schlägt dies 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 ich feststellen, dass der Zugriff auf den folgenden Registrierungsschlüssel verweigert wird:

HKLM\Software\Microsoft\WBEM\CIMOM

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

%systemroot%\System32\bdeunlock.exe

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

Bei Verwendung bdeunlock.exevon HKLM\Software\Microsoft\WBEM\CIMOMwird im Prozessmonitor kein Zugriff auf angezeigt. Es scheint also, dass das Laufwerk entsperrt wird, ohne auf diesen Schlüssel zuzugreifen.

Es sieht so aus, als ob sowohl die PowerShell-Cmdlets als manage-bde.exeauch WMI verwendet werden:

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

und ein Standardbenutzer hat keinen Zugriff darauf.

Sie bdeunlock.exekönnen die Funktion FveOpenVolumeWin FVEAPI.dll(Bitlocker-API-Datei) jedoch direkt verwenden, ohne zuvor WMI zu verwenden.

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

Peter Hahndorf
quelle
Die Berechtigungen für den Datei-Explorer und die PowerShell-Eingabeaufforderung sind standardmäßig unterschiedlich. Dies ist der Grund, warum Ihr Skript nicht funktioniert. Das Endergebnis des Explorer-Menüelements Laufwerk entsperren und das PowerShell-Kommando Unlock-Bitlockersind identisch es ist anders.
Ramhound
@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
1
Mein Beweis ist meine mehr als 20-jährige Programmiererfahrung unter Windows und das Verständnis der Standardprozessberechtigungen sowohl für die PowerShell-Eingabeaufforderung mit erhöhten Rechten als auch für den Datei-Explorer sowie der genauen Funktionsweise dieses Kontextmenüs. Ich bin nicht bereit zu sagen, dass es ohne Zweifel nicht möglich ist, das zu erreichen, was Sie wollen. Aus diesem Grund habe ich keine Antwort gegeben, die besagt, dass das, was Sie wollen, nicht möglich ist.
Ramhound
Hmm, ich programmiere seit etwas mehr als 20 Jahren unter Windows NT, und dies ist das erste Mal, dass ich höre, dass sich die Berechtigungen für einen Shell-Kontextmenüeintrag von denen für eine Konsolen-App unterscheiden. Ich bin ernsthaft neugierig, warum das so ist.
Peter Hahndorf
Diese Erklärung würde mehr als 600 Zeichen erfordern, wahrscheinlich etwa 1800 Zeichen, und ich bin nicht bereit, es für weitere 48 Stunden zu versuchen. In einem einzigen Satz ist es der Unterschied zwischen der PowerShell-Umgebung und der Interaktion des Kontextmenüsmanage-bde.exe
Ramhound

Antworten:

1

Sie können dem Standardbenutzer oder einer Sicherheitsgruppe gewähren, dass er Mitglied des expliziten Zugriffs auf das WMI-Objekt ist wmimgmt.msc.

Auf diese Weise müssen Sie dem Konto keine lokalen Administrator- oder erhöhten Berechtigungen erteilen, und sie haben nur den genauen und expliziten Zugriff auf die entsprechenden WMI-Namespaces, den sie benötigen, und nichts weiter - die für die Ausführung des Vorgangs erforderlichen Mindestberechtigungen.

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 in den Eigenschaftenfenstern zur Registerkarte, und erweitern Sie den RootNamespace to auf die spezifischen WMI-Namespace-Objekte, auf die Sie explizit Zugriff gewähren müssen.

  3. Sobald Sie das entsprechende WMI-Namespace-Objekt markiert haben, wählen Sie von dort aus die SecurityOption unten rechts im Eigenschaftenfenster aus und fügen dem Benutzerkonto oder den Sicherheitsgruppen die entsprechenden Berechtigungen hinzu.


Screenshot-Beispiel

Bildbeschreibung hier eingeben


Weitere Ressourcen

Pimp Juice IT
quelle
Danach kann ein Standardbenutzer manage-bde -unlock X: -pwein Laufwerk entsperren. Da dies mir half, die akzeptierte Antwort zu finden, erteile ich dieser Antwort das Kopfgeld.
Peter Hahndorf
Diese Änderung bleibt nur bis zum nächsten Windows-Update bestehen. Ich habe in meiner Antwort erklärt, wie diese Änderung per Skript ausgeführt wird.
Peter Hahndorf
1

Als ich meine Forschung fortsetzte, die ich in der Frage selbst erklärte, habe ich mich weiter damit befasst.

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

Der erste Fehler bei der Ausführung des Cmdlets tritt beim Aufrufen auf:

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

Ich bekomme eine Access Denied

@Homey_D_Clown_IT hat vorgeschlagen, die Sicherheit für das betreffende WIM-Objekt zu ändern. Öffnen wmimgmt.mscSie dazu den WMI Control (Local)Knoten auf der linken Seite und klicken Sie mit der rechten Maustaste Properties. Wählen Sie die SecurityRegisterkarte 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 das Entsperren der Bitlock-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, dass der Benutzer zur Eingabe des Kennworts aufgefordert wird und ich derzeit vier Laufwerke zum Entsperren habe. Ich würde es vorziehen, das Kennwort nur einmal einzugeben.

Beim Verwenden des Cmdlets Unlock-Bitlocker in PowerShell wird jetzt der vorherige Fehler übergeben, aber ein anderer angezeigt:

Zugriff in Get-BitLockerVolumeInternal verweigert ...

Wenn Sie in den Code des PowerShell-Moduls schauen, kommt es zu einem Fehler, bei dem der Code versucht, auf das Wiederherstellungskennwort zuzugreifen. Dies kann nur ein Administrator tun. Wenn ich den Code ändere, um diesen Fehler zu ignorieren und einfach fortzufahren, anstatt zu brechen, funktioniert es einwandfrei.

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

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 Wiederherstellungskennwort zu entfernen:

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

Dadurch habe ich nur einen einzigen Schutz für das Bitlock-Laufwerk, das normale Kennwort.

Warum ist es eine gute Idee, das Wiederherstellungskennwort von einem mit BitLocker verschlüsselten festen Datenlaufwerk zu entfernen?

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

Mein Ziel war es, die Daten auf den Laufwerken vor anderen Personen zu schützen. Jemand könnte meinen PC stehlen, von einer Live-CD booten und unter 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 immer 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 das root\cimv2\Security\MicrosoftVolumeEncryptionzurückgesetzt und ich musste sie nochmal ändern. Das scheint also doch keine dauerhafte Lösung zu sein.

Aufgrund dieses Zurücksetzens durch Windows Update habe ich beschlossen, die Änderung für die WMI-Berechtigung zu skripten. 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
Peter Hahndorf
quelle
0

Angesichts der obigen Diskussion sehe ich zwei Lösungen:

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

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

Die Idee ist, eine geplante Aufgabe zu verwenden, die jede Minute nach der Anmeldung wiederholt als Administrator ausgeführt wird und nach dem Vorhandensein einer Datei sucht, die den BitLocker-Schlüssel enthält, und nur dann zu handeln, wenn die Datei vorhanden ist. Ein solcher Trigger verbraucht nicht zu viele Ressourcen und verlangsamt den Computer nicht.

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

Wenn sich die Datei mit dem Schlüssel in befindet /path/to/keyfile.txt, ähnelt der geplante Task-Trigger 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 über ein anderes 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

Harrymc
quelle
0

Ich fürchte, Sie können dies nicht tun, wenn Sie das Skript selbst ausführen, es sei denn, Sie deaktivieren die Benutzerkontensteuerung auf Ihrem Computer vollständig. Wenn Ihre Frage sich 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 dieser Code am Anfang eines Skripts eingefügt wurde, wird das Skript automatisch mit erhöhten Berechtigungen erneut ausgeführt, wobei alle Argumente erneut an die neue "erhöhte Instanz" übergeben werden.

hagier
quelle
0

Ich habe den Prozess mit Process Monitor untersucht, um herauszufinden, was Windows Explorer genau macht, wenn ich "Unlock Drive" in der Benutzeroberfläche auswähle. Bdeunlock.exe wird gestartet, gefolgt vom Laufwerksbuchstaben. Dies scheint eine App zu sein, die zur Eingabe des Passworts auffordert. Dies funktioniert mit Standardbenutzerberechtigungen.

Jo Jacobs
quelle
Ich habe es bereits bdeunlock.exein meiner Frage erwähnt. Es hat eine GUI, ich möchte keine GUI.
Peter Hahndorf