3

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

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

5 ответов5

1

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

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

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

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

инструкции

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

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

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


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


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

0

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

0

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

  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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .