BitLocker 回復ガイド

IT 担当者向けのこのトピックでは、AD DS から BitLocker キーを回復する方法について説明します。

Active Directory ドメイン サービス (AD DS) に保存されている BitLocker 回復情報を使用すると、BitLocker で保護されたデータにアクセスできます。BitLocker の展開を計画するときに、BitLocker の回復モデルを作成することをお勧めします。

この記事は、読者が BitLocker 回復情報を自動的にバックアップするための AD DS の設定方法と、AD DS に保存される回復情報の種類を理解していることを前提としています。

この記事では、BitLocker 回復情報を格納するための AD DS の構成方法については説明しません。

この記事では、次のトピックを取り上げます。

BitLocker 回復とは

BitLocker 回復とは、BitLocker で保護されたドライブを正常にロック解除できない場合に、ドライブに再びアクセスできるようにするプロセスです。回復シナリオでは、ドライブへのアクセスの復元に関して次のオプションがあります。

  • ユーザーは回復パスワードを提供できます。組織がユーザーに回復パスワードの印刷または保存を許可している場合、ユーザーは 48 桁の回復パスワードを印刷するか、USB ドライブまたは Microsoft アカウントにオンラインで保存しておき、入力できます (Microsoft アカウントへのオンラインでの回復パスワードの保存は、ドメインのメンバーではない PC で BitLocker が使用される場合にのみ可能です)。

  • データ回復エージェントは、それ自体の資格情報を使用してドライブをロック解除できます。ドライブがオペレーティング システム ドライブの場合、データ回復エージェントがドライブをロック解除するには、ドライブを別のコンピューターのデータ ドライブとしてマウントする必要があります。

  • ドメイン管理者は、AD DS から回復パスワードを取得し、それを使ってドライブのロックを解除できます。IT 担当者が必要に応じて組織内のドライブの回復パスワードを取得できるようにする方法としては、AD DS に回復パスワードを格納することをお勧めします。この方法を使用するには、ローカル グループ ポリシー エディターの [コンピューターの構成\管理用テンプレート\Windows コンポーネント\BitLocker ドライブ暗号化\オペレーティング システムのドライブ] にある BitLocker のグループ ポリシー設定 [BitLocker で保護されているオペレーティング システム ドライブの回復方法を選択する] で、この回復方法を有効にしておく必要があります。詳細については、「BitLocker グループ ポリシー設定」を参照してください。

BitLocker 回復が実行される原因

オペレーティング システム ドライブを起動しようとしたときに BitLocker が回復モードになる原因となる具体的なイベントの例を次に示します。

  • BitLocker またはデバイスの暗号化を使用する PC では、攻撃が検出されると、デバイスは直ちに再起動して、BitLocker 回復モードに移行します。この機能を利用するには、ローカルのグループ ポリシー エディターの \Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options にある [対話型ログオン: コンピューター アカウントのロックアウトのしきい値] グループ ポリシー設定または Exchange ActiveSyncMaxFailedPasswordAttempts ポリシー (Windows Intune でも構成できます) を使用して、デバイスがデバイス ロックアウトに移行する前に許容されるパスワード入力失敗回数を制限します。

  • ハード ドライブの前に別のドライブでブートするようにブート順を変更した場合。

  • BIOS のブート順で CD または DVD ドライブをハード ドライブより前にして、CD または DVD を挿入または取り出した場合。

  • ハード ドライブから起動する前に、ネットワーク ドライブからの起動が失敗した場合。

  • ポータブル コンピューターをドッキングまたはドッキング解除した場合。場合によっては (コンピューターの製造元や BIOS によって異なります)、ポータブル コンピューターのドッキング状態はシステム測定に含まれ、システム状態を検証したり、BitLocker のロックを解除するためには一貫している必要があります。つまり、BitLocker が有効になっているときにポータブル コンピューターがドッキング ステーションに接続されている場合、ロック解除されているときもドッキング ステーションに接続しておくことが必要になる場合があります。逆に、BitLocker が有効になっているときにポータブル コンピューターがドッキング ステーションに接続されていない場合、ロック解除されているときもドッキング ステーションから外しておくことが必要になる場合があります。

  • ディスクの NTFS パーティション テーブルを変更した場合 (作成、削除、プライマリ パーティションのサイズ変更など)。

  • 正しくない暗証番号 (PIN) の入力回数が多すぎて、TPM のハンマリング対策ロジックが起動した場合。ハンマリング対策ロジックは、一定の時間が経過するまで PIN の入力を受け付けないことで、PIN に対するブルート フォース攻撃の難易度とコストを上げる、ソフトウェアまたはハードウェアによる手段です。

  • TPM ではなく USB ベースのキーを使用している場合、BIOS または UEFI ファームウェアからプリブート環境に USB デバイスを読み取るためのサポートを無効にした場合。

  • TPM を停止、無効化、非アクティブ化、またはクリアした場合。

  • 関連するブート測定値が変化する原因となる、BIOS や UEFI ファームウェアのアップグレードなどの、重要な初期スタートアップ コンポーネントをアップグレードした場合。

  • PIN 認証が有効になっているときに PIN を忘れた場合。

  • オプションの ROM ファームウェアを更新した場合。

  • TPM ファームウェアをアップグレードした場合。

  • ハードウェアを追加または取り外した場合。たとえば、PCMIA ワイヤレス カードなどの新しいカードをコンピューターに挿入するなど。

  • ポータブル コンピューターのスマート バッテリを外したり取り付けたりした場合、または完全に放電した場合。

  • ディスクのマスター ブート レコードを変更した場合。

  • ディスクのブート マネージャーを変更した場合。

  • オペレーティング システムから TPM を隠蔽した場所。一部の BIOS または UEFI の設定を使用すると、オペレーティング システムに対して TPM が列挙されないようにすることができます。このオプションを実装すると、TPM がオペレーティング システムから認識されないようにできます。TPM を隠蔽すると、BIOS および UEFI のセキュア スタートアップは無効になり、TPM はすべてのソフトウェアからのコマンドに応答しません。

  • PIN が正しく入力されない異なるキーボード、またはキーボード マップがプリブート環境で想定されているキーボード マップと一致しないキーボードを使用した場合。このような場合、拡張 PIN を入力できないことがあります。

  • TPM 検証プロファイルで使われているプラットフォーム構成レジスタ (PCR) を変更した場合。たとえば、PCR[1] を含めると BIOS の設定に対する BitLocker の測定がほとんど変化し、ブートに重要ではない BIOS 設定が変化した場合でも、Bitlocker は回復モードに移行します。

      

    一部のコンピューターの BIOS 設定では、PCR[2] などの特定の PCR の測定がスキップされます。BIOS でこの設定を変更すると、PCR の測定が異なるため、BitLocker は回復モードになります。

     
  • BitLocker で保護されたドライブを新しいコンピューターに移動した場合。

  • マザーボードを新しい TPM を備えた新しいものにアップグレードした場合。

  • スタートアップ キー認証が有効になっているときに、スタートアップ キーが含まれている USB フラッシュ ドライブが失われた場合。

  • TPM 自己テストに失敗した場合。

  • クライアント コンピューターの関連する Trusted Computing Group 標準に準拠していない BIOS、UEFI ファームウェア、またはオプションの ROM コンポーネントがある場合。たとえば、準拠していない実装では、揮発性のデータ (時刻など) が TPM 測定値に記録され、起動のたびに測定値が異なり、BitLocker が回復モードで開始する可能性があります。

  • TPM のストレージ ルート キーの使用承認を 0 以外の値に変更した場合。

      

    BitLocker の TPM 初期化プロセスは使用承認値を 0 に設定するので、別のユーザーまたはプロセスは明示的にこの値を変更する必要があります。

     
  • Windows ブート マネージャー (Bootmgr) で、コード整合性チェックを無効にした場合、またはテスト署名を有効にした場合。

  • 起動プロセス中に F8 キーまたは F10 キーを押した場合。

  • アドイン カード (ビデオ カードやネットワーク カードなど) を追加または削除した場合、またはアドイン カードのファームウェアをアップグレードした場合。

  • 起動プロセス中に BIOS のホット キーを使用して、ハード ドライブ以外にブート順を変更した場合。

  

回復を開始する前に、回復の原因となることを確認しておくことをお勧めします。将来問題が再び発生するのを防ぐのに役立ちます。たとえば、攻撃者が物理的にアクセスしてコンピューターを変更したと判断した場合は、物理プレゼンスのあるユーザーを追跡するための新しいセキュリティ ポリシーを作成できます。回復パスワードを使用して PC へのアクセスを回復した後、BitLocker は測定対象のコンポーネントの現在の値に対する暗号化キーを再シールします。

 

既知のハードウェアまたはファームウェアのアップグレードのような計画されているシナリオの場合、BitLocker の保護を一時的に中断することによって回復の開始を回避できます。BitLocker を中断してもドライブは完全に暗号化されたままになるので、管理者は計画的タスク完了後すぐに BitLocker の保護を再開できます。また、中断と再開を使用すると、回復キーを入力しなくても、暗号化キーが再シールされます。

  

manage-bde コマンド ライン ツールを使用して再起動回数が指定されていない場合、中断された BitLocker は PC の再起同時に保護を自動的に再開します。

ソフトウェアの保守でコンピューターを再起動する必要があり、2 要素認証を使用している場合、コンピューターに追加認証方法を提供する社内ユーザーがいないときは、BitLocker ネットワーク ロック解除で第 2 の認証要素を提供できます。

 

計画されていない動作または好ましくない動作での回復について説明してきましたが、アクセス制御を管理するために意図的な運用シナリオで回復を行うこともできます。たとえば、社内の他の部門や従業員にデスクトップまたはラップトップ コンピューターを再展開するときは、コンピューターを新しいユーザーに与える前に、BitLocker を強制的に回復モードにすることができます。

回復のテスト

詳細な BitLocker 回復プロセスを作成する前に、エンド ユーザー (ヘルプデスクに回復パスワードを問い合わせてくるユーザー) および管理者 (エンド ユーザーが回復パスワードを入手するのを支援するユーザー) の両方に関して、回復プロセスの動作をテストすることをお勧めします。manage-bde の –forcerecovery コマンドを使用すると、ユーザーが回復状況に直面する前に、回復プロセスの手順を簡単に実行できます。

Mt404676.wedge(ja-jp,VS.85).gifローカル コンピューターで回復を強制的に実行するには

  1. [スタート] ボタンをクリックし、[検索の開始] ボックスに「cmd」と入力します。cmd.exe を右クリックして、[管理者として実行] をクリックします。

  2. コマンド プロンプトで、次のコマンドを入力し、Enter キーを押します。

    manage-bde -forcerecovery <Volume>

Mt404676.wedge(ja-jp,VS.85).gifリモート コンピューターで回復を強制的に実行するには

  1. スタート画面で、「cmd.exe」と入力し、[管理者として​​実行] をクリックします。

  2. コマンド プロンプトで、次のコマンドを入力し、Enter キーを押します。

    manage-bde. -ComputerName <ComputerName>-forcerecovery <Volume>

  

<ComputerName> は、リモート コンピューターの名前です。<Volume> は、BitLocker によって保護されているリモート コンピューターのボリュームです。

 

回復プロセスの計画

BitLocker の回復プロセスを計画するときは、最初に機密情報の回復に関する組織の現在のベスト プラクティスを確認してください。たとえば、失われた Windows パスワードの処理方法や、スマート カードの PIN のリセット方法などです。これらのベスト プラクティスと関連リソース (人やツール) を使用して、BitLocker の復旧モデルを作成します。

Windows 10、Windows 8、または Windows 7 オペレーティング システムと Windows To Go を搭載している多数のコンピューターおよびリムーバブル ドライブのデータを保護するために、BitLocker ドライブ暗号化と BitLocker To Go を使用している場合は、マイクロソフト ソフトウェア アシュアランスに対する Microsoft Desktop Optimization Pack (MDOP) に含まれる Microsoft BitLocker Administration and Monitoring (MBAM) Tool バージョン 2.0 の使用を検討する必要があります。MBAM を使用すると、BitLocker の実装の展開と管理が容易になり、管理者はオペレーティング システム ドライブと固定ドライブの暗号化をプロビジョニングおよび監視できます。MBAM は固定ドライブを暗号化する前にユーザーにプロンプトを表示します。また、MBAM は固定ドライブとリムーバブル ドライブの回復キーを管理し、回復の管理をより簡単にします。MBAM は、Microsoft System Center の展開の一部として、またはスタンドアロン ソリューションとして使用できます。詳細については、Microsoft BitLocker の管理と監視に関するページを参照してください。

BitLocker 回復が開始された後、ユーザーは回復パスワードを使用して暗号化されたデータへのアクセスをロック解除できます。組織での自己回復方法と回復パスワード取得方法の両方を検討する必要があります。

回復プロセスを決定するときは次のことが必要です。

  • 回復パスワードを取得する方法について理解します。以下をご覧ください。

  • 回復が行われた理由の分析や回復パスワードのリセットなど、回復後の一連の手順を決定します。以下をご覧ください。

自己回復

場合によっては、ユーザーが回復パスワードを印刷したり USB フラッシュ ドライブに保存してあり、自分で回復を実行できることがあります。組織としての自己回復に関するポリシーを作成することをお勧めします。自己回復に USB フラッシュ ドライブに保存されたパスワードまたは回復キーの使用が含まれる場合、USB フラッシュ ドライブを PC と同じ場所に保管しないようユーザーに警告する必要があります。このことは出張の時に特に重要であり、とたえば PC と回復アイテムを同じバッグに入れてあると、承認されていないユーザーが非常に簡単に PC にアクセスできてしまいます。検討する必要があるもう 1 つのポリシーは、根本原因がわかるように、ユーザーに自己回復を実行する前または後にヘルプデスクに連絡させることです。

回復パスワードの取得

ユーザーが回復パスワードを印刷していない場合、または USB フラッシュ ドライブに保存していない場合は、ユーザーはオンライン ソースから回復パスワードを取得できる必要があります。PC がドメインのメンバーである場合は、回復パスワードを AD DS にバックアップできます。ただし、これは既定では行われないので、PC で BitLocker を有効にする前に、適切なグループ ポリシー設定を構成する必要があります。BitLocker のグループ ポリシー設定は、ローカル グループ ポリシー エディターまたはグループ ポリシー管理コンソール (GPMC) の [コンピューターの構成\ポリシー\管理用テンプレート\Windows コンポーネント\BitLocker ドライブ暗号化] にあります。次のポリシー設定は、認証方法が失敗した場合または使用できない場合に、BitLocker で保護されたドライブへのアクセスを復元するために使用できる回復方法を定義します。

  • BitLocker で保護されているオペレーティング システム ドライブの回復方法を選択する

  • BitLocker で保護されている固定ドライブの回復方法を選択する

  • BitLocker で保護されているリムーバブル ドライブの回復方法を選択する

これらの各ポリシーについて、[Active Directory ドメイン サービスに BitLocker 回復情報を保存する] を選択し、オペレーティング システム ドライブの Active Directory ドメイン サービス (AD DS) に格納する BitLocker 回復情報を選択します。コンピューターがドメインに接続されていなくて、ドライブの BitLocker 回復情報を AD DS にバックアップできない場合に、ユーザーが BitLocker を有効にできないようにするには、[AD DS にオペレーティング システム ドライブ/固定データ ドライブ/リムーバブル データ ドライブの回復情報が格納されるまで BitLocker を有効にしない] チェック ボックスをオンにします。

  

PC がワークグループの一部である場合、Microsoft アカウントにオンラインで BitLocker 回復パスワードを保存するようユーザーにアドバイスする必要があります。回復が必要なときにデータへのアクセスが失われないように、BitLocker 回復パスワードのオンライン コピーを作成することをお勧めします。

 

Active Directory ユーザーとコンピューター ツールの BitLocker 回復パスワード ビューアーを使用すると、ドメイン管理者は Active Directory 内の特定のコンピューター オブジェクトの BitLocker 回復パスワードを表示できます。

次の一覧をテンプレートとして使用して、回復パスワードを取得するための独自の回復プロセスを作成できます。このプロセスの例では、Active Directory ユーザーとコンピューター ツールの BitLocker 回復パスワード ビューアーを使用します。

ユーザーのコンピューターの名前を記録する

ユーザーのコンピューターの名前を使用して、AD DS 内で回復パスワードを検索できます。ユーザーがコンピューターの名前を知らない場合は、[Windows BitLocker ドライブ暗号化パスワードの入力] ユーザー インターフェイスの [ドライブ ラベル] の最初の単語をユーザーに読み上げてもらいます。これは BitLocker を有効にしたときのコンピューター名であり、おそらくコンピューターの現在の名前です。

ユーザーの ID を確認する

回復パスワードを要求している人が本当にそのコンピューターの承認されたユーザーであることを確認する必要があります。また、ユーザーが提供した名前のコンピューターがユーザーに属していることの確認も必要になる場合があります。

AD DS 内で回復パスワードを探す

AD DS で名前が一致するコンピューター オブジェクトを検索します。コンピューター オブジェクトの名前は AD DS のグローバル カタログに一覧表示されるため、複数ドメインのフォレストであってもオブジェクトを検索できます。

複数の回復パスワード

AD DS でコンピューター オブジェクトに複数の回復パスワードが保存されている場合、BitLocker 回復情報オブジェクトの名前には、パスワードが作成された日付が含まれています。

提供するパスワードがわからない場合、または正しくないパスワードを提供していると思われる場合は、回復コンソールに表示される 8 文字のパスワード ID をユーザーに読み上げてもらいます。

パスワード ID は AD DS に保存されている各回復パスワードに関連付けられている一意の値であるため、この ID を使用してクエリを実行すると、暗号化されたボリュームのロックを解除するための正しいパスワードを検索できます。

回復が発生した理由を特定する情報を収集する

回復パスワードをユーザーに教える前に、回復後分析で根本原因を分析するため、回復が必要になった理由の特定に役立つ情報を収集する必要があります。回復後の分析の詳細については、「回復後の分析」を参照してください。

ユーザーに回復パスワードを提供する

回復パスワードは 48 桁と長いため、ユーザーは書き留めたり、別のコンピューターに入力することで、パスワードを記録する必要があります。MBAM を使用している場合は、管理されていないパスワードに伴うセキュリティ リスクを避けるため、回復後に MBAM データベースから回復パスワードが再生成されます。

  

48 桁の回復パスワードは長く、数字の組み合わせが含まれているので、ユーザーがパスワードを聞き間違えたり、誤入力したりする可能性があります。起動時回復コンソールは、組み込まれているチェックサム番号を使用して、48 桁の回復パスワードの 6 桁ブロックごとに入力エラーを検出し、ユーザーがエラーを修正できるようにします。

 

回復後の分析

回復パスワードを使用してボリュームがロック解除されると、イベントがイベント ログに書き込まれ、TPM でプラットフォーム検証測定値が現在の構成と一致するようにリセットされます。 ボリュームのロックを解除するということは、暗号化キーが解放され、ボリュームへのデータ書き込み時の即時暗号化およびボリュームからのデータ読み取り時の即時暗号解除に対応できる状態であることを意味します。ボリュームがロック解除された後、BitLocker は、アクセスが許可された方法に関係なく同じように動作します。

回復パスワードによるロック解除が繰り返し発生する場合、回復後に分析を行って回復の根本原因を特定し、コンピューターを起動するたびにユーザーが回復パスワードを入力する必要がないように、BitLocker プラットフォームの検証を更新する必要があります。以下をご覧ください。

回復の根本原因を特定する

ユーザーがドライブを回復する必要があった場合、できるだけ早く、回復の契機になった根本原因を特定することが重要です。コンピューターの状態を適切に分析し、改ざんを検出することにより、企業のセキュリティに広範な影響を及ぼす脅威が明らかになる可能性があります。

管理者は回復の原因をリモートで調査できる場合がありますが、エンド ユーザーは根本原因をさらに分析するには回復ドライブを含むコンピューターが手元にある必要があります。

組織に関して次の質問を検討し、回答してください。

  1. どの BitLocker 保護モードが有効になっていますか (TPM、TPM + PIN、TPM + スタートアップ キー、スタートアップ キーのみ)。PC ではどの PCR プロファイルが使用されていますか。

  2. ユーザーは PIN を忘れただけですか、それともスタートアップ キーをなくしましたか。トークンを失いましたか、トークンはどこにありそうですか。

  3. TPM モードが有効であった場合、回復の原因はブート ファイルの変更によるものでしたか。

  4. ブート ファイルの変更が回復の原因であった場合、それはユーザーの意図された操作 (たとえば、BIOS のアップグレード) によるものですか、または悪意のあるソフトウェアによるものですか。

  5. ユーザーが最後にコンピューターを正常に起動できたのはいつですか、またそれ以降にコンピューターでどのようなことが発生しましたか。

  6. 最後に正常に起動した後で、ユーザーは悪意のあるソフトウェアに遭遇しましたか、またはコンピューターを無人で放置したことがありますか。

これらの質問に答えるときは、BitLocker コマンド ライン ツールを使用して表示される現在の構成と保護モードを参考にできます (例: manage-bde -status)。イベント ログをスキャンし、回復が開始された理由を示すイベントを検索します (たとえば、ブート ファイルの変更が発生した場合)。これらの機能はどちらもリモートで実行できます。

根本原因の解決

回復の原因がわかった後は、BitLocker の保護を設定し直し、起動のたびに回復が行われないようにすることができます。

この再設定の詳細は、回復の根本原因によって異なる場合があります。根本原因を特定できない場合、または悪意のあるソフトウェアやルートキットがコンピューターに感染している可能性がある場合は、ヘルプデスクがベスト プラクティスのウイルス ポリシーを適用して適切に対応する必要があります。

  

BitLocker を中断して再開することにより、BitLocker 検証プロファイルのリセットを実行できます。

 

PIN がわからない

ユーザーが PIN を忘れた場合、管理者はコンピューターにログオンしている間に PIN をリセットし、コンピューターを再起動するたびに BitLocker が回復を開始しないようにする必要があります

Mt404676.wedge(ja-jp,VS.85).gifPIN がわからないために復元が繰り返し発生しないようにするには

  1. 回復パスワードを使用してコンピューターのロックを解除します。

  2. PIN をリセットします。

    1. ドライブを右クリックし、[PIN の変更] をクリックします。

    2. [BitLocker ドライブ暗号化] ダイアログ ボックスで、[忘れた PIN をリセットする] をクリックします。管理者アカウントでログオンしていない場合は、この時点で管理者の資格情報を入力する必要があります。

    3. PIN リセット ダイアログで、使用する新しい PIN を入力して確認し、[完了] をクリックします。

  3. 次にドライブのロックを解除するときから、新しい PIN を使用するようになります。

スタートアップ キーをなくした

スタートアップ キーを含む USB フラッシュ ドライブを紛失した場合は、回復キーを使用してドライブのロックを解除した後、新しいスタートアップ キーを作成する必要があります。

Mt404676.wedge(ja-jp,VS.85).gifスタートアップ キー紛失のために復元が繰り返し発生するのを防ぐには

  1. スタートアップ キーを紛失したコンピューターに管理者としてログオンします。

  2. BitLocker の管理を開きます。

  3. [スタートアップ キーの複製] をクリックし、キーを書き込む未使用の USB ドライブを挿入して、[保存] をクリックします。

ブート ファイルを変更した

このエラーは、ファームウェアを更新した場合に発生する可能性があります。ベスト プラクティスとしては、BitLocker を中断してからファームウェアを変更し、更新が完了した後で保護を再開する必要があります。このようにすると、コンピューターは回復モードになりません。 ただし、BitLocker の保護が有効なときに変更が行われた場合は、回復パスワードを使用してコンピューターにログオンするだけで、次回は回復が発生しないようにプラットフォーム検証プロファイルが更新されます。

Windows RE と BitLocker

Windows 回復環境 (RE) を使用して、BitLocker またはデバイス暗号化によって保護されたドライブへのアクセスを回復できます。2 回失敗した後で PC が起動できない場合は、スタートアップ修復が自動的に開始します。起動エラーのために自動的に開始されたスタートアップ修復は、ブート ログまたは利用可能なクラッシュ ダンプが特定の破損したファイルを指し示している場合、オペレーティング システムおよびドライバー ファイルの修復だけを実行します。Windows 8.1 以降では、PCR[7] の特定の TPM 測定値をサポートするためのファームウェアを含むデバイスの場合、TPM は、Windows RE が信頼できるオペレーティング環境であり、Windows RE が変更されていない場合は BitLocker で保護されたドライブをロック解除することを検証できます。TPM が無効にされるなど、Windows RE 環境が変更された場合は、BitLocker 回復キーが提供されるまでドライブはロックされたままになります。スタートアップ修復が PC から自動的に実行されないため、代わりに Windows RE を修復ディスクから手動で開始する場合は、BitLocker 回復キーを入力して BitLocker で保護されたドライブのロックを解除する必要があります。

追加の回復情報の使用

48 桁の BitLocker 回復パスワードだけでなく、Active Directory には他の種類の回復情報も格納されます。このセクションでは、この追加情報の使用方法について説明します。

BitLocker キー パッケージ

前に説明した回復方法でボリュームをロック解除できない場合、BitLocker 修復ツールを使用してブロック レベルでボリュームの暗号化を解除できます。このツールは、BitLocker キー パッケージを利用して、重大な損傷を被ったドライブから暗号化されたデータを回復できます。正しい回復パスワードを使用して破損したボリュームのロックを解除できない場合でも、この回復されたデータを使用して暗号化されたデータを回収できます。それでも回復パスワードを保存しておくことをお勧めします。対応する回復パスワードがないと、キー パッケージを使用できません。

  

BitLocker キー パッケージを使用するには、BitLocker 修復ツール repair-bde を使用する必要があります。

 

BitLocker キー パッケージは、既定では保存されません。回復パスワードと共にパッケージを AD DS に保存するには、回復方法を制御するグループ ポリシー設定の [回復パスワードとキー パッケージをバックアップする] オプションを選択する必要があります。また、作業ボリュームからキー パッケージをエクスポートすることもできます。キー パッケージのエクスポート方法について詳しくは、「BitLocker キー パッケージの取得」を参照してください。

回復パスワードのリセット

回復パスワードが提供されて使用された後は、それを無効にする必要があります。また、何らかの理由で既存の回復パスワードを意図的に無効にする場合も行う必要があります。

回復パスワードは 2 つの方法でリセットできます。

  • manage-bde を使用する: manage-bde を使用して古い回復パスワードを削除し、新しい回復パスワードを追加できます。手順では、コマンドおよびこのメソッドの構文を示します。

  • スクリプトを実行する: スクリプトを実行して、ボリュームの暗号化を解除せずにパスワードをリセットできます。手順のサンプル スクリプトではこの機能を示します。サンプル スクリプトでは、新しい回復パスワードを作成し、他のすべてのパスワードを無効にします。

Mt404676.wedge(ja-jp,VS.85).gifmanage-bde を使用して回復パスワードをリセットするには

  1. 前の回復パスワードを削除します。

    Manage-bde –protectors –delete C: –type RecoveryPassword
    
  2. 新しい回復パスワードを追加します。

    Manage-bde –protectors –add C: -RecoveryPassword
    
  3. 新しい回復パスワードの ID を取得します。画面から、回復パスワードの ID をコピーします。

    Manage-bde –protectors –get C: -Type RecoveryPassword
    
  4. 新しい回復パスワードを AD DS にバックアップします。

    Manage-bde –protectors –adbackup C: -id {EXAMPLE6-5507-4924-AA9E-AFB2EB003692}
    
    警告  

    ID 文字列はかっこで囲む必要があります。

     

Mt404676.wedge(ja-jp,VS.85).gifサンプルの回復パスワード スクリプトを実行するには

  1. 次のサンプル スクリプトを VBScript ファイルに保存します。例: ResetPassword.vbs。

  2. コマンド プロンプトで次のようなコマンドを入力します。

    cscript ResetPassword.vbs

重要  

このサンプル スクリプトは、C ボリュームだけで動作するように構成されています。パスワードのリセットをテストするボリュームに一致するように、スクリプトをカスタマイズする必要があります。

 
  

リモート コンピューターを管理するには、ローカル コンピューター名ではなくリモート コンピューター名を指定できます。

 

次のサンプル スクリプトを使用して、回復パスワードをリセットする VBScript ファイルを作成できます。

' Target drive letter
strDriveLetter = "c:"

' Target computer name
' Use "." to connect to the local computer
strComputerName = "." 


' --------------------------------------------------------------------------------
' Connect to the BitLocker WMI provider class
' --------------------------------------------------------------------------------

strConnectionStr = "winmgmts:" _
                 & "{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" _
                 & strComputerName _
                 & "\root\cimv2\Security\MicrosoftVolumeEncryption"
                 
                 
On Error Resume Next 'handle permission errors

Set objWMIService = GetObject(strConnectionStr)


If Err.Number <> 0 Then
     WScript.Echo "Failed to connect to the BitLocker interface (Error 0x" & Hex(Err.Number) & ")."
     Wscript.Echo "Ensure that you are running with administrative privileges."
     WScript.Quit -1
End If

On Error GoTo 0

strQuery = "Select * from Win32_EncryptableVolume where DriveLetter='" & strDriveLetter & "'"
Set colTargetVolumes = objWMIService.ExecQuery(strQuery)


If colTargetVolumes.Count = 0 Then
    WScript.Echo "FAILURE: Unable to find BitLocker-capable drive " &  strDriveLetter & " on computer " & strComputerName & "."
    WScript.Quit -1
End If


' there should only be one volume found
For Each objFoundVolume in colTargetVolumes
    set objVolume = objFoundVolume
Next


' objVolume is now our found BitLocker-capable disk volume


' --------------------------------------------------------------------------------
' Perform BitLocker WMI provider functionality
' --------------------------------------------------------------------------------


' Add a new recovery password, keeping the ID around so it doesn't get deleted later
' ----------------------------------------------------------------------------------

nRC = objVolume.ProtectKeyWithNumericalPassword("Recovery Password Refreshed By Script", , sNewKeyProtectorID)

If nRC <> 0 Then
WScript.Echo "FAILURE: ProtectKeyWithNumericalPassword failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If

' Removes the other, "stale", recovery passwords 
' ----------------------------------------------------------------------------------

nKeyProtectorTypeIn = 3 ' type associated with "Numerical Password" protector

nRC = objVolume.GetKeyProtectors(nKeyProtectorTypeIn, aKeyProtectorIDs)

If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If

' Delete those key protectors other than the one we just added. 

For Each sKeyProtectorID In aKeyProtectorIDs

If sKeyProtectorID <> sNewKeyProtectorID Then
nRC = objVolume.DeleteKeyProtector(sKeyProtectorID)

If nRC <> 0 Then
WScript.Echo "FAILURE: DeleteKeyProtector on ID " & sKeyProtectorID & " failed with return code 0x" & Hex(nRC)
WScript.Quit -1
Else
' no output
'WScript.Echo "SUCCESS: Key protector with ID " & sKeyProtectorID & " deleted"
End If
End If

Next

WScript.Echo "A new recovery password has been added. Old passwords have been removed."

' - some advanced output (hidden)
'WScript.Echo ""
'WScript.Echo "Type ""manage-bde -protectors -get " & strDriveLetter & " -type recoverypassword"" to view existing passwords."

BitLocker キー パッケージの取得

追加の回復情報の使用」で説明したように、2 つの方法を使用してキー パッケージを取得できます

  • 前に保存したキー パッケージを AD DS からエクスポートします。AD DS に格納されている BitLocker 回復パスワードに対する読み取りアクセス許可が必要です。

  • BitLocker で保護されたロック解除済みのボリュームから新しいキー パッケージをエクスポートします。破損が発生する前に、作業用ボリュームへのローカル管理者のアクセス許可が必要です。

次のサンプル スクリプトでは、以前に保存したすべてのキー パッケージを AD DS からエクスポートします。

Mt404676.wedge(ja-jp,VS.85).gifサンプルのキー パッケージ取得スクリプトを実行するには

  1. 次のサンプル スクリプトを VBScript ファイルに保存します。例: GetBitLockerKeyPackageADDS.vbs

  2. コマンド プロンプトで次のようなコマンドを入力します。

    cscript GetBitLockerKeyPackageADDS.vbs -?

次のサンプル スクリプトを使用すると、BitLocker キー パッケージを AD DS から取得する VBScript ファイルを作成できます。

' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------

Sub ShowUsage
   Wscript.Echo "USAGE: GetBitLockerKeyPackageAD [Path To Saved Key Package] [Optional Computer Name]"
   Wscript.Echo "If no computer name is specified, the local computer is assumed."
   Wscript.Echo 
   Wscript.Echo "Example: GetBitLockerKeyPackageAD E:\bitlocker-ad-key-package mycomputer"
   WScript.Quit
End Sub

' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------

Set args = WScript.Arguments

Select Case args.Count
  Case 1
    If args(0) = "/?" Or args(0) = "-?" Then
    ShowUsage
    Else 
      strFilePath = args(0)
      ' Get the name of the local computer      
      Set objNetwork = CreateObject("WScript.Network")
      strComputerName = objNetwork.ComputerName      
    End If    
      
  Case 2
    If args(0) = "/?" Or args(0) = "-?" Then
      ShowUsage
    Else 
      strFilePath = args(0)
      strComputerName = args(1)
    End If
  Case Else
    ShowUsage

End Select



' --------------------------------------------------------------------------------
' Get path to Active Directory computer object associated with the computer name
' --------------------------------------------------------------------------------

Function GetStrPathToComputer(strComputerName) 

    ' Uses the global catalog to find the computer in the forest
    ' Search also includes deleted computers in the tombstone

    Set objRootLDAP = GetObject("LDAP://rootDSE")
    namingContext = objRootLDAP.Get("defaultNamingContext") ' e.g. string dc=fabrikam,dc=com    

    strBase = "<GC://" & namingContext & ">"
 
    Set objConnection = CreateObject("ADODB.Connection") 
    Set objCommand = CreateObject("ADODB.Command") 
    objConnection.Provider = "ADsDSOOBject" 
    objConnection.Open "Active Directory Provider" 
    Set objCommand.ActiveConnection = objConnection 

    strFilter = "(&(objectCategory=Computer)(cn=" &  strComputerName & "))"
    strQuery = strBase & ";" & strFilter  & ";distinguishedName;subtree" 

    objCommand.CommandText = strQuery 
    objCommand.Properties("Page Size") = 100 
    objCommand.Properties("Timeout") = 100
    objCommand.Properties("Cache Results") = False 

    ' Enumerate all objects found. 

    Set objRecordSet = objCommand.Execute 
    If objRecordSet.EOF Then
      WScript.echo "The computer name '" &  strComputerName & "' cannot be found."
      WScript.Quit 1
    End If

    ' Found object matching name

    Do Until objRecordSet.EOF 
      dnFound = objRecordSet.Fields("distinguishedName")
      GetStrPathToComputer = "LDAP://" & dnFound
      objRecordSet.MoveNext 
    Loop 


    ' Clean up. 
    Set objConnection = Nothing 
    Set objCommand = Nothing 
    Set objRecordSet = Nothing 

End Function


' --------------------------------------------------------------------------------
' Securely access the Active Directory computer object using Kerberos
' --------------------------------------------------------------------------------


Set objDSO = GetObject("LDAP:")
strPathToComputer = GetStrPathToComputer(strComputerName)

WScript.Echo "Accessing object: " + strPathToComputer

Const ADS_SECURE_AUTHENTICATION = 1
Const ADS_USE_SEALING = 64 '0x40
Const ADS_USE_SIGNING = 128 '0x80


' --------------------------------------------------------------------------------
' Get all BitLocker recovery information from the Active Directory computer object
' --------------------------------------------------------------------------------

' Get all the recovery information child objects of the computer object

Set objFveInfos = objDSO.OpenDSObject(strPathToComputer, vbNullString, vbNullString, _
                                   ADS_SECURE_AUTHENTICATION + ADS_USE_SEALING + ADS_USE_SIGNING)

objFveInfos.Filter = Array("msFVE-RecoveryInformation")

' Iterate through each recovery information object and saves any existing key packages

nCount = 1
strFilePathCurrent = strFilePath & nCount

For Each objFveInfo in objFveInfos

   strName = objFveInfo.Get("name")

   strRecoveryPassword = objFveInfo.Get("msFVE-RecoveryPassword")
   strKeyPackage = objFveInfo.Get("msFVE-KeyPackage")

   WScript.echo 
   WScript.echo "Recovery Object Name: " + strName 
   WScript.echo "Recovery Password: " + strRecoveryPassword

   ' Validate file path
   Set fso = CreateObject("Scripting.FileSystemObject")

   If (fso.FileExists(strFilePathCurrent)) Then
 WScript.Echo "The file " & strFilePathCurrent & " already exists. Please use a different path."
WScript.Quit -1
   End If

   ' Save binary data to the file
   SaveBinaryDataText strFilePathCurrent, strKeyPackage
   
   WScript.echo "Related key package successfully saved to " + strFilePathCurrent


   ' Update next file path using base name
   nCount = nCount + 1
   strFilePathCurrent = strFilePath & nCount

Next


'----------------------------------------------------------------------------------------
' Utility functions to save binary data 
'----------------------------------------------------------------------------------------

Function SaveBinaryDataText(FileName, ByteArray)
  'Create FileSystemObject object
  Dim FS: Set FS = CreateObject("Scripting.FileSystemObject")
  
  'Create text stream object
  Dim TextStream
  Set TextStream = FS.CreateTextFile(FileName)
  
  'Convert binary data To text And write them To the file
  TextStream.Write BinaryToString(ByteArray)
End Function

Function BinaryToString(Binary)
  Dim I, S
  For I = 1 To LenB(Binary)
    S = S & Chr(AscB(MidB(Binary, I, 1)))
  Next
  BinaryToString = S
End Function

WScript.Quit

The following sample script exports a new key package from an unlocked, encrypted volume.

To run this script, start by saving the code into a VBS file (for example, GetBitLockerKeyPackage.vbs). Then, open an administrator command prompt and use “cscript” to run the saved file (for example, type "cscript GetBitLockerKeyPackage.vbs  -?").



' --------------------------------------------------------------------------------
' Usage
' --------------------------------------------------------------------------------

Sub ShowUsage
   Wscript.Echo "USAGE: GetBitLockerKeyPackage [VolumeLetter/DriveLetter:] [Path To Saved Key Package]"
   Wscript.Echo 
   Wscript.Echo "Example: GetBitLockerKeyPackage C: E:\bitlocker-backup-key-package"
   WScript.Quit
End Sub

' --------------------------------------------------------------------------------
' Parse Arguments
' --------------------------------------------------------------------------------

Set args = WScript.Arguments

Select Case args.Count
  Case 2
    If args(0) = "/?" Or args(0) = "-?" Then
      ShowUsage
    Else 
      strDriveLetter = args(0)
      strFilePath = args(1)
    End If
  Case Else
    ShowUsage

End Select

' --------------------------------------------------------------------------------
' Other Inputs
' --------------------------------------------------------------------------------

' Target computer name
' Use "." to connect to the local computer
strComputerName = "." 

' Default key protector ID to use. Specify "" to let the script choose.

strDefaultKeyProtectorID = ""

' strDefaultKeyProtectorID = "{001298E0-870E-4BA0-A2FF-FC74758D5720}"  ' sample 


' --------------------------------------------------------------------------------
' Connect to the BitLocker WMI provider class
' --------------------------------------------------------------------------------

strConnectionStr = "winmgmts:" _
                 & "{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\" _
                 & strComputerName _
                 & "\root\cimv2\Security\MicrosoftVolumeEncryption"
                 
                 
On Error Resume Next 'handle permission errors

Set objWMIService = GetObject(strConnectionStr)


If Err.Number <> 0 Then
     WScript.Echo "Failed to connect to the BitLocker interface (Error 0x" & Hex(Err.Number) & ")."
     Wscript.Echo "Ensure that you are running with administrative privileges."
     WScript.Quit -1
End If

On Error GoTo 0

strQuery = "Select * from Win32_EncryptableVolume where DriveLetter='" & strDriveLetter & "'"
Set colTargetVolumes = objWMIService.ExecQuery(strQuery)


If colTargetVolumes.Count = 0 Then
    WScript.Echo "FAILURE: Unable to find BitLocker-capable drive " &  strDriveLetter & " on computer " & strComputerName & "."
    WScript.Quit -1
End If


' there should only be one volume found
For Each objFoundVolume in colTargetVolumes
    set objVolume = objFoundVolume
Next


' objVolume is now our found BitLocker-capable disk volume


' --------------------------------------------------------------------------------
' Perform BitLocker WMI provider functionality
' --------------------------------------------------------------------------------


' Collect all possible valid key protector ID's that can be used to get the package
' ----------------------------------------------------------------------------------

nNumericalKeyProtectorType = 3 ' type associated with "Numerical Password" protector

nRC = objVolume.GetKeyProtectors(nNumericalKeyProtectorType, aNumericalKeyProtectorIDs)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If

nExternalKeyProtectorType = 2 ' type associated with "External Key" protector

nRC = objVolume.GetKeyProtectors(nExternalKeyProtectorType, aExternalKeyProtectorIDs)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectors failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If


' Get first key protector of the type "Numerical Password" or "External Key", if any
' ----------------------------------------------------------------------------------

if strDefaultKeyProtectorID = "" Then

' Save first numerical password, if exists
If UBound(aNumericalKeyProtectorIDs) <> -1 Then
strDefaultKeyProtectorID = aNumericalKeyProtectorIDs(0)
End If

' No numerical passwords exist, save the first external key
If strDefaultKeyProtectorID = "" and UBound(aExternalKeyProtectorIDs) <> -1 Then
strDefaultKeyProtectorID = aExternalKeyProtectorIDs(0)
End If 

' Fail case: no recovery key protectors exist. 
If strDefaultKeyProtectorID = "" Then
WScript.Echo "FAILURE: Cannot create backup key package because no recovery passwords or recovery keys exist. Check that BitLocker protection is on for this drive."
WScript.Echo "For help adding recovery passwords or recovery keys, type ""manage-bde -protectors -add -?""."
WScript.Quit -1
End If

End If

' Get some information about the chosen key protector ID
' ----------------------------------------------------------------------------------

' is the type valid?

nRC = objVolume.GetKeyProtectorType(strDefaultKeyProtectorID, nDefaultKeyProtectorType)

If Hex(nRC) = "80070057" Then
WScript.Echo "The key protector ID " & strDefaultKeyProtectorID & " is not valid."
WScript.Echo "This ID value may have been provided by the script writer."
ElseIf nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectorType failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If

' what's a string that can be used to describe it?

strDefaultKeyProtectorType = ""

Select Case nDefaultKeyProtectorType 

  Case nNumericalKeyProtectorType
      strDefaultKeyProtectorType = "recovery password"

  Case nExternalKeyProtectorType
      strDefaultKeyProtectorType = "recovery key"

  Case Else
      WScript.Echo "The key protector ID " & strDefaultKeyProtectorID & " does not refer to a valid recovery password or recovery key."
      WScript.Echo "This ID value may have been provided by the script writer."

End Select


' Save the backup key package using the chosen key protector ID
' ----------------------------------------------------------------------------------

nRC = objVolume.GetKeyPackage(strDefaultKeyProtectorID, oKeyPackage)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyPackage failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If

' Validate file path
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(strFilePath)) Then
WScript.Echo "The file " & strFilePath & " already exists. Please use a different path."
WScript.Quit -1
End If

Dim oKeyPackageByte, bKeyPackage
For Each oKeyPackageByte in oKeyPackage
  'WScript.echo "key package byte: " & oKeyPackageByte
  bKeyPackage = bKeyPackage & ChrB(oKeyPackageByte)
Next

' Save binary data to the file
SaveBinaryDataText strFilePath, bKeyPackage

' Display helpful information
' ----------------------------------------------------------------------------------

WScript.Echo "The backup key package has been saved to " & strFilePath & "."

WScript.Echo "IMPORTANT: To use this key package, the " & strDefaultKeyProtectorType & " must also be saved."

' Display the recovery password or a note about saving the recovery key file

If nDefaultKeyProtectorType = nNumericalKeyProtectorType Then

nRC = objVolume.GetKeyProtectorNumericalPassword(strDefaultKeyProtectorID, sNumericalPassword)
If nRC <> 0 Then
WScript.Echo "FAILURE: GetKeyProtectorNumericalPassword failed with return code 0x" & Hex(nRC)
WScript.Quit -1
End If
WScript.Echo "Save this recovery password: " & sNumericalPassword

ElseIf nDefaultKeyProtectorType = nExternalKeyProtectorType Then
WScript.Echo "The saved key file is named " & strDefaultKeyProtectorID & ".BEK"
WScript.Echo "For help re-saving this external key file, type ""manage-bde -protectors -get -?"""
End If


'----------------------------------------------------------------------------------------
' Utility functions to save binary data 
'----------------------------------------------------------------------------------------

Function SaveBinaryDataText(FileName, ByteArray)
  'Create FileSystemObject object
  Dim FS: Set FS = CreateObject("Scripting.FileSystemObject")
  
  'Create text stream object
  Dim TextStream
  Set TextStream = FS.CreateTextFile(FileName)
  
  'Convert binary data To text And write them To the file
  TextStream.Write BinaryToString(ByteArray)
End Function

Function BinaryToString(Binary)
  Dim I, S
  For I = 1 To LenB(Binary)
    S = S & Chr(AscB(MidB(Binary, I, 1)))
  Next
  BinaryToString = S
End Function

関連項目

 

 

表示: