UEFI失効リストファイルでdbx変数を更新するには?

UEFI失効リストファイルでdbx変数を更新するには?

たぶんあなたはそれを考えたかもしれませんBootHoleの脆弱性、GRUB2ブートローダを使用すると、EFI / UEFI SecureBootメカニズムをバイパスできます。私は個人的に私のEFI / UEFIキー(PKキーを含む)を使用し、EFI / UEFIファームウェアにはMSキーはありません。したがって、このバグは私に実際には影響しません。とにかく、ユーザーが以下を使用してDBX変数を更新できるようにする修正があります。UEFI失効リストファイル。ウェブサイトによると:

これらのファイルは、セキュアブート禁止署名データベースdbxを更新するために使用されます。これには、* Data ... EFI_VARIABLE_AUTHENTICATION_2のSetVariable()に渡された元のバイトが新しい変数値に関連付けられて含まれます。使用例: SetVariable("dbx", EFI_IMAGE_SECURITY_DATABASE_GUID, NV+BS+RT+AT+AppendWrite, dbxUpdateDotBin_sizeInBytes, *dbxUpdateDotBin_bytes). dbxupdate.binには、すでにMicrosoft KEK署名(UEFI仕様で指定されているようにエンコードされている)が含まれています。

それでは、MS KEK証明書がありますが、システムのEFI / UEFIファームウェアにこの証明書がない場合はどうなりますか?この場合、このファイルを使用してDBX変数を更新する方法は?

ベストアンサー1

これは、マシンにどの KEK 証明書があるかによって異なります。

KEK証明書がある場合あなた秘密鍵がある場合は、ファイルの先頭から既存の署名を削除し、生成されたEFI_SIGNATURE_LIST(接尾辞を見たことがある)をdbxupdate_x64.bin独自のKEK証明書で署名できます。その後、これをセキュアブート変数に適用できます。から命令を受ける.esldbxefi-updatevarjejbのefitools

に基づいてこのマイクロソフトサポート記事次に接続このPowerShellスクリプト、手順は次のとおりです。

  1. ファイルの最初の40バイトは無視されます。

  2. ファイルの次の2バイトは次のようになります。0x30 0x82

  3. ファイルの次の2バイトはビッグエンディアン署名の長さです。たとえば、次の2バイトが0x0csumの場合、0xda署名0x0cdaの長さは== 3290バイトです。

  4. 署名の後からファイルの終わりまでのバイトは EFI_SIGNATURE_LIST の内容です。たとえば0x0cda、これは、コンテンツが40 + 2 + 2 + 0x0cdaファイルの先頭から== 3334バイトで始まることを意味します。これは40バイト+ 2バイト0x30 0x82+ 2署名長バイト+0x0cda署名バイトです。

ファームウェアを使用してBIOS設定メニューで署名を確認せずにセキュアブート変数を直接編集できる場合は、それをdbxupdate_x64.binEFIシステムパーティションに保存してからdbx変数を編集して、既存の内容をこのファイルに置き換えることができます。しかし、技術的には、それ自体がセキュリティホールになる可能性があります。 BIOS設定が制限なくセキュアブート設定を変更できるようにすることは、おそらくセキュアブート設計者の元の意図ではなかったでしょう。

ファームウェアでセキュアブートマスターキー(減らしてPK)のみを削除できる場合、PKを削除するとセキュアブートがいわゆる設定モードになり、すべてのセキュアブート変数を署名なしで編集できることに注意してください。定義されるまで新しいPKを取得しました。 (これは、セキュアブート構成を完全に制御するために必要な最小のBIOS設定機能です。)

ただし、独自のKEK証明書がなく、それをシステムにインポートできない場合は、ハードウェアベンダーまたはハードウェアKEKを持っている人から同等の署名更新ファイルを入手する必要があります。

おすすめ記事