たぶんあなたはそれを考えたかもしれません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証明書で署名できます。その後、これをセキュアブート変数に適用できます。から命令を受ける.esl
dbx
efi-updatevar
jejbのefitools。
に基づいてこのマイクロソフトサポート記事次に接続このPowerShellスクリプト、手順は次のとおりです。
ファイルの最初の40バイトは無視されます。
ファイルの次の2バイトは次のようになります。
0x30 0x82
ファイルの次の2バイトはビッグエンディアン署名の長さです。たとえば、次の2バイトが
0x0c
sumの場合、0xda
署名0x0cda
の長さは== 3290バイトです。署名の後からファイルの終わりまでのバイトは EFI_SIGNATURE_LIST の内容です。たとえば
0x0cda
、これは、コンテンツが40 + 2 + 2 + 0x0cda
ファイルの先頭から== 3334バイトで始まることを意味します。これは40バイト+ 2バイト0x30 0x82
+ 2署名長バイト+0x0cda
署名バイトです。
ファームウェアを使用してBIOS設定メニューで署名を確認せずにセキュアブート変数を直接編集できる場合は、それをdbxupdate_x64.bin
EFIシステムパーティションに保存してからdbx
変数を編集して、既存の内容をこのファイルに置き換えることができます。しかし、技術的には、それ自体がセキュリティホールになる可能性があります。 BIOS設定が制限なくセキュアブート設定を変更できるようにすることは、おそらくセキュアブート設計者の元の意図ではなかったでしょう。
ファームウェアでセキュアブートマスターキー(減らしてPK)のみを削除できる場合、PKを削除するとセキュアブートがいわゆる設定モードになり、すべてのセキュアブート変数を署名なしで編集できることに注意してください。定義されるまで新しいPKを取得しました。 (これは、セキュアブート構成を完全に制御するために必要な最小のBIOS設定機能です。)
ただし、独自のKEK証明書がなく、それをシステムにインポートできない場合は、ハードウェアベンダーまたはハードウェアKEKを持っている人から同等の署名更新ファイルを入手する必要があります。