On Tue, Dec 20, 2022, 2:29 PM Neal Gompa <ngomp...@gmail.com> wrote:

> On Tue, Dec 20, 2022 at 2:02 PM Daniel P. Berrangé <berra...@redhat.com>
> wrote:
> >
> > On Tue, Dec 20, 2022 at 11:28:48AM -0500, Neal Gompa wrote:
> > > On Tue, Dec 20, 2022 at 10:22 AM Ben Cotton <bcot...@redhat.com>
> wrote:
> > > >
> > > >
> https://fedoraproject.org/wiki/Changes/Unified_Kernel_Support_Phase_1
> > > >
> > > > This document represents a proposed Change. As part of the Changes
> > > > process, proposals are publicly announced in order to receive
> > > > community feedback. This proposal will only be implemented if
> approved
> > > > by the Fedora Engineering Steering Committee.
> > > >
> > > >
> > > > == Summary ==
> > > > Add support for unified kernels images to Fedora.
> > > >
> > > > == Owner ==
> > > > * Name: [[User:kraxel| Gerd Hoffmann]]
> > > > * Email: kra...@redhat.com
> > > >
> > > >
> > > > == Detailed Description ==
> > > > The goal is to move away from initrd images being generated on the
> > > > installed machine.  They are generated while building the kernel
> > > > package instead, then shipped as part of a unified kernel image.
> > > >
> > > > A unified kernel image is an all-in-one efi binary containing kernel,
> > > > initrd, cmdline and signature.  The secure boot signature covers
> > > > everything, specifically the initrd is included which is not the case
> > > > when the initrd gets loaded as separate file from /boot.
> > > >
> > > > Main motivation for this move is to make the distro more robust and
> more secure.
> > > >
> > > > Switching the whole distro over to unified kernels quickly is not
> > > > realistic though.  Too many features are depending on the current
> > > > workflow with a host-specific initrd (and host-specific kernel
> command
> > > > line), which is fundamentally incompatible with unified kernels where
> > > > everybody will have the same initrd and command line. Thats why there
> > > > is 'Phase 1' in title, so we can have more Phases in future releases
> > > > 😃
> > > >
> > > > A host-specific initrd / command line is needed today for:
> > > >
> > > > * features needing optional dracut modules (initrd rebuild needed to
> > > > enable them).
> > > > * configuration / secrets baked into the initrd (booting from iscsi
> > > > for example).
> > > > * configuration being specified on the kernel command line.
> > > > ** root filesystem being the most important one.
> > > > [https://systemd.io/DISCOVERABLE_PARTITIONS/ Discoverable
> partitions]
> > > > allow to remove this.
> > > >
> > > > Phase 1 goals (high priority):
> > > >
> > > > * Ship a unified kernel image as (optional) kernel sub-rpm.  Users
> can
> > > > opt-in to use that kernel by installing the sub-rpm.  Initial focus
> is
> > > > on booting virtual machines where we have a relatively small and well
> > > > defined set of drivers / features needed.  Supporting modern physical
> > > > machines with standard setup (i.e. boot from local sata/nvme storage)
> > > > too should be easy.
> > > > * Update kernel install scripts so unified kernels are installed and
> > > > updated properly.
> > > > * Add bootloader support for unified kernel images.  Add
> > > > [
> https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-2-efi-unified-kernel-images
> > > > unified kernel bls support] to grub2, or support using systemd-boot,
> > > > or both.
> > > >
> > > > Phase 1 goals (lower priority, might move to Phase 2):
> > > >
> > > > * Add proper discoverable partitions support to installers (anaconda,
> > > > image builder, ...).
> > > > ** Temporary workaround possible: set types using sfdisk in %post
> script.
> > > > ** When using btrfs: configure 'root' subvolume as default volume.
> > > > * Add proper systemd-boot support to installers.
> > > > ** Temporary workaround possible: run 'bootctl install' in %post
> script.
> > > > * Better measurement and remote attestation support.
> > > > ** store kernel + initrd hashes somewhere (kernel-hashes.rpm ?) to
> > > > allow pre-calculate TPM PCR values.
> > > > ** avoid using grub2 (measures every config file line executed which
> > > > is next to impossible to pre-calculate).
> > > > * Switch cloud images to use unified kernels.
> > > >
> > > > Phase 2/3 goals (longer-term stuff which is not realistic to
> complete for F38).
> > > >
> > > > * Move away from using the kernel command line for configuration.
> > > > * Move away from storing secrets in the initrd.
> > > > * Handle dracut optional modules in a different way.
> >
> > snip
> >
> > >
> > > I think UKIs are fundamentally flawed and are an idea that came out of
> > > a group that doesn't really interact with real users enough to
> > > understand how much of a problem they actually are. I realize that
> > > this Change is only about VMs, but since it explicitly talks about it
> > > being "phase 1", the implication is that future Changes are coming to
> > > switch fully over. Consequently, I'm going to provide much more
> > > holistic feedback instead of just nitpicking on this case.
> >
> > The future "phase 2/3" goal are mentioned above, and don't
> > mention fully switching to UKIs.
> >
> > I don't anticipate such a switch being realistic any time
> > in the forseeable future. There are too many unknowns, in
> > addition to some points you mentioned, to even consider
> > that right now. The in place upgrade story gogin from
> > locally generated initrd, with arbitrary user chosen
> > content to a UKI doesn't even bare thinking about. I
> > don't think that's even possible to achieve in a seemless
> > way given the infinite number of variations. IOW, I would
> > anticipate the current kernel+initrd scheme being around
> > indefinitely, in parallel with any UKI support.
> >
>
> Forgive me for being pessimistic here, because Change proposals like
> this are not written in such a way. You also bundled in bootloader
> changes and PCR/TPM stuff too. All of which are irrelevant, not
> useful, and don't actually work for Linux users.
>
> > > In the Fedora case, things are simpler right up until we hit graphics
> > > drivers. This is also a problem for VMs too, because GPU passthrough
> > > is a common case for scientific and gaming workloads. As long as the
> > > NVIDIA driver remains dominant in Linux, UKIs cannot work because by
> > > design you cannot load anything that isn't part of the kernel image.
> > > For bare metal, we *need* these drivers in early boot, though. And
> > > that's another problem: no third-party early boot drivers. Even if you
> > > solve the signing issue, you need to introduce some kind of two-stage
> > > OS boot process so we can bring up the bare minimum to load a second
> > > image containing all the remaining drivers. And at that point, you've
> > > defeated the purpose of UKIs. I've heard from some people that system
> > > extensions (sysexts) would be a way to solve this, and maybe it is.
> >
> > Yes, system extensions are one mechanism for making the initrd
> > content more flexible when using UKIs. There would be one base
> > layer definiing the 90% common case, and a number of add-ons
> > that can cope with niche use cases. This avoids the core UKI
> > having to be huge and ship with every possible feature present.
> >
> > This is something that might be considered at a later phase,
> > but is not a priority. What's proposed in phase 1 is sufficient
> > to cope with the cloud VM common case. While device passthrough
> > may be common in some industries/domains usage, it is not the
> > common case for cloud computing in general.
> >
> > > But again, we've eliminated the value of UKIs by doing so.
> >
> > That is not correct. There are a number of benefits of UKIs.
> >
> > The most critical is that the initrd content and cmdline is
> > covered by the SecureBoot signature. This remains true even
> > with system extensions, as such extensions would be signed
> > too. They do not neccessarily need to be signed by the OS
> > vendor, they could use a 3rd party SecureBoot signing key,
> > or the users' own key. That is TBD and not something we're
> > actively considering - its not even mentioned in phase 2/3
> > ideas in the change proposal.
> >
>
> Secure Boot keys are flawed. There are many documented problems with
> relying on Secure Boot keys in the real world. Redesign to not use
> them, please.
>
> > A further benefit of UKIs is supportability, since we know
> > exactly what content is in the initrd that user is booting.
> > With locally generated initrds there are an arbitrary
> > number of combinations and many ways for the initrd creation
> > process to go wrong, which are hard for Fedora maintainers
> > to understand and debug.
> >
> > > Speaking more broadly, there are also problems that will be introduced
> > > as this trickles down from Fedora into prominent downstreams (assuming
> > > this is accepted). In the RHEL case, you've basically broken driver
> > > disks completely. In the UKI model, there's no way to incorporate
> > > early boot storage, network, and graphics drivers. This is
> > > *incredibly* common for RHEL administrators because there's a general
> > > acceptance of proprietary kernel modules from vendors these days. Even
> > > ignoring those, Red Hat's kernel feature support mindset is completely
> > > incompatible with UKIs, because RHEL does default-off rather than
> > > Fedora's default-on model for kernel features. We could debate until
> > > the cows come home on whether it's right or wrong, but their current
> > > mindset essentially means tons of common hardware becomes unsupported
> > > quite regularly. The ELRepo project is popular among RHEL folks
> > > because it restores those drivers and makes it possible to use RHEL on
> > > those machines through a combination of driver disks and kernel module
> > > packages.
> >
> > Yes, this desire for UKIs in Fedora is matched by a desire to
> > ship the same UKIs in RHEL too.
> >
> > No one is proposing to take away the existing ability to use
> > locally generated initrds, either in Fedora or RHEL. Everything
> > that is possible todo today will remain possible indefinitely.
> > UKIs are adding a new mechanism in parallel, in order to solve
> > a number of use cases that are not possible today, due to
> > unsigned content being part of the boot chain when SecureBoot
> > is active.
> >
> > > The crux of the problem here is *signing*. All of this is tied up in
> > > Secure Boot and TPM, which is the wrong place to actually handle this.
> > > In other operating systems (notably Windows), Secure Boot certificates
> > > are not used for blocking or enabling kernel-level drivers. Instead,
> > > there's a kernel-level certificate store that is used to validate and
> > > enable drivers, allowing everything to be managed in a hardware
> > > platform agnostic way. I've also yet to hear of a decent reason for
> > > TPM measurements too. Block or filesystem verity provides similar
> > > guarantees to provide tamper resistance and are both much easier to
> > > debug than TPM interfaces. I am not convinced that you are providing
> > > security or reliability with this and the trade-offs are *terrible*
> > > for regular users.
> >
> > The immediate need for UKIs is indeed related to SecureBoot and
> > TPMs. These are a core technology foundation of the confidential
> > virtual machine stack. On Azure today, if you request an Ubuntu
> > confidential VM, Azure will pre-encrypt the root filesystem and
> > seal the LUKS key against predicted TPM PCR values. It guarantees
> > that the root disk can only be decrypted by the specific VM
> > instance that is requested, when it is running in SecureBoot
> > mode with the expected measurments on AMD SEV-SNP confidential
> > hardware. The Ubuntu image in Azure already uses UKIs, and boots
> > them directly from shim, with no bootloader involved. The usage
> > of SecureBoot and TPMs is all transparent to the user, since all
> > the integration is handled by the OS vendor on their behalf.
> >
>
> Well, how is that relevant to Fedora? We don't have Azure images, and
> Red Hat still blocks us from meaningfully existing in that ecosystem,
> which is why we don't have official WSL images or Azure images.
>
> I'll reiterate that we should not rely on SB signing for this.
>
> > > With my FESCo hat on, I'm uneasy about this change. With my "Fedora
> > > user and advocate" hat on, I think that the UAPI group has failed to
> > > provide something useful to the Linux world here and I would be
> > > extremely apprehensive about Fedora adopting any portion of this
> > > stuff.
> >
> > As mentioned above, UKIs have provided a means to close the
> > SecureBoot hole with unsigned initrd content that has existed
> > in more or less every mainstream Linux distro. That is a
> > clearly useful outcome, regardless of whether Fedora is interested
> > in any other aspect of what that UAPI groups is proposing.
> >
> > In proposing the UKI support for Fedora, we're not coming at this
> > as representatives of the UAPI group or its vision. We're trying
> > to solve the problem of having a fully verified secureboot chain
> > for VMs with no unsigned content, and to be able to use this to
> > support confidential VMs with disk encryption sealed to TPMs, as
> > required by Azure today, and likely KVM in future.
>
> Yeah, I seriously doubt this. Linux's model for supporting
> confidential computing is not user-friendly, so I expect low adoption
> and resistance once the flaws become apparent to would-be users.
>


Relevant blog article about in-VM disk encryption in the cloud being
potentially harmful:
https://tmp.bearblog.dev/disk-encryption-aws-is-close-to-useless-and-potentially-harmful/

>
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to