123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- MDS - Microarchitectural Data Sampling
- ======================================
- Microarchitectural Data Sampling is a hardware vulnerability which allows
- unprivileged speculative access to data which is available in various CPU
- internal buffers.
- Affected processors
- -------------------
- This vulnerability affects a wide range of Intel processors. The
- vulnerability is not present on:
- - Processors from AMD, Centaur and other non Intel vendors
- - Older processor models, where the CPU family is < 6
- - Some Atoms (Bonnell, Saltwell, Goldmont, GoldmontPlus)
- - Intel processors which have the ARCH_CAP_MDS_NO bit set in the
- IA32_ARCH_CAPABILITIES MSR.
- Whether a processor is affected or not can be read out from the MDS
- vulnerability file in sysfs. See :ref:`mds_sys_info`.
- Not all processors are affected by all variants of MDS, but the mitigation
- is identical for all of them so the kernel treats them as a single
- vulnerability.
- Related CVEs
- ------------
- The following CVE entries are related to the MDS vulnerability:
- ============== ===== ===================================================
- CVE-2018-12126 MSBDS Microarchitectural Store Buffer Data Sampling
- CVE-2018-12130 MFBDS Microarchitectural Fill Buffer Data Sampling
- CVE-2018-12127 MLPDS Microarchitectural Load Port Data Sampling
- CVE-2019-11091 MDSUM Microarchitectural Data Sampling Uncacheable Memory
- ============== ===== ===================================================
- Problem
- -------
- When performing store, load, L1 refill operations, processors write data
- into temporary microarchitectural structures (buffers). The data in the
- buffer can be forwarded to load operations as an optimization.
- Under certain conditions, usually a fault/assist caused by a load
- operation, data unrelated to the load memory address can be speculatively
- forwarded from the buffers. Because the load operation causes a fault or
- assist and its result will be discarded, the forwarded data will not cause
- incorrect program execution or state changes. But a malicious operation
- may be able to forward this speculative data to a disclosure gadget which
- allows in turn to infer the value via a cache side channel attack.
- Because the buffers are potentially shared between Hyper-Threads cross
- Hyper-Thread attacks are possible.
- Deeper technical information is available in the MDS specific x86
- architecture section: :ref:`Documentation/x86/mds.rst <mds>`.
- Attack scenarios
- ----------------
- Attacks against the MDS vulnerabilities can be mounted from malicious non
- priviledged user space applications running on hosts or guest. Malicious
- guest OSes can obviously mount attacks as well.
- Contrary to other speculation based vulnerabilities the MDS vulnerability
- does not allow the attacker to control the memory target address. As a
- consequence the attacks are purely sampling based, but as demonstrated with
- the TLBleed attack samples can be postprocessed successfully.
- Web-Browsers
- ^^^^^^^^^^^^
- It's unclear whether attacks through Web-Browsers are possible at
- all. The exploitation through Java-Script is considered very unlikely,
- but other widely used web technologies like Webassembly could possibly be
- abused.
- .. _mds_sys_info:
- MDS system information
- -----------------------
- The Linux kernel provides a sysfs interface to enumerate the current MDS
- status of the system: whether the system is vulnerable, and which
- mitigations are active. The relevant sysfs file is:
- /sys/devices/system/cpu/vulnerabilities/mds
- The possible values in this file are:
- .. list-table::
- * - 'Not affected'
- - The processor is not vulnerable
- * - 'Vulnerable'
- - The processor is vulnerable, but no mitigation enabled
- * - 'Vulnerable: Clear CPU buffers attempted, no microcode'
- - The processor is vulnerable but microcode is not updated.
- The mitigation is enabled on a best effort basis. See :ref:`vmwerv`
- * - 'Mitigation: Clear CPU buffers'
- - The processor is vulnerable and the CPU buffer clearing mitigation is
- enabled.
- If the processor is vulnerable then the following information is appended
- to the above information:
- ======================== ============================================
- 'SMT vulnerable' SMT is enabled
- 'SMT mitigated' SMT is enabled and mitigated
- 'SMT disabled' SMT is disabled
- 'SMT Host state unknown' Kernel runs in a VM, Host SMT state unknown
- ======================== ============================================
- .. _vmwerv:
- Best effort mitigation mode
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- If the processor is vulnerable, but the availability of the microcode based
- mitigation mechanism is not advertised via CPUID the kernel selects a best
- effort mitigation mode. This mode invokes the mitigation instructions
- without a guarantee that they clear the CPU buffers.
- This is done to address virtualization scenarios where the host has the
- microcode update applied, but the hypervisor is not yet updated to expose
- the CPUID to the guest. If the host has updated microcode the protection
- takes effect otherwise a few cpu cycles are wasted pointlessly.
- The state in the mds sysfs file reflects this situation accordingly.
- Mitigation mechanism
- -------------------------
- The kernel detects the affected CPUs and the presence of the microcode
- which is required.
- If a CPU is affected and the microcode is available, then the kernel
- enables the mitigation by default. The mitigation can be controlled at boot
- time via a kernel command line option. See
- :ref:`mds_mitigation_control_command_line`.
- .. _cpu_buffer_clear:
- CPU buffer clearing
- ^^^^^^^^^^^^^^^^^^^
- The mitigation for MDS clears the affected CPU buffers on return to user
- space and when entering a guest.
- If SMT is enabled it also clears the buffers on idle entry when the CPU
- is only affected by MSBDS and not any other MDS variant, because the
- other variants cannot be protected against cross Hyper-Thread attacks.
- For CPUs which are only affected by MSBDS the user space, guest and idle
- transition mitigations are sufficient and SMT is not affected.
- .. _virt_mechanism:
- Virtualization mitigation
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- The protection for host to guest transition depends on the L1TF
- vulnerability of the CPU:
- - CPU is affected by L1TF:
- If the L1D flush mitigation is enabled and up to date microcode is
- available, the L1D flush mitigation is automatically protecting the
- guest transition.
- If the L1D flush mitigation is disabled then the MDS mitigation is
- invoked explicit when the host MDS mitigation is enabled.
- For details on L1TF and virtualization see:
- :ref:`Documentation/admin-guide/hw-vuln//l1tf.rst <mitigation_control_kvm>`.
- - CPU is not affected by L1TF:
- CPU buffers are flushed before entering the guest when the host MDS
- mitigation is enabled.
- The resulting MDS protection matrix for the host to guest transition:
- ============ ===== ============= ============ =================
- L1TF MDS VMX-L1FLUSH Host MDS MDS-State
- Don't care No Don't care N/A Not affected
- Yes Yes Disabled Off Vulnerable
- Yes Yes Disabled Full Mitigated
- Yes Yes Enabled Don't care Mitigated
- No Yes N/A Off Vulnerable
- No Yes N/A Full Mitigated
- ============ ===== ============= ============ =================
- This only covers the host to guest transition, i.e. prevents leakage from
- host to guest, but does not protect the guest internally. Guests need to
- have their own protections.
- .. _xeon_phi:
- XEON PHI specific considerations
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- The XEON PHI processor family is affected by MSBDS which can be exploited
- cross Hyper-Threads when entering idle states. Some XEON PHI variants allow
- to use MWAIT in user space (Ring 3) which opens an potential attack vector
- for malicious user space. The exposure can be disabled on the kernel
- command line with the 'ring3mwait=disable' command line option.
- XEON PHI is not affected by the other MDS variants and MSBDS is mitigated
- before the CPU enters a idle state. As XEON PHI is not affected by L1TF
- either disabling SMT is not required for full protection.
- .. _mds_smt_control:
- SMT control
- ^^^^^^^^^^^
- All MDS variants except MSBDS can be attacked cross Hyper-Threads. That
- means on CPUs which are affected by MFBDS or MLPDS it is necessary to
- disable SMT for full protection. These are most of the affected CPUs; the
- exception is XEON PHI, see :ref:`xeon_phi`.
- Disabling SMT can have a significant performance impact, but the impact
- depends on the type of workloads.
- See the relevant chapter in the L1TF mitigation documentation for details:
- :ref:`Documentation/admin-guide/hw-vuln/l1tf.rst <smt_control>`.
- .. _mds_mitigation_control_command_line:
- Mitigation control on the kernel command line
- ---------------------------------------------
- The kernel command line allows to control the MDS mitigations at boot
- time with the option "mds=". The valid arguments for this option are:
- ============ =============================================================
- full If the CPU is vulnerable, enable all available mitigations
- for the MDS vulnerability, CPU buffer clearing on exit to
- userspace and when entering a VM. Idle transitions are
- protected as well if SMT is enabled.
- It does not automatically disable SMT.
- full,nosmt The same as mds=full, with SMT disabled on vulnerable
- CPUs. This is the complete mitigation.
- off Disables MDS mitigations completely.
- ============ =============================================================
- Not specifying this option is equivalent to "mds=full". For processors
- that are affected by both TAA (TSX Asynchronous Abort) and MDS,
- specifying just "mds=off" without an accompanying "tsx_async_abort=off"
- will have no effect as the same mitigation is used for both
- vulnerabilities.
- Mitigation selection guide
- --------------------------
- 1. Trusted userspace
- ^^^^^^^^^^^^^^^^^^^^
- If all userspace applications are from a trusted source and do not
- execute untrusted code which is supplied externally, then the mitigation
- can be disabled.
- 2. Virtualization with trusted guests
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- The same considerations as above versus trusted user space apply.
- 3. Virtualization with untrusted guests
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- The protection depends on the state of the L1TF mitigations.
- See :ref:`virt_mechanism`.
- If the MDS mitigation is enabled and SMT is disabled, guest to host and
- guest to guest attacks are prevented.
- .. _mds_default_mitigations:
- Default mitigations
- -------------------
- The kernel default mitigations for vulnerable processors are:
- - Enable CPU buffer clearing
- The kernel does not by default enforce the disabling of SMT, which leaves
- SMT systems vulnerable when running untrusted code. The same rationale as
- for L1TF applies.
- See :ref:`Documentation/admin-guide/hw-vuln//l1tf.rst <default_mitigations>`.
|