Kernel Side-Channel Attack using Speculative Store Bypass - CVE-2018-3639
此信息是否有帮助?
红帽已经了解到,在现代微处理器中存在一个安全漏洞,用户需要对 Linux 内核、虚拟化相关的组件以及 microcode 进行更新。一个没有相关权限的攻击者可以绕过最基本的内存安全保护机制,访问到无法访问的内存。这个安全问题已被记录为 CVE-2018-3639,它也被称为 “Variant 4(变体 4)” 或 “Speculative Store Bypass”。当前已知这个问题会影响到不同架构的 CPU,包括 AMD、ARM、IBM POWER8、POWER9 和 SystemZ 系列,以及 Intel 处理器。当前支持的所有版本的 Red Hat Enterprise Linux、Red Hat OpenShift、Red Hat Virtualization 和 Red Hat OpenStack Platform 都会受到影响。
一个恶意的、没有相关权限的攻击者可用利用这个漏洞读取到需要相关权限才可访问的内存,或沙盒环境(如网络浏览器或 JIT 执行运行时)以外的内存。
为了全面缓解这个安全漏洞带来的影响,系统管理员需要应用相关的硬件 “microcode” 更新,以及用于启用其相关新功能的软件补丁。目前,处理器的 microcode 会由相关的硬件厂商提供。以后,红帽会对接收到的更新进行测试并签发后向用户提供这些更新。
这个问题已于 2018 年 5 月 21 日告知公众。
背景信息
CVE-2018-3639(也称为 “Speculative Store Bypass”)提供了一个新的通道(类似于分支预测错误(Branch Misprediction)),攻击者可通过指令预测执行和基于缓存的 side channel,利用这个通道绕过安全保护来访问需要特定权限才可访问的内存。这个问题与 CVE-2017-5753 (也称为 “Spectre v1”)类似,不同之处在于它会利用 Speculative Store Bypass 内存优化机制,Spectre v1 需要利用分支预测错误。
现代计算机处理器非常复杂。它们的核心任务是执行一系列指令(也称为程序)并把结果保存在内存中。
为了尽量多地执行指令,或为了提高性能,处理器会添加多个执行内核、使用更快的缓存,并使用不同的技术(如 Out-of-Order Execution、Branch Prediction、Speculative Execution、Data Prefetching、Memory Access Reordering、Memory Disambiguation 等)。
在指令执行时,处理器会从主内存中加载(读)数据,或向主内存中保存(写)数据。在指令可加载或保存数据前,它们需要解析相关的内存地址。例如:
mov [rbx + rcx], 0x0 : 把零 (0) 保存到内存位置 [rbx + rcx]
mov rax, [rdx + rsi] : 把内存位置 [rdx + rsi] 的数据加载到 RAX 寄存器中
在这两个示例中,在数据可被访问前,需要把地址 [rbx + rcx] 和 [rdx + rsi] 解析为一个内存位置。
一般的程序都会有多个加载(读)和保存(写)指令,它们可能会同时对同一个内存地址进行操作。为了维护内存状态的一致性,处理器使用 load-store-queue 缓冲来处理加载(读)和保存(写)指令。当加载和保存指令处于缓冲队列中时,加载指令不会在队列中所有保存指令的地址都已解析完前执行。
Speculative Store Bypass:
现代的处理器可使用乱序(out-of-order)和预测的技术执行加载和保存指令(当加载(读)和保存(写)指令都处于 load-store-queue 队列中时)。
MD(Memory Disambiguator)会预测哪些加载指令不依赖于以前的保存指令。这些加载(读)指令会被预测执行来从 L1 数据缓存中加载数据,即使以前的保存指令的地址还不知道,这相当于跳过了保存指令。这个行为通过避免加载延迟实现了整体性能的提高。最终,如果预测错误,加载(读)和保存(写)指令间出现了冲突,包括预测执行的加载指令以及以后的所有指令都会被重新执行。
致谢
红帽借此机会感谢 Microsoft Security Response Center (MSRC) 的 Ken Johnson 以及 Google Project Zero (GPZ) 的 Jann Horn。
额外参考信息
如有问题,可以观看此 Red Hat video about SSBD 视频
红帽博客:Speculative Store Bypass explained
How to patch my RHV environment for Kernel Side-Channel Attack using Speculative Store Bypass CVE-2018-3639?
Is CPU microcode is available via the microcode_ctl package?
Google Project Zero Variant 4 网站
Intel Analysis of Speculative Execution Side Channels
Speculative Execution Side Channel Mitigation
受影响的产品
红帽产品安全团队把 CVE-2018-3639 的安全影响级别定为 Important(重要)。
以下版本的红帽产品会受到影响:
Red Hat Enterprise Linux 5
Red Hat Enterprise Linux 6
Red Hat Enterprise Linux 7
Red Hat Atomic Host
Red Hat Enterprise MRG 2
Red Hat Virtualization (RHEV-H/RHV-H)
Red Hat Enterprise Linux OpenStack Platform 6.0 (Juno)
Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) for RHEL7
Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) director for RHEL7
Red Hat OpenStack Platform 8.0 (Liberty)
Red Hat OpenStack Platform 8.0 (Liberty) director
Red Hat OpenStack Platform 9.0 (Mitaka)
Red Hat OpenStack Platform 9.0 (Mitaka) director
Red Hat OpenStack Platform 10.0 (Newton)
Red Hat OpenStack Platform 11.0 (Ocata)
Red Hat OpenStack Platform 12.0 (Pike)
虽然红帽的 Linux Container 本身不会直接受到内核问题的影响,但它们的安全性需要依赖于主机内核环境的安全。红帽推荐使用最新版本的容器镜像。Container Health Index(Red Hat Container Catalog 的一部分)可以用来检查红帽容器的安全状态。为了保护所有容器的隐私,需要确保所使用的容器主机(例如,Red Hat Enterprise Linux 或 Atomic Host)已进行了可以解决这个安全问题的更新。红帽已发布了一个可以解决这个问题的 Atomic Host 更新版本。
安全攻击描述及影响
这种 Speculative Store Bypass 的情况可能会形成一个侧面攻击通道(side channel),类似于 Spectre variant-1。它可以使加载(读)指令访问一个内存位置中的老的数据,而相应的保存操作还没有真正执行。如果一个攻击者可以控制在这个内存位置中的老的数据,就可能利用这个问题读取需要特定权限才可以访问的系统内存。另外,还可能通过处理运行于沙盒执行环境(如网络浏览器、JVM 或 JIT)来利用这个安全问题进行攻击。
性能影响
预测执行(speculative execution)引擎使用 Speculative Store Bypass 或 MD(Memory Disambiguation)技术来提高它的效率。因为它允许在不需要等待以前的保存(写)指令的情况下执行加载(读)指令,所以减少了加载延迟并提高了性能。
启用 Speculative Store Bypass 缓解方案其实就是禁用 MD(Memory Disambiguation)优化功能。这可能会影响到系统的性能。而性能受影响的程度取决于具体的系统负载。
对于默认设置,红帽采取的基本原则是安全性优先于性能,但同时为用户提供了启用或禁用相关缓解方案的方法,用户可以根据具体情况进行选择以满足自己的需要。红帽正在开发功能以尽量减少使用早期缓解方案对性能的影响。
更多与性能相关的信息会在以后提供。
采取行动
我们强烈建议,使用受影响版本的红帽产品的用户在相关勘误可用时马上进行更新。这些软件更新同时需要 CPU microcode/firmware 的更新才会有效,订阅用户需要联系相关的硬件 OEM 厂商来获取相应处理器的 microcode/firmware。如果只进行内核更新,而没有更新处理器相应的 firmware/microcode,则缓解方案不会起到预期的作用。
应用补丁程序的顺序并不重要,但在更新完 firmware 和 hypervisor 后,每个系统/虚拟机需要关机并重新启动才可以识别新的硬件类型。
对受影响的产品进行更新
产品 | 软件包 | 公告/更新 |
Red Hat Enterprise Linux 7 (z-stream) | kernel | RHSA-2018:1629 |
Red Hat Enterprise Linux 7 | kernel-rt | RHSA-2018:1630 |
Red Hat Enterprise Linux 7 | microcode_ctl | 等待硬件厂商提供相关更新 |
Red Hat Enterprise Linux 7 | libvirt | RHSA-2018:1632 |
Red Hat Enterprise Linux 7 | qemu-kvm | RHSA-2018:1633 |
Red Hat Enterprise Linux 7 | openjdk 1.8.0 | RHSA-2018:1649 |
Red Hat Enterprise Linux 7 | openjdk 1.7.0 | RHSA-2018:1648 |
Red Hat Enterprise Linux 7.4 Extended Update Support** | kernel | 等待处理 |
Red Hat Enterprise Linux 7.4 Extended Update Support** | microcode_ctl | 等待硬件厂商提供相关更新 |
Red Hat Enterprise Linux 7.4 Extended Update Support** | libvirt | RHSA-2018:1652 |
Red Hat Enterprise Linux 7.4 Extended Update Support** | qemu-kvm | RHSA-2018:1663 |
Red Hat Enterprise Linux 7.3 Extended Update Support** | kernel | 等待处理 |
Red Hat Enterprise Linux 7.3 Extended Update Support** | microcode_ctl | 等待硬件厂商提供相关更新 |
Red Hat Enterprise Linux 7.3 Extended Update Support** | libvirt | RHSA-2018:1653 |
Red Hat Enterprise Linux 7.3 Extended Update Support** | qemu-kvm | RHSA-2018:1662 |
Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support***,**** | kernel | 等待处理 |
Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support***,**** | microcode_ctl | 等待硬件厂商提供相关更新 |
Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support***,**** | libvirt | RHSA-2018:1668 |
Red Hat Enterprise Linux 7.2 Update Services for SAP Solutions, & Advanced Update Support***,**** | qemu-kvm | RHSA-2018:1661 |
Red Hat Enterprise Linux 6 (z-stream) | kernel | RHSA-2018:1651 |
Red Hat Enterprise Linux 6 | microcode_ctl | 等待硬件厂商提供相关更新 |
Red Hat Enterprise Linux 6 | libvirt | RHSA-2018:1669 |
Red Hat Enterprise Linux 6 | qemu-kvm | RHSA-2018:1660 |
Red Hat Enterprise Linux 6 | openjdk 1.8.0 | RHSA-2018:1650 |
Red Hat Enterprise Linux 6 | openjdk 1.7.0 | RHSA-2018:1647 |
Red Hat Enterprise Linux 6.7 Extended Update Support** | kernel | 等待处理 |
Red Hat Enterprise Linux 6.7 Extended Update Support** | microcode_ctl | 等待硬件厂商提供相关更新 |
Red Hat Enterprise Linux 6.7 Extended Update Support** | libvirt | RHSA-2018:1667 |
Red Hat Enterprise Linux 6.7 Extended Update Support** | qemu-kvm | RHSA-2018:1659 |
Red Hat Enterprise Linux 6.6 Advanced Update Support***,**** | kernel | 等待处理 |
Red Hat Enterprise Linux 6.6 Advanced Update Support***,**** | microcode_ctl | 等待硬件厂商提供相关更新 |
Red Hat Enterprise Linux 6.6 Advanced Update Support***,**** | libvirt | RHSA-2018:1666 |
Red Hat Enterprise Linux 6.6 Advanced Update Support***,**** | qemu-kvm | RHSA-2018:1658 |
Red Hat Enterprise Linux 6.5 Advanced Update Support*** | kernel | 等待处理 |
Red Hat Enterprise Linux 6.5 Advanced Update Support*** | microcode_ctl | 等待硬件厂商提供相关更新 |
Red Hat Enterprise Linux 6.5 Advanced Update Support*** | libvirt | RHSA-2018:1665 |
Red Hat Enterprise Linux 6.5 Advanced Update Support*** | qemu-kvm | RHSA-2018:1657 |
Red Hat Enterprise Linux 6.4 Advanced Update Support*** | kernel | 等待处理 |
Red Hat Enterprise Linux 6.4 Advanced Update Support*** | microcode_ctl | 等待硬件厂商提供相关更新 |
Red Hat Enterprise Linux 6.4 Advanced Update Support*** | libvirt | RHSA-2018:1664 |
Red Hat Enterprise Linux 6.4 Advanced Update Support*** | qemu-kvm | RHSA-2018:1656 |
Red Hat Enterprise Linux 5 Extended Lifecycle Support* | kernel | 等待处理 |
Red Hat Enterprise Linux 5 Extended Lifecycle Support* | microcode_ctl | 等待硬件厂商提供相关更新 |
Red Hat Enterprise Linux 5.9 Advanced Update Support*** | kernel | 等待处理 |
Red Hat Enterprise Linux 5.9 Advanced Update Support*** | microcode_ctl | 等待硬件厂商提供相关更新 |
RHEL Atomic Host | kernel | 等待处理 |
Red Hat Enterprise MRG 2 | kernel-rt | 等待处理 |
Red Hat Virtualization 4 (RHEV-H/RHV-H) | redhat-virtualization-host | 等待处理 |
Red Hat Virtualization 4 (RHEV-H/RHV-H) | rhvm-appliance | 等待处理 |
Red Hat Virtualization 4 (RHEV-H/RHV-H) | qemu-kvm-rhev | RHSA-2018:1655 |
Red Hat Virtualization 4 (RHEV-H/RHV-H) | vdsm | 等待处理 |
Red Hat Virtualization 4 (RHEV-H/RHV-H) | ovirt-guest-agent-docker | 等待处理 |
Red Hat Virtualization 4 (RHEV-H/RHV-H) | rhevm-setup-plugins | 等待处理 |
Red Hat Virtualization 3 (RHEV-H/RHV-H) | redhat-virtualization-host | 等待处理 |
Red Hat Virtualization 3 ELS (RHEV-H/RHV-H) | rhev-hypervisor7 | 等待处理 |
Red Hat Virtualization 3 ELS (RHEV-H/RHV-H) | qemu-kvm-rhev | RHSA-2018:1654 |
Red Hat Virtualization 3 ELS (RHEV-H/RHV-H) | vdsm | 等待处理 |
Red Hat Virtualization 3 ELS (RHEV-H/RHV-H) | rhevm-setup-plugins | 等待处理 |
Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) for RHEL7 | qemu-kvm-rhev | 等待处理 |
Red Hat Enterprise Linux OpenStack Platform 7.0 (Kilo) director for RHEL7 | director images | 等待处理 |
Red Hat OpenStack Platform 8.0 (Liberty) | qemu-kvm-rhev | 等待处理 |
Red Hat OpenStack Platform 8.0 (Liberty) | director images | 等待处理 |
Red Hat OpenStack Platform 9.0 (Mitaka) | qemu-kvm-rhev | 等待处理 |
Red Hat OpenStack Platform 9.0 (Mitaka) | director images | 等待处理 |
Red Hat OpenStack Platform 10.0 (Newton) | qemu-kvm-rhev | 等待处理 |
Red Hat OpenStack Platform 10.0 (Newton) | director images | 等待处理 |
Red Hat OpenStack Platform 11.0 (Ocata) | qemu-kvm-rhev | 等待处理 |
Red Hat OpenStack Platform 11.0 (Ocata) | director images | 等待处理 |
Red Hat OpenStack Platform 12.0 (Pike) | qemu-kvm-rhev | 等待处理 |
Red Hat OpenStack Platform 12.0 (Pike) | director images | 等待处理 |
Red Hat OpenStack Platform 12.0 (Pike) | containers | 等待处理 |
* 为了获得这个补丁程序,需要一个有效的 ELS 订阅。如果您的账户不包括有效的 ELS 订阅,请联系红帽的销售人员,或您专门的销售代表。
* 为了获得这个补丁程序,需要一个有效的 EUS 订阅。如果您的账户不包括有效的 EUS 订阅,请联系红帽的销售人员,或您专门的销售代表。
什么是 Red Hat Enterprise Linux Extended Update Support 订阅?
***需要有效的 AUS 订阅才可获得在 RHEL AUS 中的这个补丁。
什么是 Advanced mission critical Update Support (AUS)?
****需要有效的 TUS 订阅才可获得在 RHEL TUS 中的这个补丁。
***** 订阅用户应该联系硬件 OEM 来获得最新版本的 CPU microcode/firmware。
补救方法
红帽建议用户应用由硬件厂商或 CPU 厂商提供的 microcode/firmware 更新,并在相关的内核更新可用时尽快安装内核更新。软件更新可以独立于硬件 microcode 进行,但它们只有在 CPU firmware 已更新后才会起作用。
我们建议用户使用基于风险程度的方法对这个问题进行补救。那些需要高安全性、高度信任的系统应该首先进行处理,并应该在可以对它们进行处理前,把它们和不被信任的系统隔离来,以减少这个安全漏洞可能造成的安全风险。
Intel 和 AMD 的 x86 处理器都提供了 MSR(Model Specific Registers),使用它们可以启用或禁用 Speculative Store Bypass 的功能。通过使用这些 MSR,新的内核更新将会提供以下命令行参数:
- spec_store_bypass_disable=[auto/on/off/prctl]
default: auto- auto:在启动时使用这个选项,内核会检查处理器是否支持 SSB(Speculative Store Bypass)功能,并选择适当的缓解方案。
- on:启动 Speculative Store Bypass 缓解方案。在所有存储(写)地址都被解析出来前,处理器将不会预测执行加载(读)指令。
- off:禁用 Speculative Store Bypass 缓解方案。处理器会使用 MD(Memory Disambiguator)功能,在早期的存储(写)指令前可以预测执行加载(读)指令。
- prctl:通过使用 prctl(2) 接口,基于每个线程启用 Speculative Store Bypass 缓解方案。
- nospec_store_bypass_disable:
禁用 Speculative Store Bypass 安全漏洞的所有缓解方案。
内核更新同时增加了对 sysfs 接口的支持,可以用来报告系统处理器是否存在 Speculative Store Bypass 安全漏洞,以及相关的缓解方案是否已使用。
- # cat /sys/devices/system/cpu/vulnerabilities/spec_store_bypass
对于 JVM 以及 JIT 沙盒环境,内核更新通过 prctl(2) 接口提供了每个进程的控制选项。应用程序可以使用它基于每个进程来启用或禁用 Speculative Store Bypass。应用程序可以使用以下方式使用 prctl(2):
- prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_ENABLE, 0, 0);
启用 Speculative Store Bypass 功能,没有采用补救方法。 - prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0);
禁用 Speculative Store Bypass 功能,使补救方法有效。
Comments