web-dev-qa-db-ja.com

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

Linuxシステムで作業していて、セキュアブートを構成したいと考えています。面白いのは、UEFIブートローダーを含め、システムのすべての部分を所有していることです。

ブートプロセスの一部が欠けていると誰かが教えてくれるのではないかと思っていました。

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

結論として、私は自分のキーを使用し、自分のキーだけを使用してgrub2とカーネルを検証したいと考えています。それを実現するには何が必要ですか?

4
screenshot345

ブートプロセスは次のように説明します。

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

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

3.)ブートローダーはOSカーネルを同じ方法でチェックすることになっています。

4.)セキュアブートに準拠し、意味のある効果を発揮するために、Linuxカーネルはロードされたカーネルモジュールを暗号でチェックする必要もあります。

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

RedHatカーネルの場合、実行時に許可されるキーのリストは、(メインカーネルの署名に使用されるキー)+(セキュアブートdbキーセットにあるもの)+(MOK存在する場合は、shim.efiが使用するセット)。

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

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

  • db許可されたブートローダーのパブリック証明書のセット、および/または許可されたSHA256チェックサムブートローダー
  • dbx明示的にブラックリストに登録されたブートローダーの公開証明書やチェックサムのセット。
  • KEKdbへの署名付き更新の検証に使用される公開証明書のセット
  • PKKEKへの署名付き更新を検証するために使用される唯一の主キー(証明書)。

デフォルトでは、システムのハードウェアメーカーのPK、およびKEKdbにMicrosoftとハードウェアメーカーの両方のキーが必要です。これにより、Microsoft認定のブートローダー(一部のLinuxで使用される「shim」を含む)およびハードウェアメーカーのファームウェア更新ツールをそのまま使用できます。

最初のステップは、UEFI BIOSセットアップ設定を非常に注意深く調べることです。一部のシステムでは、セットアップですべてのセキュアブートキーの追加と削除の両方が可能です。他のシステムでは、唯一のオプションは工場出荷時のデフォルトのキーにリセットし、すべてのキーをクリアすることです。カスタムキーを使用できるようにするために、セットアップですべてのキーをクリアする必要がある場合は、既存のキーを最初にバックアップして、必要に応じて選択的に復元できるようにすることができます。

セキュアブート仕様によると、PKがクリアされている場合、セキュアブートはいわゆるセットアップモードになります。これにより、すべてのキーセットを自由に編集して、無制限のブートを行うことができます。したがって、理想的には、PKを削除するだけで、他のキーは現状のままにしておきます。

最良の場合、これにより、適切なツールを使用して、UEFI対応OS内からセキュアブートキーを編集できます。最悪の場合、UEFIシェルとkeytool.efiユーティリティを James Bottomleyのefitoolsパッケージ から使用する必要があります。

最終目標は、おそらく次のようになります。

  • dbセットには次のものが含まれている必要があります:
    • 明示的に署名したものを起動するための独自の公開鍵証明書
    • 手動で再署名せずにパッケージ済みのカーネルを使用する場合は、お気に入りのLinuxディストリビューションのカーネル署名証明書
    • 必要に応じてファームウェアの更新をインストールできるようにするためのハードウェアベンダーの証明書
    • おそらく、MicrosoftのサードパーティUEFI証明書により、パッケージ化されたLinuxブートローダーとライブLinuxブートメディアを明示的に再署名したり、セキュアブートを無効にしたりせずに使用できます。
    • microsoftのOS署名証明書(Windowsとのデュアルブートの場合)
  • KEKセットには次のものが含まれている必要があります:
    • dbおよびdbxを更新するための独自の証明書
    • システムにUEFI対応のMicrosoft OSが含まれている場合は、MicrosoftのKEK証明書を含めることをお勧めします。Microsoftのアップデートにはdbdbxへのアップデートが含まれることがあり、これらのアップデートは正常にインストールされない場合があるためです。セキュアブートへのアクセスが拒否されました
  • 最後に、残りのすべてが必要に応じて設定されたら、独自の証明書をPKに配置して、セキュアブートを再び有効にする必要があります。
4
telcoM

このセクションの SakakiのEFIインストールガイド は、自己署名カーネルを認証するためのキーをインストールする方法を示しています。ガイド全体はGentoo向けに作成されていますが、このセクションのほとんどはすべてのOSでの使用に適合させることができ、それがどのように機能するかも説明しています。

1
Mio Rin
0