Red Hat ha tenido conocimiento de un nuevo problema de implementación de hardware de microprocesador de computadora (microarquitectura) similar a Spectre y Meltdown que, según se ha informado, afecta a los microprocesadores x86 fabricados por Intel. Los atacantes no privilegiados pueden utilizar este defecto para eludir las restricciones de seguridad de la memoria con el fin de obtener acceso a los datos almacenados en la memoria que, de otro modo, serían inaccesibles.  Hay tres piezas en esta vulnerabilidad. La primera afecta sólo a los enclaves seguros de Intel “SGX” y se mitiga mediante actualizaciones de microcódigos independientemente del sistema operativo. Las otras dos piezas requieren mitigaciones a nivel de software realizadas por sistemas operativos e hipervisores. La mitigación completa de ataques potenciales por parte de máquinas virtuales huéspedes no confiables en un entorno que utiliza la virtualización requerirá una acción específica por parte del administrador del sistema.

Si quiere ver el video en Youtube de cómo entender la L1 Terminal Fault haga clic aquí.

CVE-2018-3620 es el identificador CVE asignado a la vulnerabilidad del sistema operativo para este problema. CVE-2018-3646 es el identificador CVE asignado al aspecto de virtualización del fallo. La industria en general se refiere a esta cuestión como L1 Terminal Fault (L1TF)* o como “Foreshadow”** por el investigador de seguridad.

La vulnerabilidad L1 Terminal Fault permite a un actor malicioso eludir los controles de seguridad de acceso a la memoria que normalmente impone y gestiona el sistema operativo o el hipervisor. Un atacante puede utilizar esta vulnerabilidad para leer cualquier ubicación de memoria física que esté almacenada en la caché de datos L1 del procesador. Normalmente, las “tablas de página” gestionadas por el sistema operativo y el hipervisor proporcionan información al procesador sobre las ubicaciones de memoria que deben ser accesibles para una aplicación, el propio núcleo del sistema operativo y las instancias de máquinas virtuales huéspedes. Estas tablas de página están formadas por entradas de tabla de página (PTE) que incluyen un bit “presente” que indica la validez. Al explotar L1TF, un atacante abusa de la lógica del procesador Intel que reconoce las PTE válidas.

La caché de datos L1 (normalmente de 32 KB de tamaño) es el primer nivel de una rápida jerarquía de memoria del procesador en el chip que contiene copias de datos que también se guardan en los chips de memoria principales externos (al procesador). Las cachés se rellenan a medida que los programas utilizan la memoria, y normalmente se separan en varios niveles. Una caché de nivel más alto (L1) pequeña y rápida es la más cercana a las unidades funcionales del procesador que realizan los cálculos reales dentro de un programa, mientras que las cachés cada vez más grandes y más lentas se encuentran conceptualmente más lejos. El L1 es compartido entre dos hiperhilos pares dentro de un núcleo de procesador Intel. Cada núcleo también tiene una caché L2 ligeramente más grande. El L3 (también llamado LLC o Last Level Cache) es compartido por todos los núcleos dentro del procesador y es mucho más grande (por ejemplo, 32MB). Los datos se mueven de la memoria a la L3 y hacia la L1 cuando se utilizan.

Los accesos a la memoria caché dentro del chip del procesador son órdenes de magnitud más rápidos que salir a la memoria principal, por lo que se utiliza para mejorar significativamente el rendimiento. La caché de datos también se rellena como un efecto secundario de las operaciones realizadas durante la ejecución especulativa o fuera de servicio. Como resultado de esta diferencia relativa en el rendimiento de las cachés en comparación con la memoria, es posible que el código de software malicioso deduzca la actividad de la caché. Esto se conoce como análisis de canal lateral, y fue popularizado por Meltdown y Spectre. En esas vulnerabilidades, como en L1TF, se pueden crear secuencias de software específicas, conocidas como “gadgets”, que explotan un procesador vulnerable para causar actividad de caché observable durante la especulación.

L1TF es similar a Meltdown, ya que explota la forma en que los procesadores vulnerables implementan una forma de especulación, en este caso durante la búsqueda de tablas de página (conocida como table walk). El procesador está diseñado para producir el rendimiento más agresivo posible, por lo que especula que las entradas de la tabla de páginas son válidas y permiten el acceso a la ubicación de memoria subyacente antes de completar las comprobaciones de validez necesarias. El procesador buscará de forma preventiva en su caché de datos L1 cualquier dirección física que coincida con bits en la entrada de la tabla de la página, reenviando cualquier coincidencia a operaciones especulativas dependientes. Después de un tiempo, el procesador detectará que la entrada de la tabla de la página no es válida y señalará un “fallo de terminal” interno. El procesador entonces desenrolla (tira a la basura) los resultados previamente especulados, pero el impacto observable sobre la caché permanece.

En el caso de instancias de huéspedes virtualizadas, la vulnerabilidad L1TF se manifiesta debido a un aspecto de la implementación de una tecnología dentro de los procesadores Intel conocida como “Extended Page Tables” (EPT). Esta función de rendimiento del hardware permite a los hipervisores (como KVM) delegar parte de la gestión de las tablas de página en máquinas virtuales huéspedes. Cada acceso a la memoria está sujeto a dos traducciones, primero por parte del invitado y luego por parte de las tablas de la página del host. Esto ahorra la sobrecarga causada por la asistencia repetida del hipervisor, que solía ser necesaria antes de la EPT. En las implementaciones vulnerables, un invitado malintencionado puede crear una entrada de tabla de página “no presente” que acortará las dos etapas normales de la traducción, lo que da como resultado que el invitado pueda leer el hipervisor del host u otra memoria física del invitado si existe una copia en la caché de datos L1.

Hay dos patrones de ataque contra los que los usuarios finales deberán protegerse: un usuario malintencionado en un sistema que lee datos en el sistema físico o un sistema operativo huésped malintencionado o un contenedor que accede a información de otros huéspedes o del host. Esta vulnerabilidad es similar a CVE-2017-5754 (también conocida como “Meltdown”) pero explota una interacción entre la Unidad de Gestión de Memoria (MMU) y la Caché de Datos L1 bajo especulación cuando se realiza la traducción de direcciones de memoria virtual a física. Las mitigaciones existentes para las vulnerabilidades microarquitecturales previas (“Meltdown”, también conocida como “Variant 3”) no son suficientes para protegerse contra esta nueva vulnerabilidad.

Red Hat recomienda encarecidamente a los clientes que tomen medidas correctivas, incluyendo la activación manual de parámetros específicos del kernel o la desactivación potencial de funciones como Intel Hyper-Threading, después de que se hayan aplicado las actualizaciones disponibles. Se pueden encontrar más detalles en la sección de Mitigación de este artículo.

Información de Antecedentes

Los sistemas operativos modernos implementan un esquema de “memoria virtual” para utilizar eficientemente la memoria principal disponible en múltiples tareas/procesos. Los sistemas físicos tienen cantidades fijas de memoria principal que forman el espacio físico de direcciones. Este espacio de direcciones se divide en unidades gestionadas más pequeñas conocidas como páginas (por ejemplo, 4KB). El sistema operativo crea espacios de direcciones virtuales para cada programa en ejecución (conocido como proceso). Cada dirección virtual se traduce en una dirección física subyacente utilizando una pieza especial de hardware dentro del procesador, conocida como Memory Management Unit (MMU). Cuando un procesador programa un programa para su ejecución, sus instrucciones y datos se asignan a direcciones virtuales. Los programas utilizan direcciones virtuales para referenciar ubicaciones de memoria. La MMU del procesador utiliza un concepto conocido como Paging (Paginación) para realizar la traducción entre las direcciones virtuales y las direcciones de memoria física asignadas subyacentes.

La técnica de Paginación traduce cada dirección virtual a una dirección física utilizando estructuras jerárquicas de paginación conocidas como tablas de página. Estos traducen partes de la dirección virtual usando bits de la dirección como índices en componentes de las tablas de página. Las tablas de página se construyen a partir de registros/entradas de tamaño fijo que contienen una dirección física que apunta a otra entrada de estructura de paginación o a la página de memoria asignada. Junto con la dirección física, una entrada de estructura de paging también contiene varios bits de atributo sobre la dirección física. Éstos incluyen un poco que indica si la página está presente (P flag) en la memoria física o no (swapped out). Una entrada de tabla de página marcada como no presente debe ser ignorada por la lógica del procesador MMU.

Entrada de estructura de página:

El Intel Software Developers Manual (Manual del desarrollador de software Intel volumen 3, capítulo 4) define las estructuras de paginación por hardware utilizadas por los procesadores Intel, incluida la Page Table Entry (Entrada de Tabla de Páginas) de 64 bits (PTE) utilizada para almacenar la dirección física durante una traducción de dirección de virtual a física.

Durante la traducción de direcciones, el procesador caminará a través de las estructuras de la tabla de páginas, llegando finalmente a una entrada de tabla de páginas que contiene una posible traducción física para una dirección virtual en particular. Este proceso de traducción de direcciones termina cuando la dirección virtual se resuelve a un marco de página asignado en la memoria física OR cuando una entrada de la estructura de paginación indica que el marco de página requerido no está presente (P flag(bit zero) = 0) en la memoria principal OR tiene bits reservados. El acceso a la dirección física desde dicha entrada da lugar a la excepción de fallo de página (también conocida como “terminal fault” (fallo de terminal)).

La lista de CPU afectadas está disponible en el aviso de seguridad oficial de Intel. Además Intel ha publicado información sobre L1TF / Foreshadow en su blog, también una página de preguntas frecuentes y una página de orientación de seguridad. Red Hat también ha publicado una explicación sobre los defectos de L1TF / Foreshadow y los equipos que realizaron la investigación también han creado un sitio web exclusivo para esta vulnerabilidad con videos que explican el impacto de la vulnerabilidad L1TF / Foreshadow y demostración de los ataques.

Agradecimientos

Red Hat desea agradecer a Intel Inc. y a los socios de la industria por informar sobre este problema y colaborar en la mitigación del mismo.

* = Falla de Terminal L1

** = Prefiguración

Fuente: Red Hat

Anuncios