Collide+Probe y Load+Reload: dos técnicas que permiten filtrar datos en procesadores AMD
En un artículo anterior hablamos sobre un fallo que no puede ser solucionado en los procesadores Intel anteriores a los de décima generación y ahora en esta ocasión se dio a conocer un fallo que afecta a los procesadores AMD. Y es que un equipo de investigadores de la Universidad Tecnológica de Graz (Austria), anteriormente conocido por desarrollar métodos de ataque para MDS, NetSpectre, Throwhammer y ZombieLoad.
Ahora trabajaron para realizar una investigación sobre optimizaciones de hardware específicas de AMD y desarrolló dos nuevos métodos para atacar canales de terceros que manipulan fugas de datos durante la predicción de canales caché del primer nivel de procesadores AMD.
Los métodos se pueden usar para reducir la protección ASLR, restaurar claves en implementaciones AES vulnerables y aumentar la eficiencia del ataque Spectre.
En su investigación informan que identificaron problemas en la implementación del mecanismo de predicción de canal (predictor de forma) en la memoria caché de datos de la CPU de primer nivel (L1D), utilizada para predecir qué canal de la memoria caché se refleja una dirección de memoria específica.
La optimización utilizada en los procesadores AMD se basa en la verificación de etiquetas μ. μTag se calcula aplicando una función hash específica a la dirección virtual. Durante la operación, el mecanismo de predicción de canal usa μTag para determinar el canal de caché de la tabla.
Por lo tanto, μTag permite que el procesador se limite a acceder solo a un canal específico, sin enumerar todas las opciones, lo que reduce significativamente el consumo de energía de la CPU.
La vulnerabilidad se manifiesta en procesadores AMD basados en microarquitecturas Bulldozer, Piledriver, Steamroller, Zen (Ryzen, Epic), Zen + y Zen2.
AMD fue notificado del problema el 23 de agosto de 2019, pero aún no ha publicado un informe con información sobre el bloqueo de la vulnerabilidad.
Según los investigadores, el problema puede bloquearse en el nivel de actualización de microcódigo al proporcionar bits MSR para deshabilitar selectivamente el sistema de predicción de canales, de forma similar a como lo hizo Intel para administrar el apagado de los mecanismos de predicción de transición.
Durante la ingeniería inversa de la implementación del sistema de predicción de canales en varias generaciones de procesadores AMD fabricados entre 2011 y 2019, se revelaron dos nuevas técnicas para atacar canales de terceros:
- Collide+Probe: permite a un atacante rastrear el acceso a la memoria para los procesos que se ejecutan en el mismo núcleo lógico de la CPU.
La esencia del método es usar direcciones virtuales que causan colisiones hash de la función utilizada para calcular μTag para rastrear el acceso a la memoria. A diferencia de los ataques Flush+Reload y Prime+Probe utilizados en los procesadores Intel, Collide+Probe no utiliza memoria compartida y funciona sin conocer las direcciones físicas. - Load+Reload: permite determinar con mucha precisión los rastros de acceso a la memoria en el mismo núcleo físico de la CPU. El método se basa en el hecho de que una celda de memoria física puede ubicarse en la caché L1D solo una vez.
Es decir el acceso a la misma ubicación de memoria en una dirección virtual diferente forzará a la celda a salir de la caché L1D, lo que le permite rastrear el acceso a la memoria. A pesar de que el ataque depende de la memoria compartida, no restablece las líneas de caché, lo que hace posible llevar a cabo ataques ocultos que no desplazan los datos del caché de último nivel.
Basado en las técnicas Collide+Probe y Load+Reload, los investigadores demostraron varios escenarios de ataque a través de canales de terceros:
Se muestra la posibilidad de utilizar métodos para organizar un canal de comunicación indirecto oculto entre dos procesos, que permite transmitir datos a velocidades de hasta 588 kB por segundo.
Utilizando colisiones en μTag, fue posible reducir la entropía para diferentes variantes de la asignación aleatoria del diseño del espacio de direcciones (ASLR) y evitar la protección ASLR en el núcleo en un sistema Linux completamente actualizado.
Se muestra la posibilidad de un ataque para reducir la entropía ASLR tanto de las aplicaciones de usuario como del uso del código JavaScript ejecutado en el entorno sandbox y el código que se ejecuta en otro entorno invitado.