Google demostró la explotación de las vulnerabilidades de Spectre mediante la ejecución de JavaScript en el navegador

Google ha publicado varios prototipos de exploits que muestran la posibilidad de explotar vulnerabilidades de clase Spectre al ejecutar código JavaScript en el navegador, evitando los métodos de protección agregados anteriormente. Se pueden utilizar exploits para obtener acceso a la memoria del proceso que procesa el contenido web en la pestaña actual. Para probar el funcionamiento del exploit, se lanzó el sitio web Leaky.page y se publicó en GitHub el código que describe la lógica del trabajo.

El prototipo propuesto está diseñado para atacar sistemas con procesadores Intel Core i7-6500U en un entorno con Linux y Chrome 88. Para utilizar el exploit en otros entornos, se requieren modificaciones. El método de explotación no es específico de los procesadores Intel: después de una adaptación adecuada, se confirmó que el exploit funciona en sistemas con CPU de otros fabricantes, incluido el Apple M1 basado en la arquitectura ARM. Después de pequeños ajustes, el exploit también es viable en otros sistemas operativos y en otros navegadores basados ​​en el motor Chromium.

En un entorno basado en procesadores estándar Chrome 88 e Intel Skylake, fue posible filtrar datos del proceso responsable de procesar el contenido web en la pestaña actual de Chrome (proceso de renderizado) a una velocidad de 1 kilobyte por segundo. Además, se han desarrollado prototipos alternativos, por ejemplo, un exploit que permite, a costa de reducir la estabilidad, aumentar la tasa de fuga a 8kB/s cuando se utiliza el temporizador performance.now() con una precisión de 5 microsegundos (0.005 milisegundos). ). También se preparó una versión que funcionaba con una precisión de temporizador de un milisegundo, con la que se podía organizar el acceso a la memoria de otro proceso a una velocidad de unos 60 bytes por segundo.

El código de demostración publicado consta de tres partes. La primera parte calibra el temporizador para estimar el tiempo de ejecución de las operaciones necesarias para restaurar los datos que quedan en la memoria caché del procesador como resultado de la ejecución especulativa de instrucciones de la CPU. La segunda parte determina el diseño de la memoria utilizada al asignar la matriz de JavaScript.

La tercera parte explota directamente la vulnerabilidad de Spectre para determinar el contenido de la memoria del proceso actual como resultado de la creación de condiciones para la ejecución especulativa de ciertas operaciones, cuyo resultado es descartado por el procesador después de determinar una predicción fallida, pero quedan rastros de la La ejecución se deposita en la caché general y se puede restaurar utilizando métodos para determinar el contenido de la caché mediante canales de terceros que analizan los cambios en el tiempo de acceso a los datos almacenados en caché y no almacenados en caché.

La técnica de explotación propuesta permite prescindir de los temporizadores de alta precisión disponibles a través de la API performance.now() y sin soporte para el tipo SharedArrayBuffer, que permite crear matrices en la memoria compartida. El exploit incluye el dispositivo Spectre, que provoca la ejecución especulativa controlada de código, y un analizador de fugas de canal lateral, que detecta datos almacenados en caché obtenidos durante la ejecución especulativa.

El gadget se implementa utilizando una matriz JavaScript en la que se intenta acceder a un área fuera de los límites del búfer, lo que afecta el estado del bloque de predicción de rama debido a la presencia de una verificación del tamaño del búfer agregada por el compilador (el procesador realiza especulativamente la acceso con anticipación, pero revierte el estado después de verificar). Para analizar el contenido del caché en condiciones de precisión insuficiente del temporizador, se propone un método que engaña la estrategia de desalojo de datos Tree-PLRU utilizada en los procesadores y permite, al aumentar el número de ciclos, aumentar significativamente la diferencia en el tiempo al regresar. un valor del caché y cuando no hay ningún valor en el caché.

Cabe señalar que Google publicó un prototipo del exploit para mostrar la viabilidad de los ataques que utilizan vulnerabilidades de clase Spectre y alentar a los desarrolladores web a utilizar técnicas que minimicen los riesgos de dichos ataques. Al mismo tiempo, Google cree que sin una reelaboración significativa del prototipo propuesto, es imposible crear exploits universales que estén listos no sólo para la demostración, sino también para su uso generalizado.

Para reducir el riesgo, se recomienda a los propietarios de sitios que utilicen los encabezados recientemente implementados Política de apertura de orígenes cruzados (COOP), Política de incrustación de orígenes cruzados (COEP), Política de recursos de orígenes cruzados (CORP), Solicitud de recuperación de metadatos, X-Frame- Opciones, X -Content-Type-Options y SameSite Cookie. Estos mecanismos no protegen directamente contra los ataques, pero le permiten aislar los datos del sitio de la filtración a procesos en los que se puede ejecutar el código JavaScript del atacante (la filtración se produce desde la memoria del proceso actual, que, además del código del atacante , también puede procesar datos de otro sitio abierto en esa misma pestaña). La idea principal es separar la ejecución del código del sitio en diferentes procesos del código de terceros recibido de fuentes no confiables, por ejemplo, incluido a través de un iframe.



Fuente: opennet.ru

Añadir un comentario