FedoraでのUKI:Secure Bootのセキュリティを最大化するためにカーネルを自ら「パッケージ化」する

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

クイックスタート:5分でUKIに移行する

従来の方式ではなく、FedoraでUnified Kernel Image (UKI) ファイルを自動生成したいですか?私は実際にFedora 39と40で導入しましたが、システムは非常に安定して動作しています。設定はわずか数ステップで完了します。

まず、ukify と補助ツールをインストールします:

sudo dnf install systemd-ukify binutils

次に、UKIファイルを出力するように kernel-install に指示する必要があります。/etc/kernel/install.conf ファイルを開いてください:

sudo nano /etc/kernel/install.conf

以下の設定行を追加します:

layout=uki

確認のために、現在のカーネルを再インストールしてみましょう。EFIパーティションに .efi ファイルが表示されるはずです:

sudo kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz

/boot/efi/EFI/Linux/ ディレクトリを確認してください。そこに .efi 拡張子のファイルがあれば、成功です。これ以降、dnf update を実行するたびに、Fedoraが自動的に処理を行ってくれます。

なぜUKIはセキュリティにとって「理想的」なのか?

午前2時に grub rescue 画面を前にして固まったことはありませんか?私は以前、パーティションのサイズ変更後に「Initrd not found」エラーが発生し、古いLinuxブートアーキテクチャがいかにバラバラであるかを痛感しました。

通常、GRUBはカーネルを読み込み、次にInitrdを読み込み、コマンドラインをロードします。これら3つのコンポーネントは別々に存在しています。root権限を持つ攻撃者は /etc/default/grub を修正し、init=/bin/bash を追加することで、簡単にパスワードをバイパスできてしまいます。

UKI (Unified Kernel Image) はこの状況を完全に変えます。カーネル、Initrd、コマンドライン、そしてブートロゴを 単一のEFI実行ファイル (.efi) にまとめます。

すべてが1つの「パッケージ」に収まることで、Secure Bootを使用してデジタル署名を行うことができます。コマンドラインが1ビットでも異なれば、署名は無効になります。コンピュータは即座に起動を拒否し、あらゆる不正な介入を阻止します。

実践的な設定:よくある「落とし穴」を避ける

Fedoraをメインのマシンとして2年間使用してきて、注意を払わないとシステムが「死んで」しまう可能性のある、いくつかの細かい点に気づきました。

1. EFIパーティション:容量不足に注意

これは最もよくある間違いです。Fedoraのデフォルトの /boot/efi パーティションは通常200MBから600MB程度です。一方で、UKIファイルは通常80MB〜120MBほどあります(ドライバの量によります)。

3つのバージョンのカーネルを保存すると、容量はすぐに使い果たされます。私のアドバイスは、EFIパーティションを約1GBにすることです。ハードディスクの再パーティションができない場合は、/etc/dnf/dnf.confinstallonly_limit=2 を修正して、古いカーネルの数を制限してください。

2. コマンドラインのカスタマイズ

ブートパラメータは .efi ファイル内に「固定」されているため、GRUBで ‘e’ キーを押して一時的に修正することはできません。nvidia-drm.modeset=1 などのオプションを追加するには、ukify 用の設定ファイルを作成する必要があります。

/etc/kernel/uki-conf.conf ファイルを作成します:

[UKI]
Cmdline=root=UUID=xxxx-xxxx ro rhgb quiet

lsblk -f コマンドを実行してルートパーティションのパラメータを取得し、正しいUUIDに置き換えるのを忘れないでください。

応用:個人キーでUKIを自己署名する

UKIが真の力を発揮するのは、Secure Bootと組み合わせた時です。Microsoftのキーに依存する代わりに、ハードウェアの完全な制御権を握るために独自のキーを作成することをお勧めします。

セキュリティキーペア(秘密鍵/公開鍵)を作成します:

openssl req -new -x509 -newkey rsa:2048 -nodes -days 3650 -outform DER -keyout MOK.key -out MOK.der

次に、ビルドするたびに自動的に署名されるよう /etc/kernel/install.conf を設定します:

layout=uki
uki_generator=ukify

署名操作を行うために sbsigntools をインストールします:

sudo dnf install sbsigntools

最後に、mokutil を介してキーをBIOSにロードします:

sudo mokutil --import MOK.der

再起動後、青い画面(MOK Manager)が表示されます。「Enroll MOK」を選択し、作成したパスワードを入力します。それ以降、システムはあなたが自ら署名したカーネルのみを信頼するようになります。

トラブルシューティングの経験

開発チームのUKI導入をサポートする中で、いくつかの重要な注意点をまとめました:

  • systemd-bootを優先する: UKIはsystemd-bootで最もよく動作します。GRUBを使用する場合は、従来の linux コマンドではなく、chainloader コマンドを使用して直接 .efi ファイルを指すようにしてください。
  • Initrdを最適化する: UKIファイルが150MBを超える場合は、dracutで hostonly モードを有効にしてください。これにより、不要なドライバが削除され、マシンが実際に必要とするものだけが保持されます。
  • デバッグ: ブートに失敗した場合は、UKIをビルドする際に quiet パラメータを削除してください。その時画面に流れるログは、どんなドキュメントよりも価値があります。

UKIへの移行は、単に新しい技術を追いかけることではありません。これは現代的な考え方です。カーネルを統合された一つのブロックにすることで、管理が容易になり、侵入が極めて困難になります。機密データを含むラップトップでFedoraを使用しているユーザーにとって、UKIは不可欠なセキュリティの壁となります。

Share: