機械翻訳について

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を使用していることを前提としています。

  1. 必要なカーネル・パッケージをインストールします。

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

    sudo dnf install kernel-uek-devel

    ノート:

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

  2. システムを更新します。

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

    sudo dnf update
  3. システムを再起動します。

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

  4. モジュール署名ユーティリティをインストールします。

    モジュール署名操作を実行するために必要なユーティリティをインストールします。

    sudo dnf install openssl keyutils mokutil pesign
  5. (オプション)ビルド・ツールをインストールします。

    ソースからモジュールを構築する必要がある場合は、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. 構成ファイルから新しいキー・ペアを生成します。

    たとえば、次のコマンドでは、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

    キーが適切に保護されていることを確認します。

  3. 証明書を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操作を実行するには、作成した署名証明書を使用し、その証明書で署名されたカーネル・イメージが信頼できることを確認して、カーネル・イメージに署名する必要があります。

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

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

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

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

NSSデータベースの構成

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

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

    次のコマンドを実行して、現在のディレクトリに証明書およびキー・データベースを作成します。

    sudo certutil -d . -N
  2. プロンプトに従ってデータベースのパスワードを作成します。
  3. PKCS#12バージョンのカーネル署名キーをエクスポートします。

    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ディレクトリにコピーします。

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

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

MOKデータベースの更新

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

ノート:

特定のカーネルまたはカーネル・モジュールをセキュア・ブートでロードするだけで、証明書を登録しない場合は、かわりにバイナリのハッシュを登録できます。 これにより、特定の証明書によって署名されたすべてのコンポーネントではなく、特定のバイナリに承認が制限されます。 このプロセスについては、「MOKデータベースへのカーネル・ハッシュの登録」を参照してください。

  1. キーをインポートします。

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

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

    このコマンドでは、システムの再起動後にMOK管理サービスがキーを登録するときに使用する単一使用パスワードの入力を求められます。

  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」を選択します。

MOKデータベースへのカーネル・ハッシュの登録

特定のカーネルのハッシュをMOKデータベースに登録する方法について説明します。

「MOKデータベースの更新」の説明に従って署名証明書を登録できない場合、または登録しない場合は、特定のカーネルのハッシュをMOKデータベースに登録できます。 これにより、証明書がなくても、その特定のカーネルをセキュア・ブートの下にロードできます。

  1. カーネルのハッシュを抽出します。

    pesignツールを使用して、カーネルのハッシュ・シグネチャを取得します。 たとえば、実行中のカーネルのハッシュを取得するには:

    pesign -h -i /boot/vmlinuz-$(uname -r)  | awk '{print $2}' > vmlinuz.hash  
  2. mokutilを使用してハッシュを登録します。
    sudo mokutil --import-hash vmlinuz.hash

    ワンタイム・パスワードを設定するように求められます。 システムのリブート時に要求されるため、このことに注意してください。

  3. システムを再起動します。
  4. ブート時に、MOK Managerを使用してハッシュを登録します。

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

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

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

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

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コマンドを使用して、シグネチャ情報をチェックします。 構文は次のとおりです。

    modinfo module

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

    filename: /lib/modules/5.4.17-2036.103.3.1.el9uek.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.el9uek.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データベースに登録する必要があります。

ノート:

特定のカーネルまたはカーネル・モジュールのみをセキュア・ブートで実行し、証明書を登録しない場合は、「MOKデータベースへのカーネル・ハッシュの登録」の説明に従ってバイナリのハッシュを登録できます。 これにより、認証は、証明書によって署名されたすべてのコンポーネントではなく、特定のバイナリに制限されます。

  1. キーをインポートします。

    mokutilユーティリティを使用して、キーをインポートします:

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

  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コマンドを使用して、シグネチャ情報をチェックします。 構文は次のとおりです。

    modinfo module

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

    filename: /lib/modules/5.4.17-2036.103.3.1.el9uek.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.el9uek.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ディレクトリにコピーします。

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

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

MOKデータベースの更新

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

ノート:

特定のカーネルまたはカーネル・モジュールをセキュア・ブートでロードするだけで、証明書を登録しない場合は、かわりにバイナリのハッシュを登録できます。 これにより、特定の証明書によって署名されたすべてのコンポーネントではなく、特定のバイナリに承認が制限されます。 このプロセスについては、「MOKデータベースへのカーネル・ハッシュの登録」を参照してください。

  1. キーをインポートします。

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

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

    このコマンドでは、システムの再起動後にMOK管理サービスがキーを登録するときに使用する単一使用パスワードの入力を求められます。

  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のキーを検証する方法について説明します。

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