Red Hat Training

A Red Hat training course is available for RHEL 8

3.11. 秘密鍵を使用したカーネルモジュールの署名

UEFI セキュアブート機能が有効になっている場合は、署名済みカーネルモジュールをロードすると、システムのセキュリティーを強化できます。このセクションでは、既存の秘密鍵を使用して、カーネルモジュールに署名する方法について説明します。

署名済みカーネルモジュールは、UEFI セキュアブートが無効になっているシステムまたは非 UEFI システムでもロードできます。そのため、カーネルモジュールの署名済みバージョンと未署名バージョンの両方を提供する必要はありません。

前提条件

手順

  1. 公開鍵を sb_cert.cer ファイルにエクスポートします。

    # certutil -d /etc/pki/pesign \
               -n 'Custom Secure Boot key' \
               -Lr \
               > sb_cert.cer
  2. NSS データベースからキーを PKCS #12 ファイルとして抽出します。

    # pk12util -o sb_cert.p12 \
               -n 'Custom Secure Boot key' \
               -d /etc/pki/pesign
  3. 前のコマンドでプロンプトが表示されたら、秘密鍵を暗号化する新しいパスワードを入力します。
  4. 暗号化されていない秘密鍵をエクスポートします。

    # openssl pkcs12 \
             -in sb_cert.p12 \
             -out sb_cert.priv \
             -nocerts \
             -nodes
    重要

    暗号化されていない秘密鍵は慎重に取り扱ってください。

  5. カーネルモジュールに署名します。次のコマンドは、カーネルモジュールファイル内の ELF イメージに署名を直接追加します。

    # /usr/src/kernels/$(uname -r)/scripts/sign-file \
              sha256 \
              sb_cert.priv \
              sb_cert.cer \
              my_module.ko

これでカーネルモジュールの読み込み準備が完了しました。

重要

RHEL 8 では、キーペアの有効期限が重要です。キーの有効期限はありませんが、カーネルモジュールはその署名キーの有効期間内に署名する必要があります。sign-file ユーティリティーでは、これに関する警告は表示されません。たとえば、2019 でのみ有効な鍵を使用して、その鍵で 2019 で署名されたカーネルモジュールを認証できます。ただし、ユーザーはこの鍵を使用して 2020 でカーネルモジュールに署名することはできません。

検証

  1. カーネルモジュールの署名に関する情報を表示します。

    # modinfo my_module.ko | grep signer
      signer:         Your Name Key

    生成時に入力した名前が署名に記載されていることを確認します。

    注記

    この追加された署名は ELF イメージセクションには含まれず、また ELF イメージの正式な一部ではありません。したがって、readelf などのユーティリティーは、カーネルモジュールの署名を表示できません。

  2. モジュールをロードします。

    # insmod my_module.ko
  3. モジュールを削除 (アンロード) します。

    # rmmod my_module.ko