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

У меня есть ПК с 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

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

%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.

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

5 ответов

Решение

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

Использование командлета 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

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

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

инструкции

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

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

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


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


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

Боюсь, вы не сможете сделать это, запустив скрипт самостоятельно, если только вы полностью не отключите 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 
}

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

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

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

  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

Другие вопросы по тегам