第5章 セキュアブートを使用した Azure での RHEL の設定
Secure Boot は、システムの起動時にプログラムの実行を制御する UEFI (Unified Extensible Firmware Interface)仕様のメカニズムです。セキュアブートは、ブート時にブートローダーとそのコンポーネントのデジタル署名を検証することで、信頼できる許可されたプログラムだけを実行するとともに、許可されていないプログラムのロードを防止します。
Azure プラットフォームで公開されている RHEL イメージでは、セキュアブートが有効になっています。デフォルトでは、Microsoft 証明書を持つ Allowed Signature データベース(db)があります。Microsoft Azure では、Azure Compute Gallery に新しいイメージバージョンが登録されるときに、UEFI セキュアブート変数にカスタム証明書を追加できます。
5.1. クラウド上の RHEL のセキュアブートについて リンクのコピーリンクがクリップボードにコピーされました!
セキュアブートは、Unified Extensible Firmware Interface (UEFI) の機能であり、ブートローダーやカーネルなど、デジタル署名された信頼できるプログラムとコンポーネントだけがブート時に実行されるようにします。セキュアブートでは、ハードウェアに保存されている信頼できる鍵に照らしてデジタル署名を検証し、改ざんされたコンポーネントや信頼できないエンティティーによって署名されたコンポーネントが検出されると、ブートプロセスを中止します。これにより、悪意のあるソフトウェアがオペレーティングシステムを侵害するのを防ぎます。
セキュアブートは、信頼できるエンティティーだけがブートチェーン内に存在することを保証するため、Confidential Virtual Machine (CVM) を設定するのに不可欠なコンポーネントです。定められたインターフェイスを通じて特定のデバイスパスへの認証アクセスを提供します。これにより、最新の設定だけが確実に使用され、以前の設定が永続的に上書きされます。さらに、セキュアブートを有効にして Red Hat Enterprise Linux カーネルを起動すると、カーネルが lockdown モードに入ります。これにより、信頼できるベンダーによって署名されたカーネルモジュールだけが確実にロードされます。したがって、セキュアブートにより、オペレーティングシステムのブートシーケンスのセキュリティーが向上します。
5.1.1. セキュアブートのコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
セキュアブートメカニズムは、ファームウェア、署名データベース、暗号鍵、ブートローダー、ハードウェアモジュール、およびオペレーティングシステムで構成されます。以下は、UEFI の信頼済み変数の構成要素です。
-
Key Exchange Key データベース (KEK): RHEL オペレーティングシステムと仮想マシンファームウェア間の信頼を確立するための公開鍵の交換。これらの鍵を使用して、Allowed Signature データベース (
db) と Forbidden Signature データベース (dbx) を更新することもできます。 - Platform Key データベース (PK): 仮想マシンファームウェアとクラウドプラットフォーム間の信頼を確立するための自己署名のシングルキーデータベース。また、PK は KEK データベースを更新します。
-
Allowed Signature データベース (
db): バイナリーファイルがシステム上で起動できるかどうかを確認するための証明書またはバイナリーハッシュのリストを保持するデータベース。さらに、dbからのすべての証明書は、RHEL カーネルの.platformキーリングにインポートされます。この機能を使用すると、lockdownモードで署名されたサードパーティーのカーネルモジュールを追加およびロードすることができます。 -
Forbidden Signature データベース (
dbx): システム上で起動することが禁止されている証明書またはバイナリーハッシュのリストを保持するデータベース。
バイナリーファイルは、dbx データベースと Secure Boot Advanced Targeting (SBAT) メカニズムに照らしてチェックされます。SBAT を使用すると、バイナリーに署名した証明書を有効なままに保ちながら、特定のバイナリーの古いバージョンを無効にできます。
5.1.2. クラウド上の RHEL におけるセキュアブートの段階 リンクのコピーリンクがクリップボードにコピーされました!
RHEL インスタンスが Unified Kernel Image (UKI) モードで起動し、セキュアブートが有効な場合、RHEL インスタンスは次の順序でクラウドサービスインフラストラクチャーとやり取りします。
- 初期化: RHEL インスタンスが起動すると、クラウドでホストされているファームウェアが最初に起動し、セキュアブートメカニズムを実装します。
- 変数ストアの初期化: ファームウェアは、変数ストアから UEFI 変数を初期化します。このストアは、ブートプロセスと実行時の操作のためにファームウェアが管理する必要がある情報専用のストレージ領域です。RHEL インスタンスが初めて起動すると、ストアは仮想マシンイメージに関連付けられたデフォルト値によって初期化されます。
ブートローダー: ブート時に、ファームウェアは第 1 段階のブートローダーをロードします。x86 UEFI 環境の RHEL インスタンスの場合、第 1 段階のブートローダーは shim です。shim ブートローダーは、ブートプロセスの次の段階を認証して読み込み、UEFI と GRUB 間の橋渡し役として機能します。
-
RHEL の shim x86 バイナリーは、現在
Microsoft Corporation UEFI CA 2011Microsoft 証明書によって署名されています。これは、Allowed Signature データベース (db) にデフォルトの Microsoft 証明書が含まれているさまざまなハードウェアおよび仮想化プラットフォーム上で、RHEL インスタンスをセキュアブート対応モードで起動できるようにするためです。 -
shim バイナリーは、Red Hat Secure Boot CA と、必要に応じて Machine Owner Key (
MOK) を使用して、信頼済み証明書のリストを拡張します。
-
RHEL の shim x86 バイナリーは、現在
-
UKI: shim バイナリーは、RHEL UKI (
kernel-uki-virtパッケージ) をロードします。UKI は、redhat-sb-certsパッケージにある対応する証明書 (x86_64 アーキテクチャーではRed Hat Secure Boot Signing 504) によって署名されます。この証明書は Red Hat Secure Boot CA によって署名されているため、チェックに合格します。 -
UKI アドオン: UKI の
cmdline拡張機能を使用するために、RHEL カーネルが、拡張機能の署名をdb、MOK、および shim に同梱されている証明書と照らしてチェックして、その拡張機能がオペレーティングシステムのベンダーである RHEL またはユーザーによって署名されていることを確認します。
RHEL カーネルがセキュアブートモードで起動すると、カーネルは lockdown モードになります。lockdown に入ると、RHEL カーネルは db の鍵を .platform キーリングに追加し、MOK の鍵を .machine キーリングに追加します。カーネルのビルドプロセス中に、kernel-modules-core、kernel-modules、kernel-modules-extra などの標準 RHEL カーネルモジュールが、秘密鍵と公開鍵で構成される一時的な鍵で署名されます。各カーネルビルドが完了すると、この秘密鍵はサードパーティーモジュールの署名には使用できなくなります。この署名のためには、db および MOK の証明書を使用できます。