MDS - Microarchitectural Data Sampling - CVE-2018-12130, CVE-2018-12126, CVE-2018-12127, and CVE-2019-11091

Public Date: May 13, 2019, 10:20
已更新 May 22, 2019, 14:57 - English(英语) French Japanese Korean
Resolved 状态
Important Impact

Insights vulnerability analysis

View exposed systems

简介

当前发现了 4 个新的微处理器漏洞,红帽产品安全团队已把这些漏洞的最大安全影响级别定为 “Important(重要)”。 一个有本地 shell 访问权限的攻击者可以利用这些安全漏洞,使没有相关权限的进程访问 CPU 缓存中的数据。虽然利用这些漏洞对系统进行安全攻击的实施难度比较大,但是一个有经验的攻击者可以利用这些漏洞,读取一个虚拟或容器化实例的内存,或其底层主机系统的内存数据。红帽已为受影响的系统准备了相应的缓解方案,以及用户如何评估及应对这些安全漏洞的详细步骤。

问题详情及背景信息

红帽已了解到一组微架构(硬件)实现的问题,利用这些问题,一个未经授权的本地攻击者可以绕过传统的内存安全限制机制,访问需要特殊权限才可以访问的内存数据。另外,在容器中运行的恶意代码也可以利用这些问题。这些问题会影响到许多现代的 Intel 微处理器,用户需要对 Linux 内核、虚拟化组件以及 CPU 的 microcode 进行更新。这些问题已被分别记录为 CVE-2018-12130(影响的严重性为 Important(重要))、 CVE-2018-12126CVE-2018-12127 和 CVE-2019-11091 (影响的严重性为 Moderate(中度))。

在当前阶段,只发现这些安全漏洞对基于 Intel 的处理器有影响。红帽的产品安全团队正在继续研究 SMT(Simultaneous Multi Threading)相关的安全漏洞对其他厂商产品的影响。

这些安全漏洞与 Intel 微处理器性能优化的设计实现相关。通过利用这些漏洞,攻击者可以使用侧信道攻击的方法访问属于其他进程、容器、虚拟机或内核的数据。

因此这些安全漏洞需要利用微处理器中的预测执行功能以获取内部 CPU 结构中遗留的数据,所以这类安全漏洞被称为 MDS (Microarchitectural Data Sampling,微架构数据采样)。

CVE-2018-12126 - Microarchitectural Store Buffer Data Sampling ( MSBDS )

在 Intel 微处理器设计中发现了一个安全漏洞,可以造成保存当前写入到内存中的数据的处理器存储缓冲区中的信息被泄露。

现代 Intel 微处理器实现了硬件层的微优化来提高数据写回到 CPU 缓存操作的性能。这个写操作被分为 STA (STore Address) 和 STD (STore Data) 两个子操作。这些子操作允许处理器把地址产生逻辑交给子操作以优化写操作的性能。这两个子操作都会把数据写入到对一个名为 'processor store buffer(处理器存储缓冲)'的、共享的分布式处理器结构中。

从概念上讲,处理器存储缓冲就是一个包括了地址、值以及 'is valid' 项的表。每个子操作可以独立于另外的子操作执行,所以它们都可以独立地更新表中的地址、值项中的数据。这就意味着,在不同的时间点上,表中的地址或值可能是无效的。


处理器可能会根据预测转发存储缓冲中的项。上面提到的设计允许转发操作预测使用未经验证的数据,如错误的地址、从以前没有相关的存储返回的数据。因为这只会发生在加载时,而加载过程会在出现 fault/assist 状态时重新执行,所以从架构的角度看,程序并不会受到影响。但是,一个经过精心设计的恶意代码可以使用侧信道分析的方法,利用这个问题获取存储缓冲中的数据。

处理器存储缓冲项被活跃的超线程数量平分。一些条件(如电源状态的改变)可能会把一些还没有完全被更新的处理器存储缓冲项重新分配给其他线程,而并不能保证这些项的数据已被清除。

这个问题被研究人员称为 Fallout


CVE-2018-12127 - Microarchitectural Load Port Data Sampling ( MLPDS )

微处理器使用 ‘load ports’ 指令从内存或 IO 中执行加载操作。在加载操作进行中,load port 会从内存或 IO 子系统中接收数据,然后把这些数据提供给 CPU 寄存器以及 CPU 处理队列中的操作。

在一些实现中,每个 load port 中的回写数据总线中可能会包括以前加载操作中的数据值,直到新的加载操作把它们进行了覆盖。

在以下情况下,MLPDS 可能会暴露已过期的 load port 数据:

  •  一个 faulting/assisting SSE/AVX/AVX-512 加载的大小超过 64 位
  •  一个 faulting/assisting 加载超过了 64 字节的边界。

当以上情况发生时,加载操作会根据预测把内部数据结构中可能已过时的数据提供给不相关的操作。根据预测提供数据并不会导致改变程序的执行过程,但这可以被攻击者利用来通过访问 load port 获取其他进程的数据。


CVE-2018-12130 - Microarchitectural Fill Buffer Data Sampling ( MFBDS )

这个问题具有更高风险,红帽已把它的影响级别定为 Important (重要)。研究人员发现在 Intel 微处理器所使用的填充缓冲的实现中存在这个安全漏洞。

当尝试使用的数据还没有在处理器的 L1 数据缓存中存在时,一个填充缓冲操作会保存这个数据。当这种情况在 Intel 处理器中发生时,填充缓冲被设计为在从更高级别的缓存中加载访问数据的同时,允许处理器继续处理其他操作。它还允许把数据直接转发给执行单元(Execution Unit), 而不用把数据写入到 L1 数据缓存。

加载操作的分离操作与存储操作的分离操作不同,但它需要一个 AGU(Address Generation Unit)操作。如果 AGU 产生了一个 fault (#PF, etc.) 或 assist (A/D bits),传统的 Intel 设计会阻塞加载操作的执行并在以后重新执行一个加载操作。而在新的设计中,它会允许后续的预测操作在数据加载操作实际发生前,临时访问从填充缓冲中转发的数据。因此,如果填充缓冲中的数据还没有被覆盖,就有可能读取这些数据。

这个问题被研究人员称为 RIDLZombieLoad

CVE-2019-11091 - Microarchitectural Data Sampling Uncacheable Memory (MDSUM)

在 "fill buffer(填充缓冲)"(现代 CPU 在发生数据没有存在于 L1 缓存时使用这个机制)的实现中发现了一个漏洞。当一个攻击者生成一个会产生页错误的加载操作时,在从更高级别的缓存中获取数据的同时,处理器会使用来自填充缓冲中不正确的数据继续预测执行操作。通过利用这个响应时间,就有可能获取填充缓冲中的数据。

致谢

红帽非常感谢 Intel 以及其他业界的合作伙伴报告了这个问题,并合作解决这个问题。
 
另外,红帽还特别感谢这些问题的原始报告人员:
Microarchitectural Store Buffer Data Sampling (MSBDS) - CVE-2018-12126
这个安全漏洞由 Intel 雇员在内部发现。Intel 借此感谢 Ke Sun、Henrique Kawakami、Kekai Hu 和 Rodrigo Branco。另外,这个问题还被以下人员独立报告: Lei Shi - Qihoo - 360 CERT,Marina Minkin、Daniel Moghimi、Moritz Lipp、Michael Schwarz、Jo Van Bulck、Daniel Genkin、Daniel Gruss、Berk Sunar、Frank Piessens Yuval Yarom (1University of Michigan, Worcester Polytechnic Institute, Graz University of Technology, imec-DistriNet, KU Leuven, University of Adelaide)。
 
Microarchitectural Load Port Data Sampling (MLPDS) - CVE-2018-12127
这个安全漏洞由 Intel 雇员和 Microsoft 在内部发现。Intel 借此感谢 Brandon Falk – Microsoft Windows Platform Security Team、Ke Sun、Henrique Kawakami、Kekai Hu 和 Rodrigo Branco - Intel。这个问题还被以下人员独立报告: Matt Miller – Microsoft、Stephan van Schaik、Alyssa Milburn、Sebastian Österlund、Pietro Frigo、Kaveh Razavi、Herbert Bos 和 Cristiano Giuffrida - VUSec group at VU Amsterdam.
 
Microarchitectural Fill Buffer Data Sampling (MFBDS) - CVE-2018-12130

这个安全漏洞由 Intel 雇员在内部发现。Intel 借此感谢 Ke Sun、Henrique Kawakami、Kekai Hu 和 Rodrigo Branco。另外,这个问题还被以下人员独立报告: Giorgi Maisuradze – Microsoft Research、Dan Horea Lutas、Andrei Lutas - Bitdefender、Volodymyr Pikhur、Stephan van Schaik、Alyssa Milburn、Sebastian Österlund、Pietro Frigo、Kaveh Razavi、Herbert Bos、Cristiano Giuffrida - VUSec group at VU Amsterdam、Moritz Lipp、Michael Schwarz、Daniel Gruss - Graz University of Technology.

Microarchitectural Data Sampling Uncacheable Memory (MDSUM) - CVE-2019-11091

这个安全漏洞由 Intel 雇员于内部发现。Intel 借此感谢 Ke Sun、Henrique Kawakami、Kekai Hu 和 Rodrigo Branco。另外,这个问题还由以下人员独立报告:Volodrmyr Pikhur、Moritz Lipp、Michael Schwarz、Daniel Gruss - Graz University of Technology、Stephan van Schaik、Alyssa Milburn、Sebastian Österlund、Pietro Frigo、Kaveh Razavi、Herbert Bos、Cristiano Giuffrida - VUSec group at VU Amsterdam。

额外参考信息

如需此类问题更详细的信息,请参阅 Intel 的网站

KCS: Simultaneous Multithreading in Red Hat Enterprise Linux

KCS: Disabling Hyper-Threading

KCS: CPU Side Channel Attack Index Page

KCS: Microcode availability for Pre-Haswell CPUs

KCS: Availability of Updated Intel CPU Microcode Addressing Microarchitectural Data Sampling (MDS) Vulnerability 

KCS:   Applying MDS CVE's patches on RHV hosts and manager node 

视频:All about MDS in about 3 minutes

视频:Longform MDS Technical Explanation

博客:Deeper Look at the MDS Vulnerability

博客:Modern IT security: Sometimes caring is NOT sharing 


受影响的产品

红帽产品安全团队已把这个更新的安全影响级别定为 Important(重要)

以下版本的红帽产品会受到影响:

  • Red Hat Enterprise Linux 5

  • Red Hat Enterprise Linux 6

  • Red Hat Enterprise Linux 7

  • Red Hat Enterprise Linux 8

  • Red Hat Atomic Host

  • Red Hat Enterprise MRG 2

  • Red Hat OpenShift Online v3

  • Red Hat Virtualization (RHV/RHV-H)

  • Red Hat OpenStack Platform 


    虽然红帽的 Linux Container 本身不会直接受到第三方硬件漏洞的影响,但它们的安全性需要依赖于主机内核环境的安全。红帽推荐使用最新版本的容器镜像。Container Health IndexRed Hat Container Catalog 中的一部分)可以用来检查红帽容器的安全状态。为了保护所有容器的隐私,需要确保所使用的容器主机(例如,Red Hat Enterprise Linux 或 Atomic Host)已进行了可以解决这个安全问题的更新。红帽已发布了一个可以解决这个问题的 Atomic Host 更新版本。


    攻击手段分析列表
    攻击手段是否存在风险风险是什么?缓解方案
    本地用户进程对主机系统进行攻击可以读取应该受到保护的数据kernel MDS 补丁 + microcode + 禁用 HT
    本地用户进程对其他用户进程进行攻击可以读取应该受到保护的数据kernel MDS 补丁 + microcode + 禁用 HT
    主机上的客户机对其他客户机进行攻击可以读取应该受到保护的数据kernel MDS 补丁 + microcode + 禁用 HT
    客户机对主机进行攻击可以读取应该受到保护的数据kernel MDS 补丁 + microcode + 禁用 HT
    主机上的用户对客户机进行攻击可以读取应该受到保护的数据kernel MDS 补丁 + microcode + 禁用 HT
    容器对主机进行攻击可以读取应该受到保护的数据kernel MDS 补丁 + microcode + 禁用 HT
    容器对其他容器进行攻击可以读取应该受到保护的数据kernel MDS 补丁 + microcode + 禁用 HT

    在一个主机已禁用了 HT 的多租户系统中,不同的客户机应该无法访问同一内核上的其他线程,并应该不存在这个安全漏洞。主机的性能以及资源的整体可用性将会受到影响。

    在一个主机启用了 HT 的多租户系统中,hypervisor 存在这个安全漏洞。无论客户机系统是否禁用 HT,客户机都将存在这个安全漏洞。

    在一个主机启用了 HT 的多租户系统中,hypervisor 不存在这个安全漏洞。应该可以考虑在客户机系统中禁用 HT 以避免受这个安全漏洞的影响。


    诊断您的环境是否存在漏洞

    使用检测脚本检查您的系统当前是否存在安全漏洞。您可以下载附带的 GPG 签名来验证脚本的真实性。

    检查您的系统是否存在安全漏洞

    当前版本:1.0

    运行 Red Hat Virtualization 产品的订阅用户,可以参照 Knowledgebase 文档来验证 OEM 提供的 microcode/firmware。

    在应用了相关更新后,用户可以运行命令之一来确认相应的补丁程序已生效:

    # dmesg | grep "MDS:"
    [    0.162571] MDS: Vulnerable: Clear CPU buffers attempted, no microcode
    [  181.862076] MDS: Mitigation: Clear CPU buffers

    # cat /sys/devices/system/cpu/vulnerabilities/mds
    Mitigation: Clear CPU buffers; SMT vulnerable

    采取行动

    我们强烈建议,使用受影响版本的红帽产品的用户在相关勘误可用时马上进行更新。用户需要在相应更新可用时尽快对系统进行更新,并根据自己的情况在适当的时候进行相应的缓解方案。
     
    应用补丁的顺序并不重要,但在更新了 firmware 和 hypervisor 后,相应系统/虚拟机都需要关机并重新启动以识别新的硬件类型。

    对受影响的产品进行更新

    产品软件包公告/更新
    Red Hat Enterprise Linux 8 (z-stream)kernelRHSA-2019:1167
    Red Hat Enterprise Linux 8kernel-rtRHSA-2019:1174
    Red Hat Enterprise Linux 8virt:rhelRHSA-2019:1175
    Red Hat Enterprise Linux 8microcode_ctlRHEA-2019:1211
    Red Hat Enterprise Linux 7 (z-stream)kernelRHSA-2019:1168
    Red Hat Enterprise Linux 7kernel-rtRHSA-2019:1176
    Red Hat Enterprise Linux 7qemu-kvmRHSA-2019:1178
    Red Hat Enterprise Linux 7qemu-kvm-rhevRHSA-2019:1179
    Red Hat Enterprise Linux 7libvirtRHSA-2019:1177
    Red Hat Enterprise Linux 7microcode_ctlRHEA-2019:1210
    Red Hat Enterprise Linux 7.5 Extended Update Support [1]kernelRHSA-2019:1155
    Red Hat Enterprise Linux 7.5 Extended Update Support [1]qemu-kvmRHSA-2019:1183
    Red Hat Enterprise Linux 7.5 Extended Update Support [1]libvirtRHSA-2019:1182
    Red Hat Enterprise Linux 7.5 Extended Update Support [1]microcode_ctlRHEA-2019:1213
    Red Hat Enterprise Linux 7.4 Extended Update Support [1]kernelRHSA-2019:1170
    Red Hat Enterprise Linux 7.4 Extended Update Support [1]qemu-kvmRHSA-2019:1185
    Red Hat Enterprise Linux 7.4 Extended Update Support [1]libvirtRHSA-2019:1184
    Red Hat Enterprise Linux 7.4 Extended Update Support [1]microcode_ctlRHEA-2019:1214
    Red Hat Enterprise Linux 7.3 Update Services for SAP Solutions, & Advanced Update Support [2][3]kernelRHSA-2019:1171
    Red Hat Enterprise Linux 7.3 Update Services for SAP Solutions, & Advanced Update Support [2][3]qemu-kvmRHSA-2019:1189
    Red Hat Enterprise Linux 7.3 Update Services for SAP Solutions, & Advanced Update Support [2][3]libvirtRHSA-2019:1187
    Red Hat Enterprise Linux 7.3 Update Services for SAP Solutions, & Advanced Update Support [2][3]microcode_ctlRHEA-2019:1215
    Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support [2][3]kernelRHSA-2019:1172
    Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support [2][3]qemu-kvmRHSA-2019:1188
    Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support [2][3]libvirtRHSA-2019:1186
    Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support [2][3]microcode_ctlRHEA-2019:1216
    Red Hat Enterprise Linux 6 (z-stream)kernelRHSA-2019:1169
    Red Hat Enterprise Linux 6  qemu-kvmRHSA-2019:1181
    Red Hat Enterprise Linux 6  libvirtRHSA-2019:1180
    Red Hat Enterprise Linux 6microcode_ctlRHEA-2019:1212
    Red Hat Enterprise Linux 6.6 Advanced Update Support [2]kernelRHSA-2019:1193
    Red Hat Enterprise Linux 6.6 Advanced Update Support [2]qemu-kvmRHSA-2019:1195
    Red Hat Enterprise Linux 6.6 Advanced Update Support [2]libvirtRHSA-2019:1194
    Red Hat Enterprise Linux 6.6 Advanced Update Support [2]microcode_ctlRHEA-2019:1218
    Red Hat Enterprise Linux 6.5 Advanced Update Support [2]kernelRHSA-2019:1196
    Red Hat Enterprise Linux 6.5 Advanced Update Support [2]qemu-kvmRHSA-2019:1198
    Red Hat Enterprise Linux 6.5 Advanced Update Support [2]libvirtRHSA-2019:1197
    Red Hat Enterprise Linux 6.5 Advanced Update Support [2]microcode_ctlRHEA-2019:1219
    Red Hat Enterprise Linux 5 Extended Lifecycle Support [5]kernel参阅以下内容
    RHEL Atomic Host [4]kernelrespin 待定
    Red Hat Enterprise MRG 2kernel-rtRHSA-2019:1190
    Red Hat Virtualization 4vdsmRHSA-2019:1203
    Red Hat Virtualization 4.2vdsmRHSA-2019:1204
    Red Hat Virtualization 4.3rhvm-setup-pluginsRHSA-2019:1205
    Red Hat Virtualization 4.2rhvm-setup-pluginsRHSA-2019:1206
    Red Hat Virtualization 4virtualization hostRHSA-2019:1207
    Red Hat Virtualization 4rhvm-applianceRHSA-2019:1208
    Red Hat Virtualization 4.2virtualization hostRHSA-2019:1209
    Red Hat OpenStack Platform 14 (Rocky)qemu-kvm-rhevRHSA-2019:1202
    Red Hat OpenStack Platform 14 (Rocky)容器镜像RHBA-2019:1242
    Red Hat OpenStack Platform 13 (Queens)qemu-kvm-rhevRHSA-2019:1201
    Red Hat OpenStack Platform 13 (Queens)容器镜像RHBA-2019:1241
    Red Hat OpenStack Platform 10 (Newton)qemu-kvm-rhevRHSA-2019:1200
    Red Hat OpenStack Platform 9 (Mitaka)qemu-kvm-rhevRHSA-2019:1199


    [1] 需要一个有效的 EUS 订阅才可以获得这个补丁。如果您还没有有效的 EUS 订阅,请联系红帽的销售人员或您的销售代表。

    什么是 Red Hat Enterprise Linux Extended Update Support 订阅?

    [2] 需要一个有效的 AUS 订阅才可以获得 RHEL AUS 的补丁。

    什么是 Advanced mission critical Update Support (AUS)?

    [3] 需要一个有效的 Update Services for SAP Solutions Add-on 或 TUS 订阅才可以获得 RHEL E4S / TUS 的这个补丁。

    [4] 如需了解如何更新 Red Hat Enterprise Atomic Host 主机的信息,请参阅 Deploying a specific version fo Red Hat Enterprise Atomic Host

    FAQ: Red Hat Enterprise Linux 5 Extended Life Cycle Support (ELS) Add-On

    [5] 目前,虽然 Red Hat Enterprise Linux 5 仍然在它的支持生命周期内,只有少量的 CPU 类型将会有相应的用于缓解这类问题的 microcode,基于这些问题的严重性程度,将不会有用于解决 RHEL5 的更新。如果需要,请联系红帽技术支持来获取帮助。

    请注意:订阅用户可能需要联系硬件 OEM 来获得最新版本的 CPU microcode/firmware。

    缓解方案

    除了应用厂商的软件更新以及硬件 OEM 提供的 CPU microcode/firmware 或使用不存在这类安全漏洞的微处理器外,当前还没有一个已知的完全缓解方案。所有红帽用户需要尽快应用相关厂商的解决方案来对 CPU 进行补丁并更新内核。如需了解相关 microcode 的详细信息,请联系相应的系统 OEM 厂商。

    在受影响的系统上禁用 SMT 可以在一定程度上减少受攻击的可能,但不会完全避免利用此类安全漏洞进行的攻击。为了避免这些安全漏洞,系统需要对 microcode、内核进行更新,并应用虚拟化补丁。系统管理员还需要评估在其环境中禁用 SMT/HT 的可能性。另外,应用程序的性能可能会受到一些影响。请参阅 Disabling Hyper-Threading 以获得禁用 SMT 的详细信息。

    我们建议用户使用基于风险程度的方法对这个问题进行补救。那些需要高安全性、高度信任的系统应该首先进行处理,并应该在可以对它们进行处理前,把它们和不被信任的系统隔离来,以减少这个安全漏洞可能造成的安全风险。

    Ansible playbook

    另外,以下提供了一个 Ansible playbook(disable_mds_smt_mitigate.yml)。这个 playbook 将会在运行的系统上禁用 SMT,并在以后的系统重启时保持禁用 SMT,并应用相关的更新。要使用这个 playbook,通过以下方法使用 HOSTS 变量指定需要禁用 SMT 的主机:

    ansible-playbook -e HOSTS=web,mail,ldap04 disable_mds_smt_mitigate.yml

    另外,为了防止 runtime 重新启用 SMT,按照以下方法在命令行中把 FORCEOFF 变量设置为 true:

    ansible-playbook -e HOSTS=hypervisors -e FORCEOFF=true disable_mds_smt_mitigate.yml

    为了检查 playbook 的真实性,请下载 GPG 签名

    自动化缓解方案

    当前版本:1.1

    性能影响及禁用 MDS

    MDS CVE 的缓解方案已被证明会对性能有一定影响。其对需要大量进行用户内核和用户空间转化的应用程序(例如系统调用,NMI,中断)的性能影响更大。

    虽然无法准确确定对特定应用程序性能的影响程度,以下是我们的测试结果以供参考:

    • 大量时间处于用户模式的应用程序性能受的影响最小,通常在 0-5% 范围内。
    • 处理大量小数据块或数据包网络 I/O 的应用程序受影响的范围在 10-25%。
    • 一些 microbenchmark 程序只进行进入用户空间及从用户空间返回的操作,这类程序性能受影响的程度最大。

    MDS 缓解方案对性能的影响可以通过先在启用 MDS 的条件下运行应用程序,然后再禁用 MDS 以进行比较。MDS 缓解方案被默认启用。通过在内核引导命令行中添加 “mds=full,nosmt”  来完全启用 MDS 缓解方案并禁用 SMT。在内核引导命令行中使用 “mds=off” 来完全禁用 MDS 缓解方案。它无法在 runtime 时被禁用。

    如需了解禁用超线程对系统影响的详细信息,请参阅 https://access.redhat.com/security/vulnerabilities/L1TF-perf 的 “Disabling Hyper-Threading” 一节。

    Comments