web-dev-qa-db-ja.com

コマンドラインで標準ユーザーとしてBitlockerデータドライブのロックを解除する

私はWindows 10 Pro PCを使用していますが、ドメインがありません。システムドライブでBitLockerを使用していませんが、BitLockerとパスワード(TPMなし)を使用して一部の固定データドライブを暗号化しています。

これらのドライブのロックを解除したい場合は、エクスプローラーでドライブを選択してUnlock Drive...を選択します。パスワードを入力すると、ドライブが復号化され、使用できるようになります。

私は同じパスワードを持つこれらのドライブをいくつか持っているので、同時にすべてのロックを解除するスクリプトを書きました。

Unlock-BitLocker -MountPoint X: -Password $myPassword

これは、昇格した管理者として実行すると正常に機能しますが、通常の標準ユーザーとしてスクリプトを実行すると失敗します。

Get-CimInstance:アクセスが拒否されました

WBEM_E_ACCESS_DENIED(0x80041003)現在のユーザーには、アクションを実行する権限がありません。

ファイルエクスプローラーと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.

プロセスモニターを使用すると、次のレジストリキーへのアクセスが拒否されていることがわかります。

HKLM\Software\Microsoft\WBEM\CIMOM

また、ファイルエクスプローラーのコンテンツメニューが実行可能ファイルを呼び出すこともわかりました。

%systemroot%\System32\bdeunlock.exe

パスワードを入力するための小さなポップアップウィンドウが表示されます。

bdeunlock.exeを使用すると、HKLM\Software\Microsoft\WBEM\CIMOMへのアクセスがプロセスモニターに表示されません。そのため、そのキーにアクセスせずにドライブのロックを解除するようです。

PowerShellコマンドレットとmanage-bde.exeの両方がWMIを使用しているようです:

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

標準ユーザーはこれにアクセスできません。

ただし、bdeunlock.exeは、最初にWMIを使用せずに、FVEAPI.dll(Bitlocker APIファイル)の関数FveOpenVolumeWを直接使用できます。

標準ユーザーとしてコマンドラインでBitlocked固定データドライブのロックを解除する方法はありますか?

6
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
_

問題は、これによりユーザーにパスワードの入力を求めるプロンプトが表示され、現時点でロックを解除するドライブが4台あるため、パスワードを1回だけ入力することをお勧めします。

PowerShellでUnlock-Bitlockerコマンドレットを使用すると、以前のエラーが渡されますが、別のエラーが表示されます。

Get-BitLockerVolumeInternalでアクセスが拒否されました...

PowerShellモジュールのコードを見ると、コードは、管理者しか実行できない回復パスワードにアクセスしようとするときに壊れます。コードを変更してそのエラーを無視し、中断するのではなく続行する場合、問題なく機能します。

しかし、これは悪いハックです。モジュールファイルの所有権を取得し、アクセス許可を変更してからコードを編集する必要があったからです。 Windowsシステムファイルで行うべきではないすべてのことに加えて、次にMicrosoftがそのPowerShellモジュールを更新したときに、私の変更が上書きされます。

1つの解決策は、関連するコードを自分のPowerShellモジュールにコピーし、代わりにそれを使用することです。それは合法ではないかもしれません。

別の解決策は、recoverypasswordを削除することです。

_manage-bde -protectors -delete X: -type recoverypassword
_

これにより、Bitlockedドライブの通常のパスワードであるプロテクターが1つだけ残ります。

BitLockerで暗号化された固定データドライブから回復パスワードを削除するのが良いのはなぜですか?

すべての管理者が回復パスワードを確認し、それを使用してドライブ、WFTを解読できます。

私の全体的な目的は、ドライブ上のデータを他の人から保護することでした。誰かが私のPCを盗んで、ライブCD linuxを起動し、私のWindowsインストールの管理者アカウントにアクセスする可能性があります。

回復パスワードを削除した後、元の_Unlock-Bitlocker_コマンドレットを標準ユーザーとして使用して、ドライブのロックを解除できます。上記のように、WMIオブジェクトのアクセス許可を変更する必要がありました。

編集:Windows 10のアップデート後、この場合は_14939.222_への_root\cimv2\Security\MicrosoftVolumeEncryption_の権限がリセットされ、私はもう一度交換してください。したがって、これは結局のところ恒久的な解決策ではないようです。

このWindows Updateによるリセットのため、WMIアクセス許可の変更をスクリプト化することにしました。私はこれで利用できる_Set-WmiNamespaceSecurity.ps1_を使用しています Microsoft Blog Post 、それから私は使うことができます:

_.\Set-WmiNamespaceSecurity.ps1 -namespace "root/cimv2/Security/MicrosoftVolumeEncryption" -operation add -account MyUserName -permissions  MethodExecute,Enable
_
1
Peter Hahndorf

標準ユーザーまたはセキュリティグループに、wmimgmt.mscで見つかったパスごとのWMIオブジェクトへの明示的なアクセスのメンバーであるユーザーを許可できます。

このように、アカウントにローカル管理者または昇格したアクセス許可を与える必要はありません。必要に応じて、関連付けられたWMI名前空間への正確かつ明示的なアクセス権を持ち、操作を実行するために必要な最低限のアクセス許可しかありません。

指示

  1. 押す - WinKey+Rwmimgmt.mscと入力して、 Enter。左側のWMIコントロール(ローカル)オプションを右クリックして、Propertiesを選択します。

  2. プロパティウィンドウからSecurityタブに移動し、Rootを必要な特定のWMI名前空間オブジェクトに名前空間に展開しますへのアクセスを明示的に許可します。

  3. 該当するWMI名前空間オブジェクトを強調表示したら、そこから Security プロパティウィンドウの右下からオプションを選択し、それに応じてユーザーアカウントまたはセキュリティグループを追加し、必要に応じて適切な権限を付与および設定します。


スクリーンショットの例

enter image description here


その他のリソース

1
Pimp Juice IT

私は、プロセスモニターを使用してプロセスを調べ、Guiで[ドライブのロック解除]を選択したときのWindowsエクスプローラーの正確な動作を確認しました。偶然、bdeunlock.exeに続いてドライブ文字が起動されます。これは、パスワードを要求するアプリのようです。これは、標準のユーザー権限を使用して機能します。

0
Jo Jacobs

上記の議論に照らして、私は2つの解決策を見ることができます:

  1. 見つけたAPIを使用してマウントを行うC/C++/C#プログラムを作成する
  2. スクリプトを作成します(管理者権限が必要です)。

2つ目のポイントとして、管理者アカウントへのアクセス権はあるが日常的な使用を望まない場合、標準ユーザーがスクリプトを管理者として起動する(やや扱いにくい)方法の1つを確認できます。

アイデアは、ログオン後1分ごとにadminとして繰り返し実行され、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コマンドの詳細については、次の記事を参照してください。
Windows CMDコマンドラインのA-Zインデックス

0
harrymc

コンピューターで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
hagier