Se descubre una vulnerabilidad de clase Meltdown en los procesadores AMD basados ​​en las microarquitecturas Zen+ y Zen 2

Un grupo de investigadores de la Universidad Técnica de Dresde ha identificado una vulnerabilidad (CVE-2020-12965) en procesadores AMD basados ​​en microarquitecturas Zen+ y Zen 2, que permite un ataque de clase Meltdown. Inicialmente se asumió que los procesadores AMD Zen+ y Zen 2 no son susceptibles a la vulnerabilidad Meltdown, pero los investigadores identificaron una característica que conduce al acceso especulativo a áreas de memoria protegidas cuando se utilizan direcciones virtuales no canónicas.

La arquitectura AMD64 utiliza sólo los primeros 48 bits de la dirección virtual e ignora los 16 bits restantes. Se especifica que los bits 48 a 63 siempre deben copiar el valor del bit 47 (extensión del bit de signo). Si se viola esta condición y se intenta acceder a una dirección con valores arbitrarios de los bits superiores, el procesador genera una excepción. Llenar repetidamente los bits superiores hace que el espacio de direcciones disponible se divida en dos bloques: uno inferior (de 0 a 00007FFFFFFFFFFFFF), en el que los bits superiores se establecen en 800000000000, y uno superior (de FFFF1 a FFFFFFFFFFFFFFF), en el que todos los bits superiores están establecidos en XNUMX.

Las direcciones que se encuentran dentro de los bloques especificados se denominan canónicas y las direcciones incorrectas con contenidos arbitrarios de los bits superiores se denominan no canónicas. El rango inferior de direcciones canónicas generalmente se asigna para datos de proceso y el rango superior se usa para datos del kernel (el acceso a estas direcciones desde el espacio del usuario está bloqueado en el nivel de separación de privilegios).

La clásica vulnerabilidad Meltdown se basa en el hecho de que durante la ejecución especulativa de instrucciones, el procesador puede acceder a un área de datos privada y luego descartar el resultado porque los privilegios establecidos prohíben dicho acceso desde el proceso del usuario. En el programa, el bloque ejecutado especulativamente está separado del código principal por una rama condicional, que en condiciones reales siempre se activa, pero debido al hecho de que la declaración condicional utiliza un valor calculado que el procesador no conoce durante la ejecución preventiva de El código, todas las opciones de sucursales se llevan a cabo de forma especulativa.

Dado que las operaciones ejecutadas especulativamente utilizan el mismo caché que las instrucciones ejecutadas normalmente, es posible durante la ejecución especulativa establecer marcadores en el caché que reflejen el contenido de bits individuales en un área de memoria privada y luego, en el código ejecutado normalmente, determinar su valor mediante el tiempo. accesos de análisis a datos almacenados en caché y no almacenados en caché.

Una característica de la nueva vulnerabilidad que afecta a los procesadores AMD Zen+ y Zen 2 es que las CPU permiten operaciones especulativas de lectura y escritura que acceden a la memoria utilizando direcciones no canónicas no válidas, simplemente ignorando los 16 bits superiores. Por tanto, durante la ejecución de código especulativo, el procesador siempre utiliza sólo los 48 bits inferiores y la validez de la dirección se comprueba por separado. Si, al traducir una dirección virtual no canónica a una dirección física en el búfer de traducción asociativo (TLB), se detecta una coincidencia en la parte canónica de la dirección, entonces la operación de carga especulativa devolverá el valor sin tener en cuenta el contenido. de los 16 bits superiores, lo que permite evitar el uso compartido de memoria entre subprocesos. Posteriormente, la operación se considerará inválida y se descartará, pero se completará el acceso a la memoria y los datos acabarán en la caché.

Durante el experimento, utilizando la técnica de determinación del contenido de la caché FLUSH+RELOAD, los investigadores pudieron organizar un canal para la transferencia de datos ocultos a una velocidad de 125 bytes por segundo. Además de los chips AMD, el problema afecta también a todos los procesadores Intel, que son susceptibles a la clásica vulnerabilidad Meltdown. Las mismas técnicas que ayudan a bloquear los ataques Meltdown, como el uso de instrucciones LFENCE, se pueden utilizar para protegerse contra este nuevo tipo de ataque. Por ejemplo, si un procesador Intel incluye protección de hardware contra Meltdown o el sistema tiene habilitada la protección de software, entonces dichas configuraciones no son susceptibles a la nueva variante de ataque.

Al mismo tiempo, los investigadores señalan que, en comparación con los procesadores Intel, la arquitectura de los procesadores AMD limita la posibilidad de realizar ataques reales, pero no excluye el uso de un nuevo método en combinación con otros ataques de microarquitectura para aumentar su efectividad. En particular, el ataque propuesto no permite determinar el contenido de las áreas de memoria del kernel y otros procesos, sino que se limita a la capacidad de obtener acceso a otros subprocesos del mismo programa que se ejecutan en el mismo espacio de memoria virtual.

Dado que un programa sin vulnerabilidad tiene la capacidad de acceder a sus subprocesos, desde un punto de vista práctico, el método es interesante para evitar el aislamiento de la zona de pruebas y organizar la interferencia con el trabajo de otros subprocesos en programas que permiten la ejecución de terceros. código, como navegadores web y motores JIT. Los investigadores examinaron la vulnerabilidad del motor JavaScript SpiderMonkey y del kernel de Linux a los ataques, pero no encontraron secuencias de código vulnerables que pudieran usarse para llevar a cabo un ataque. Además de atacar aplicaciones, el método también se puede utilizar para forzar flujos de datos inaceptables entre elementos de microarquitectura del procesador mientras se explotan otras vulnerabilidades de microarquitectura.

Fuente: opennet.ru

Añadir un comentario