Instrucciones para mitigar vulnerabilidades frente a ataques de canal lateral de ejecución especulativa en AzureGuidance for mitigating speculative execution side-channel vulnerabilities in Azure

Última actualización del documento: 9 de agosto de 2019 a las 10:00 a. m. PST.Last document update: 9 August 2019 10:00 AM PST.

La divulgación de una nueva clase de vulnerabilidades de CPU, conocidas como ataques de canal lateral de ejecución especulativa, han generado preguntas de los clientes que buscan mayor claridad.The disclosure of a new class of CPU vulnerabilities known as speculative execution side-channel attacks has resulted in questions from customers seeking more clarity.

Microsoft ha implementado mitigaciones en todos nuestros servicios en la nube.Microsoft has deployed mitigations across all our cloud services. La infraestructura que ejecuta Azure y aísla las cargas de trabajo de los clientes entre sí está protegida.The infrastructure that runs Azure and isolates customer workloads from each other is protected. Esto significa que un atacante potencial que use la misma infraestructura no puede atacar su aplicación mediante estas vulnerabilidades.This means that a potential attacker using the same infrastructure can’t attack your application using these vulnerabilities.

Azure utiliza un mantenimiento con conservación de memoria siempre que es posible para minimizar el impacto en el cliente y eliminar la necesidad de reinicios.Azure is using memory preserving maintenance whenever possible, to minimize customer impact and eliminate the need for reboots. Azure seguirá utilizando estos métodos al realizar actualizaciones del host en todo el sistema y proteger a los clientes.Azure will continue utilizing these methods when making systemwide updates to the host and protect our customers.

Encontrará más información acerca de cómo integrar la seguridad en todos los aspectos de Azure en el sitio de documentación de Azure Security Center.More information about how security is integrated into every aspect of Azure is available on the Azure Security Documentation site.

Nota

Desde que este documento se publicó por primera vez, se han divulgado varias variantes de esta clase de vulnerabilidad.Since this document was first published, multiple variants of this vulnerability class have been disclosed. Microsoft continúa realizando grandes esfuerzos por proteger a nuestros clientes y proporcionarles orientación.Microsoft continues to be heavily invested in protecting our customers and providing guidance. Esta página se actualizará a medida que se publiquen más correcciones.This page will be updated as we continue to release further fixes.

El 14 de mayo de 2019 Intel reveló un nuevo conjunto de vulnerabilidad de canal lateral de ejecución especulativa conocido como Muestreo de datos de microarquitectura (MDS) (consulte las instrucciones de seguridad de Microsoft ADV190013), al que se han asignado varios identificadores:On May 14, 2019, Intel disclosed a new set of speculative execution side channel vulnerability known as Microarchitectural Data Sampling (MDS see the Microsoft Security Guidance ADV190013), which has been assigned multiple CVEs:

  • CVE-2019-11091: Memoria sin caché de muestreo de datos de microarquitectura (MDSUM)CVE-2019-11091 - Microarchitectural Data Sampling Uncacheable Memory (MDSUM)
  • CVE-2018-12126: Muestreo de datos de búfer de almacén de microarquitectura (MSBDS)CVE-2018-12126 - Microarchitectural Store Buffer Data Sampling (MSBDS)
  • CVE-2018-12127: Muestreo de datos de puerto de carga microarquitectura (MLPDS)CVE-2018-12127 - Microarchitectural Load Port Data Sampling (MLPDS)
  • CVE-2018-12130: Muestreo de datos de búfer de relleno de microarquitectura (MFBDS)CVE-2018-12130 - Microarchitectural Fill Buffer Data Sampling (MFBDS)

Esta vulnerabilidad afecta a los procesadores Intel® Core® y los procesadores Intel® Xeon®.This vulnerability affects Intel® Core® processors and Intel® Xeon® processors. Microsoft Azure ha publicado actualizaciones del sistema operativo y está implementando nuevo microcódigo, a medida que Intel reveló lo anterior, en toda nuestra flota para proteger a nuestros clientes contra estos nuevos puntos vulnerables.Microsoft Azure has released operating system updates and is deploying new microcode, as it is made available by Intel, throughout our fleet to protect our customers against these new vulnerabilities. Azure está trabajando estrechamente con Intel para probar y validar el nuevo microcódigo antes de su lanzamiento oficial en la plataforma.Azure is closely working with Intel to test and validate the new microcode prior to its official release on the platform.

Los clientes que ejecutan código que no es de confianza dentro de su máquina virtual deben tomar medidas para protegerse frente a estos puntos vulnerables; para ello, lea a continuación para obtener instrucciones acerca de todas las vulnerabilidades de canal lateral de ejecución especulativa (ADV de Avisos de Microsoft 180002, 180018 y 190013).Customers that are running untrusted code within their VM need to take action to protect against these vulnerabilities by reading below for additional guidance on all speculative execution side-channel vulnerabilities (Microsoft Advisories ADV 180002, 180018, and 190013).

Otros clientes deben evaluar estos puntos vulnerables desde la perspectiva de la defensa en profundidad y considerar las implicaciones en la seguridad y el rendimiento de la configuración que han elegido.Other customers should evaluate these vulnerabilities from a Defense in Depth perspective and consider the security and performance implications of their chosen configuration.

Mantener actualizados los sistemas operativosKeeping your operating systems up-to-date

Aunque no se necesita una actualización del sistema operativo para aislar de otros clientes las aplicaciones que se ejecutan en Azure, mantener el software actualizado siempre es un procedimiento recomendado.While an OS update is not required to isolate your applications running on Azure from other Azure customers, it is always a best practice to keep your software up-to-date. Los últimos paquetes acumulativos de actualizaciones de seguridad para Windows contienen mitigaciones para varias vulnerabilidades de canal lateral de ejecución especulativa.The latest Security Rollups for Windows contain mitigations for several speculative execution side channel vulnerabilities. De forma similar, las distribuciones de Linux han publicado varias actualizaciones para corregir estas vulnerabilidades.Similarly, Linux distributions have released multiple updates to address these vulnerabilities. Estas son las acciones recomendadas para actualizar el sistema operativo:Here are our recommended actions to update your operating system:

OfertaOffering Acción recomendadaRecommended Action
Azure Cloud ServicesAzure Cloud Services Habilite las actualizaciones automáticas o asegúrese de que está ejecutando la versión más reciente del sistema operativo invitado.Enable auto update or ensure you are running the newest Guest OS.
Máquinas virtuales Linux en AzureAzure Linux Virtual Machines Instale las actualizaciones de su proveedor de sistema operativo.Install updates from your operating system provider. Para más información, consulte Linux más adelante en este documento.For more information, see Linux later in this document.
Máquinas virtuales Windows en AzureAzure Windows Virtual Machines Instale las últimas actualizaciones acumulativas de seguridad.Install the latest security rollup.
Otros servicios PaaS de AzureOther Azure PaaS Services No es necesaria ninguna acción para los clientes que usan estos servicios.There is no action needed for customers using these services. Azure mantiene actualizadas las versiones de sistema operativo de forma automática.Azure automatically keeps your OS versions up-to-date.

Instrucciones adicionales si está ejecutando código que no es de confianzaAdditional guidance if you are running untrusted code

Los clientes que permiten a los usuarios que no son de confianza ejecutar código arbitrario tal vez deseen implementar algunas características de seguridad adicionales en las máquinas virtuales o en los servicios en la nube de Azure.Customers who allow untrusted users to execute arbitrary code may wish to implement some additional security features inside their Azure Virtual Machines or Cloud Services. Estas características protegen frente a los vectores de divulgación entre procesos que describen varias vulnerabilidades de ejecución especulativa.These features protect against the intra-process disclosure vectors that several speculative execution vulnerabilities describe.

Escenarios de ejemplo donde se recomiendan las características de seguridad adicionales:Example scenarios where additional security features are recommended:

  • Permite la ejecución de código que no es de confianza en la máquina virtual.You allow code that you do not trust to run inside your VM.
    • Por ejemplo, permite que uno de sus clientes cargue un archivo binario o un script que, a continuación, se ejecutará en la aplicación.For example, you allow one of your customers to upload a binary or script that you then execute within your application.
  • Permite iniciar sesión en la máquina virtual con cuentas con privilegios reducidos a usuarios que no son de confianza.You allow users that you do not trust to log into your VM using low privileged accounts.
    • Por ejemplo, permite iniciar sesión en una de las máquinas virtuales mediante escritorio remoto o SSH a un usuario con privilegios reducidos.For example, you allow a low-privileged user to log into one of your VMs using remote desktop or SSH.
  • Permite acceder a las máquinas virtuales implementadas mediante virtualización anidada a usuarios que no son de confianza.You allow untrusted users access to virtual machines implemented via nested virtualization.
    • Por ejemplo, controla el host de Hyper-V, pero asigna las máquinas virtuales a usuarios que no son de confianza.For example, you control the Hyper-V host, but allocate the VMs to untrusted users.

Los clientes que no implementan un escenario relacionado con código que no es de confianza no necesitan habilitar estas características de seguridad adicionales.Customers who do not implement a scenario involving untrusted code do not need to enable these additional security features.

Habilitación de la seguridad adicionalEnabling additional security

Puede habilitar características de seguridad adicionales en la máquina virtual o en el servicio en la nube si ejecuta código que no sea de confianza.You can enable additional security features inside your VM or Cloud Service if you are running untrusted code. Al mismo tiempo, asegúrese de que el sistema operativo está actualizado para habilitar las características de seguridad dentro de la máquina virtual o el servicio en la nubeIn parallel, ensure your operating system is up-to-date to enable security features inside your VM or Cloud Service

WindowsWindows

El sistema operativo de destino debe estar actualizado para habilitar estas características de seguridad adicionales.Your target operating system must be up-to-date to enable these additional security features. Aunque hay habilitadas numerosas mitigaciones del canal lateral de ejecución especulativa de forma predeterminada, las características adicionales que se describen aquí deben habilitarse manualmente y pueden afectar al rendimiento.While numerous speculative execution side channel mitigations are enabled by default, the additional features described here must be enabled manually and may cause a performance impact.

Paso 1: deshabilite la característica de hyper-threading en la máquina virtual. Los clientes que ejecutan código que no es de confianza en una máquina virtual de hyper-threading deben deshabilitarlo o pasar a un tamaño de máquina virtual que no sea hyper-threading.Step 1: Disable hyper-threading on the VM - Customers running untrusted code on a hyper-threaded VM will need to disable hyper-threading or move to a non-hyper-threaded VM size. Remítase a este documento para obtener una lista de tamaños de máquina virtual de hyper-threading (donde la proporción de vCPU a Core es 2:1).Reference this doc for a list of hyper-threaded VM sizes (where ratio of vCPU to Core is 2:1). Para comprobar si la máquina virtual tiene habilitada la característica de hyper-threading, consulte el siguiente script mediante la línea de comandos de Windows desde la máquina virtual.To check if your VM has hyper-threading enabled, please refer to the below script using the Windows command line from within the VM.

Escriba wmic para especificar la interfaz interactiva.Type wmic to enter the interactive interface. A continuación, escriba lo siguiente para ver la cantidad de procesadores físicos y lógicos en la máquina virtual.Then type the below to view the amount of physical and logical processors on the VM.

CPU Get NumberOfCores,NumberOfLogicalProcessors /Format:List

Si el número de procesadores lógicos es mayor que el de procesadores físicos (núcleos), la característica de hyper-threading está habilitada.If the number of logical processors is greater than physical processors (cores), then hyper-threading is enabled. Si está ejecutando una máquina virtual de hyper-threading, póngase en contacto con el soporte técnico de Azure para deshabilitar la característica de hyper-threading.If you are running a hyper-threaded VM, please contact Azure Support to get hyper-threading disabled. Una vez que el hyper-threading esté deshabilitado, se requerirá un reinicio completo de la máquina virtual.Once hyper-threading is disabled, support will require a full VM reboot. Consulte Número de núcleos para saber por qué se reduce el número de núcleos de máquina virtual.Please refer to Core count to understand why your VM core count decreased.

Paso 2: A la vez que el paso 1, siga las instrucciones descritas en KB4072698 para comprobar que las protecciones se habilitan con el módulo de PowerShell SpeculationControl.Step 2: In parallel to Step 1, follow the instructions in KB4072698 to verify protections are enabled using the SpeculationControl PowerShell module.

Nota

Si descargó este módulo anteriormente, deberá instalar la versión más reciente.If you previously downloaded this module, you will need to install the newest version.

La salida del script de PowerShell debe tener los siguientes valores para validar las protecciones habilitadas frente a estos puntos vulnerables:The output of the PowerShell script should have the below values to validate enabled protections against these vulnerabilities:

Windows OS support for branch target injection mitigation is enabled: True
Windows OS support for kernel VA shadow is enabled: True
Windows OS support for speculative store bypass disable is enabled system-wide: False
Windows OS support for L1 terminal fault mitigation is enabled: True
Windows OS support for MDS mitigation is enabled: True

Si el resultado muestra MDS mitigation is enabled: False, póngase en contacto con el soporte técnico de Azure para conocer las opciones de mitigación disponibles.If the output shows MDS mitigation is enabled: False, please contact Azure Support for available mitigation options.

Paso 3: Para habilitar la compatibilidad del sistema operativo con la copia paralela de direcciones virtuales de kernel (KVAS) y la inserción de destino de rama (BTI), siga las instrucciones de KB4072698 para habilitar las protecciones con las claves del Registro de Session Manager.Step 3: To enable Kernel Virtual Address Shadowing (KVAS) and Branch Target Injection (BTI) OS support, follow the instructions in KB4072698 to enable protections using the Session Manager registry keys. Es necesario reiniciar.A reboot is required.

Paso 4: Para las implementaciones que usan la virtualización anidada (solo D3 y E3): Estas instrucciones se aplican dentro de la máquina virtual que se va a usar como un host de Hyper-V.Step 4: For deployments that are using nested virtualization (D3 and E3 only): These instructions apply inside the VM you are using as a Hyper-V host.

  1. Siga las instrucciones descritas en el artículo KB4072698 para habilitar las protecciones mediante las claves del Registro MinVmVersionForCpuBasedMitigations.Follow the instructions in KB4072698 to enable protections using the MinVmVersionForCpuBasedMitigations registry keys.
  2. Establezca el tipo de programador del hipervisor en Core mediante las instrucciones descritas aquí.Set the hypervisor scheduler type to Core by following the instructions here.

LinuxLinux

Se requiere que el sistema operativo de destino esté completamente actualizado para habilitar el conjunto de características de seguridad adicionales.Enabling the set of additional security features inside requires that the target operating system be fully up-to-date. Algunas de las mitigaciones estarán habilitadas de forma predeterminada.Some mitigations will be enabled by default. La siguiente sección describe las características que están desactivadas de forma predeterminada y sujetas a la compatibilidad de hardware (microcódigo).The following section describes the features which are off by default and/or reliant on hardware support (microcode). La habilitación de estas características puede afectar al rendimiento.Enabling these features may cause a performance impact. Consulte la documentación del proveedor de su sistema operativo para más instruccionesReference your operating system provider’s documentation for further instructions

Paso 1: deshabilite la característica de hyper-threading en la máquina virtual. Los clientes que ejecutan código que no es de confianza en una máquina virtual de hyper-threading deben deshabilitarlo o pasar a una máquina virtual que no sea hyper-threading.Step 1: Disable hyper-threading on the VM - Customers running untrusted code on a hyper-threaded VM will need to disable hyper-threading or move to a non-hyper-threaded VM. Remítase a este documento para obtener una lista de tamaños de máquina virtual de hyper-threading (donde la proporción de vCPU a Core es 2:1).Reference this doc for a list of hyper-threaded VM sizes (where ratio of vCPU to Core is 2:1). Para comprobar si está ejecutando una máquina virtual de hyper-threading, ejecute el comando lscpu en la máquina virtual de Linux.To check if you are running a hyper-threaded VM, run the lscpu command in the Linux VM.

Si Thread(s) per core = 2, el hyper-threading se ha habilitado.If Thread(s) per core = 2, then hyper-threading has been enabled.

Si Thread(s) per core = 1, el hyper-threading se ha deshabilitado.If Thread(s) per core = 1, then hyper-threading has been disabled.

Salida de ejemplo para una máquina virtual con hyper-threading habilitado:Sample output for a VM with hyper-threading enabled:

CPU Architecture:      x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1

Si está ejecutando una máquina virtual de hyper-threading, póngase en contacto con el soporte técnico de Azure para deshabilitar la característica de hyper-threading.If you are running a hyper-threaded VM, please contact Azure Support to get hyper-threading disabled. Una vez que el hyper-threading esté deshabilitado, se requerirá un reinicio completo de la máquina virtual.Once hyper-threading is disabled, support will require a full VM reboot. Consulte Número de núcleos para saber por qué se reduce el número de núcleos de máquina virtual.Please refer to Core count to understand why your VM core count decreased.

Paso 2: Para mitigar cualquiera de los siguientes puntos vulnerables de canal lateral de ejecución especulativa, consulte la documentación del proveedor de su sistema operativo:Step 2: To mitigate against any of the below speculative execution side-channel vulnerabilities, refer to your operating system provider’s documentation:

Recuento de núcleosCore count

Cuando se crea una máquina virtual de hyper-threading, Azure asigna dos subprocesos por núcleo, que se denominan vCPU.When a hyper-threaded VM is created, Azure allocates 2 threads per core - these are called vCPUs. Cuando el hyper-threading está deshabilitado, Azure quita un subproceso y usa los núcleos de subprocesos únicos (núcleos físicos).When hyper-threading is disabled, Azure removes a thread and surfaces up single threaded cores (physical cores). La proporción de vCPU y CPU es 2:1, de modo que, una vez que el hyper-threading se deshabilite, el número de CPU en la máquina virtual aparecerá reducido a la mitad.The ratio of vCPU to CPU is 2:1, so once hyper-threading is disabled, the CPU count in the VM will appear to have decreased by half. Por ejemplo, una máquina virtual D8_v3 es una máquina virtual de hyper-threading que se ejecuta en 8 vCPU (2 subprocesos por núcleo, por 4 núcleos).For example, a D8_v3 VM is a hyper-threaded VM running on 8 vCPUs (2 threads per core x 4 cores). Cuando el hyper-threading se deshabilite, las CPU caerán hasta 4 núcleos físicos con 1 subproceso por núcleo.When hyper-threading is disabled, CPUs will drop to 4 physical cores with 1 thread per core.

Pasos siguientesNext steps

Este artículo proporciona instrucciones para los siguientes ataques de canal lateral de ejecución especulativa que afectan a muchos de los procesadores modernos:This article provides guidance to the below speculative execution side-channel attacks that affect many modern processors:

Spectre Meltdown:Spectre Meltdown:

  • CVE-2017-5715: inserción de destino de rama (BTI)CVE-2017-5715 - Branch Target Injection (BTI)
  • CVE-2017-5754: aislamiento de tabla de páginas de kernel (KPTI)CVE-2017-5754 - Kernel Page Table Isolation (KPTI)
  • CVE-2018-3639: omisión especulativa de almacén (KPTI)CVE-2018-3639 – Speculative Store Bypass (KPTI)
  • CVE-2019-1125: información del kernel de Windows, variante de Spectre variante 1CVE-2019-1125 – Windows Kernel Information – variant of Spectre Variant 1

Error de terminal L1 (L1TF):L1 Terminal Fault (L1TF):

  • CVE-2018-3615: extensiones de protección de software de Intel (Intel SGX)CVE-2018-3615 - Intel Software Guard Extensions (Intel SGX)
  • CVE-2018-3620: sistemas operativos (SO) y modo de administración del sistema (SMM)CVE-2018-3620 - Operating Systems (OS) and System Management Mode (SMM)
  • CVE-2018-3646: afecta a Virtual Machine Manager (VMM)CVE-2018-3646 – impacts Virtual Machine Manager (VMM)

Muestreo de datos de microarquitectura:Microarchitectural Data Sampling:

  • CVE-2019-11091: Memoria sin caché de muestreo de datos de microarquitectura (MDSUM)CVE-2019-11091 - Microarchitectural Data Sampling Uncacheable Memory (MDSUM)
  • CVE-2018-12126: Muestreo de datos de búfer de almacén de microarquitectura (MSBDS)CVE-2018-12126 - Microarchitectural Store Buffer Data Sampling (MSBDS)
  • CVE-2018-12127: Muestreo de datos de puerto de carga microarquitectura (MLPDS)CVE-2018-12127 - Microarchitectural Load Port Data Sampling (MLPDS)
  • CVE-2018-12130: Muestreo de datos de búfer de relleno de microarquitectura (MFBDS)CVE-2018-12130 - Microarchitectural Fill Buffer Data Sampling (MFBDS)