セキュアブートが有効になっているときに自己署名カーネルをロードできませんでした:「無効なパディング署名」

セキュアブートが有効になっているときに自己署名カーネルをロードできませんでした:「無効なパディング署名」

セキュアブートでUbuntuを実行しています。仕様でパッケージ化されたカーネルを使用すると、すべてがうまく機能します。ただし、自己署名カーネルの実行に問題があります。私のMOKキーの署名は大丈夫だと確信していますが(以下で確認されています)、正しいエントリを選択してgrubからカーネルを起動しようとすると、「読み込み中...エラー:無効なシム」というエラーメッセージが表示されます。 「苦労しましたが、解決策が見つかりませんでした。両方のカーネルがMOKキーで署名されていますが、1つは機能しますが、もう1つは機能しません。なぜですか?

確認する:

root@T495:~# sbsign --key /var/lib/shim-signed/mok/MOK.priv --cert /var/lib/shim-signed/mok/MOK.pem /boot/vmlinuz
Image was already signed; adding additional signature

root@T495:~# sbverify --list /boot/vmlinuz
signature 1
image signature issuers:
 - /C=PL/ST=Poznan/L=Poznan/O=none/CN=Secure Boot Signing/[email protected]
image signature certificates:
 - subject: /C=PL/ST=yes/L=yes/O=none/CN=Secure Boot Signing/[email protected]
   issuer:  /C=PL/ST=yes/L=yes/O=none/CN=Secure Boot Signing/[email protected]
signature 2
image signature issuers:
 - /CN=ubuntu Secure Boot Module Signature key
image signature certificates:
 - subject: /CN=ubuntu Secure Boot Module Signature key
   issuer:  /CN=ubuntu Secure Boot Module Signature key

そして

root@T495:~# openssl x509 -in /var/lib/shim-signed/mok/MOK.pem -fingerprint -noout
SHA1 Fingerprint=81:A2:93:CB:06:6F:52:BA:D9:E2:39:68:9D:FA:E2:2B:0C:95:3C:F7
root@T495:~# mokutil --list-enrolled | grep "81:a2:93"
SHA1 Fingerprint: 81:a2:93:cb:06:6f:52:ba:d9:e2:39:68:9d:fa:e2:2b:0c:95:3c:f7

何が起こったのかわかりません:|

答え1

MOK.pemは、カーネルモジュールの署名のみをサポートするように設定された拡張使用属性を使用してUbuntu / Debianシステムで生成されます。この証明書は、シム検証に合格するために必要なUEFIブートローダまたはカーネルに署名するために使用することはできません。

shimソースコードでこれを確認できます。

   #define OID_EKU_MODSIGN "1.3.6.1.4.1.2312.16.1.2"

   static BOOLEAN verify_eku(UINT8 *Cert, UINTN CertSize)
   {
    ...
    x509 = d2i_X509 (NULL, &Temp, (long) CertSize);
    if (x509 != NULL) {
        eku = X509_get_ext_d2i(x509, NID_ext_key_usage, NULL, NULL);
        if (eku) {
        ...
                if (OBJ_cmp(module_signing, key_usage) == 0)
                    return FALSE;
        ...
            }
        }
        return TRUE;
}

つまり、module_signing 拡張キーの使用が設定されている場合、shim は署名証明書が有効であるとは見なされず、grub または Linux カーネルのバイナリを確認できません。

独自のセキュアブート署名証明書(EKUは不要)を作成し、それをmokまたはdbに登録して署名に使用します。

引用:https://wiki.ubuntu.com/UEFI/SecureBoot/KeyManagement/KeyGeneration

引用:https://github.com/rhboot/shim/blob/main/shim.c#L106

関連情報