treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

やられる前にやる、BitLocker回復キー収集バッチ作成

ローカルアカウント使用のワークグループ環境において、BitLocker回復キーを自動的に収集しておくのはけっこう重要だと思います。
思い立ったこともあってバッチファイルを作成してみましたのでご報告です。

動機・きっかけ

近年BitLockerは自動的に有効化されることが増えてきました。しかし、回復キーの収集がされていないケースはあります。

家ならMicrosoftアカウントで自動的に収集される⇒あまり気にしなくていい、という状況です。
注意したいのは、小規模ワークグループ環境でローカルアカウントや独自認証の環境では、(特別意識していなければ)回復キーの収集はされていない、ということも多いのではないかと。
BitLockerの動作上、回復キーを事前に収集していないとどうにもならない⇒収集しておくに越したことはない、といえます。

BitLockerは前準備がまったくされていない環境で突然回復キーの入力要求が来たらアウトになってしまいます。

以前の経験から、

  • 自動有効化された環境でBIOSアップデートが動作して発動
  • 自動有効化された環境で更新プログラムの不具合で再起動時に発動
  • 自動でBitLockerが有効化されるケースもある(例:Windows11 24H2 HomeEd.で自動的に有効化する方針)
    ※ただしハードウェア条件を満たしている環境であることが条件となります。

これらの一例をきっかけにBitLocker回復キーの要求が来た時点で、回復キーを把握していない場合には、BitLockerの解除やドライブからデータを取り出すことはほぼ不可能になります。

時期大型アップデートであるWindows11 24H2は一つのターニングポイントになりそう。これに備えて回復キーを回収しておくバッチを考えておきます。

方針

以下の条件で動作を考えていこうと思います。

  • タスクスケジューラなどの自動実行でサインイン時にバッチ実行する。
  • 実行時にBitLockerの有効/無効を判定し、有効な場合には回復キーを収集する。
  • 回収した回復キーはサーバの共有フォルダに保存する。

以前にコマンドラインでBitLockerの有効化有無と回復キーの画面表示を実施したことがあるので、それをベースにバッチファイルを作ってみようと思います。

参考:
Windows HomeエディションでBitLockerが回復キーを求めてくる怪(2/2) - treedown’s Report

基本は「manage-bde」コマンド、

このコマンドの実行結果をNASなど別の場所に保存しておくだけでも安心感があります。
※ただし、回復キーの保存場所には不正アクセス対策などが別途必要です。


バッチファイル

以下がバッチファイルです。小規模なNASの共有フォルダに保存することを想定しています。

--------------------------------------------------------------
bde-stat.bat
--------------------------------------------------------------
@echo off
rem 管理者権限で実行されているかどうかを確認して実行
whoami /priv | find "SeSystemtimePrivilege" > nul
if %errorlevel% neq 0 (
 powershell -command start-process %~0 -verb runas
 exit
)

rem ファイル保存先共有フォルダの指定
set SAVEPATH=\\FileSVR\ShareF$

rem フォルダのアクセス可否を確認(オフライン環境では何もせず終了)
if not exist "%SAVEPATH%"  goto end

rem BitLocker有効化判定
manage-bde -status | findstr "保護はオンです" > nul
if %ERRORLEVEL% == 0 goto GetbdeKey
if %ERRORLEVEL% == 1 goto NoEncrypt

:GetbdeKey
date /t>%SAVEPATH%\%COMPUTERNAME%.txt
manage-bde -status>>%SAVEPATH%\%COMPUTERNAME%.txt
manage-bde -protectors -get c:>>%SAVEPATH%\%COMPUTERNAME%.txt
goto end

:NoEncrypt
rem date /t>%SAVEPATH%\%COMPUTERNAME%.txt
rem echo %COMPUTERNAME%ではBitLockerが有効ではありません。>>%SAVEPATH%\%COMPUTERNAME%.txt

:end
set SAVEPATH=
--------------------------------------------------------------

バッチファイルここまでです。

簡単に解説

BitLockerの情報収集コマンドである「manage-bde」は管理者権限での実行が必要なため予め管理者権限での実行を「start-process %~0 -verb runas」で実行しています。

BitLocker回復キーを収集するためのファイル保存先として「\\FileSVR\ShareF$」(共有フォルダのパスは適宜変更)というパスを変数SAVEPATHに格納します。

(社外やモバイル環境での利用を想定し)NASやファイルサーバへアクセス可能な環境だけでPCを利用するとは限らないため、共有フォルダへの接続判定を入れて、フォルダが発見できなかったら何もせず終了するようにしました。

「BitLocker有効化判定」では、「manage-bde -status」コマンドを実行し、BitLockerが有効な場合に出力される「保護状態:  保護はオンです」の部分を判定条件として、いずれかのドライブでBitLockerが有効であれば回復キーの収集を実行するように判定を入れています。
ただ、この判定はドライブを問わず、どれか一ドライブでもBitLockerが有効であれば次の回復キーの収集処理に移動するように判定されてしまいます。

BitLockerが有効であればラベル名「GetbdeKey」にジャンプし、「manage-bde -status」の実行結果と「manage-bde -protectors -get c:」の実行結果を変数「%SAVEPATH%」へファイル名「%COMPUTERNAME%.txt」で保存します。
回復キーの収集は「manage-bde -protectors -get c:」のようにcドライブに固定しているため、判定ではドライブを問わずに判定していますが、実際の収集はcドライブの回復キーを収集使用とします。
これは、ひとまずcドライブの回復キーさえ確保しておけばBitLocker環境でもOS起動はできるため手詰まりにはならないだろうと考えています。

BitLockerが無効であればラベル名「NoEncrypt」にジャンプしてそのまま終了になります。
BitLockerが無効でも動作確認の意味も含めてファイルを保存する場合にはコメントアウト(rem)を削除し、有効化することでファイルが生成されるようになります。

とりあえず作ってみた、ということで

タスクスケジューラへの設定は
<VBSを使わずに画面非表示のバッチファイル連続実行(タスクスケジューラ編) - treedown’s Report>
の手順そのままに、実行ファイル名だけを今回のファイル名をフルパスでセットすれば動作します。

バッチ実行後、指定した共有フォルダに回復キーの収集が実行されます。(※バッチの例では、%SAVEPATH%で指定した<\\FileSVR\ShareF$>にコンピュータ名の.txtファイルが保存されます。)

BitLocker回復キーの収集は普段あまり意識しないところですが、Microsoftが自動的に有効化するような方針に切り替わってきたら、今回のバッチ+タスクスケジューラで自動的に収集しておくデータが役に立つかもしれません。