KEK と db 証明書を更新する

このドキュメントでは、2025 年 11 月 7 日より前に作成したコンピューティング インスタンスで、セキュアブートの更新された証明書を信頼するように、許可された署名データベース(db)と鍵交換鍵(KEK)の変数を更新する手順について説明します。

KEK と db の更新は、影響を受けるコンピューティング インスタンスを再作成しないお客様向けの代替手段です。

再起動の要件に関する注: Windows とは異なり、Linux では、KEK と db 署名の更新を UEFI 変数に書き込むためにシステムの再起動は必要ありません。Linux は、コマンドの実行時に更新を NVRAM またはファームウェア ストレージに直ちに書き込みます。

始める前に

セキュアブート KEK 証明書と db 証明書を更新する前に、インスタンスで更新が必要かどうかを確認し、起動や復号に関する問題が発生しないように次の準備を完了します。

  • 前提条件の確認: インスタンスでセキュア ブート証明書の更新が必要であることを確認します。
  • データの完全性とキーの復元: ディスク暗号化(BitLocker または LUKS FDE)の復元キーを見つけて、重要なデータをバックアップします。セキュリティ変数を変更すると、構成が正しくない場合にディスクへのアクセスがロックされる可能性があります。
  • Linux アップデートの順序に関する推奨事項: Linux インスタンスの場合は、新しい shim に更新する前に、db UEFI 変数を Microsoft UEFI CA 2023 に更新することをおすすめします。このシーケンスにより、データベースに 2011 証明書のみが含まれている状態で、Microsoft UEFI CA 2023 のみで署名された shim アップデートが適用された場合に発生する可能性のある CA の不一致を防ぐことができます。
  • カスタム PK または KEK 構成: インスタンスがカスタム セキュアブート変数(カスタム PKKEK など)を使用している場合、このガイドで提供されている標準の更新ファイル(DBUpdate3P2023.bin または kek2023update.bin)は直接適用されません。UEFI ファームウェアでは、システムに存在する KEK または PK の秘密鍵でアップデート ファイルに署名する必要があります。カスタム鍵を使用する場合は、独自の秘密鍵でアップデート バイナリに署名するか、カスタム認証局を通じてアップデートを管理する必要があります。

fwupd を使用して Linux で db と KEK を更新する

fwupdmgr バージョン 2.0.10 以降では、このメソッドがサポートされています。バージョンを確認するには、sudo fwupdmgr --version を実行します。

RHEL 8/9 と SLES 15 に関する注: RHEL 8/9 と SUSE Linux Enterprise Server(SLES)15 のエンタープライズ リポジトリには、必要なバージョンしきい値を満たさない以前のバージョンの fwupdmgr が用意されています(RHEL 8 はバージョン 1.7.8、RHEL 9 はバージョン 1.9.13、SLES 15 SP6 は 1.9.10)。RHEL 8/9 または SLES 15 を実行している場合は、ソースから fwupd をビルドするか、後で説明する sbsigntool/sbsigntools または efitools メソッドを使用する必要があります。

SLES 12/15 に関する注: SLES 12/15 のエンタープライズ リポジトリには fwupd が用意されていません。SLES 15 の SUSE Package Hub リポジトリには、必要なバージョンしきい値を満たさない以前のバージョンの fwupdmgr が用意されています。SLES 12 を実行している場合は、ソースから fwupd をビルドする必要があります。SLES 15 を実行している場合は、ソースから fwupd をビルドするか、SUSE Package Hub から入手可能なバックポートを使用して、後述の efitools メソッドまたは sbsigntools メソッドのいずれかを使用する必要があります。

以下のコマンドを実行します。

sudo fwupdmgr refresh
sudo fwupdmgr update 5bc922b7bd1adb5b6f99592611404036bd9f42d0
sudo fwupdmgr update b7a1d3d90faa1f6275d9a98da4fb3be7118e61c7

efitools を使用して Linux で db と KEK を更新する

次の手順では、efitools パッケージを使用して db 変数と KEK 変数を更新する方法について説明します。

db の更新

  1. Microsoft のリポジトリから更新バイナリをダウンロードします。

    wget https://github.com/microsoft/secureboot_objects/raw/refs/heads/main/PostSignedObjects/Optional/DB/amd64/DBUpdate3P2023.bin
    
  2. 変数を変更可能にします。書き込み保護フラグを削除します。

    sudo chattr -i /sys/firmware/efi/efivars/db-*
    
  3. efi-updatevar を実行して変数を更新します。

    sudo efi-updatevar -a -f DBUpdate3P2023.bin db
    
  4. 書き込み保護フラグを復元して、変数を保護します。

    sudo chattr +i /sys/firmware/efi/efivars/db-*
    

KEK の更新

  1. 証明書の更新を含む .cab アーカイブをダウンロードします。

    wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
    
  2. gcab がインストールされていない場合は、インストールします。たとえば、次のいずれかを実行します。

    • Debian または Ubuntu の場合:

      sudo apt update
      sudo apt install gcab
      
    • SUSE Linux Enterprise Server(SLES)または openSUSE の場合(SUSE Package Hub が必要):

      sudo SUSEConnect -p PackageHub/15.5/x86_64
      sudo zypper install gcab
      

      (注: 15.5 が異なる場合は、SLES のバージョンに置き換えてください)。

  3. gcab を使用してアーカイブを抽出します。

    gcab --extract 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
    
  4. ファイルの MD5 ハッシュが 6a1c58e1b8391c0e3f2e97f83917807a であることを確認します。

    md5sum kek2023update.bin
    
  5. KEK 変数を変更可能にします。

    sudo chattr -i /sys/firmware/efi/efivars/KEK-*
    
  6. 更新を適用します。

    sudo efi-updatevar -a -f kek2023update.bin KEK
    
  7. 書き込み保護フラグを復元して、変数を保護します。

    sudo chattr +i /sys/firmware/efi/efivars/KEK-*
    

sbsigntool または sbsigntools を使用して Linux で db と KEK を更新する

次の手順では、sbsigntool パッケージまたは sbsigntools パッケージの sbkeysync ユーティリティを使用して、db 変数と KEK 変数を更新する方法について説明します。

パッケージ名と可用性に関する注:

  • Debian と Ubuntu では、ユーティリティ パッケージの名前は sbsigntool です(末尾に「s」はありません)。インストールするには、sudo apt install sbsigntool を実行します。
  • Red Hat Enterprise Linux(RHEL)、CentOS、Fedora ベースのディストリビューションでは、ユーティリティ パッケージの名前は sbsigntools(末尾に「s」が付く)です。このパッケージは、EPEL(Extra Packages for Enterprise Linux)リポジトリで提供されています。RHEL にインストールするには、EPEL リポジトリ(sudo dnf install epel-release)を有効にしてから、sudo dnf install sbsigntools を実行します。
  • SUSE Linux Enterprise Server(SLES)と openSUSE も、ユーティリティ パッケージに sbsigntools という名前を付けています。このパッケージは、SUSE Package Hub リポジトリで提供されます。インストールするには、SUSE Package Hub(たとえば sudo SUSEConnect -p PackageHub/15.5/x86_6415.5 は SLES のバージョンに置き換えます)を有効にしてから、sudo zypper install sbsigntools を実行します。

db の更新

  1. Microsoft のリポジトリから更新バイナリをダウンロードします。

    wget https://github.com/microsoft/secureboot_objects/raw/refs/heads/main/PostSignedObjects/Optional/DB/amd64/DBUpdate3P2023.bin
    
  2. ファイルを sbkeysync の適切なフォルダに配置し、db を変更可能にして、同期を実行します。

    sudo mkdir -p /etc/secureboot/keys/db
    sudo cp DBUpdate3P2023.bin /etc/secureboot/keys/db/
    sudo chattr -i /sys/firmware/efi/efivars/db-*
    sudo sbkeysync --verbose
    
  3. 書き込み保護フラグを復元して、変数を保護します。

    sudo chattr +i /sys/firmware/efi/efivars/db-*
    

KEK の更新

KEK 変数を更新するには、Microsoft KEK 更新キャビネット アーカイブをダウンロードし、更新バイナリを抽出して、sbkeysync ユーティリティを使用して同期します。以降のセクションでは、ディストリビューションに基づいてバイナリを抽出する方法について説明します。

  1. KEK 証明書の更新を含む .cab アーカイブをダウンロードします。

    wget https://fwupd.org/downloads/1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
    
  2. .cab アーカイブを抽出して、KEK 更新バイナリ(kek2023update.bin)を取得します。

    • Debian/Ubuntugcab ユーティリティを使用する場合:

      sudo apt update && sudo apt install gcab -y
      gcab --extract 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
      
    • EPEL の cabextract ユーティリティを使用する RHEL/CentOS ベースのディストリビューション(RHEL 8/9 など)の場合:

      sudo dnf install epel-release -y
      sudo dnf install cabextract -y
      cabextract -f 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
      
    • SUSE Package Hub の cabextract ユーティリティを使用して、SUSE Linux Enterprise Server(SLES)と openSUSE で次の操作を行います。

      sudo SUSEConnect -p PackageHub/15.5/x86_64
      sudo zypper install cabextract -y
      cabextract -f 1953fae13600a35944e93cd244476a6f6ce5fdbf620709b2f6f378fac2ae3bef-KEK-google_compute_engine.cab
      

      (注: 15.5 が異なる場合は、SLES のバージョンに置き換えてください)。

  3. 抽出された kek2023update.bin ファイルの MD5 ハッシュが想定どおりの 6a1c58e1b8391c0e3f2e97f83917807a であることを確認します。

    md5sum kek2023update.bin
    
  4. バイナリを sbkeysync の適切なフォルダに配置し、KEK 変数を可変にして、同期を実行します。

    sudo mkdir -p /etc/secureboot/keys/KEK
    sudo cp kek2023update.bin /etc/secureboot/keys/KEK/
    sudo chattr -i /sys/firmware/efi/efivars/KEK-*
    sudo sbkeysync --verbose
    
  5. 書き込み保護フラグを復元して、変数を保護します。

    sudo chattr +i /sys/firmware/efi/efivars/KEK-*
    

Windows で db と KEK を更新する

このインスタンスでセキュアブートを使用しない場合、または使用する予定がない場合は、これらの証明書の更新を適用する必要はありません。通常、Windows オペレーティング システムは、セキュアブートが有効になっていない場合、セキュアブート証明書の更新を適用しようとする試みを無視します。これは、更新が不要であるためです。

後でセキュアブートを使用する場合は、まずインスタンスでセキュアブートを有効にして、セキュアブート証明書を更新する必要があります。

Windows インスタンスでは、レジストリ設定とスケジュール設定されたタスクにより、互換性のあるバージョンで更新がトリガーされます。

  1. Windows インスタンスに最新の月次アップデートが適用されていることを確認します。
  2. PowerShell で管理者として次のコマンドを実行します。

    Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot" -Name "AvailableUpdates" -Value 0x5944
    Start-ScheduledTask -TaskName "\Microsoft\Windows\PI\Secure-Boot-Update"
    
  3. インスタンスを再起動して、ファームウェア変数に対するオペレーションを許可します。仮想化セキュリティ機能が有効になっている環境では、再起動を 2 回行う必要があります。