2 セキュア・ブートを管理するためのツールおよびアプリケーション
この章では、Oracle Linuxでセキュア・ブートを管理するために使用できるツールおよびアプリケーションの基本的なサマリーについて説明します。
pesignツールについて
pesignツールは、UEFIアプリケーションのシグネチャおよび暗号化ダイジェストを操作するためのコマンドライン・ツールです。 pesignツールを使用して、GRUB2とShimの両方のカーネルに署名できます。
pesignツールを使用して、バイナリ・シグネチャ情報を出力することもできます。 pesignパッケージには、正確なパブリック証明書に対するシグネチャの検証に使用できるpesigcheckツールも用意されています。
pesignツールは、X.509証明書/キー・ペアを受け入れ、PE-COFFバイナリに署名します。 Oracle Linuxカーネルには、標準のUEFI実装に従ってbzImageファイルをPE-COFFバイナリとしてラップするEFIブート・スタブがあります。 この実装では、ブート・ローダーを必要とせずに、UEFIからカーネルを直接ブートするオプションが提供されます。 また、pesignツールで必要な署名を実行できます。 セキュア・ブート・キーについてを参照してください。
通常、pesignツールを使用して、次のいずれかのタスクを実行します:
-
カスタム・カーネル・モジュールに署名するために作成したカスタム・キーを使用してカーネル・イメージに署名します。 セキュア・ブートで使用するためのカーネル・イメージおよびカーネル・モジュールの署名を参照してください。
-
Shimに証明書が含まれていない場合でも、ブート時にカーネルをロードできるように、MOKデータベース内の特定のカーネルのハッシュを登録します。
-
mokutilツールを使用してカーネル・ハッシュを登録できるように、署名付きカーネル・バイナリからカーネル・ハッシュを抽出します。 「MOKデータベースへのカーネル・ハッシュの登録」を参照してください。
efibootmgrアプリケーションについて
Oracle Linuxは、Intel拡張ファームウェア・インタフェース(EFI)ブート・マネージャの変更に使用できるefibootmgrユーザー領域アプリケーションを提供します。 アプリケーションを使用して、次のような複数のタスクを実行します。
-
ブート・エントリを作成および破棄します。
-
ブート順序を変更します。
-
ブート・オプションの次回の実行を変更します。
このツールは一般的な用途のアプリケーションであり、セキュア・ブートに直接関連していません。 ただし、このツールは、ユーザー空間から直接UEFIブート・オプションを管理し、コマンド行からUEFIブートの問題をデバッグおよび解決しやすくするのに役立ちます。 詳細および例は、efibootmgr(8)マニュアル・ページを参照してください。
mokutilユーティリティについて
Shimは、ユーザーが独自のシステムを制御できるようにします。 ディストリビューション・ベンダー・キーはShimバイナリ自体に組み込まれています。 ただし、マシン所有者キー(MOK)リストまたはデータベースと呼ばれるキーを含む追加のデータベースも提供され、ユーザーはMOKマネージャ・ユーティリティを介して管理できます。
Oracle Linuxでは、MokManagerユーティリティは、/boot/efi/EFI/redhatディレクトリ内のEFIシステム・パーティション(ESP)にインストールされます。 当初MokManager.efiと呼ばれていたこのファイルは、x86_64プラットフォームの場合はmmx64.efi、Armプラットフォームの場合はmmaa64.efiという名前に変更されました。 MOKキーは、ESPに配置してから、ブート中にMokManagerからインストールできます。
mokutilコマンドを実行すると、MokManagerユーティリティを使用して、配布ベンダー・キーとは別のままのMOKリスト内のキーを追加および削除できます。 mokutilユーティリティを使用すると、コマンドラインを使用して、ユーザー領域から直接MOKデータベースでキーを使用できるようになります。 この領域ではキーが作成または抽出されることが多いため、mokutilは、セキュア・ブートに使用されるキーの管理に使用する最適なツールです。
mokutilはユーザー・スペースから実行されますが、MOKデータベースを直接更新しません。 かわりに、mokutilはMOK管理サービスでキーを使用可能にし、起動時にShimをトリガーしてMOK管理メニューを表示します。 このプロセスにより、システムに物理的にアクセスできるユーザーによってのみキーまたはハッシュがMOKデータベース内で登録されることが確実になり、悪意のあるアプリケーションまたはユーザーがユーザー・スペースからMOKデータベースを直接変更できなくなります。
mokutilユーティリティを使用する一般的なユースケース・シナリオは次のとおりです:
-
ディストリビューションに含まれず、署名する必要のあるカスタム・モジュールのキーを追加します。 セキュア・ブートで使用するためのカーネル・イメージおよびカーネル・モジュールの署名を参照してください。
-
署名キーが取り消されたか、またはソースからビルドしたカスタム・カーネルのキーまたはハッシュを追加します。 mokutilを使用したUEFI Secure Bootの署名キーの更新を参照してください。
-
Shimから上方向へのセキュア・ブート操作の無効化。 「Shimレベルでのセキュア・ブートの無効化」を参照してください。
詳細は、mokutil(1)マニュアル・ページを参照してください。
Shimレベルでのセキュア・ブートの無効化
UEFIはUEFI設定プログラムで無効にすることも、ここで説明するように、mokutilユーティリティを使用してShimのレベルでセキュア・ブートを無効にすることもできます。
Shimレベルでセキュア・ブートを無効にすると、UEFIセキュア・ブートは有効のままですが、Shimのロード後に検証は行われません。
次のステップは、ShimおよびGRUBを介してロードされるOSに適用されます:
Shimレベルでセキュア・ブート状態を再度有効にするには、次のコマンドを実行します。
sudo mokutil --enable-validation
セキュア・ブートを無効にする手順と同じプロンプトに従います。
SBATステータスの検証
Oracle Linux8では、shimパッケージで使用可能なUEFI Secure Boot Advanced Targeting (SBAT)を使用します。
SBATは、UEFIバイナリの.sbatセクションに生成番号を設定することで、grub2やshimなどの古いバージョンのコア・ブート・コンポーネントを取り消すメカニズムです。 UEFIバイナリに設定されている生成番号は、その失効レベルを定義します。
UEFI Secure Bootがアクティブかどうかを確認するには、mokutilコマンドで--sb-stateオプションを使用します。
mokutil --sb-state
バージョン0.6.0以降、mokutilユーティリティを使用して、UEFI SBAT失効ステータスを確認および更新できます。 現在のシステムが実行されている現在のUEFI SBATレベルを確認するには、--list-sbat-revocationsオプションを使用します:
mokutil --list-sbat-revocations
次回のリブート時に適用されるSBATポリシーを変更できます。 SBATポリシーをlatestに設定すると、最新のSBAT失効が適用され、以前のSBATレベルで動作していた古いgrub2およびshimパッケージがブートできなくなり、previousは以前のSBAT失効レベルに戻ります。
mokutil --set-sbat-policy latest
mokutil --set-sbat-policy previous
UEFI Secure Bootが有効になっているシステムの場合、デフォルトのSBATポリシーはpreviousです。 latestポリシーとprevious SBATポリシーの両方で、最新のshimパッケージがインストールされた時点以降の失効レベルのみが設定されます。
トラブルシューティングのために、SBATポリシーをデフォルトの失効レベルにリセットできます。 まず、UEFIセキュア・ブートを無効にしてから、delete SBATポリシーを設定します:
mokutil --set-sbat-policy delete
ノート:
objdumpコマンドを使用して、grub2およびshimで使用される.sbatメタデータを確認できます。 たとえば、x86_64システムでは、次のコマンドを実行できます。
objdump -s -j .sbat grubx64.efi
objdump -s -j .sbat shimx64.efi
指定されたShimの現在のSBATポリシー・レベルを確認するには:
objdump -s -j .sbatlevel shimx64.efi
dbxtoolコマンドについて
dbxtoolコマンドは、コマンドライン・ツールと、UEFIセキュア・ブートDBX更新の適用に使用されるsystemdサービスを組み合せます。 このツールを使用すると、DBX失効リストとも呼ばれる、UEFI禁止された署名データベースで操作できます。 たとえば、このコマンドを使用して、現在のDBXコンテンツをリストし、新しいバージョンに更新できます。
UEFI DBXファイルは、https://uefi.org/revocationlistfileにあります。 DBXは、侵害されたキーを使用して署名されたソフトウェアがロードされないようにします。 これにより、セキュア・ブート・フレームワークの整合性を保護し、キーの静的データベースを手動で管理する必要がなくなります。
最新のUEFI DBXファイルはdbxtoolパッケージにパッケージ化され、Oracle Linux yumサーバー上のこのパッケージの以降の各リリース内に含まれています。 DBXファイルは、/usr/share/dbxtool/および/usr/share/dbxtool-oracle/にあります。
dbxtool systemdサービスが実行されている場合、DBXの更新は自動的に処理されます。 ただし、DBXの更新が必要なCVEについて通知された場合は、ツールを手動で使用する必要がある場合があります。