qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	qemu-devel@nongnu.org, Kashyap Chamarthy <kchamart@redhat.com>
Subject: Re: [PATCH v3 16/33] docs/system: Convert security.texi to rST format
Date: Mon, 02 Mar 2020 12:10:20 +0000	[thread overview]
Message-ID: <877e03arf7.fsf@linaro.org> (raw)
In-Reply-To: <20200228153619.9906-17-peter.maydell@linaro.org>


Peter Maydell <peter.maydell@linaro.org> writes:

> security.texi is included from qemu-doc.texi but is not used
> in the qemu.1 manpage. So we can do a straightforward conversion
> of the contents, which go into the system manual.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Message-id: 20200226113034.6741-16-pbonzini@redhat.com

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>

> ---
>  docs/system/index.rst    |   1 +
>  docs/system/security.rst | 173 +++++++++++++++++++++++++++++++++++++++
>  2 files changed, 174 insertions(+)
>  create mode 100644 docs/system/security.rst
>
> diff --git a/docs/system/index.rst b/docs/system/index.rst
> index fc774a18b54..5034f903407 100644
> --- a/docs/system/index.rst
> +++ b/docs/system/index.rst
> @@ -14,4 +14,5 @@ Contents:
>  .. toctree::
>     :maxdepth: 2
>  
> +   security
>     vfio-ap
> diff --git a/docs/system/security.rst b/docs/system/security.rst
> new file mode 100644
> index 00000000000..f2092c8768b
> --- /dev/null
> +++ b/docs/system/security.rst
> @@ -0,0 +1,173 @@
> +Security
> +========
> +
> +Overview
> +--------
> +
> +This chapter explains the security requirements that QEMU is designed to meet
> +and principles for securely deploying QEMU.
> +
> +Security Requirements
> +---------------------
> +
> +QEMU supports many different use cases, some of which have stricter security
> +requirements than others.  The community has agreed on the overall security
> +requirements that users may depend on.  These requirements define what is
> +considered supported from a security perspective.
> +
> +Virtualization Use Case
> +'''''''''''''''''''''''
> +
> +The virtualization use case covers cloud and virtual private server (VPS)
> +hosting, as well as traditional data center and desktop virtualization.  These
> +use cases rely on hardware virtualization extensions to execute guest code
> +safely on the physical CPU at close-to-native speed.
> +
> +The following entities are untrusted, meaning that they may be buggy or
> +malicious:
> +
> +- Guest
> +- User-facing interfaces (e.g. VNC, SPICE, WebSocket)
> +- Network protocols (e.g. NBD, live migration)
> +- User-supplied files (e.g. disk images, kernels, device trees)
> +- Passthrough devices (e.g. PCI, USB)
> +
> +Bugs affecting these entities are evaluated on whether they can cause damage in
> +real-world use cases and treated as security bugs if this is the case.
> +
> +Non-virtualization Use Case
> +'''''''''''''''''''''''''''
> +
> +The non-virtualization use case covers emulation using the Tiny Code Generator
> +(TCG).  In principle the TCG and device emulation code used in conjunction with
> +the non-virtualization use case should meet the same security requirements as
> +the virtualization use case.  However, for historical reasons much of the
> +non-virtualization use case code was not written with these security
> +requirements in mind.
> +
> +Bugs affecting the non-virtualization use case are not considered security
> +bugs at this time.  Users with non-virtualization use cases must not rely on
> +QEMU to provide guest isolation or any security guarantees.
> +
> +Architecture
> +------------
> +
> +This section describes the design principles that ensure the security
> +requirements are met.
> +
> +Guest Isolation
> +'''''''''''''''
> +
> +Guest isolation is the confinement of guest code to the virtual machine.  When
> +guest code gains control of execution on the host this is called escaping the
> +virtual machine.  Isolation also includes resource limits such as throttling of
> +CPU, memory, disk, or network.  Guests must be unable to exceed their resource
> +limits.
> +
> +QEMU presents an attack surface to the guest in the form of emulated devices.
> +The guest must not be able to gain control of QEMU.  Bugs in emulated devices
> +could allow malicious guests to gain code execution in QEMU.  At this point the
> +guest has escaped the virtual machine and is able to act in the context of the
> +QEMU process on the host.
> +
> +Guests often interact with other guests and share resources with them.  A
> +malicious guest must not gain control of other guests or access their data.
> +Disk image files and network traffic must be protected from other guests unless
> +explicitly shared between them by the user.
> +
> +Principle of Least Privilege
> +''''''''''''''''''''''''''''
> +
> +The principle of least privilege states that each component only has access to
> +the privileges necessary for its function.  In the case of QEMU this means that
> +each process only has access to resources belonging to the guest.
> +
> +The QEMU process should not have access to any resources that are inaccessible
> +to the guest.  This way the guest does not gain anything by escaping into the
> +QEMU process since it already has access to those same resources from within
> +the guest.
> +
> +Following the principle of least privilege immediately fulfills guest isolation
> +requirements.  For example, guest A only has access to its own disk image file
> +``a.img`` and not guest B's disk image file ``b.img``.
> +
> +In reality certain resources are inaccessible to the guest but must be
> +available to QEMU to perform its function.  For example, host system calls are
> +necessary for QEMU but are not exposed to guests.  A guest that escapes into
> +the QEMU process can then begin invoking host system calls.
> +
> +New features must be designed to follow the principle of least privilege.
> +Should this not be possible for technical reasons, the security risk must be
> +clearly documented so users are aware of the trade-off of enabling the feature.
> +
> +Isolation mechanisms
> +''''''''''''''''''''
> +
> +Several isolation mechanisms are available to realize this architecture of
> +guest isolation and the principle of least privilege.  With the exception of
> +Linux seccomp, these mechanisms are all deployed by management tools that
> +launch QEMU, such as libvirt.  They are also platform-specific so they are only
> +described briefly for Linux here.
> +
> +The fundamental isolation mechanism is that QEMU processes must run as
> +unprivileged users.  Sometimes it seems more convenient to launch QEMU as
> +root to give it access to host devices (e.g. ``/dev/net/tun``) but this poses a
> +huge security risk.  File descriptor passing can be used to give an otherwise
> +unprivileged QEMU process access to host devices without running QEMU as root.
> +It is also possible to launch QEMU as a non-root user and configure UNIX groups
> +for access to ``/dev/kvm``, ``/dev/net/tun``, and other device nodes.
> +Some Linux distros already ship with UNIX groups for these devices by default.
> +
> +- SELinux and AppArmor make it possible to confine processes beyond the
> +  traditional UNIX process and file permissions model.  They restrict the QEMU
> +  process from accessing processes and files on the host system that are not
> +  needed by QEMU.
> +
> +- Resource limits and cgroup controllers provide throughput and utilization
> +  limits on key resources such as CPU time, memory, and I/O bandwidth.
> +
> +- Linux namespaces can be used to make process, file system, and other system
> +  resources unavailable to QEMU.  A namespaced QEMU process is restricted to only
> +  those resources that were granted to it.
> +
> +- Linux seccomp is available via the QEMU ``--sandbox`` option.  It disables
> +  system calls that are not needed by QEMU, thereby reducing the host kernel
> +  attack surface.
> +
> +Sensitive configurations
> +------------------------
> +
> +There are aspects of QEMU that can have security implications which users &
> +management applications must be aware of.
> +
> +Monitor console (QMP and HMP)
> +'''''''''''''''''''''''''''''
> +
> +The monitor console (whether used with QMP or HMP) provides an interface
> +to dynamically control many aspects of QEMU's runtime operation. Many of the
> +commands exposed will instruct QEMU to access content on the host file system
> +and/or trigger spawning of external processes.
> +
> +For example, the ``migrate`` command allows for the spawning of arbitrary
> +processes for the purpose of tunnelling the migration data stream. The
> +``blockdev-add`` command instructs QEMU to open arbitrary files, exposing
> +their content to the guest as a virtual disk.
> +
> +Unless QEMU is otherwise confined using technologies such as SELinux, AppArmor,
> +or Linux namespaces, the monitor console should be considered to have privileges
> +equivalent to those of the user account QEMU is running under.
> +
> +It is further important to consider the security of the character device backend
> +over which the monitor console is exposed. It needs to have protection against
> +malicious third parties which might try to make unauthorized connections, or
> +perform man-in-the-middle attacks. Many of the character device backends do not
> +satisfy this requirement and so must not be used for the monitor console.
> +
> +The general recommendation is that the monitor console should be exposed over
> +a UNIX domain socket backend to the local host only. Use of the TCP based
> +character device backend is inappropriate unless configured to use both TLS
> +encryption and authorization control policy on client connections.
> +
> +In summary, the monitor console is considered a privileged control interface to
> +QEMU and as such should only be made accessible to a trusted management
> +application or user.


-- 
Alex Bennée


  reply	other threads:[~2020-03-02 12:11 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-28 15:35 [PATCH v3 00/33] Convert qemu-doc to rST Peter Maydell
2020-02-28 15:35 ` [PATCH v3 01/33] qemu-doc: convert user-mode emulation to a separate Sphinx manual Peter Maydell
2020-03-02 11:05   ` Alex Bennée
2020-02-28 15:35 ` [PATCH v3 02/33] qemu-doc: remove target OS documentation Peter Maydell
2020-03-02 11:05   ` Alex Bennée
2020-02-28 15:35 ` [PATCH v3 03/33] texi2pod: parse @include directives outside "@c man" blocks Peter Maydell
2020-03-02 11:07   ` Alex Bennée
2020-02-28 15:35 ` [PATCH v3 04/33] qemu-doc: split CPU models doc between MIPS and x86 parts Peter Maydell
2020-03-02 11:18   ` Alex Bennée
2020-02-28 15:35 ` [PATCH v3 05/33] qemu-doc: split qemu-doc.texi in multiple files Peter Maydell
2020-03-02 11:22   ` Alex Bennée
2020-03-02 12:16     ` Peter Maydell
2020-03-02 14:18       ` Alex Bennée
2020-02-28 15:35 ` [PATCH v3 06/33] qemu-doc: extract common system emulator documentation from the PC section Peter Maydell
2020-03-02 11:25   ` Alex Bennée
2020-02-28 15:35 ` [PATCH v3 07/33] qemu-doc: move system requirements chapter inside " Peter Maydell
2020-02-28 15:35 ` [PATCH v3 08/33] qemu-doc: split target sections to separate files Peter Maydell
2020-03-02 11:28   ` Alex Bennée
2020-02-28 15:35 ` [PATCH v3 09/33] qemu-doc: Remove the "CPU emulation" part of the "Implementation notes" Peter Maydell
2020-03-02 11:30   ` Alex Bennée
2020-02-28 15:35 ` [PATCH v3 10/33] qemu-doc: move qemu-tech.texi into main section Peter Maydell
2020-03-02 11:31   ` Alex Bennée
2020-02-28 15:35 ` [PATCH v3 11/33] qemu-doc: move included files to docs/system Peter Maydell
2020-03-02 11:31   ` Alex Bennée
2020-02-28 15:35 ` [PATCH v3 12/33] qemu-doc: remove indices other than findex Peter Maydell
2020-03-02 11:32   ` Alex Bennée
2020-02-28 15:35 ` [PATCH v3 13/33] docs/system: put qemu-block-drivers body in an included file Peter Maydell
2020-03-02 11:32   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 14/33] docs: Create defs.rst.inc as a place to define substitutions Peter Maydell
2020-03-02 12:40   ` Kashyap Chamarthy
2020-02-28 15:36 ` [PATCH v3 15/33] docs/system: Convert qemu-cpu-models.texi to rST Peter Maydell
2020-03-02 12:08   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 16/33] docs/system: Convert security.texi to rST format Peter Maydell
2020-03-02 12:10   ` Alex Bennée [this message]
2020-02-28 15:36 ` [PATCH v3 17/33] docs/system: convert managed startup to rST Peter Maydell
2020-03-02 12:10   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 18/33] docs/system: convert the documentation of deprecated features " Peter Maydell
2020-03-02 12:12   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 19/33] docs/system: convert Texinfo documentation " Peter Maydell
2020-03-02 12:13   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 20/33] hmp-commands.hx: Add rST documentation fragments Peter Maydell
2020-03-02 12:16   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 21/33] hmp-commands-info.hx: " Peter Maydell
2020-03-02 12:16   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 22/33] doc/scripts/hxtool.py: Strip trailing ':' from DEFHEADING/ARCHHEADING Peter Maydell
2020-03-02 12:17   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 23/33] docs: Roll semihosting option information into qemu-options.hx Peter Maydell
2020-03-02 12:18   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 24/33] docs: Roll -prom-env and -g target-specific info " Peter Maydell
2020-03-02 12:19   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 25/33] scripts/hxtool-conv: Archive script used in qemu-options.hx conversion Peter Maydell
2020-03-02 12:19   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 26/33] qemu-options.hx: Add rST documentation fragments Peter Maydell
2020-03-02 12:20   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 27/33] qemu-options.hx: Fix up the autogenerated rST Peter Maydell
2020-03-02 12:23   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 28/33] docs: Split out sections for the manpage into .rst.inc files Peter Maydell
2020-03-02 12:24   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 29/33] docs: Generate qemu.1 manpage with Sphinx Peter Maydell
2020-03-02 12:24   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 30/33] ui/cocoa.m: Update documentation file and pathname Peter Maydell
2020-03-02 12:28   ` Alex Bennée
2020-02-28 15:36 ` [PATCH v3 31/33] docs: Stop building qemu-doc Peter Maydell
2020-03-02 12:32   ` Alex Bennée
2020-03-11 14:53   ` Markus Armbruster
2020-03-11 15:15     ` Peter Maydell
2020-03-12  6:06       ` Markus Armbruster
2020-03-12 10:11         ` Peter Maydell
2020-03-12 13:16           ` Markus Armbruster
2020-02-28 15:36 ` [PATCH v3 32/33] docs: Remove old texinfo sources Peter Maydell
2020-03-02 12:34   ` Alex Bennée
2020-03-02 12:42   ` Kashyap Chamarthy
2020-02-28 15:36 ` [PATCH v3 33/33] *.hx: Remove all the STEXI/ETEXI blocks Peter Maydell
2020-03-02 12:36   ` Alex Bennée
2020-02-28 18:36 ` [PATCH v3 00/33] Convert qemu-doc to rST Peter Maydell
2020-02-28 21:20   ` Stefan Weil
2020-02-29 11:50     ` Peter Maydell
2020-03-02 12:41 ` Alex Bennée
2020-03-03 17:35 ` Peter Maydell
2020-03-03 17:44   ` Paolo Bonzini
2020-03-03 18:19   ` Alex Bennée
2020-03-04  9:12   ` Kashyap Chamarthy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=877e03arf7.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=kchamart@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).