3 セキュア・ブートで使用するためのカーネル・イメージおよびカーネル・モジュールの署名
この章では、セキュア・ブート用のカーネル・モジュールに署名する手順について説明します。
注意:
Oracleでは、Oracleの公式リリース・メカニズムの外部から直接ソースから構築されたモジュールはサポートされていません。 これらのモジュールについては、ハードウェア・ベンダーにお問い合わせください。
セキュア・ブート・モードでのシステムは、オラクル社により署名されたブート・ローダーおよびカーネルのみをロードします。 ただし、デプロイされたシステムで特定のハードウェアを有効にするために、サードパーティ・モジュールを構築およびインストールする必要がある場合があります。 それでもUEFIセキュア・ブートが必要な場合は、モジュールがブート時に認識されるように、UEFIセキュア・ブート・キー・データベース内またはMOKデータベース内の証明書に対して検証できるキーでモジュールに署名する必要があります。
ノート:
UEK R6、UEK R6U1またはUEK R6U2を実行している場合は、モジュールの署名に使用されるキーをカーネルにコンパイルしてから、カーネルを再度署名する必要があります。 また、UEFIまたはMOKデータベースのいずれかに、カーネル署名キーを追加する必要があることにも注意してください。 UEK R6U3では、署名キーがすでにUEFIまたはMOKデータベースに登録されている場合は、セキュア・ブートの下に外部モジュールをロードできます。
重要:
サーバーでのMOKユーティリティの使用は、サーバー・ファームウェアの実装および構成に依存する場合があります。 UEFIセキュア・ブートに使用されるシグネチャ・キーを手動で更新する前に、サーバーでこの機能が提供されていることを確認してください。 不明な場合は、ここに記載されている手順を実行しないでください。
MOKユーティリティを使用してMOKデータベースに証明書を追加するには、ShimがUEFIによってロードされた後に登録リクエストを完了できるよう、システムに物理的にアクセスできる必要があります。 システムに物理的にアクセスできない場合は、このドキュメントの指示に従わないでください。
カーネル・リリースの差異により、モジュールへの署名方法に関する手順は、システム上のカーネル・バージョンによって異なります。 特に、モジュール署名内のキー署名タイプがX.509からPKCS#7に変更されました。 したがって、カーネル提供のsign-fileユーティリティを使用してモジュールに署名するプロセスは引き続き使用されますが、モジュールに署名する特定のカーネルにより適切なユーティリティを使用する必要がある場合があります。
さらに重要なことは、UEK R6U3より前のUEK R6カーネルは、UEFIまたはMOKデータベースで使用可能なキーに対して同じレベルの信頼を提供しないことです。 したがって、UEK R6、UEK R6U1またはUEK R6U2を実行しているシステムでは、セキュア・ブートで使用するカーネル・イメージおよびカーネル・モジュールに署名するための別の一連の手順が存在します。 UEK R6に対するカーネル・モジュール証明書の信頼の設定を参照してください
カーネル・イメージおよびカーネル・モジュールに署名するための要件
モジュールに署名するには、モジュールがロードされているカーネルのカーネル・ソースを含む、いくつかの必須パッケージをインストールする必要があります。 また、この目的のために作成したキー・ペアの署名証明書も必要です。
カーネル・イメージおよびカーネル・モジュールに署名するには、次の要件があります。
必須パッケージのインストール
この手順に必要なのは、最新のOracle Linux 8リリースの標準の最小インストールのみです。 このステップでは、システムが運用環境としてUEKを使用していることを前提としています。
署名証明書の生成
-
OpenSSLで証明書の生成時にデフォルト値を取得するために使用できる構成ファイルを作成します。
ベスト・プラクティスとして、残りのOpenSSL構成を使用して
/etc/ssl/x509.confにファイルを作成します。 構成ファイルの例を次に示します:[ req ] default_bits = 4096 distinguished_name = req_distinguished_name prompt = no string_mask = utf8only x509_extensions = extensions [ req_distinguished_name ] O = Module Signing Example CN = Module Signing Example Key emailAddress = first.last@example.com [ extensions ] basicConstraints=critical,CA:TRUE keyUsage=digitalSignature extendedKeyUsage = codeSigning subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always -
構成ファイルから新しいキー・ペアを生成します。
たとえば、次のコマンドでは、10年間(3,650日間)有効な署名証明書が作成されます。
sudo openssl req -x509 -new -nodes -utf8 -sha512 -days 3650 -batch -config /etc/ssl/x509.conf -outform DER -out /etc/ssl/certs/pubkey.der -keyout /etc/ssl/certs/priv.keyキーが適切に保護されていることを確認します。
-
証明書をPEM形式でエクスポートします。
次のコマンドを入力して、証明書を
.pemファイルとしてエクスポートします:sudo openssl x509 -inform DER -in /etc/ssl/certs/pubkey.der -out /etc/ssl/certs/pubkey.pem
セキュア・ブートのためのカーネルの署名
UEFI Secure Bootでは、攻撃者が不正なOSをインストールして実行できないように、カーネルが信頼できる証明書で署名されている必要があります。
オラクル社では、公式のソフトウェア・チャネルを介して提供されるカーネル・リリースに署名して、その起点と整合性を検証します。 カスタム・カーネルがbootまたはkexec操作を実行するには、作成した署名証明書を使用し、その証明書で署名されたカーネル・イメージが信頼できることを確認して、カーネル・イメージに署名する必要があります。
セキュア・ブート用のカーネルの署名には、次のタスクを使用します。
MOKデータベースの更新
作成したキーは、UEFI Secure Bootキー・データベースに含まれていないため、このキーをShimのMOKデータベースに登録する必要があります。
ノート:
特定のカーネルまたはカーネル・モジュールをセキュア・ブートでロードするだけで、証明書を登録しない場合は、かわりにバイナリのハッシュを登録できます。 これにより、特定の証明書によって署名されたすべてのコンポーネントではなく、特定のバイナリに承認が制限されます。 このプロセスについては、「MOKデータベースへのカーネル・ハッシュの登録」を参照してください。
MOKデータベースへのカーネル・ハッシュの登録
特定のカーネルのハッシュをMOKデータベースに登録する方法について説明します。
「MOKデータベースの更新」の説明に従って署名証明書を登録できない場合、または登録しない場合は、特定のカーネルのハッシュをMOKデータベースに登録できます。 これにより、証明書がなくても、その特定のカーネルをセキュア・ブートの下にロードできます。
セキュア・ブートのためのカーネル・モジュールの署名
ノート:
UEK R6、UEK R6U1またはUEK R6U2を実行している場合は、かわりにR6に対するカーネル・モジュール証明書の信頼の設定に進みます。 この項では、これらのUEK R6カーネルのセキュア・ブート設定を完了するための追加タスクについて説明します。
UEFI Secure Bootでは、攻撃者が不正なOSおよび悪意のあるドライバをインストールして実行できないように、カーネル・モジュールが信頼できる証明書で署名されている必要があります。
オラクル社では、公式のソフトウェア・チャネルを介して提供されるカーネル・リリースに署名して、その起点と整合性を検証します。 ただし、他のドライバをインストールするには、それらの署名証明書を作成し、関連するカーネル・モジュールに署名し、その証明書で署名されたカーネル・モジュールを信頼していることを確認する必要があります。
UEK R6U3のセキュア・ブート実装は、UEFIおよびMOKデータベースで使用可能なプラットフォーム証明書を使用して署名されたモジュールを信頼するように更新されます。 したがって、UEK R6U3からは、モジュール自体に署名するためのキーがデータベースに登録されます。
UEK R6、UEK R6U1およびUEK R6U2以外のUEKバージョンの場合、カーネル・モジュールへの署名には次のタスクが含まれます。
カーネル・モジュール証明書によるMOKデータベースの更新
作成したキーは、UEFI Secure Bootキー・データベースに含まれていないため、このキーをShimのMOKデータベースに登録する必要があります。
ノート:
特定のカーネルまたはカーネル・モジュールのみをセキュア・ブートで実行し、証明書を登録しない場合は、「MOKデータベースへのカーネル・ハッシュの登録」の説明に従ってバイナリのハッシュを登録できます。 これにより、認証は、証明書によって署名されたすべてのコンポーネントではなく、特定のバイナリに制限されます。
UEK R6に対するカーネル・モジュール証明書の信頼の設定
このセクションの情報は、UEK R6U3より前のUEK R6カーネルを持つカーネル・モジュールに適用されます。つまり:
-
UEK R6
-
UEK R6U1
-
UEK R6U2
これらのUEK R6カーネルでは、モジュールの署名後、モジュールに署名するために使用されたキーをコンパイル済カーネル・イメージに挿入する必要があります。 UEK R6は、カーネル組込みの信頼できるキーリングに一覧表示されているキーで署名されたモジュールのみを信頼します。 そのため、更新されたカーネル・イメージは再度署名する必要があります。 さらに、カーネルの署名に使用される顧客所有の証明書をUEFIまたはMOKデータベースに追加する必要があります。 この方法で、カーネル・イメージは信頼されるようになり、セキュア・ブート・モードでブートできます。
リストされたカーネルにカーネル・モジュール証明書の信頼を設定するには、次のタスクを実行します。
-
カーネル・モジュールの署名
このタスクは、セキュア・ブートのためのカーネル・モジュールの署名に示されている最初のタスクと同じです。
-
MOKデータベースの更新
このタスクは、セキュア・ブートのためのカーネル・モジュールの署名に示されている2番目のタスクと同じです。
MOKデータベースの更新
作成したキーは、UEFI Secure Bootキー・データベースに含まれていないため、このキーをShimのMOKデータベースに登録する必要があります。
ノート:
特定のカーネルまたはカーネル・モジュールをセキュア・ブートでロードするだけで、証明書を登録しない場合は、かわりにバイナリのハッシュを登録できます。 これにより、特定の証明書によって署名されたすべてのコンポーネントではなく、特定のバイナリに承認が制限されます。 このプロセスについては、「MOKデータベースへのカーネル・ハッシュの登録」を参照してください。
キーを信頼できることの検証
システムのブート後、キーが適切なカーネル・キーリングに含まれているかどうかを検証できます。 検証は、実行中のカーネルのバージョンによって異なります。 また、カーネル・バージョン間で実装が変更されたため、確認する必要があるキーリング名は一様ではありません。
カスタム・モジュールに署名するために生成されたキーが正しいキーリング内にリストされている場合は、セキュア・ブート・モードで、このキーで署名されたモジュールをロードできます。
UEK R7
次に、UEK R7のキーを検証する方法について説明します。
UEK R7リリースでは、セキュリティを強化するために.machineキーリングが提供されます。 .machineキーリングのキーは、Oracle Linuxカーネルによって信頼されます。 システムの起動時に、すべてのMOKキーが.machineキーリングにロードされます。
.machineキーリング・ファンクションは.builtin_trusted_keysキーリングと同様で、.secondary_trusted_keysキーリングにリンクされます。 このリンケージは、カーネルが.secondary_trusted_keysキーリングをチェックして署名付きカーネル・モジュールを検証するたびに、.machineキーリングが参照されるようにします。
基本的に、署名付きカーネル・モジュールを検証する場合、カーネルは.secondary_trusted_keysキーリング内のキーを使用します。このキーリングは、.machineキーリング内の信頼できるキーも参照するようになり、包括的な検証プロセスが保証されます。 これを次の例に示します。
sudo keyctl show %:.secondary_trusted_keys
Keyring
772746105 ---lswrv 0 0 keyring: .secondary_trusted_keys
252396885 ---lswrv 0 0 \_ keyring: .builtin_trusted_keys
660166481 ---lswrv 0 0 | \_ asymmetric: Oracle CA Server: 702a35b0d12005e5010c0614f7b8abf7c5bd5f73
86702374 ---lswrv 0 0 | \_ asymmetric: Oracle IMA signing CA: a2f28976a05984028f7d1a4904ae14e8e468e551
247354640 ---lswrv 0 0 | \_ asymmetric: Oracle America, Inc.: Ksplice Kernel Module Signing Key: 09010ebef5545fa7c54b626ef518e077b5b1ee4c
264616160 ---lswrv 0 0 | \_ asymmetric: Oracle Linux Kernel Module Signing Key: 2bb352412969a3653f0eb6021763408ebb9bb5ab
772320403 ---lswrv 0 0 \_ keyring: .machine
450491670 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 7c552922286d66bcb33c53d7ee0f1cd716ecdc63
100307441 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 39bff3f0f578f26e527321cafda2a9cdbd71143c
688922247 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 4ff35c3e09ce586fa776d56468d86b022af272f1
UEK R6U3以降のUEK R6の更新
次に、UEK R6U3以降のUEK R6更新のキーを検証する方法について説明します。
builtin_trusted_keysキーリングとplatformキーリングの両方内のキーは、モジュール署名とkexecツールの両方に関して信頼されています。 標準手順に従ってモジュールに署名し、それをMOKデータベースに追加して、キーがplatformキーリングに表示されるようにできます。 これにより、キーリングは自動的に信頼されます。
キーをbuiltin_trusted_keysキーリングにロードできる可能性があるため、たとえば次のように、モジュール署名キーの両方のキーリングを確認してください。
sudo keyctl show %:.builtin_trusted_keys
Keyring
892034081 ---lswrv 0 0 keyring: .builtin_trusted_keys
367808024 ---lswrv 0 0 \_ asymmetric: Oracle CA Server: fbcd3d4d950c6b2b0e01f0a146c5a4e3855ae704
230958440 ---lswrv 0 0 \_ asymmetric: Module Signing Example Key: a43b4e638874b0656db2bc26216f56c0ac39f72b
408597579 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: Ksplice Kernel Module Signing Key: 09010ebef5545fa7c54b626ef518e077b5b1ee4c
839574974 ---lswrv 0 0 \_ asymmetric: Oracle Linux Kernel Module Signing Key: 2bb352412969a3653f0eb6021763408ebb9bb5ab
sudo keyctl show %:.platform
Keyring
705628740 ---lswrv 0 0 keyring: .platform
89698906 ---lswrv 0 0 \_ asymmetric: Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4
497244381 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: d6ee3a06a222bf4244b8986a531046e59c14eeef
710039804 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: c65d1d746ae4cb127762e1dbd7ade48215703c5c
730271863 ---lswrv 0 0 \_ asymmetric: Oracle America Inc.: 2e7c1720d1c5df5254cc93d6decaa75e49620cf8
535985802 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 795c5945e7cb2b6773b7797571413e3695062514
607819007 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: f9aec43f7480c408d681db3d6f19f54d6e396ff4
99739320 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 430c85cb8b531c3d7b8c44adfafc2e5d49bb89d4
231916335 ---lswrv 0 0 \_ asymmetric: Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53
866576656 ---lswrv 0 0 \_ asymmetric: Oracle Linux Test Certificate: d30dffa37bec20ecfb1d3caee53cd746282e8cad
230958440 ---lswrv 0 0 \_ asymmetric: Module Signing Example Key: a43b4e638874b0656db2bc26216f56c0ac39f72b
UEK R6U3および以前のUEK R6の更新
次に、UEK R6U3より前のUEK R6リリースのキーを検証する方法について説明します。
UEK R6U3より前のUEK R6リリースでは、カーネルのbuiltin_trusted_keysキーリングにリストされたキーのみがモジュール署名に対して信頼されます。 このため、モジュール署名キーは、モジュールの署名プロセスの一環としてカーネル・イメージに追加されます。
作成したモジュール署名キーがキーリングに含まれているかどうかを確認するには、次のコマンドを入力してキーリングの内容をリストします。
sudo keyctl show %:.builtin_trusted_keys
Keyring
892034081 ---lswrv 0 0 keyring: .builtin_trusted_keys
367808024 ---lswrv 0 0 \_ asymmetric: Oracle CA Server: fbcd3d4d950c6b2b0e01f0a146c5a4e3855ae704
230958440 ---lswrv 0 0 \_ asymmetric: Module Signing Example Key: a43b4e638874b0656db2bc26216f56c0ac39f72b
408597579 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: Ksplice Kernel Module Signing Key: 09010ebef5545fa7c54b626ef518e077b5b1ee4c
839574974 ---lswrv 0 0 \_ asymmetric: Oracle Linux Kernel Module Signing Key: 2bb352412969a3653f0eb6021763408ebb9bb5ab
RHCK
次に、Red Hat Compatible Kernels (RHCK)のキーを検証する方法について説明します。
builtin_trusted_keysキーリングとplatformキーリングの両方内のキーは、モジュール署名とkexecツールの両方に関して信頼されています。 標準手順に従ってモジュールに署名し、それをMOKデータベースに追加して、キーがplatformキーリングに表示されるようにできます。 これにより、キーリングは自動的に信頼されます。
キーをbuiltin_trusted_keysキーリングにロードできる可能性があるため、たとえば次のように、モジュール署名キーの両方のキーリングを確認してください。
sudo keyctl show %:.builtin_trusted_keys
Keyring
441234704 ---lswrv 0 0 keyring: .builtin_trusted_keys
798307349 ---lswrv 0 0 \_ asymmetric: Oracle CA Server: 32a7ceb6c56614c69b4729b455254bfaf09569a4
277992501 ---lswrv 0 0 \_ asymmetric: Oracle Linux RHCK Module Signing Key: dd995b155c19b3a7c3ef7707b969e25f9639666e
1000618915 ---lswrv 0 0 \_ asymmetric: Red Hat Enterprise Linux kpatch signing key: 4d38fd864ebe18c5f0b72e3852e2014c3a676fc8
199403819 ---lswrv 0 0 \_ asymmetric: Red Hat Enterprise Linux Driver Update Program (key 3): bf57f3e87362bc7229d9f465321773dfd1f77a80
sudo keyctl show %:.platform
Keyring
705628740 ---lswrv 0 0 keyring: .platform
89698906 ---lswrv 0 0 \_ asymmetric: Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4
497244381 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: d6ee3a06a222bf4244b8986a531046e59c14eeef
710039804 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: c65d1d746ae4cb127762e1dbd7ade48215703c5c
730271863 ---lswrv 0 0 \_ asymmetric: Oracle America Inc.: 2e7c1720d1c5df5254cc93d6decaa75e49620cf8
535985802 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 795c5945e7cb2b6773b7797571413e3695062514
607819007 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: f9aec43f7480c408d681db3d6f19f54d6e396ff4
99739320 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 430c85cb8b531c3d7b8c44adfafc2e5d49bb89d4
231916335 ---lswrv 0 0 \_ asymmetric: Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53
866576656 ---lswrv 0 0 \_ asymmetric: Oracle Linux Test Certificate: d30dffa37bec20ecfb1d3caee53cd746282e8cad
230958440 ---lswrv 0 0 \_ asymmetric: Module Signing Example Key: a43b4e638874b0656db2bc26216f56c0ac39f72b