2 セキュア・ブートを管理するためのツールおよびアプリケーション

この章では、Oracle Linuxでセキュア・ブートを管理するために使用できるツールおよびアプリケーションの基本的なサマリーについて説明します。

pesignツールについて

pesignツールは、UEFIアプリケーションの署名および暗号化ダイジェストを操作するためのコマンドライン・ツールです。pesignツールを使用して、GRUB2とShimの両方のカーネルに署名できます。

pesignツールを使用して、バイナリ署名情報を出力することもできます。v0.112-22以降のpesignパッケージ(Oracle Linux 8で使用可能)には、正確な公開証明書に照らして署名を検証するために使用できる、pesigcheckツールも用意されていることに注意してください。

pesignツールでは、X.509証明書/キーのペアを受け入れ、このペアを使用してPE-COFFバイナリに署名します。Oracle Linuxカーネルには、標準のUEFI実装に従ってbzImageファイルをPE-COFFバイナリとしてラップする、EFIブート・スタブがあります。この実装では、ブート・ローダーを必要とせずに、UEFIからカーネルを直接ブートするオプションが提供されます。また、pesignでは、必要な署名を実行することもできます。セキュア・ブート・キーについてを参照してください。

通常、pesignツールは、次のような状況で使用します。

efibootmgrアプリケーションについて

Oracle Linuxには、Intel Extensible Firmware Interface (EFI)ブート・マネージャの変更に使用できる、efibootmgrユーザー・スペース・アプリケーションが用意されています。アプリケーションを使用して、次のような複数のタスクを実行します。

  • ブート・エントリを作成および破棄します。

  • ブート順序を変更します。

  • ブート・オプションの次回の実行を変更します。

このツールは一般的な用途のアプリケーションであり、セキュア・ブートに直接関連していません。ただし、このツールはユーザー領域から直接UEFIブート・オプションを管理する上で役に立ち、コマンドラインから一部のUEFIブート問題を直接デバッグして解決しやすくします。詳細および例は、efibootmgr(8)マニュアル・ページを参照してください。

mokutilユーティリティについて

Shimデザインにより、ユーザーは独自のシステムを制御できます。ディストリビューション・ベンダー・キーはShimバイナリ自体に組み込まれています。ただし、Machine Owner Key (MOK)リストまたはデータベースと呼ばれるキーを持つ追加のデータベースも提供され、ユーザーはMokManagerユーティリティを使用して管理できます。

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(1)マニュアル・ページを参照してください。

セキュア・ブートの無効化

EFI設定プログラムを介してセキュア・ブート状態を制御することが困難な場合は、オプションでmokutilユーティリティを使用し、Shimのレベルでセキュア・ブートを無効にできます。これにより、UEFI Secure Bootが有効になっていても、Shimのロード後に追加の検証は行われません。

ShimおよびGRUBを介してロードされるOSには、次のステップが適用されます。

  1. Shimレベルでセキュア・ブートを無効にします。

    sudo mokutil --disable-validation
  2. 8文字から16文字までのパスワードを選択してから、確認のために同じパスワードを入力します。

  3. システムをリブートします。

  4. プロンプトが表示されたら、キーを押してMOK管理を実行します。

  5. Secure Boot状態の変更オプションを選択します。

  6. 要求に従い、選択したパスワードの各文字を入力して変更を確認します。

    各文字の後に改行(Enter)を押す必要があります。

  7. はいを選択し、リブートを選択してシステムをリブートします。

Shimレベルでセキュア・ブート状態を再度有効にするには、次のコマンドを実行します。

sudo mokutil --enable-validation

セキュア・ブートを無効にするときと同じプロンプトに従います。

SBATステータスの検証

Oracle Linux 8およびOracle Linux 9のshimパッケージのバージョン15.3以降、OracleではUEFI Secure Boot Advanced Targeting (SBAT)が使用されています。SBATは、UEFIバイナリの.sbatセクションに生成番号を設定することで、grub2shimなどの古いバージョンのコア・ブート・コンポーネントを取り消すメカニズムです。UEFIバイナリに設定されている生成番号は、その失効レベルを定義します。

UEFI Secure Bootがアクティブかどうかを確認するには、mokutilコマンドで--sb-stateオプションを使用します。

mokutil --sb-state

mokutilパッケージのバージョン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 Secure Bootを無効にしてから、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 Secure Boot 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について通知された場合は、ツールを手動で使用する必要がある場合があります。