mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
239 lines
9.4 KiB
ReStructuredText
239 lines
9.4 KiB
ReStructuredText
![]() |
.. SPDX-License-Identifier: GPL-2.0
|
||
|
|
||
|
Attack Vector Controls
|
||
|
======================
|
||
|
|
||
|
Attack vector controls provide a simple method to configure only the mitigations
|
||
|
for CPU vulnerabilities which are relevant given the intended use of a system.
|
||
|
Administrators are encouraged to consider which attack vectors are relevant and
|
||
|
disable all others in order to recoup system performance.
|
||
|
|
||
|
When new relevant CPU vulnerabilities are found, they will be added to these
|
||
|
attack vector controls so administrators will likely not need to reconfigure
|
||
|
their command line parameters as mitigations will continue to be correctly
|
||
|
applied based on the chosen attack vector controls.
|
||
|
|
||
|
Attack Vectors
|
||
|
--------------
|
||
|
|
||
|
There are 5 sets of attack-vector mitigations currently supported by the kernel:
|
||
|
|
||
|
#. :ref:`user_kernel`
|
||
|
#. :ref:`user_user`
|
||
|
#. :ref:`guest_host`
|
||
|
#. :ref:`guest_guest`
|
||
|
#. :ref:`smt`
|
||
|
|
||
|
To control the enabled attack vectors, see :ref:`cmdline`.
|
||
|
|
||
|
.. _user_kernel:
|
||
|
|
||
|
User-to-Kernel
|
||
|
^^^^^^^^^^^^^^
|
||
|
|
||
|
The user-to-kernel attack vector involves a malicious userspace program
|
||
|
attempting to leak kernel data into userspace by exploiting a CPU vulnerability.
|
||
|
The kernel data involved might be limited to certain kernel memory, or include
|
||
|
all memory in the system, depending on the vulnerability exploited.
|
||
|
|
||
|
If no untrusted userspace applications are being run, such as with single-user
|
||
|
systems, consider disabling user-to-kernel mitigations.
|
||
|
|
||
|
Note that the CPU vulnerabilities mitigated by Linux have generally not been
|
||
|
shown to be exploitable from browser-based sandboxes. User-to-kernel
|
||
|
mitigations are therefore mostly relevant if unknown userspace applications may
|
||
|
be run by untrusted users.
|
||
|
|
||
|
*user-to-kernel mitigations are enabled by default*
|
||
|
|
||
|
.. _user_user:
|
||
|
|
||
|
User-to-User
|
||
|
^^^^^^^^^^^^
|
||
|
|
||
|
The user-to-user attack vector involves a malicious userspace program attempting
|
||
|
to influence the behavior of another unsuspecting userspace program in order to
|
||
|
exfiltrate data. The vulnerability of a userspace program is based on the
|
||
|
program itself and the interfaces it provides.
|
||
|
|
||
|
If no untrusted userspace applications are being run, consider disabling
|
||
|
user-to-user mitigations.
|
||
|
|
||
|
Note that because the Linux kernel contains a mapping of all physical memory,
|
||
|
preventing a malicious userspace program from leaking data from another
|
||
|
userspace program requires mitigating user-to-kernel attacks as well for
|
||
|
complete protection.
|
||
|
|
||
|
*user-to-user mitigations are enabled by default*
|
||
|
|
||
|
.. _guest_host:
|
||
|
|
||
|
Guest-to-Host
|
||
|
^^^^^^^^^^^^^
|
||
|
|
||
|
The guest-to-host attack vector involves a malicious VM attempting to leak
|
||
|
hypervisor data into the VM. The data involved may be limited, or may
|
||
|
potentially include all memory in the system, depending on the vulnerability
|
||
|
exploited.
|
||
|
|
||
|
If no untrusted VMs are being run, consider disabling guest-to-host mitigations.
|
||
|
|
||
|
*guest-to-host mitigations are enabled by default if KVM support is present*
|
||
|
|
||
|
.. _guest_guest:
|
||
|
|
||
|
Guest-to-Guest
|
||
|
^^^^^^^^^^^^^^
|
||
|
|
||
|
The guest-to-guest attack vector involves a malicious VM attempting to influence
|
||
|
the behavior of another unsuspecting VM in order to exfiltrate data. The
|
||
|
vulnerability of a VM is based on the code inside the VM itself and the
|
||
|
interfaces it provides.
|
||
|
|
||
|
If no untrusted VMs, or only a single VM is being run, consider disabling
|
||
|
guest-to-guest mitigations.
|
||
|
|
||
|
Similar to the user-to-user attack vector, preventing a malicious VM from
|
||
|
leaking data from another VM requires mitigating guest-to-host attacks as well
|
||
|
due to the Linux kernel phys map.
|
||
|
|
||
|
*guest-to-guest mitigations are enabled by default if KVM support is present*
|
||
|
|
||
|
.. _smt:
|
||
|
|
||
|
Cross-Thread
|
||
|
^^^^^^^^^^^^
|
||
|
|
||
|
The cross-thread attack vector involves a malicious userspace program or
|
||
|
malicious VM either observing or attempting to influence the behavior of code
|
||
|
running on the SMT sibling thread in order to exfiltrate data.
|
||
|
|
||
|
Many cross-thread attacks can only be mitigated if SMT is disabled, which will
|
||
|
result in reduced CPU core count and reduced performance.
|
||
|
|
||
|
If cross-thread mitigations are fully enabled ('auto,nosmt'), all mitigations
|
||
|
for cross-thread attacks will be enabled. SMT may be disabled depending on
|
||
|
which vulnerabilities are present in the CPU.
|
||
|
|
||
|
If cross-thread mitigations are partially enabled ('auto'), mitigations for
|
||
|
cross-thread attacks will be enabled but SMT will not be disabled.
|
||
|
|
||
|
If cross-thread mitigations are disabled, no mitigations for cross-thread
|
||
|
attacks will be enabled.
|
||
|
|
||
|
Cross-thread mitigation may not be required if core-scheduling or similar
|
||
|
techniques are used to prevent untrusted workloads from running on SMT siblings.
|
||
|
|
||
|
*cross-thread mitigations default to partially enabled*
|
||
|
|
||
|
.. _cmdline:
|
||
|
|
||
|
Command Line Controls
|
||
|
---------------------
|
||
|
|
||
|
Attack vectors are controlled through the mitigations= command line option. The
|
||
|
value provided begins with a global option and then may optionally include one
|
||
|
or more options to disable various attack vectors.
|
||
|
|
||
|
Format:
|
||
|
| ``mitigations=[global]``
|
||
|
| ``mitigations=[global],[attack vectors]``
|
||
|
|
||
|
Global options:
|
||
|
|
||
|
============ =============================================================
|
||
|
Option Description
|
||
|
============ =============================================================
|
||
|
'off' All attack vectors disabled.
|
||
|
'auto' All attack vectors enabled, partial cross-thread mitigations.
|
||
|
'auto,nosmt' All attack vectors enabled, full cross-thread mitigations.
|
||
|
============ =============================================================
|
||
|
|
||
|
Attack vector options:
|
||
|
|
||
|
================= =======================================
|
||
|
Option Description
|
||
|
================= =======================================
|
||
|
'no_user_kernel' Disables user-to-kernel mitigations.
|
||
|
'no_user_user' Disables user-to-user mitigations.
|
||
|
'no_guest_host' Disables guest-to-host mitigations.
|
||
|
'no_guest_guest' Disables guest-to-guest mitigations
|
||
|
'no_cross_thread' Disables all cross-thread mitigations.
|
||
|
================= =======================================
|
||
|
|
||
|
Multiple attack vector options may be specified in a comma-separated list. If
|
||
|
the global option is not specified, it defaults to 'auto'. The global option
|
||
|
'off' is equivalent to disabling all attack vectors.
|
||
|
|
||
|
Examples:
|
||
|
| ``mitigations=auto,no_user_kernel``
|
||
|
|
||
|
Enable all attack vectors except user-to-kernel. Partial cross-thread
|
||
|
mitigations.
|
||
|
|
||
|
| ``mitigations=auto,nosmt,no_guest_host,no_guest_guest``
|
||
|
|
||
|
Enable all attack vectors and cross-thread mitigations except for
|
||
|
guest-to-host and guest-to-guest mitigations.
|
||
|
|
||
|
| ``mitigations=,no_cross_thread``
|
||
|
|
||
|
Enable all attack vectors but not cross-thread mitigations.
|
||
|
|
||
|
Interactions with command-line options
|
||
|
--------------------------------------
|
||
|
|
||
|
Vulnerability-specific controls (e.g. "retbleed=off") take precedence over all
|
||
|
attack vector controls. Mitigations for individual vulnerabilities may be
|
||
|
turned on or off via their command-line options regardless of the attack vector
|
||
|
controls.
|
||
|
|
||
|
Summary of attack-vector mitigations
|
||
|
------------------------------------
|
||
|
|
||
|
When a vulnerability is mitigated due to an attack-vector control, the default
|
||
|
mitigation option for that particular vulnerability is used. To use a different
|
||
|
mitigation, please use the vulnerability-specific command line option.
|
||
|
|
||
|
The table below summarizes which vulnerabilities are mitigated when different
|
||
|
attack vectors are enabled and assuming the CPU is vulnerable.
|
||
|
|
||
|
=============== ============== ============ ============= ============== ============ ========
|
||
|
Vulnerability User-to-Kernel User-to-User Guest-to-Host Guest-to-Guest Cross-Thread Notes
|
||
|
=============== ============== ============ ============= ============== ============ ========
|
||
|
BHI X X
|
||
|
ITS X X
|
||
|
GDS X X X X * (Note 1)
|
||
|
L1TF X X * (Note 2)
|
||
|
MDS X X X X * (Note 2)
|
||
|
MMIO X X X X * (Note 2)
|
||
|
Meltdown X
|
||
|
Retbleed X X * (Note 3)
|
||
|
RFDS X X X X
|
||
|
Spectre_v1 X
|
||
|
Spectre_v2 X X
|
||
|
Spectre_v2_user X X * (Note 1)
|
||
|
SRBDS X X X X
|
||
|
SRSO X X
|
||
|
SSB (Note 4)
|
||
|
TAA X X X X * (Note 2)
|
||
|
TSA X X X X
|
||
|
=============== ============== ============ ============= ============== ============ ========
|
||
|
|
||
|
Notes:
|
||
|
1 -- Can be mitigated without disabling SMT.
|
||
|
|
||
|
2 -- Disables SMT if cross-thread mitigations are fully enabled and the CPU
|
||
|
is vulnerable
|
||
|
|
||
|
3 -- Disables SMT if cross-thread mitigations are fully enabled, the CPU is
|
||
|
vulnerable, and STIBP is not supported
|
||
|
|
||
|
4 -- Speculative store bypass is always enabled by default (no kernel
|
||
|
mitigation applied) unless overridden with spec_store_bypass_disable option
|
||
|
|
||
|
When an attack-vector is disabled, all mitigations for the vulnerabilities
|
||
|
listed in the above table are disabled, unless mitigation is required for a
|
||
|
different enabled attack-vector or a mitigation is explicitly selected via a
|
||
|
vulnerability-specific command line option.
|