Nueva técnica para explotar las vulnerabilidades de Spectre en Chrome

Un grupo de investigadores de universidades estadounidenses, australianas e israelíes han propuesto una nueva técnica de ataque de canal lateral para explotar las vulnerabilidades de clase Spectre en los navegadores basados ​​en el motor Chromium. El ataque, cuyo nombre en código es Spook.js, le permite eludir el mecanismo de aislamiento del sitio ejecutando código JavaScript y leer el contenido de todo el espacio de direcciones del proceso actual, es decir. acceder a datos de páginas que se ejecutan en otras pestañas, pero procesadas en el mismo proceso.

Dado que Chrome ejecuta diferentes sitios en diferentes procesos, la capacidad de llevar a cabo ataques prácticos se limita a servicios que permiten a diferentes usuarios alojar sus páginas. El método permite, desde una página en la que el atacante tiene la oportunidad de incrustar su código JavaScript, determinar la presencia de otras páginas abiertas por el usuario desde el mismo sitio y extraer de ellas información confidencial, por ejemplo, credenciales o datos bancarios sustituidos. por el sistema de autocompletar campos en formularios web. A modo de demostración, se muestra cómo se puede atacar el blog de otra persona en el servicio Tumblr si su propietario abre en otra pestaña un blog de un atacante alojado en el mismo servicio.

Otra opción para utilizar el método es un ataque a los complementos del navegador, que permite, al instalar un complemento controlado por el atacante, extraer datos de otros complementos. Como ejemplo, mostramos cómo instalando un complemento malicioso puede extraer información confidencial del administrador de contraseñas de LastPass.

Los investigadores han publicado un prototipo de un exploit que funciona en Chrome 89 en sistemas con CPUIntel i7-6700K y i7-7600U. Al crear el exploit, se utilizaron prototipos de código JavaScript previamente publicados por Google para llevar a cabo ataques de clase Spectre. Cabe señalar que los investigadores pudieron preparar exploits funcionales para sistemas basados ​​​​en procesadores Intel y Apple M1, que permiten organizar la lectura de la memoria a una velocidad de 500 bytes por segundo y una precisión del 96%. Se supone que el método también es aplicable a los procesadores AMD, pero no fue posible preparar un exploit completamente funcional.

El ataque es aplicable a cualquier navegador basado en el motor Chromium, incluidos Google Chrome, Microsoft Edge y Brave. Los investigadores también creen que el método se puede adaptar para funcionar con Firefox, pero como el motor de Firefox es muy diferente de Chrome, el trabajo de creación de dicho exploit se deja para el futuro.

Para protegerse contra ataques basados ​​​​en el navegador relacionados con la ejecución especulativa de instrucciones, Chrome implementa la segmentación del espacio de direcciones: el aislamiento de la zona de pruebas permite que JavaScript funcione solo con punteros de 32 bits y comparte la memoria de los controladores en montones separados de 4 GB. Para proporcionar acceso a todo el espacio de direcciones del proceso y evitar la limitación de 32 bits, los investigadores utilizaron una técnica llamada Type Confusion, que obliga al motor JavaScript a procesar un objeto con un tipo incorrecto, lo que permite formar un archivo de 64 bits. Puntero basado en una combinación de dos valores de 32 bits.

La esencia del ataque es que cuando se procesa un objeto malicioso especialmente diseñado en el motor JavaScript, se crean condiciones que conducen a la ejecución especulativa de instrucciones que acceden a la matriz. El objeto se selecciona de tal manera que los campos controlados por el atacante se colocan en el área donde se utiliza el puntero de 64 bits. Dado que el tipo de objeto malicioso no coincide con el tipo de matriz que se está procesando, en condiciones normales dichas acciones se bloquean en Chrome mediante un mecanismo para desoptimizar el código utilizado para acceder a las matrices. Para resolver este problema, el código del ataque Type Confusion se coloca en un bloque condicional "si", que no se activa en condiciones normales, pero se ejecuta en modo especulativo, si el procesador predice incorrectamente más ramificaciones.

Como resultado, el procesador accede especulativamente al puntero de 64 bits generado y revierte el estado después de determinar una predicción fallida, pero los rastros de la ejecución permanecen en el caché compartido y se pueden restaurar utilizando métodos de detección de caché de canal lateral que analizan los cambios en tiempos de acceso a datos almacenados en caché y no almacenados en caché. Para analizar el contenido de la caché en condiciones de precisión insuficiente del temporizador disponible en JavaScript, se utiliza un método propuesto por Google, que engaña a la estrategia de desalojo de caché Tree-PLRU utilizada en los procesadores y permite, aumentando el número de ciclos, Aumenta significativamente la diferencia en el tiempo cuando un valor está presente y ausente en el caché.

Fuente: opennet.ru

Añadir un comentario