4
3

More than 3 years have passed since last update.

セキュアブートできるOVMFをソースからコンパイルする

Last updated at Posted at 2020-11-15

QEMUでUEFIブートを行うためのBIOSであるOVMFの話題である。セキュアブートではないOVMFのコンパイル方法は OVMFをビルドする の通りやればよいが、セキュアブートできるOVMFのコンパイル方法はどこにも書いて無さそうなので記録する。だいたい下記のことを自動で行うスクリプトが https://github.com/emojifreak/qemu-arm-image-builder/blob/main/OVMF-Fedora/my-ovmf-build.sh にある。コンパイル環境はLinuxを仮定。Intel/AMD 64ビットCPUで使えるOVMFを対象にするが、適切に読み替えれば32ビットのOVMFも作成できることを確認している。

コンパイル環境の設定

Debian, Ubuntu系なら sudo apt-get build-dep edk2 とする。Fedoraなら https://src.fedoraproject.org/rpms/edk2/blob/HEAD/f/edk2.spec の中の BuildRequires: に書いてあるパッケージを dnf でインストールする。

ソースの入手

git clone --recursive https://github.com/tianocore/edk2.git
git clone --recursive https://github.com/rhuefi/qemu-ovmf-secureboot.git
wget https://github.com/emojifreak/qemu-arm-image-builder/raw/main/OVMF-Fedora/UefiShell.fedora-amd64.iso

コンパイル

cd edk2
./OvmfPkg/build.sh -a IA32 -a X64 -DFD_SIZE_4MB -DSECURE_BOOT_ENABLE=TRUE -DSMM_REQUIRE=TRUE

とすると edk2/Build/Ovmf3264/DEBUG_GCC5/FV に、QEMUなどで使うためのOVMF_CODE.fdOVMF_VARS.fd ができる。ここではまだセキュアブート検証用の鍵がOVMF_VARS.fdに埋め込まれていないため、埋め込み作業を行う。ここで上記の SECURE_BOOT_ENABLESMM_REQUIRE は必須。 -a IA32 -a X64-a X64 にするとS3サスペンド・リジュームをQEMUで無効にしないと起動できないOVMFができる。

鍵の埋め込み

末尾に述べるようにシェル変数FEDORA_KEY, UBUNTU_KEY, DEBIAN_KEY を適切に定義して python3 ../qemu-ovmf-secureboot/ovmf-vars-generator --qemu-binary qemu-system-x86_64 --verbose --verbose --enable-kvm --ovmf-binary Build/Ovmf3264/DEBUG_GCC5/FV/OVMF_CODE.fd --ovmf-template-vars Build/Ovmf3264/DEBUG_GCC5/FV/OVMF_VARS.fd --uefi-shell-iso ../UefiShell.fedora-amd64.iso --skip-testing --oem-string "$FEDORA_KEY" --oem-string "$DEBIAN_KEY" --oem-string "$UBUNTU_KEY" Build/Ovmf3264/DEBUG_GCC5/FV/OVMF_VARS.secboot.fd とすると鍵を埋め込まれた Build/Ovmf3264/DEBUG_GCC5/FV/OVMF_VARS.secboot.fd が新たにできる。ここで OVMF_VARS*.fd はNVRAMの内容なのでゲストOSごとにコピーして用いる。

QEMUによるセキュアブート

上記の OVMF_CODE.fdOVMF_VARS.secboot.fd を適切な場所にコピーして qemu-system-x86_64 -enable-kvm -cpu max -machine q35,smm=on,accel=kvm -global driver=cfi.pflash01,property=secure,value=on -drive if=pflash,unit=0,format=raw,read-only=on,file=OVMF_CODE.fd -drive if=pflash,unit=1,format=raw,file=OVMF_VARS.secboot.fd とすればセキュアブートするQEMUを使える。KVMは無くても動作する。

Fedora, CentOS, RedHat, Ubuntu, Debian の鍵

は以下の通り。それ以外のセキュアブート用鍵を見つけられていないが、上記の ovmf-vars-generator のオプションは --oem-string は何度でも指定してよいため、他の鍵が見つかればそれも含めるようにするとよい。CentOS, RedHatの鍵はFedoraと共通。

DEBIAN_KEY="4e32566d-8e9e-4f52-81d3-5bb9715f9727:MIIDvTCCAqWgAwIBAgIURQHuOT5SKXg234VCyOV7u4jRSzcwDQYJKoZIhvcNAQELBQAwbjEPMA0GA1UECgwGRGViaWFuMS0wKwYDVQQDDCREZWJpYW4gVUVGSSBTZWN1cmUgQm9vdCAoUEsvS0VLIGtleSkxLDAqBgkqhkiG9w0BCQEWHWRlYmlhbi1kZXZlbEBsaXN0cy5kZWJpYW4ub3JnMB4XDTE5MDcwODIzNDI0OVoXDTI5MDcwNTIzNDI0OVowbjEPMA0GA1UECgwGRGViaWFuMS0wKwYDVQQDDCREZWJpYW4gVUVGSSBTZWN1cmUgQm9vdCAoUEsvS0VLIGtleSkxLDAqBgkqhkiG9w0BCQEWHWRlYmlhbi1kZXZlbEBsaXN0cy5kZWJpYW4ub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm6tJi7ql+lQqcZp5BcQbRhHFs71ZYoBxrbtsxFColtaJ6+gR1Ig8SeSPUc2lh8PS/lEeOhu/2Fs4U7WdaFLRPoLL2/1eAYEwxL5z4NZWP0oo8TPXUmF7hKJAohiIeFsU0B5tariuEESvEpmmey3puo0KWJM4aett8G+XIv7gD7Sk+cgrO3O5Uc8fH+VmB8vd907zVypJaVNBgPzVanXZug1nvVPGHdXlZb8LjfwWWGXtWaZXjzNIpmwn3LQdnpSeY4sZAr/gAVI0KKQTiP75ewYd4neFB55OG6rKDGrk3yvpiqxCBd4y1TT54m+WwtQFX8kg2DOaAYJdlGl4Ti7gxwIDAQABo1MwUTAdBgNVHQ4EFgQUiAnrn/p9LV3bMGenr7mJjqPuAnMwHwYDVR0jBBgwFoAUiAnrn/p9LV3bMGenr7mJjqPuAnMwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEACnQviYBeHsTyyaJNtjTusWid8r13heVoZtX/diApnw3zzRufIk4mnREZk5ajmwz9iN+g7xEJHsJwbyD2/r7DWjxAR3mgLILGQjzEPK9Vf4rDDQxqz598nby1bTNzzfkTDo5Nzvj2VHTHkCjrb1gx1kGeJacEQIoo2zY5c+rknow+Qlp7BSB45k1pH7q/obcC2eOr/ELZd83g3Qg7vpZ5XF1x7sdo6KYIaS3/mK1RyxvvObBScAPTPKfOpfCTYsprYUvce8cAnoA6v6+Veff2FH5F8bRsyDGfCjgn/Dz7RCJOetNyFy92XMYAiyYFFZXrcVJfW5DIy/1TAaT/CsitJQ=="
UBUNTU_KEY="4e32566d-8e9e-4f52-81d3-5bb9715f9727:MIIDNjCCAh4CCQCUy69JzVan2DANBgkqhkiG9w0BAQsFADBdMS0wKwYDVQQDDCRVYnVudHUgT1ZNRiBTZWN1cmUgQm9vdCAoUEsvS0VLIGtleSkxLDAqBgkqhkiG9w0BCQEWHXVidW50dS1kZXZlbEBsaXN0cy51YnVudHUuY29tMB4XDTE4MDYyMDIxNDg0NloXDTI4MDYxNzIxNDg0NlowXTEtMCsGA1UEAwwkVWJ1bnR1IE9WTUYgU2VjdXJlIEJvb3QgKFBLL0tFSyBrZXkpMSwwKgYJKoZIhvcNAQkBFh11YnVudHUtZGV2ZWxAbGlzdHMudWJ1bnR1LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMuwK+l3nl5x6ebrHYVShs/7jPAKeTTMu4MQlTbNoOZvVQhOcedjkBNaPPdd63TBxYFAnJhUBLl9hW/GB5Fn9itT0yh5G64XCBafy3rJLF8L99VDUYEuvB+a3boYATCToVnODb8h0ImORBF8sgKZm65CJlgQ93YGZbjLePnuawhU2EVH2HFyLZEWjd3JPxstlzGj+JiwvETdFX/fHbnrW+fLCLEnLLZ/YPo6We0mtVTEqHWm6G5WUIbpzPzOOGpiCKHdI+VFsX7w1TBdMhCqnxcpLn7NRXEEgw+OQ5gnOLR9kTKI+MRkux9pDGZ5v9VMcPZi2iZTHRd9briIGOL/fo0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAGLAtUs7fnf5oKU7E7+woUrHP03WXAwhTNI9eTs7YLPgwC2qGAGkzdUZUbzc4zS4SaItITlYYeWfZ9PvPhPGyIZOeuBMoUeBknsC2daRVX11aAcgOnQhxMD0WjSRG5nQ5rXRZ/NwYvctJR81l41kDToNqjBIjJ3FThzz8hHyMv/DCh3ch/X2Hj7ib+1IPfoHFk+mD/6e+y46wHWS5u0Bol9w4VBMwa3FYniFgKrAmnoiuo2br5fBbgH/7326lJ7Qb/H4mBLKz/c3iw4PF+KQxspc04tJdvQ+pDEtTUiXVE0zcBip2EJgPVK0szO5H6gtXbfyoTqDr1DKaD4x9JD3yKQ=="
FEDORA_KEY="4e32566d-8e9e-4f52-81d3-5bb9715f9727:MIIDoDCCAoigAwIBAgIJAP71iOjzlsDxMA0GCSqGSIb3DQEBCwUAMFExKzApBgNVBAMTIlJlZCBIYXQgU2VjdXJlIEJvb3QgKFBLL0tFSyBrZXkgMSkxIjAgBgkqhkiG9w0BCQEWE3NlY2FsZXJ0QHJlZGhhdC5jb20wHhcNMTQxMDMxMTExNTM3WhcNMzcxMDI1MTExNTM3WjBRMSswKQYDVQQDEyJSZWQgSGF0IFNlY3VyZSBCb290IChQSy9LRUsga2V5IDEpMSIwIAYJKoZIhvcNAQkBFhNzZWNhbGVydEByZWRoYXQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkB+Ee42865cmgm2Iq4rJjGhw+d9LB7I3gwsCyGdoMJ7j8PCZSrhZV8ZB9jiL/mZMSek3N5IumAEeWxRQ5qiNJQ31huarMMtAFuqNixaGcEM38s7Akd9xFI6ZDom2TG0kHozkL08l0LoG+MboGRh2cx2BbajYBc86yHsoyDajFg0pjJmaaNyrwE2Nv1q7K6k5SwSXHPk2u8U6hgSur9SCe+Cr3kkFaPz2rmgabJBNVxk8ZGYD9sdSm/eUz5NqoWjJqs+Za7yqXgjnORz3+A+6Bn7xy+h23f4i2q06Xls06rPJ4E0EKX64YLkF77XZF1hWFmC5MDLwNkrD8nmNEkBw8wIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUPOlg4/8ZoQp7o0L0jUIutNWccuwwHwYDVR0jBBgwFoAUPOlg4/8ZoQp7o0L0jUIutNWccuwwDQYJKoZIhvcNAQELBQADggEBAFxNkoi0gl8drYsR7N8GpnqlK583VQyNbgUArbcMQYlpz9ZlBptReNKtx7+c3AVzf+ceORO06rYwfUB1q5xDC9+wwhu/MOD0/sDbYiGY9sWv3jtPSQrmHvmGsD8N1tRGN9tUdF7/EcJgxnBYxRxv7LLYbm/DvDOHOKTzRGScNDsolCZ4J58WF+g7aQolqXM2fp43XOzoP9uR+RKzPc7n3RXDrowFIGGbld6br/qxXBzll+fDNBGF9YonJqRwNuwM9oM9kPc28/nzFdSQYr5TtK/TSa/v9HPoe3bkRCo3uoGkmQw6MSRxoOTktxrLR+SqIs/vdWGA40O3SFdzET14m2k="
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3