Разблокируйте Bitlocked data диск как обычный пользователь в командной строке

4612
Peter Hahndorf

У меня есть ПК с Windows 10 Pro, нет домена, я не использую BitLocker на системном диске, но зашифровал некоторые жесткие диски с данными, используя BitLocker и пароль (без TPM).

Когда мне нравится разблокировать эти диски, я могу выбрать их в проводнике и выбрать Unlock Drive..., после ввода моего пароля диск расшифровывается и я могу его использовать.

Поскольку у меня есть несколько таких дисков с одним и тем же паролем, я написал сценарий, чтобы разблокировать все их одновременно.

Unlock-BitLocker -MountPoint X: -Password $myPassword 

Это прекрасно работает, когда выполняется как администратор с повышенными правами, но когда я запускаю сценарий как мой обычный стандартный пользователь, он не работает

Get-CimInstance: доступ запрещен

WBEM_E_ACCESS_DENIED (0x80041003) У текущего пользователя нет прав на выполнение действия.

Я предполагаю, что и File Explorer, и модуль PowerShell BitLocker используют один и тот же Win32 API, почему один работает как обычный пользователь, а другой - нет?

Когда используешь:

manage-bde –unlock E: -rp password 

Я получил:

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. 

Используя Process Monitor, я вижу, что доступ к следующему разделу реестра запрещен:

HKLM\Software\Microsoft\WBEM\CIMOM 

Я также узнал, что в меню содержимого File Explorer вызывается исполняемый файл:

%systemroot%\System32\bdeunlock.exe 

который отображает маленькое всплывающее окно для ввода пароля.

При использовании bdeunlock.exeнет доступа HKLM\Software\Microsoft\WBEM\CIMOMотображается в Process Monitor. Таким образом, кажется, что он разблокирует диск без доступа к этому ключу.

Похоже, что и командлеты PowerShell и manage-bde.exeиспользование WMI:

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

и обычный пользователь не имеет доступа к этому.

Но bdeunlock.exeможет использовать функцию FveOpenVolumeWв FVEAPI.dll(файл API Bitlocker) напрямую, без использования WMI.

Есть ли способ разблокировать фиксированный диск с заблокированными данными в командной строке как обычный пользователь?

3
The permission File Explorer and PowerShell command prompt, have by default are different, which is the reason your script isn't working While the end result of the explorer menu item, Unlock Drive, and the PowerShell commandlet `Unlock-Bitlocker` are the same how they go about doing it is different. Ramhound 7 лет назад 0
@Ramhound - я вижу, что они делают что-то другое, иначе у меня не было бы этого несоответствия. Но я не покупаю, что у них есть разные разрешения, у вас есть доказательства для этого требования? Peter Hahndorf 7 лет назад 0
My proof is my 20+ years of programming experience on Windows and understanding the default process permissions of both the PowerShell command prompt unles elevated and File Explorer and the exact nature of how that context menu works. I am not prepared to say, without a shadow of a doubt, it isn't possible to achieve what you want though. *Which is the reason I have not submitted an answer saying, that what you want, is not possible.* Ramhound 7 лет назад 1
Хм, я программирую на Windows NT чуть более 20 лет, и впервые слышу, что разрешение для входа в контекстное меню оболочки отличается от консольного приложения. Мне серьезно любопытно, почему это будет. Peter Hahndorf 7 лет назад 0
That explaination would require more then 600 characters, likely around 1800 characters, and not something I am prepared to even attempt to do for another 48 hours. In a single sentence, its the difference between the PowerShell environment, and how the context menu interacts with `manage-bde.exe` Ramhound 7 лет назад 0
Verify that in an non-elevated command prompt that, `manage-bde –unlock E: -rp password` unlocks the mounted drive without elevated permissions. If the drive letter is `X` use that instead. Ramhound 7 лет назад 0
@Ramhound - Спасибо за ваш вклад, я добавил больше деталей к вопросу, предложенная команда также приводит к отказу в доступе. Peter Hahndorf 7 лет назад 0
@Homey_D_Clown_IT - Спасибо, но то, что вы предлагаете, просто меняет способ, которым я называю `Unlock-BitLocker`, но в итоге он запускает тот же командлет и выдает мне ту же ошибку` Access Denied`. Peter Hahndorf 7 лет назад 0
@Homey_D_Clown_IT - это просто запускает сценарий повышенного уровня, который работает, но это именно то, что я не хочу делать. Вопрос в том, как сделать это как обычный пользователь. Peter Hahndorf 7 лет назад 0
Пит. Как насчет того, чтобы предоставить обычному пользователю или какой-либо группе прямой доступ к пути WMI, как вы обнаружили из `wmimgmt.msc` .... Это бы удовлетворило ваши потребности, если бы это работало так, чтобы стандартный / нелокальный администратор - возможность запуска сценария без повышенных прав для доступа к пространству имен `root \ cimv2 \ Security \ MicrosoftVolumeEncryption`? Смотрите здесь: https://technet.microsoft.com/en-us/library/cc771551(v=ws.11).aspx Pimp Juice IT 7 лет назад 0
Посмотрите на этот снимок экрана, на котором я говорю о предоставлении явного разрешения стандартной учетной записи пользователя через `wmimgmt.msc` https://i.imgur.com/7HT4Udi.png Pimp Juice IT 7 лет назад 0
@Homey_D_Clown_IT - Предоставление разрешения `execute method` для объекта WMI привело к первой ошибке отказа в доступе. Но потом я получил следующий. В настоящее время я отлаживаю модуль BitLocker PowerShell, мне отказано в доступе ко второму KeyProtector. Peter Hahndorf 7 лет назад 0
In the PowerShell BitLocker module, a standard user does not have access to the recovery password but to the normal password. So changing one line in the module now allows my standard user to unlock the drive. But of course this is not really an option. I could make a copy of that module and use it instead. And `yes` is not an option on my UAC prompt, I have to enter a long password as I am a standard user. But I see your point. I guess I will write an answer myself to explain all this. Peter Hahndorf 7 лет назад 0
Вы можете запустить скрипт как запланированное задание после входа в систему, работая от имени администратора. harrymc 7 лет назад 0
@harrymc - это может сработать, но я не хочу автоматической разблокировки дисков с блокировкой, я все же хочу, чтобы пользователь ввел пароль. Если запуск выполняется как запланированное задание, мне придется хранить весь пароль где-то, как в диспетчере учетных данных администратора. Администратор даже не должен знать пароль для дисков с блокировкой. Peter Hahndorf 7 лет назад 0
@Homey_D_Clown_IT - Если вы хотите щедрость, напишите быстрый ответ о разрешениях WIM. Это помогло мне найти решение. Peter Hahndorf 7 лет назад 0

5 ответов на вопрос

1
Peter Hahndorf

Продолжая свое исследование, которое я объяснил в самом вопросе, я продолжил изучение этого вопроса.

Использование командлета PowerShell, Unlock-Bitlockerпоскольку его код доступен в виде открытого текста на каждом компьютере с Windows.

Первая ошибка во время выполнения командлета происходит при вызове:

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

Я получаю 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 

проблема в том, что это запрашивает пароль у пользователя, и в настоящее время у меня есть четыре устройства для разблокировки, и я предпочел бы ввести пароль только один раз.

Использование командлета Unlock-Bitlocker в PowerShell теперь получает предыдущую ошибку, но отображает еще одну:

Доступ запрещен в Get-BitLockerVolumeInternal ...

Рассматривая код модуля PowerShell, он ломается в тот момент, когда код пытается получить доступ к паролю восстановления, что может сделать только администратор. Если я изменю код, чтобы проигнорировать эту ошибку и просто продолжить, а не ломать ее, она будет работать нормально.

Но это плохой взлом, потому что мне пришлось взять на себя ответственность за файл модуля, изменить разрешения и затем отредактировать код. Все, что я не должен делать с системным файлом Windows, плюс в следующий раз, когда Microsoft обновит этот модуль PowerShell, мои изменения будут перезаписаны.

Одним из решений является копирование соответствующих фрагментов кода в мой собственный модуль PowerShell и использование его вместо этого. Это может даже не быть законным.

Другим решением является удаление пароля восстановления:

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

Это оставляет мне только одну защиту для диска с блокировкой, обычный пароль.

Почему рекомендуется удалить пароль восстановления с жесткого диска с данными, зашифрованного с помощью BitLocker?

Любой администратор может увидеть пароль восстановления и использовать его для расшифровки диска, WFT!

Вся моя цель была защитить данные на дисках от других людей. Кто-то может украсть мой компьютер, загрузиться в Linux с live-CD и получить доступ к учетной записи администратора при установке Windows.

После того, как я удалил пароли восстановления, я могу использовать исходный Unlock-Bitlockerкомандлет в качестве обычного пользователя для разблокировки моих дисков. Мне все еще нужно было изменить разрешения для объекта WMI, как описано выше.

Изменить: После обновления Windows 10, в этом случае 14939.222разрешения на root\cimv2\Security\MicrosoftVolumeEncryptionбыли сброшены, и мне пришлось изменить их снова. Так что, похоже, это не окончательное решение.

Из-за этого сброса Центра обновления Windows я решил написать сценарий изменения для разрешения WMI. Я использую, Set-WmiNamespaceSecurity.ps1который доступен в этом блоге Microsoft, то я могу использовать:

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

Вы можете предоставить обычному пользователю или группе безопасности, к которой он принадлежит, явный доступ к объекту WMI по указанному пути wmimgmt.msc.

Таким образом, вам не нужно предоставлять учетной записи локального администратора или повышенные разрешения, и они будут просто иметь точный и явный доступ, который им необходим, к соответствующим пространствам имен WMI по мере необходимости и ничего более - минимально необходимые разрешения для выполнения операции.

инструкции

  1. Нажмите +, введите и нажмите . Щелкните правой кнопкой мыши опцию WMI Control (Local) слева и выберите .WinKeyRwmimgmt.mscEnterProperties

  2. Перейдите на Securityвкладку из окон свойств, а затем разверните Rootпространство имен to до конкретных объектов пространства имен WMI, для которых вам необходимо явно предоставить доступ.

  3. Как только вы выделите соответствующий объект пространства имен WMI, оттуда вы выберете Securityопцию в правой нижней части окна свойств и добавите соответственно учетную запись пользователя или группы безопасности, а также предоставите и установите соответствующие разрешения при необходимости.


Пример снимка экрана

enter image description here


Дополнительные ресурсы

После этого обычный пользователь может использовать `manage-bde -unlock X: -pw`, чтобы разблокировать диск. Поскольку это помогло мне найти принятый ответ, я присуждаю награду за этот ответ. Peter Hahndorf 7 лет назад 0
Это изменение сохраняется только до следующего обновления Windows, я объяснил, как написать это изменение в своем ответе. Peter Hahndorf 7 лет назад 0
0
harrymc

В свете вышеизложенного, я вижу два решения:

  1. Напишите программу на C / C ++ / C #, которая выполняет монтирование с использованием найденных вами API.
  2. Написание скриптов (для этого нужно разрешение администратора).

Во-вторых, я вижу один (несколько громоздкий) способ для обычного пользователя запустить скрипт от имени администратора, предполагая, что у вас есть доступ к учетной записи администратора, но вы не хотите использовать его для повседневного использования.

Идея состоит в том, чтобы использовать запланированное задание, которое будет выполняться несколько раз как администратор каждую минуту после входа в систему и проверять наличие файла, который будет содержать ключ BitLocker, и действовать только в том случае, если файл существует. Такой триггер не будет использовать слишком много ресурсов и не будет тормозить работу компьютера.

В приведенном ниже обсуждении используется синтаксис команды DOS, но при необходимости PowerShell обладает аналогичной функциональностью.

Если файл, содержащий ключ, находится в /path/to/keyfile.txt, триггер запланированной задачи для разблокировки будет похож на этот сценарий .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" ) 

Чтобы запустить триггер, создайте файл с помощью другого сценария, который будет запускаться под стандартной учетной записью пользователя:

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

Подробности об этих командах DOS можно найти в статье:
Индекс AZ командной строки Windows CMD

0
hagier

Боюсь, что вы не сможете сделать это, запустив скрипт самостоятельно, если только вы полностью не отключите UAC на своем компьютере. Однако, если ваш вопрос связан с упрощением использования вашего скрипта, я нашел решение некоторое время назад, и я использую его каждый раз, когда мне нужно запустить скрипты с повышенными разрешениями.

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  } 

После вставки этого кода в начало скрипта он автоматически перезапустит скрипт с повышенными правами доступа, снова передав все его аргументы новому «повышенному экземпляру».

0
Jo Jacobs

Я изучил процесс с помощью Process Monitor, чтобы выяснить, что именно делает Проводник Windows при выборе «Разблокировать диск» в графическом интерфейсе. Это происходит, чтобы запустить bdeunlock.exe с последующей буквой диска. Похоже, это приложение, которое запрашивает пароль. Это работает с использованием стандартных разрешений пользователей.

Я уже упоминал `bdeunlock.exe` в моем вопросе. У него есть GUI, я не хочу GUI. Peter Hahndorf 5 лет назад 0