qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 16/33] docs/system: Convert security.texi to rST format
Date: Fri,  6 Mar 2020 11:09:42 +0000	[thread overview]
Message-ID: <20200306110959.29461-17-peter.maydell@linaro.org> (raw)
In-Reply-To: <20200306110959.29461-1-peter.maydell@linaro.org>

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>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
Message-id: 20200228153619.9906-17-peter.maydell@linaro.org
Message-id: 20200226113034.6741-16-pbonzini@redhat.com
---
 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.
-- 
2.20.1



  parent reply	other threads:[~2020-03-06 11:15 UTC|newest]

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

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=20200306110959.29461-17-peter.maydell@linaro.org \
    --to=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).