Un nuevo ataque de hardware denominado PACMAN se ha demostrado contra los conjuntos de chips del procesador M1 de Apple, lo que podría armar a un actor malicioso con la capacidad de obtener la ejecución de código arbitrario en los sistemas macOS.
Aprovecha los “ataques de ejecución especulativa para eludir un importante mecanismo de protección de la memoria, la autenticación de puntero ARM, una característica de seguridad que se utiliza para hacer cumplir la integridad del puntero”, investigadores del MIT Joseph Ravichandran, Weon Taek Na, Jay Lang y Mengjia Yan dijo en un papel nuevo.
Lo que es más preocupante es que “si bien los mecanismos de hardware utilizados por PACMAN no se pueden parchear con funciones de software, los errores de corrupción de la memoria pueden serlo”, agregaron los investigadores.
La vulnerabilidad tiene su origen en los códigos de autenticación de punteros (PAC), una línea de defensa introducida en la arquitectura arm64e que tiene como objetivo detectar y proteger contra cambios inesperados en punteros — objetos que almacenan una dirección de memoria — en la memoria.
Los PAC tienen como objetivo resolver un problema común en la seguridad del software, como las vulnerabilidades de corrupción de la memoria, que a menudo se aprovechan al sobrescribir datos de control en la memoria (es decir, punteros) para redirigir la ejecución del código a una ubicación arbitraria controlada por el atacante.
Mientras que estrategias como la aleatorización del diseño del espacio de direcciones (ASLR) se han diseñado para aumentar la dificultad de realizar ataques de desbordamiento de búfer, el objetivo de los PAC es determinar la “validez de los punteros con un tamaño mínimo y un impacto en el rendimiento”, evitando efectivamente que un adversario cree punteros válidos para usar en un exploit.
Esto se logra protegiendo un puntero con un hash criptográfico, llamado Código de autenticación de puntero (PAC), para garantizar su integridad. Manzana explica PAC de la siguiente manera:
La autenticación de puntero funciona al ofrecer una instrucción de CPU especial para agregar una firma criptográfica, o PAC, a los bits de alto orden no utilizados de un puntero antes de almacenar el puntero. Otra instrucción elimina y autentica la firma después de leer el puntero de la memoria. Cualquier cambio en el valor almacenado entre la escritura y la lectura invalida la firma. La CPU interpreta la falla de autenticación como corrupción de la memoria y establece un bit de orden alto en el puntero, lo que hace que el puntero no sea válido y que la aplicación se bloquee.
Pero PACMAN “elimina la barrera principal para realizar ataques de secuestro de flujo de control en una plataforma protegida mediante autenticación de puntero”. Combina la corrupción de la memoria y la ejecución especulativa para eludir la función de seguridad, filtrando “resultados de verificación de PAC a través de canales laterales de microarquitectura sin causar fallas”.
El método de ataque, en pocas palabras, hace posible distinguir entre un PAC correcto y un hash incorrecto, lo que permite a un mal actor “aplicar con fuerza bruta el valor de PAC correcto mientras suprime los bloqueos y construye un ataque de secuestro de flujo de control en un PA habilitado”. programa víctima o sistema operativo”.
La prevención de bloqueos, por su parte, tiene éxito porque cada valor de PAC se adivina especulativamente al explotar un canal lateral basado en el tiempo a través del búfer de búsqueda de traducción (TLB) usando un ataque Prime+Probe.
Las vulnerabilidades de ejecución especulativa, como se observó en el caso de Spectre y Meltdown, arman ejecución fuera de ordenuna técnica que se utiliza para mejorar el rendimiento de los microprocesadores modernos mediante prediciendo la ruta más probable del flujo de ejecución de un programa.
Sin embargo, vale la pena señalar que el modelo de amenaza supone que ya existe una vulnerabilidad de corrupción de memoria explotable en un programa víctima (kernel), que, a su vez, permite que el atacante sin privilegios (una aplicación maliciosa) inyecte código no autorizado en ciertas ubicaciones de memoria en El proceso de la víctima.
“Este ataque tiene implicaciones importantes para los diseñadores que buscan implementar futuros procesadores con autenticación de puntero, y tiene amplias implicaciones para la seguridad de las futuras primitivas de integridad del flujo de control”, concluyeron los investigadores.