web-dev-qa-db-ja.com

vmlinuz * -genericと* -generic.efi.signedの違い

/bootには、2つのvmlinuzカーネルファイルがあります。

vmlinuz-4.8.0-37-generic
vmlinuz-4.8.0-37-generic.efi.signed

これら2つのカーネルファイルの違いは何ですか? 2番目のものに署名するのは誰ですか(名前が示すように実際に署名されている場合)、そしてUEFI/BIOSは*-generic.efi.signedの代わりに*-genericを信頼して使用することをどのように知っていますか?

4
PJ Singh

.efi.signedで終わるファイル名のカーネルは、セキュアブートで使用するためにCanonicalによって署名されています。ただし、ほとんどのコンピューターにはCanonicalの署名を信頼しないファームウェアがあります。署名されたカーネルが信頼されるのは、Shimプログラム( ESPshimx64.efiバイナリ)の助けを借りてのみです。

少し詳しく説明すると、セキュアブートを有効にしたUbuntuの署名済みコンポーネントのロードパスは次のようになります。

EFI -> Shim -> GRUB 2 -> Kernel -> Kernel modules
  • EFIは、キーがファームウェアに埋め込まれているMicrosoftによって署名されているため、Shimを信頼しています。
  • ShimはEFIのセキュアブートサブシステムにパッチを当て、Canonicalの公開キーを含めます。シムはCanonicalの秘密キーで署名されているため、GRUB 2を信頼します。
  • GRUB 2は、EFIのセキュアブートシステム(現在はShimによるパッチ適用)を呼び出して、Canonicalの秘密キーで署名されているカーネルを検証します。
  • カーネルは、カーネルモジュールがCanonicalの秘密キーまたはセキュアブートチェーン内の他のキーによって署名されていることを確認します。

以前、IIRC、Ubuntu 15.10、UbuntuのGRUB 2はカーネルにセキュアブートポリシーを適用しませんでした。また、カーネルはカーネルモジュールにセキュアブートポリシーを適用しませんでした。しかし、それは最近厳しくなりました。私の知る限り、通常のシステムバイナリの署名を要求する計画はありません。

Ubuntuに未署名のカーネルファイルが存在する理由をはっきりとは知りません。署名されたファイルは、セキュアブートをサポートしていないシステム(pure-BIOSコンピューターを含む)でも正常に機能します。したがって、署名のないファイルはかなり冗長です。

Shim以降の各コンポーネントは、署名なしの形式で取得したり、署名を削除したりできることに注意してください。自分でShimを構築する場合、Canonicalの公開キーを自分の公開キー、または他の任意の公開キーに置き換えることができます。 (ほとんどの主要なディストリビューションには、独自のキーが埋め込まれた独自のShimバイナリがあります。)Microsoftに署名させない限り、ソースからShimを構築しても意味がありません。これには100ドルかかり、lotの労力がかかります。自分で署名するには、キーをマシン所有者キー(MOK)として追加する方が、Shimを再構築してMicrosoftが署名するよりも簡単です。 、これらのすべての部分がどのように組み合わされるかについて変更できるものがたくさんあります。詳細については、 セキュアブートのメインページ および セキュアブートの完全な制御を取得するページ を参照してください。セキュアブートの管理方法。

3
Rod Smith

署名されたバージョンは、UEFIセキュアブート用です。非対称暗号化を使用して署名されています。暗号化を解除するキーは、暗号化に使用したキーとは異なることを意味します。 BIOSには公開鍵のみがあり、署名が正しい(改ざんされていない)かどうかを確認できます。このような署名を作成するための秘密鍵は秘密であるため、自分で作成することはできません。 BIOSがそれを信頼し、開始できるようにする理由です。

詳細情報: https://wiki.ubuntu.com/SecurityTeam/SecureBoot

1
E.F. Nijboer