On 2016-01-06 13:19:08, Laszlo Ersek wrote:
> Change the image verification policy for option ROM images to 0x00
> (ALWAYS_EXECUTE).
> 
> While this may not be a good idea for physical platforms (see e.g.
> <https://trmm.net/Thunderstrike>), on the QEMU platform the benefits seem
> to outweigh the drawbacks:
> 
> - For QEMU's virtual PCI devices, and for some assigned PCI devices, the
>   option ROMs come from host-side files, which can never be rewritten from
>   within the guest. Since the host admin has full control over a guest
>   anyway, executing option ROMs that originate from host-side files
>   presents no additional threat to the guest.
> 

I wonder if we could somehow allow only option ROMs read from the host
disk to be trusted without being signed. (Maybe a set of image hashes
could be stored into fw_cfg?)

I also wonder if someday these images might be able to be signed...

Anyway, for both patches:

Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com>

> - For assigned physical PCI devices with option ROMs, the argument is not
>   so clear-cut. In theory a setup could exist where:
> 
>   - the host-side UEFI firmware (with DENY_EXECUTE_ON_SECURITY_VIOLATION)
>     rejects the option ROM of a malicious physical PCI device, but
> 
>   - when the device is assigned to the guest, OVMF executes the option ROM
>     in the guest,
> 
>   - the option ROM breaks out of the guest (using an assumed QEMU
>     vulnerability) and gains QEMU user privileges on the host.
> 
>   However, in order to escalate as far as it would happen on the bare
>   metal with ALWAYS_EXECUTE (i.e., in order to gain firmware-level access
>   on the host), the malicious option ROM would have to break through (1)
>   QEMU, (2) traditional UID and GID based privilege separation on the
>   host, (3) sVirt (SELinux) on the host, (4) the host OS - host firmware
>   boundary. This is not impossible, but not likely enough to discourage
>   the use cases below.
> 
> - This patch makes it possible to use unsigned iPXE network drivers that
>   QEMU presents in the option ROMs of virtual NICs and assigned SR-IOV
>   VFs, even if Secure Boot is in User Mode or Deployed Mode.
> 
> - The change also makes it possible to execute unsigned, outdated
>   (revoked), or downright malicious option ROMs of assigned physical
>   devices in guests, for corporate, entertainment, academia, or security
>   research purposes.
> 
> Cc: Paolo Bonzini <pbonz...@redhat.com>
> Cc: Gerd Hoffmann <kra...@redhat.com>
> Cc: Jordan Justen <jordan.l.jus...@intel.com>
> Cc: Chao Zhang <chao.b.zh...@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Laszlo Ersek <ler...@redhat.com>
> ---
>  OvmfPkg/OvmfPkgIa32.dsc    | 4 ++++
>  OvmfPkg/OvmfPkgIa32X64.dsc | 4 ++++
>  OvmfPkg/OvmfPkgX64.dsc     | 4 ++++
>  3 files changed, 12 insertions(+)
> 
> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
> index afde345..62065f7 100644
> --- a/OvmfPkg/OvmfPkgIa32.dsc
> +++ b/OvmfPkg/OvmfPkgIa32.dsc
> @@ -404,6 +404,10 @@ [PcdsFixedAtBuild]
>    gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmApSyncTimeout|100000
>  !endif
>  
> +!if $(SECURE_BOOT_ENABLE) == TRUE
> +  gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x00
> +!endif
> +
>    # IRQs 5, 9, 10, 11 are level-triggered
>    gPcAtChipsetPkgTokenSpaceGuid.Pcd8259LegacyModeEdgeLevel|0x0E20
>  
> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
> index 2cbd417..d0ff2bb 100644
> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> @@ -410,6 +410,10 @@ [PcdsFixedAtBuild.X64]
>    gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmApSyncTimeout|100000
>  !endif
>  
> +!if $(SECURE_BOOT_ENABLE) == TRUE
> +  gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x00
> +!endif
> +
>    # IRQs 5, 9, 10, 11 are level-triggered
>    gPcAtChipsetPkgTokenSpaceGuid.Pcd8259LegacyModeEdgeLevel|0x0E20
>  
> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
> index 309b5e2..b848976 100644
> --- a/OvmfPkg/OvmfPkgX64.dsc
> +++ b/OvmfPkg/OvmfPkgX64.dsc
> @@ -409,6 +409,10 @@ [PcdsFixedAtBuild]
>    gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmApSyncTimeout|100000
>  !endif
>  
> +!if $(SECURE_BOOT_ENABLE) == TRUE
> +  gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x00
> +!endif
> +
>    # IRQs 5, 9, 10, 11 are level-triggered
>    gPcAtChipsetPkgTokenSpaceGuid.Pcd8259LegacyModeEdgeLevel|0x0E20
>  
> -- 
> 1.8.3.1
> 
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to