[kata-dev] Improving isolation in Kata

Boeuf, Sebastien sebastien.boeuf at intel.com
Mon Jul 16 22:32:22 UTC 2018


Hi Stefan,

Thanks for bringing up this topic.

About better isolation, we have 2 issues opened here:
https://github.com/kata-containers/runtime/issues/344
https://github.com/kata-containers/runtime/issues/345
They're about cgroups and namespaces for the qemu process itself. You've mentioned it's not worth isolating the process through namespaces but I think it is since the kernel running inside the VM is very likely to be different from the kernel running on the host, meaning the exploit might be harder on the host itself even if it happened inside the guest.

Now, I agree that running the VM as root is also a real breach regarding security and we also have an issue to address this concern here: https://github.com/kata-containers/runtime/issues/389
I think you summarized the blockers pretty well right now. If qemu is not root, we have some issues accessing the files on the host through 9p, but you also seem to provide a solution here and it'd be great if you could comment on the Github issue.
One small thing that needs to happen too is to make sure we run kata-runtime with a user that at least can have access to /dev/kvm, but other than that, nothing else I can think of.

Last thing, about libvirt-go, is there all the support needed by Kata (hotplug of a bunch of different device types) ?

Thanks,
Sebastien

________________________________________
From: Stefan Hajnoczi [stefanha at redhat.com]
Sent: Monday, July 16, 2018 5:31 AM
To: kata-dev at lists.katacontainers.io
Cc: Daniel Berrange
Subject: [kata-dev] Improving isolation in Kata

Kata currently launches QEMU as user 'root' and I haven't found
isolation mechanisms that would confine the QEMU process in the event of
a guest escape.

Inevitably there will be a security bug that allows a malicious guest to
escape to QEMU, so it's important that the QEMU process is unprivileged
and isolated.

Running QEMU as 'root' simplifies 9p configuration by allowing the QEMU
process to access files with any uid/gid.  QEMU does support other 9p
configurations where the QEMU process does not run as root, including
the virtfs-proxy-helper privilege separation approach.

Are there any other reasons for running the QEMU process as root?

For comparison, libvirt launches QEMU as the unprivileged 'qemu' user
with a unique SELinux context.  This makes it much harder to access
other guests or escape to the host if the guest compromises QEMU.

Is there any work underway to improve isolation in Kata?

Two directions that come to mind are:

1. Design isolation from scratch for Kata, including unprivileged
   uid/gid, namespaces, and SELinux.  This requires changes to Kata
   because the QEMU process will not be able to open arbitrary files
   (e.g. device hotplug, 9p configuration).

   FWIW, relying on namespaces doesn't add a lot of security because if
   the guest is malicious, then that may well be because of a Linux
   namespaces security hole - the attacker could just use the same
   exploit again to escape from QEMU to the host.

2. Use libvirt-go (API) or libvirt-go-xml (XML) instead of govmm to get
   strong isolation.  This would also slim down virtcontainers and
   remove the dependency on govmm (no more command-line munging and
   defining object models for QEMU command-line concepts).

Stefan



More information about the kata-dev mailing list