3 セキュア・ブートで使用するためのカーネル・イメージおよびカーネル・モジュールの署名

この章では、セキュア・ブート用のカーネル・モジュールに署名する手順について説明します。

注意:

Oracleでは、Oracleの公式リリース・メカニズムの外部でソースから直接構築されるモジュールは一切サポートされていません。これらのモジュールのサポートについては、ハードウェア・ベンダーに連絡する必要があります。

セキュア・ブート・モードでのシステムは、オラクル社により署名されたブート・ローダーおよびカーネルのみをロードします。ただし、配備されたシステムで特定のハードウェアを有効にするために、サードパーティ製のモジュールを構築してインストールする必要がある場合があります。引き続きUEFI Secure Bootが必要な場合は、ブート時にモジュールが認識されるように、UEFI Secure Bootキー・データベース内またはShim MokManagerキー・データベース内の証明書に対して検証できるキーでモジュールに署名する必要があります。

UEK R6、UEK R6U1またはUEK R6U2を実行している場合は、モジュールの署名に使用されるキーをカーネルにコンパイルしてから、カーネルに再度署名する必要があることに注意してください。また、UEFIまたはMOKデータベースのいずれかに、カーネル署名キーを追加する必要があることにも注意してください。UEK R6U3以降では、署名キーがすでにMOKデータベースに登録されている場合、セキュア・ブートにおいて外部モジュールをロードできます。

重要:

サーバーでのMOKユーティリティの使用は、サーバー・ファームウェアの実装および構成に依存する場合があります。UEFI Secure Bootに使用する署名キーを手動で更新する前に、サーバーでこれがサポートされていることを確認してください。不明な場合は、ここに記載されている手順を実行しないでください。

MOKユーティリティを使用してMOKデータベースに証明書を追加するには、ShimがUEFIによってロードされた後に登録リクエストを完了できるよう、システムに物理的にアクセスできる必要があります。システムに物理的にアクセスできない場合は、このドキュメントの指示に従わないでください。

カーネル・リリースの差異により、モジュールへの署名方法に関する手順は、システム上のカーネル・バージョンによって異なります。特に、モジュール署名内のキー署名タイプがX.509からPKCS#7に変更されました。したがって、カーネル提供のsign-fileユーティリティを使用してモジュールに署名するプロセスは引き続き使用されますが、モジュールが署名される特定のカーネルに適したユーティリティを使用することが必要な場合があります。

さらに重要なことは、UEK R6U3より前のUEK R6カーネルでは、UEFIまたはShim MokManagerキー・データベースで使用可能なキーに対して、同じレベルの信頼を提供していなかった点です。したがって、UEK R6、UEK R6U1またはUEK R6U2を実行しているシステムでは、セキュア・ブートで使用するカーネル・イメージおよびカーネル・モジュールに署名するための別の一連の手順が存在します。UEK R6に対するカーネル・モジュール証明書の信頼の設定を参照してください。

カーネル・イメージおよびカーネル・モジュールに署名するための要件

モジュールに署名するには、モジュールがロードされているカーネルのカーネル・ソースを含む、いくつかの必須パッケージをインストールする必要があります。また、この目的のために作成したキー・ペアの署名証明書も必要です。

カーネル・イメージおよびカーネル・モジュールに署名するには、次の要件があります。

必須パッケージのインストール

この手順には、最新のOracle Linux 7、Oracle Linux 8またはOracle Linux 9更新リリースの標準最小インストールで十分です。このステップでは、システムが運用環境としてUEKを使用していることを前提としています。

ノート:

システムでOracle Linux 7が実行されている場合は、ステップのdnfコマンドを適切なyumコマンド構文に置き換えます。

  1. システムのカーネル・ソースを含むパッケージを取得します。

    sudo dnf install kernel-uek-devel

    RHCKを使用する場合、カーネル・ソースはkernel-develパッケージにあります。

  2. システムを更新して、最新のカーネルおよび関連パッケージがあることを確認します。

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

    このステップは、カーネルがシステム更新に含まれている場合に実用的です。再起動により、操作中のカーネル・バージョンと、カーネル署名操作の開始時にシステムで実行されているカーネルが混乱しないようにします。

  4. Oracle Linux 7システムのみ: yum構成でoptional_latestリポジトリを有効にします。

    sudo yum-config-manager --enable ol7_optional_latest
  5. モジュール署名操作を実行するために必要なユーティリティをインストールします。

    sudo dnf install openssl keyutils mokutil pesign
  6. モジュール・ソースを構築する必要がある場合は、ビルド・ツールが使用可能であることを確認するために、たとえば次のように、Development Toolsグループをインストールする場合があります。

    sudo dnf group install "Development Tools"

署名証明書の生成

サードパーティ製のモジュールまたはカーネル・イメージの署名に使用する署名証明書がまだない場合は、OpenSSLユーティリティを使用して生成できます。OpenSSLおよび公開キー・インフラストラクチャの詳細は、「Oracle Linux: 証明書と公開キー・インフラストラクチャの管理」を参照してください。
  1. 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
  2. この構成ファイルを使用して、新しいキー・ペアを生成します。

    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

    このサンプル・コマンドは、10年間(3,650日)有効な署名証明書を作成します。キーが適切に保護されていることを確認します。

  3. PEM形式で証明書をエクスポートします。

    sudo openssl x509 -inform DER -in /etc/ssl/certs/pubkey.der -out /etc/ssl/certs/pubkey.pem

セキュア・ブートのためのカーネルの署名

UEFI Secure Bootでは、攻撃者が不正なOSをインストールして実行できないように、カーネルが信頼できる証明書で署名されている必要があります。

オラクル社では、公式のソフトウェア・チャネルを介して提供されるカーネル・リリースに署名して、その起点と整合性を検証します。カスタム・カーネルがbootまたはkexec操作を実行するには、作成した署名証明書を使用し、その証明書で署名されたカーネル・イメージが信頼できることを確認して、カーネル・イメージに署名する必要があります。

セキュア・ブート用のカーネルの署名には、次のタスクを使用します。

  1. NSSデータベースの構成

  2. カーネル・イメージの署名

  3. MOKデータベースの更新

NSSデータベースの構成

NSSデータベースには、カーネル署名用のツールがカーネル署名キーを取得するためのキーの完全なセットが格納されています。

  1. NSSデータベースを構成します。

    sudo certutil -d . -N
  2. プロンプトに従ってデータベースのパスワードを作成します。

  3. PKCS#2バージョンのカーネル署名キーをエクスポートします。

    NSSユーティリティでは、PKCS#12形式のキー・ファイルのみを操作できます。したがって、カーネル・イメージに署名できるように、このステップを実行する必要があります。

    sudo openssl pkcs12 -export -inkey /etc/ssl/certs/priv.key -in /etc/ssl/certs/pubkey.pem -name cert -out /etc/ssl/certs/cert.p12
  4. 要求されたら、エクスポートのパスワードを入力します。

    このパスワードは、PKCS#12アーカイブのパスワードを参照します。実際には、このパスワードをNSSデータベースのパスワードと一致させます。

  5. 新しいデータベースに、PKCS#12バージョンのカーネル署名キーを追加またはインポートします。

    sudo pk12util -d . -i cert.p12
  6. プロンプトに従って、パスワードを入力します。

    最初にNSSデータベース、次にPKCS#12アーカイブの2つのパスワードのプロンプトが表示されます。

    Enter Password or Pin for "NSS Certificate DB":
    Enter password for PKCS12 file:
    pk12util: PKCS12 IMPORT SUCCESSFUL

カーネル・イメージの署名

このタスクでは、pesignユーティリティを使用して、NSSデータベースの署名キーを使用してカーネルを新しい署名で再署名します。

  1. 既存のPE署名を削除します。

    sudo pesign -u 0 -i /boot/vmlinuz-$(uname -r) --remove-signature -o vmlinuz.unsigned
  2. NSSデータベース内のカーネル署名キーに基づいて新しい署名を割り当てます。

    sudo pesign -n . -c cert -i vmlinuz.unsigned -o vmlinuz.signed -s
  3. プロンプトに従って、パスワードを入力します。

    NSS証明書データベースのパスワードは、NSSデータベースの構成で作成したパスワードです。

  4. 署名されたカーネルを/bootにコピーします。

    sudo cp -bf vmlinuz.signed /boot/vmlinuz-$(uname -r)

    コマンドの-bオプションは、元のカーネル・イメージのバックアップを作成します。

MOKデータベースの更新

作成したキーは、UEFI Secure Bootキー・データベースに含まれていないため、このキーをShimのMOKデータベースに登録する必要があります。

  1. 次のコマンドを使用してキーをインポートします。

    sudo mokutil --import /etc/ssl/certs/pubkey.der

    このコマンドでは、システムのリブート後にMOK管理サービスでキーが登録されるときに使用する、1回のみ使用できるパスワードの入力を求められます。

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

    UEFI Shimにより、ブート時にShim UEFI key managerが自動的に起動されます。作成したMOKキーを登録するためにブート・プロセスを中断するために、10秒以内にキーを入力したことを確認します。

  3. 任意のキーを押して、MOK管理を実行します。

  4. メニューから「Enroll MOK」を選択します。

  5. メニューから「View key 0」を選択して、キーの詳細を表示します。

  6. 表示される値がモジュールの署名に使用したキーおよびカーネル・イメージに挿入したキーと一致することを確認し、任意のキーを押して「Enroll MOK」メニューに戻ります。

  7. メニューから「Continue」を選択します。

    「Enroll the key(s)?」画面が表示されます。

  8. キーを登録するには、「Yes」を選択します。

  9. パスワードのプロンプトで、この手順の最初にキーをインポートしたときに使用したパスワードを入力します。

    キーは、UEFI Secure Bootキー・データベース内に登録されます。

  10. 「Perform MOK management」画面が表示されたら、メニューから「Reboot」を選択します。

セキュア・ブートのためのカーネル・モジュールの署名

ノート:

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バージョンの場合、カーネル・モジュールへの署名には次のタスクが含まれます。

  1. カーネル・モジュールの署名

  2. カーネル・モジュール証明書によるMOKデータベースの更新

カーネル・モジュールの署名

sign-fileユーティリティでは、モジュールがカーネルに対して正しく署名されていることを確認します。このユーティリティは、カーネル・ソース内で提供されます。

注意:

ここに示す手順では、現在実行中のカーネルのモジュールに署名することを前提としています。別のカーネルのモジュールに署名する場合は、正しいカーネル・バージョン・ソース内のsign-fileユーティリティへのパスを指定する必要があります。そうしないと、そのカーネルのモジュールの署名タイプが、必要な署名タイプと正しく一致しない可能性があります。

  1. モジュールがすでに/lib/modules/にインストールされていることを確認します。

  2. 現在実行中のカーネルに対してsign-fileユーティリティを実行します。

    sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /etc/ssl/certs/priv.key /etc/ssl/certs/pubkey.der /lib/modules/$(uname -r)/path/to/module.ko
  3. (オプション)モジュールの署名情報を確認します。

    modinfo module

    たとえば、helloという名前のモジュールに次の出力が表示される場合があります。

    filename:       /lib/modules/5.4.17-2036.103.3.1.el8uek.x86_64/extra/hello.ko
    description:    Hello World Linux Kernel Module
    author:         A.Developer
    license:        GPL
    srcversion:     D51FB4CF0B86314953EE797
    depends:        
    retpoline:      Y
    name:           hello
    vermagic:       5.4.17-2036.103.3.1.el8uek.x86_64 SMP mod_unload modversions 
    sig_id:         PKCS#7
    signer:         Module Signing Example Key
    sig_key:        AB:2C:E3:AB:87:D9:9C:6A:31:B8:80:20:D4:92:25:F3:9A:26:DC
    sig_hashalgo:   sha512
    signature:   9F:B0:25:CB:14:C1:C7:10:7F:60:1E:E6:66:82:64:58:91:1F:01:A5:
    		D9:03:1B:9C:2D:42:00:45:78:2B:FA:70:F8:C7:3B:1A:A2:42:00:09:
    		33:E0:81:1D:C6:E6:46:A5:FE:8B:9F:8C:3D:4E:A1:3A:05:52:ED:F6:
    		25:F9:88:98:D3:70:78:1D:7E:63:F3:73:C8:C8:14:C2:3A:52:B4:8F:
    		4C:8D:80:D9:0D:24:F8:C9:B1:28:82:B6:A9:27:56:C6:86:80:25:A5:
    		75:C8:78:A9:30:BD:01:4C:DD:43:7F:FD:41:98:2C:59:21:7D:39:17:
    		EC:2C:C1:65:1D:95:F0:09:C7:F6:45:10:83:15:78:A2:EE:D4:73:79:
    		B2:F0:57:C1:96:B3:4C:43:B8:D1:87:94:50:61:D6:EC:50:2B:6A:6C:
    		5C:C1:3E:8C:CB:6F:19:DC:EF:6C:12:07:03:99:B7:B3:22:0B:F6:AC:
    		CB:40:C6:34:15:EA:1F:88:D4:4E:1C:87:2D:5A:92:F7:12:A6:E7:91:
    		B3:80:AA:80:8F:49:B7:F0:F0:97:05:09:7A:65:30:4A:AE:10:BE:9F:
    		6A:E4:B2:24:BE:1A:21:D0:F6:15:05:DA:2C:64:EA:B2:8E:AC:6F:18:
    		40:65:21:F6:AA:17:31:AE:3F:3A:43:DB:A8:BC:71:79:EF:11:18:DE:
    		86:EE:74:2A:E0:44:FC:B3:FF:CB:CB:F0:CA:BD:7B:A1:57:84:D8:A6:
    		91:E5:B8:EF:1B:8A:63:16:43:03:AF:C4:C7:BF:52:9A:A9:23:75:C6:
    		42:54:69:4E:3D:51:56:5A:9D:9B:C7:11:5E:9A:30:87:5F:F3:5E:C3:
    		AE:2C:1D:6F:C9:4D:15:E5:CF:EC:46:0E:EF:D9:BB:2F:DF:DF:54:EA:
    		F3:B6:9C:A3:6F:80:19:B9:DF:FA:2A:30:4E:2E:70:74:11:F9:5C:F6:
    		EE:1A:DF:86:C4:2B:36:7E:B4:A4:D4:7E:30:19:1A:D1:92:D3:A7:FB:
    		53:BF:67:C3:65:9E:4B:92:F0:6C:D4:6C:05:9B:0F:BF:D1:5B:CB:86:
    		AE:68:00:AE:43:53:8B:7D:7E:18:20:CD:65:68:6C:4A:0D:93:A4:54:
    		09:39:9C:D3:BD:CD:17:B6:8A:D3:62:0C:CA:A8:FD:1A:52:CE:29:A0:
    		93:BF:AD:D2:58:3F:EA:4E:4B:50:31:6F:F6:B2:1E:87:C4:0A:9D:E4:
    		43:E9:C7:CA:E9:CB:EF:A6:61:5B:DA:01:33:37:66:DB:16:8D:7C:D7:
    		30:39:57:D4:0C:1A:54:AE:91:7B:FE:35:10:CC:34:03:99:EA:5A:57:
    		E0:95:61:02:42:95:A2:F5:2E:72:30:95

カーネル・モジュール証明書によるMOKデータベースの更新

作成したキーは、UEFI Secure Bootキー・データベースに含まれていないため、このキーをShimのMOKデータベースに登録する必要があります。

  1. 次のコマンドを実行します。

    sudo mokutil --import /etc/ssl/certs/pubkey.der

    このコマンドでは、システムのリブート後にMOK管理サービスでキーが登録されるときに使用する、1回のみ使用できるパスワードの入力を求められます。

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

    UEFI Shimにより、ブート時にShim UEFI key managerが自動的に起動されます。作成したMOKキーを登録するためにブート・プロセスを中断するために、10秒以内にキーを入力したことを確認します。

  3. 任意のキーを押して、MOK管理を実行します。

  4. メニューから「Enroll MOK」を選択します。

  5. メニューから「View key 0」を選択して、キーの詳細を表示します。

  6. 表示される値がモジュールの署名に使用したキーおよびカーネル・イメージに挿入したキーと一致することを確認し、任意のキーを押して「Enroll MOK」メニューに戻ります。

  7. メニューから「Continue」を選択します。

    「Enroll the key(s)?」画面が表示されます。

  8. キーを登録するには、「Yes」を選択します。

  9. パスワードのプロンプトで、この手順の最初にキーをインポートしたときに使用したパスワードを入力します。

    キーは、UEFI Secure Bootキー・データベース内に登録されます。

  10. 「Perform MOK management」画面が表示されたら、メニューから「Reboot」を選択します。

UEK R6に対するカーネル・モジュール証明書の信頼の設定

このセクションの情報は、UEK R6U3よりのUEK R6カーネルを持つカーネル・モジュールに適用されます。つまり:

  • UEK R6

  • UEK R6U1

  • UEK R6U2

これらのUEK R6カーネルでは、モジュールの署名後、モジュールに署名するために使用されたキーをコンパイル済カーネル・イメージに挿入する必要があります。UEK R6は、カーネル組込みの信頼できるキーリングに一覧表示されているキーで署名されたモジュールのみを信頼します。そのため、更新されたカーネル・イメージは再度署名する必要があります。さらに、カーネルの署名に使用される顧客所有の証明書をUEFIまたはMOKデータベースに追加する必要があります。この方法で、カーネル・イメージは信頼されるようになり、セキュア・ブート・モードでブートできます。

リストされたカーネルにカーネル・モジュール証明書の信頼を設定するには、次のタスクを実行します。

  1. カーネル・モジュールの署名

    このタスクは、セキュア・ブートのためのカーネル・モジュールの署名に示されている最初のタスクと同じです。

  2. カーネル・イメージへのモジュール証明書の挿入

  3. カーネル・イメージの署名

  4. MOKデータベースの更新

    このタスクは、セキュア・ブートのためのカーネル・モジュールの署名に示されている2番目のタスクと同じです。

カーネル・モジュールの署名

sign-fileユーティリティでは、モジュールがカーネルに対して正しく署名されていることを確認します。このユーティリティは、カーネル・ソース内で提供されます。

注意:

ここに示す手順では、現在実行中のカーネルのモジュールに署名することを前提としています。別のカーネルのモジュールに署名する場合は、正しいカーネル・バージョン・ソース内のsign-fileユーティリティへのパスを指定する必要があります。そうしないと、そのカーネルのモジュールの署名タイプが、必要な署名タイプと正しく一致しない可能性があります。

  1. モジュールがすでに/lib/modules/にインストールされていることを確認します。

  2. 現在実行中のカーネルに対してsign-fileユーティリティを実行します。

    sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /etc/ssl/certs/priv.key /etc/ssl/certs/pubkey.der /lib/modules/$(uname -r)/path/to/module.ko
  3. (オプション)モジュールの署名情報を確認します。

    modinfo module

    たとえば、helloという名前のモジュールに次の出力が表示される場合があります。

    filename:       /lib/modules/5.4.17-2036.103.3.1.el8uek.x86_64/extra/hello.ko
    description:    Hello World Linux Kernel Module
    author:         A.Developer
    license:        GPL
    srcversion:     D51FB4CF0B86314953EE797
    depends:        
    retpoline:      Y
    name:           hello
    vermagic:       5.4.17-2036.103.3.1.el8uek.x86_64 SMP mod_unload modversions 
    sig_id:         PKCS#7
    signer:         Module Signing Example Key
    sig_key:        AB:2C:E3:AB:87:D9:9C:6A:31:B8:80:20:D4:92:25:F3:9A:26:DC
    sig_hashalgo:   sha512
    signature:   9F:B0:25:CB:14:C1:C7:10:7F:60:1E:E6:66:82:64:58:91:1F:01:A5:
    		D9:03:1B:9C:2D:42:00:45:78:2B:FA:70:F8:C7:3B:1A:A2:42:00:09:
    		33:E0:81:1D:C6:E6:46:A5:FE:8B:9F:8C:3D:4E:A1:3A:05:52:ED:F6:
    		25:F9:88:98:D3:70:78:1D:7E:63:F3:73:C8:C8:14:C2:3A:52:B4:8F:
    		4C:8D:80:D9:0D:24:F8:C9:B1:28:82:B6:A9:27:56:C6:86:80:25:A5:
    		75:C8:78:A9:30:BD:01:4C:DD:43:7F:FD:41:98:2C:59:21:7D:39:17:
    		EC:2C:C1:65:1D:95:F0:09:C7:F6:45:10:83:15:78:A2:EE:D4:73:79:
    		B2:F0:57:C1:96:B3:4C:43:B8:D1:87:94:50:61:D6:EC:50:2B:6A:6C:
    		5C:C1:3E:8C:CB:6F:19:DC:EF:6C:12:07:03:99:B7:B3:22:0B:F6:AC:
    		CB:40:C6:34:15:EA:1F:88:D4:4E:1C:87:2D:5A:92:F7:12:A6:E7:91:
    		B3:80:AA:80:8F:49:B7:F0:F0:97:05:09:7A:65:30:4A:AE:10:BE:9F:
    		6A:E4:B2:24:BE:1A:21:D0:F6:15:05:DA:2C:64:EA:B2:8E:AC:6F:18:
    		40:65:21:F6:AA:17:31:AE:3F:3A:43:DB:A8:BC:71:79:EF:11:18:DE:
    		86:EE:74:2A:E0:44:FC:B3:FF:CB:CB:F0:CA:BD:7B:A1:57:84:D8:A6:
    		91:E5:B8:EF:1B:8A:63:16:43:03:AF:C4:C7:BF:52:9A:A9:23:75:C6:
    		42:54:69:4E:3D:51:56:5A:9D:9B:C7:11:5E:9A:30:87:5F:F3:5E:C3:
    		AE:2C:1D:6F:C9:4D:15:E5:CF:EC:46:0E:EF:D9:BB:2F:DF:DF:54:EA:
    		F3:B6:9C:A3:6F:80:19:B9:DF:FA:2A:30:4E:2E:70:74:11:F9:5C:F6:
    		EE:1A:DF:86:C4:2B:36:7E:B4:A4:D4:7E:30:19:1A:D1:92:D3:A7:FB:
    		53:BF:67:C3:65:9E:4B:92:F0:6C:D4:6C:05:9B:0F:BF:D1:5B:CB:86:
    		AE:68:00:AE:43:53:8B:7D:7E:18:20:CD:65:68:6C:4A:0D:93:A4:54:
    		09:39:9C:D3:BD:CD:17:B6:8A:D3:62:0C:CA:A8:FD:1A:52:CE:29:A0:
    		93:BF:AD:D2:58:3F:EA:4E:4B:50:31:6F:F6:B2:1E:87:C4:0A:9D:E4:
    		43:E9:C7:CA:E9:CB:EF:A6:61:5B:DA:01:33:37:66:DB:16:8D:7C:D7:
    		30:39:57:D4:0C:1A:54:AE:91:7B:FE:35:10:CC:34:03:99:EA:5A:57:
    		E0:95:61:02:42:95:A2:F5:2E:72:30:95

カーネル・イメージへのモジュール証明書の挿入

  1. 証明書が格納されているディレクトリに移動します。

    cd /etc/ssl/cert
  2. モジュールの署名に使用された未加工のDER証明書を、圧縮されたカーネル・ブート・イメージに挿入します。

    sudo /usr/src/kernels/$(uname -r)/scripts/insert-sys-cert -s /boot/System.map-$(uname -r) -z /boot/vmlinuz-$(uname -r) -c pubkey.der
    INFO:    Executing: gunzip <vmlinux-8ig4vO >vmlinux-QyW44r
    WARNING: Could not find the symbol table.
    INFO:    sym:    system_extra_cert
    INFO:    addr:   0xffffffff82891616
    INFO:    size:   8194
    INFO:    offset: 0x1c91616
    INFO:    sym:    system_extra_cert_used
    INFO:    addr:   0xffffffff82893618
    INFO:    size:   0
    INFO:    offset: 0x1c93618
    INFO:    sym:    system_certificate_list_size
    INFO:    addr:   0xffffffff82893620
    INFO:    size:   0
    INFO:    offset: 0x1c93620
    INFO:    Inserted the contents of pubkey.der into ffffffff82891616.
    INFO:    Used 1481 bytes out of 8194 bytes reserved.
    INFO:    Executing: gzip -n -f -9 <vmlinux-QyW44r >vmlinux-M5uNR6

重要:

カーネルのブート・イメージの圧縮サイズを増加することはできないため、カーネルに追加可能なカスタム証明書は1つのみです。カーネル・ブート・イメージに複数の証明書を追加しないでください

カーネル・イメージの署名

このタスクでは、pesignユーティリティを使用して、NSSデータベースの署名キーを使用してカーネルを新しい署名で再署名します。

  1. 既存のPE署名を削除します。

    sudo pesign -u 0 -i /boot/vmlinuz-$(uname -r) --remove-signature -o vmlinuz.unsigned
  2. NSSデータベース内のカーネル署名キーに基づいて新しい署名を割り当てます。

    sudo pesign -n . -c cert -i vmlinuz.unsigned -o vmlinuz.signed -s
  3. プロンプトに従って、パスワードを入力します。

    NSS証明書データベースのパスワードは、NSSデータベースの構成で作成したパスワードです。

  4. 署名されたカーネルを/bootにコピーします。

    sudo cp -bf vmlinuz.signed /boot/vmlinuz-$(uname -r)

    コマンドの-bオプションは、元のカーネル・イメージのバックアップを作成します。

MOKデータベースの更新

作成したキーは、UEFI Secure Bootキー・データベースに含まれていないため、このキーをShimのMOKデータベースに登録する必要があります。

  1. 次のコマンドを使用してキーをインポートします。

    sudo mokutil --import /etc/ssl/certs/pubkey.der

    このコマンドでは、システムのリブート後にMOK管理サービスでキーが登録されるときに使用する、1回のみ使用できるパスワードの入力を求められます。

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

    UEFI Shimにより、ブート時にShim UEFI key managerが自動的に起動されます。作成したMOKキーを登録するためにブート・プロセスを中断するために、10秒以内にキーを入力したことを確認します。

  3. 任意のキーを押して、MOK管理を実行します。

  4. メニューから「Enroll MOK」を選択します。

  5. メニューから「View key 0」を選択して、キーの詳細を表示します。

  6. 表示される値がモジュールの署名に使用したキーおよびカーネル・イメージに挿入したキーと一致することを確認し、任意のキーを押して「Enroll MOK」メニューに戻ります。

  7. メニューから「Continue」を選択します。

    「Enroll the key(s)?」画面が表示されます。

  8. キーを登録するには、「Yes」を選択します。

  9. パスワードのプロンプトで、この手順の最初にキーをインポートしたときに使用したパスワードを入力します。

    キーは、UEFI Secure Bootキー・データベース内に登録されます。

  10. 「Perform MOK management」画面が表示されたら、メニューから「Reboot」を選択します。

キーを信頼できることの検証

システムのブート後、キーが適切なカーネル・キーリングに含まれているかどうかを検証できます。検証は、実行中のカーネルのバージョンによって異なります。また、カーネル・バージョン間で実装が変更されたため、確認する必要があるキーリング名は一様ではありません。

カスタム・モジュールに署名するために生成されたキーが正しいキーリング内にリストされている場合は、セキュア・ブート・モードで、このキーで署名されたモジュールをロードできます。

UEK R7リリース

UEK R7では、.machineキーリングが導入されています。.machineキーリング内のキーは、Oracle Linuxカーネル内で使用できるよう信頼されています。すべてのMOKキーが、ブート時にこのキーリングにロードされます。

.builtin_trusted_keysキーリングと同様に、新しい.machineキーリングは.secondary_trusted_keysキーリングにリンクされます。このリンクが設定されている場合、次の例に示すように、カーネルが.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更新(Oracle Linux 8およびOracle Linux 9上の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

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

UEK R5

UEK R5の場合、組込みカーネル・キー、UEFI Secure Bootデータベース・キーおよびMOKデータベース・キーは、すべてカーネル・キーリング(secondary_trusted_keys)に含まれています。このキーリングのキーは、モジュール署名で信頼され、kexecツールに対しても信頼されます。

このキーリングをチェックして、作成したモジュール署名キーがリストされているかどうかを確認するには、次を入力します。

sudo keyctl show %:.secondary_trusted_keys
Keyring
 847333689 --alswrv      0     0  keyring: .secondary_trusted_keys
 304199016 --alswrv      0     0   \_ keyring: .builtin_trusted_keys
1008872915 --alswrv      0     0   |   \_ asymmetric: Oracle CA Server: 911ccad43f8dcc5e169cf7d89af9d28edd7e68aa
 252474061 --alswrv      0     0   |   \_ asymmetric: Oracle America, Inc.: Ksplice Kernel Module Signing Key: 09010ebef5545fa7c54b626ef518e077b5b1ee4c
 164249372 --alswrv      0     0   |   \_ asymmetric: Oracle Linux Kernel Module Signing Key: 2bb352412969a3653f0eb6021763408ebb9bb5ab
 567204509 --alswrv      0     0   \_ asymmetric: Oracle America Inc.: 7b13dad59daa6adeacfff53c9a3b7e4f61fe068a
 202164133 --alswrv      0     0   \_ asymmetric: Oracle America Inc.: 9c68fc11b0f85979388df4c8cc2c9c098928eda9
 600928065 --alswrv      0     0   \_ asymmetric: Oracle America Inc.: fe1ea0d2db0446565aec7d637e2509c9900398c1
1023599957 --alswrv      0     0   \_ asymmetric: Oracle America Inc.: bc5971954c749d3d309852ef0f3c236fa498e8f6
 837499579 --alswrv      0     0   \_ asymmetric: Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4
 230958440 ---lswrv      0     0   \_ asymmetric: Module Signing Example Key: a43b4e638874b0656db2bc26216f56c0ac39f72b
 260150072 --alswrv      0     0   \_ asymmetric: Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53

Oracle Linux 7でのUEK R4およびRHCK

Oracle Linux 7でのUEK R4およびRHCK (3.10.0)の場合、組込みカーネル・キー、UEFI Secure Bootデータベース・キーおよびMOKデータベース・キーは、すべてカーネル・キーリング(system_keyring)に含まれています。このキーリングのキーは、モジュール署名で信頼され、kexecツールに対しても信頼されます。

このキーリングをチェックして、作成したモジュール署名キーがリストされているかどうかを確認するには、次を入力します。

sudo keyctl show %:.system_keyring
Keyring
 490420691 --alswrv      0     0  keyring: .system_keyring
 985562533 --alswrv      0     0   \_ asymmetric: Oracle America, Inc.: Ksplice Kernel Module Signing Key: 09010ebef5545fa7c54b626ef518e077b5b1ee4c
 117527109 --alswrv      0     0   \_ asymmetric: Oracle America Inc.: 7b13dad59daa6adeacfff53c9a3b7e4f61fe068a
 752001237 --alswrv      0     0   \_ asymmetric: Oracle America Inc.: 9c68fc11b0f85979388df4c8cc2c9c098928eda9
 405618281 --alswrv      0     0   \_ asymmetric: Oracle America Inc.: fe1ea0d2db0446565aec7d637e2509c9900398c1
1018396318 --alswrv      0     0   \_ asymmetric: Oracle America Inc.: bc5971954c749d3d309852ef0f3c236fa498e8f6
 264415311 --alswrv      0     0   \_ asymmetric: Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4
 811847839 --alswrv      0     0   \_ asymmetric: Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53
  38542369 --alswrv      0     0   \_ asymmetric: Oracle CA Server: 7efd70c89ee321c6be7098cd17fe7f4eded76a9e
 230958440 ---lswrv      0     0   \_ asymmetric: Module Signing Example Key: a43b4e638874b0656db2bc26216f56c0ac39f72b
 285314597 --alswrv      0     0   \_ asymmetric: Oracle Linux Kernel Module Signing Key: 2bb352412969a3653f0eb6021763408ebb9bb5ab