Grub2

無法在 Secure Boot 上傳入自簽名核心:“不良 shim 簽名”

  • May 10, 2022

我正在使用安全啟動執行 ubuntu。當我使用從 cannonical 打包的核心時,一切正常。不過,我在執行自簽名核心時遇到問題。我很確定我的 MOK 密鑰簽名沒問題(下面的驗證),但是當我嘗試從 grub 啟動核心時,在選擇正確的條目後,我收到一個錯誤,顯示“正在載入……錯誤:糟糕的 shim簽名。” 我正在考慮它,但找不到解決方案。為什麼,即使兩個核心都使用 MOK 密鑰簽名,其中一個可以工作而另一個不能?

確認:

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/emailAddress=example@example.com
image signature certificates:
- subject: /C=PL/ST=yes/L=yes/O=none/CN=Secure Boot Signing/emailAddress=example@example.com
  issuer:  /C=PL/ST=yes/L=yes/O=none/CN=Secure Boot Signing/emailAddress=example@example.com
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

我不知道發生了什麼:|

MOK.pem 在 Ubuntu/Debian 系統上生成,擴展使用屬性設置為僅支持核心模組簽名。該證書不可用於根據需要對 UEFI 引導載入程序或核心進行簽名,以通過 shim 進行驗證。

在 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

引用自:https://unix.stackexchange.com/questions/701612