Linux Secure Boot
Secure Bootとは
概要
Secure Boot(セキュアブート)とは、PCの起動時に「信頼できるソフトウェア」だけが実行されるように制限するセキュリティ機能。攻撃者によるOSのカーネルやブートローダ、ドライバの改ざん防止。物理的なハードウェアの改ざん防止。
電子署名
電子署名とは、あるソフトウェアやデータが信頼できるかどうかを検証する仕組み。秘密鍵で署名し、公開鍵で検証する。
Linuxの起動プロセス
Linuxが起動するとき以下のような順でプログラムが順に立ち上がっていく。そして、Secure Bootでは、各改装で電子署名の検証が行われる。
1. UEFI Firmware
PK / KEK / DB / DBX を有する
DB にある"Microsoftの公開鍵" で shim を検証
NVRAM変数を /sys/firmware/efi/efivars/ でLinux kernelに提供
2. shim
"Canonical の公開鍵"を用いてGRUBを検証
MOKをkernelに渡す
3. Boot loader (grub)
"Canonical の公開鍵"またはOSインストール時に予約されたMOKを用いてLinuxカーネルを検証
4. Linux kernel
自分が信頼するMOKでkernel module を検証
/var/lib/shim-signed/mok/MOK.{.priv, .der}がMOKの本体
5. Kernel module
Secure Bootが有効なOSのインストール
OSインストールとOSの検証は以下のプロセスで行われる。
1. FirmwreをUEFIモードに設定し、Secure Bootを有効にする
2. Live USBを接続して起動する (Live USBは署名済みのshimとboot loaderを有するので起動できる)
3. 対象とするSSDやHDDにOSとルートディレクトリをインストールする。この際、以下の処理が行われる。
3-1. MOK(未登録)とその秘密鍵 (以下、MOK秘密鍵と称す)を作成する。
3-2. カーネルモジュールをMOK秘密鍵で署名する。
3-3.一時パスワードを使ってMOK(未登録)をUEFI Firmwareに予約して保存する
4. OSインストール後の初回起動時に、MOK Managerが起動し予約されたMOK(未登録)の信頼性を確認する。Enroll MOKの操作によってMOKを信頼リストに追加し、登録済みMOKとなる。この操作は先程の一時パスワードによって承認される。
5. 登録済みMOKはshim→Boot loader→Linux kernelと受け渡される
6. Linux kernelはKernel moduleが登録済みMOKによって署名されていることを検証し、Linux kernelを起動する。