UEFIブートローダとGrub2のみを使用したセキュアブート

UEFIブートローダとGrub2のみを使用したセキュアブート

私はLinuxシステムで作業しており、セキュアブートを設定したいと思います。興味深いのは、UEFIブートローダを含むシステムのすべての部分があることです。

開始プロセスで欠けている部分があるか、誰でも教えていただけるかどうか疑問に思います。

  1. 電源を入れてUEFIブートローダの実行を開始します。
  2. UEFIブートローダには、Grub2(およびgrub.cfg)を認証して実行を開始するコンパイル済みキーがあります。
  3. Grub2はefiマジックを介して同じキーを受け取り、それを使用してカーネルを認証して実行を開始します。箇条書き#3はまったくわかりません。 Microsoft CAをまったく扱わなくても、Shimは必要ですか? Grub2にはカーネルを確認するコードがありますか、それともShimを通過する必要がありますか?

最も重要なのは、grub2とカーネルを認証するために私のキーと私のキーだけを使用したいということです。これを達成するには何が必要ですか?

ベストアンサー1

私は起動プロセスを次のように説明したいと思います。

1.) 電源を入れ、セキュアブートをサポートする UEFI ファームウェアの実行を開始します。

2.)ファームウェアは、システムNVRAM(またはコンパイルされたデフォルト値)に保存されているセキュアブートキーセットと比較して、潜在的なブートローダを確認します。

3.) ブートローダは同じ方法でオペレーティングシステムのカーネルをチェックしなければなりません。

4.)セキュアブートを遵守し、意味のある効果を得るために、Linuxカーネルはロードされたすべてのカーネルモジュールを暗号化方式でチェックする必要があります。

最新のカーネルには4)のオプション機能が含まれています。 RedHatなどのエンタープライズディストリビューションのカーネルは、セキュアブートをサポートするシステムから起動すると自動的にこの機能を有効にします。カスタムカーネルは、コンパイル時に署名キーと共に提供できます。

RedHatカーネルの場合、実行時に許可されるキーのリストは、(デフォルトのカーネルに署名するために使用されるキー)+(dbセキュアブートキーセットのすべてのエントリ)+(MOK使用されたセットに許可されるキーshim.efi(存在する場合)です)。

したがって、セキュアブートを使用し、展開カーネルでサードパーティのカーネルモジュールを使用する場合は、そのモジュールに署名し、ホワイトリストから署名キーを取得する必要があります。ただし、独自のカーネルをロールアウトしたり、セキュアブートキーを制御したりする場合は、セキュアブート秘密キーを使用してサードパーティモジュールに署名することもできます。

セキュアブートを制御するには、システムがセキュアブートキーを変更できるようにする必要があります。興味のあるキーは4つ(セット)です。

  • db、公開証明書のコレクション許可するブートローダおよび/またはSHA256チェックサム許可するブートローダー
  • dbx公開証明書および/またはチェックサムセット明示的にブラックリストに登録ブートローダー。
  • KEK、署名の更新を確認するために使用される公開証明書のセットdb
  • そしてPK確認に使用される固有のマスターキー(証明書)KEK

デフォルトでは、システムにはハードウェア製造元のPKが必要です。Microsoftとハードウェアの製造元キーの両方がKEK存在しますdb。これにより、Microsoft認定ブートローダ(一部のLinuxで使用するための「shim」を含む)とハードウェアメーカーのファームウェアアップデートツールをすぐに使用できます。

最初のステップは、UEFI BIOS設定を非常に慎重に確認することです。一部のシステムでは、インストーラを使用してすべてのセキュアブートキーを追加および削除できます。他のシステムでは、工場主キーにリセットしてすべてのキーを消去することが唯一のオプションです。インストーラがカスタムキーを使用するためにすべてのキーを消去する必要がある場合は、必要に応じてオプションで復元できるように既存のキーを最初にバックアップできます。

セーフブート仕様によれば、PKこのオプションを選択解除すると、セーフブートがいわゆる設定モードに切り替わり、すべてのキーセットを自由に編集して無制限のブートが可能になります。したがって、理想的には削除しPK、他のキーは変更せずにそのままにしておくことをお勧めします。

せいぜい適切なツールを使用して、UEFI対応オペレーティングシステムでセキュアブートキーを編集することができます。最悪の場合は、UEFIシェルとkeytool.efiユーティリティを使用する必要があります。James Bottomleyのefitoolsパッケージ

最終的な目標は、おそらく次のとおりです。

  • コレクションdbには以下を含める必要があります。
    • 明示的に署名されたコンテンツを開始するために使用される自己公開鍵証明書
    • 手動で再署名することなく事前にパッケージ化されたカーネルを使用するには、お好みのLinuxディストリビューションのカーネル署名証明書を使用してください。
    • 必要に応じて、ファームウェアアップデートのインストールを許可するハードウェアベンダーの証明書でもあります。
    • セキュアブートを明示的に再署名または無効にすることなく、事前にパッケージ化されたLinuxブートローダとライブLinuxブートメディアを使用できるようにするMicrosoftのサードパーティのUEFI証明書です。
    • Windowsデュアルブートを使用している場合は、Microsoftのオペレーティングシステム署名証明書である可能性があります。
  • コレクションKEKには以下を含める必要があります。
    • 更新のための独自の証明書dbdbx
    • システムにUEFIをサポートするMicrosoftオペレーティングシステムが含まれている場合は、MicrosoftのKEK証明書を含める必要があります。 Microsoftのアップデートには、セキュアブートへのアクセスが拒否された場合に正常にインストールされなかったアップデートが含まれるか、または更新されることがありdbますdbx
  • 最後に、要件に応じて他のすべてのエントリが設定されたら、セキュアブートがPK再び機能するようにここに独自の証明書を配置する必要があります。

おすすめ記事