[edk2-devel] [PATCH v1 0/8] Measured SEV boot with kernel/initrd/cmdline
Laszlo Ersek
lersek at redhat.com
Thu May 27 09:41:42 UTC 2021
On 05/25/21 07:31, Dov Murik wrote:
> Booting with SEV prevented the loading of kernel, initrd, and kernel
> command-line via QEMU fw_cfg interface because they arrive from the VMM
> which is untrusted in SEV.
>
> However, in some cases the kernel, initrd, and cmdline are not secret
> but should not be modified by the host. In such a case, we want to
> verify inside the trusted VM that the kernel, initrd, and cmdline are
> indeed the ones expected by the Guest Owner, and only if that is the
> case go on and boot them up (removing the need for grub inside OVMF in
> that mode).
>
> This patch series declares a new page in MEMFD which will contain the
> hashes of these three blobs (kernel, initrd, cmdline), each under its
> own GUID entry. This tables of hashes is populated by QEMU before
> launch, and encrypted as part of the initial VM memory; this makes sure
> theses hashes are part of the SEV measurement (which has to be approved
> by the Guest Owner for secret injection, for example). Note that this
> requires a new QEMU patch which will be submitted soon.
>
> OVMF parses the table of hashes populated by QEMU (patch 5), and as it
> reads the fw_cfg blobs from QEMU, it will verify each one against the
> expected hash (kernel and initrd verifiers are introduced in patch 6,
> and command-line verifier is introduced in patches 7+8). This is all
> done inside the trusted VM context. If all the hashes are correct, boot
> of the kernel is allowed to continue.
>
> Any attempt by QEMU to modify the kernel, initrd, cmdline (including
> dropping one of them), or to modify the OVMF code that verifies those
> hashes, will cause the initial SEV measurement to change and therefore
> will be detectable by the Guest Owner during launch before secret
> injection.
>
> Cc: Laszlo Ersek <lersek at redhat.com>
> Cc: Ard Biesheuvel <ardb+tianocore at kernel.org>
> Cc: Jordan Justen <jordan.l.justen at intel.com>
> Cc: Ashish Kalra <ashish.kalra at amd.com>
> Cc: Brijesh Singh <brijesh.singh at amd.com>
> Cc: Erdem Aktas <erdemaktas at google.com>
> Cc: James Bottomley <jejb at linux.ibm.com>
> Cc: Jiewen Yao <jiewen.yao at intel.com>
> Cc: Min Xu <min.m.xu at intel.com>
> Cc: Tom Lendacky <thomas.lendacky at amd.com>
>
> James Bottomley (8):
> OvmfPkg/AmdSev/SecretDxe: fix header comment to generic naming
> OvmfPkg: PlatformBootManagerLibGrub: Allow executing kernel via fw_cfg
> OvmfPkg/AmdSev: add a page to the MEMFD for firmware config hashes
> OvmfPkg/QemuKernelLoaderFsDxe: Add ability to verify loaded items
> OvmfPkg/AmdSev: Add library to find encrypted hashes for the FwCfg
> device
> OvmfPkg/AmdSev: Add firmware file plugin to verifier
> OvmfPkg: GenericQemuLoadImageLib: Allow verifying fw_cfg command line
> OvmfPkg/AmdSev: add SevQemuLoadImageLib
>
> OvmfPkg/OvmfPkg.dec | 10 ++
> OvmfPkg/AmdSev/AmdSevX64.dsc | 9 +-
> OvmfPkg/AmdSev/AmdSevX64.fdf | 3 +
> OvmfPkg/AmdSev/Library/SevFwCfgVerifier/SevFwCfgVerifier.inf | 30 +++++
> OvmfPkg/AmdSev/Library/SevHashFinderLib/SevHashFinderLib.inf | 34 ++++++
> OvmfPkg/AmdSev/Library/SevQemuLoadImageLib/SevQemuLoadImageLib.inf | 30 +++++
> OvmfPkg/Library/PlatformBootManagerLibGrub/PlatformBootManagerLibGrub.inf | 2 +
> OvmfPkg/ResetVector/ResetVector.inf | 2 +
> OvmfPkg/AmdSev/Include/Library/SevHashFinderLib.h | 47 ++++++++
> OvmfPkg/Include/Library/QemuFwCfgLib.h | 35 ++++++
> OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.h | 11 ++
> OvmfPkg/AmdSev/Library/SevFwCfgVerifier/SevFwCfgVerifier.c | 60 ++++++++++
> OvmfPkg/AmdSev/Library/SevHashFinderLib/SevHashFinderLib.c | 126 ++++++++++++++++++++
> OvmfPkg/AmdSev/Library/SevQemuLoadImageLib/SevQemuLoadImageLib.c | 52 ++++++++
> OvmfPkg/AmdSev/SecretDxe/SecretDxe.c | 2 +-
> OvmfPkg/Library/GenericQemuLoadImageLib/GenericQemuLoadImageLib.c | 29 +++++
> OvmfPkg/Library/PlatformBootManagerLibGrub/BdsPlatform.c | 5 +
> OvmfPkg/Library/PlatformBootManagerLibGrub/QemuKernel.c | 50 ++++++++
> OvmfPkg/QemuKernelLoaderFsDxe/QemuKernelLoaderFsDxe.c | 31 +++++
> OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm | 20 ++++
> OvmfPkg/ResetVector/ResetVector.nasmb | 2 +
> 21 files changed, 587 insertions(+), 3 deletions(-)
> create mode 100644 OvmfPkg/AmdSev/Library/SevFwCfgVerifier/SevFwCfgVerifier.inf
> create mode 100644 OvmfPkg/AmdSev/Library/SevHashFinderLib/SevHashFinderLib.inf
> create mode 100644 OvmfPkg/AmdSev/Library/SevQemuLoadImageLib/SevQemuLoadImageLib.inf
> create mode 100644 OvmfPkg/AmdSev/Include/Library/SevHashFinderLib.h
> create mode 100644 OvmfPkg/AmdSev/Library/SevFwCfgVerifier/SevFwCfgVerifier.c
> create mode 100644 OvmfPkg/AmdSev/Library/SevHashFinderLib/SevHashFinderLib.c
> create mode 100644 OvmfPkg/AmdSev/Library/SevQemuLoadImageLib/SevQemuLoadImageLib.c
> create mode 100644 OvmfPkg/Library/PlatformBootManagerLibGrub/QemuKernel.c
>
I'm confirming that this series is in my review queue.
However, I may need unusually long time to get to it. Thanks for your
patience.
Thanks
Laszlo
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#75792): https://edk2.groups.io/g/devel/message/75792
Mute This Topic: https://groups.io/mt/83074450/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list