ASUSノートPC X202E: EFI による「Linux + Windows8」マルチブート(3)

[ Secure Boot (セキュアブート) ]

前回のブログ記事に続き、EFIのSecure Bootについて書きます。

[EFI/UEFI]

  • EFI(Extensible Firmware Interface)/UEFI(Unified Extensible Firmware Interface)はBIOSに代わる新しいファームウェア。EFIは旧称。
  • 仕様はインテルとヒューレットパッカードによって提唱され、現在はUnified EFI Forum(http://www.uefi.org)で開発されている。最新版は2013年6月にリリースされた2.4。名前とE-mailアドレスを登録すれば http://www.uefi.org/specs/agreement からPDF(UEFI Spec 2_4.book;2284ページ)をダウンロードできる。

  • [Secure Boot]

  • Secure BootはUEFIの仕様の中で定義された機能のうちの1つで、UEFIが起動するプログラム(ブートローダ)にあらかじめデジタル署名をしておき、システム起動時にEFIが自身に組み込まれた鍵によりローダの署名を検証する。この仕組みにより改竄の有無と作成者を検証でき、UEFIが不正なプログラムを起動することを防ぐことができる。
  • X202EにプリインストールされたWindows8はSecure Bootを使用する設定になっている。
  • X202Eのように、Windows8がプリインストールされたPCではUEFIにマイクロソフトの鍵が組み込まれている。システム起動時にUEFIはこの鍵によって、マイクロソフトのブートローダ(bootmgfw.efi)の署名を検証する。

  • [LinuxのSecure Bootへの対応]

      Windows8がプリインストールされたPCではUEFIにマイクロソフトの鍵が組み込まれているので、Linuxの対応としては次の3通りのどれかになる。

    1. Secure Bootをdisableに設定して Secure Bootを使わない。
      これが簡単で一番良さそう。Secure Bootを必要とするシステムなど、そうは無さそうなので。
      但し、PCのUEFIがdisableの機能を提供していないとできないが、大方のPCのUEFIではできるらしい。たぶん、そうしないと売れない。

    2. マイクロソフト鍵で署名されたブートローダを使用する。
      Fedora18とUbuntu13.04にはFedoraプロジェクトで開発されたshimというパッケージが提供されている。このパッケージにはUEFIから呼び出されるshim.efiが含まれていて、これがマイクロソフト鍵で署名されているようだ。
      Fedora18のISOイメージを焼いたDVDで、Secure Boot をenableで起動できる。おそらくshimを使っていると思われる。
      Fedora18をSecure Bootをenableにしてインストールするとインストーラ(anaconda)によってshimを使ったSecure Bootの設定が行われる。
      Ubuntu13.04のISOイメージを焼いたDVDではSecure Boot をenableにしてインストールしようとするとGRUB2のメニュー表示の後、画面表示が出なくなる。

      [起動シーケンス]
      UEFI → shim(1st Boot Loader, マイクロソフト鍵で署名済み) → 2nd Boot Loader → Linuxカーネル → カーネルローダブルモジュール

      なお、2nd Boot Loader、カーネル、カーネルモジュールはLinuxの鍵で署名され、それぞれを前段のプログラムが検証する。 Secure Bootをenableにした場合は、この仕組み故、カーネルの鍵で署名されたローダブルモジュールでないとロードできない。ユーザが後から独自にドライバモジュールなどのソースをコンパイルしても、自分で生成したカーネルでないと署名できず、したがってロードできない。ま、Secure Bootをdisableにすれば良いのですが。

    3. 独自に作成した鍵をUEFIに組み込む。UEFIの実装によると思われるが、こういうこともできるらしい。

    [Linuxを立ち上げ、Secure Bootがenableになっているかどうかを確認する方法]

    LinuxがSecure Boot をenableにしているかどうかは次のようにして確認できる。

  • Secure Boot をdisableにしてハードディスクにインストールしたFedora18を立ち上げた場合の例
    # od /sys/firmware/efi/vars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
    0000000 000000  ←値が0ならdisable
    0000001

  • Secure Boot をenableにしてハードディスクにインストールしたFedora18を立ち上げた場合の例
    # od /sys/firmware/efi/vars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
    0000000 000001  ←値が1ならenable
    0000001

  • Secure Boot をenableにしてFedora18のDVDで立ち上げた場合の例
    インストーラが起動したら、[Ctrl]+[Alt]+[F2]を押して仮想端末を切り替え、シェルプロンプトを出す。
    # mount /dev/sda9 /mnt/sysimage
    # /mnt/sysimage/usr/bin/od /sys/firmware/efi/vars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
    0000000 000001  ←値が1ならenable
    0000001

  • 参考URL:
    https://wiki.ubuntu.com/SecurityTeam/SecureBoot
    http://en.opensuse.org/openSUSE:UEFI
    http://www.rodsbooks.com/efi-bootloaders/secureboot.html
    http://cpplover.blogspot.jp/2012/06/fedorauefi.html
    http://www.phoronix.com/scan.php?page=news_item&px=MTIwNzk
    http://cpplover.blogspot.jp/2013/02/blog-post_26.html
     (このページから原文のlkmlへのリンクがあります)

    次回はFedora18のインストール手順を書きます。