Nova técnica para explotar as vulnerabilidades de Spectre en Chrome

Un grupo de investigadores de universidades estadounidenses, australianas e israelís propuxo unha nova técnica de ataque de canle lateral para explotar vulnerabilidades da clase Spectre nos navegadores baseados no motor Chromium. O ataque, co nome en código Spook.js, permítelle evitar o mecanismo de illamento do sitio executando código JavaScript e ler o contido de todo o espazo de enderezos do proceso actual, é dicir. acceder aos datos de páxinas que se executan noutras pestanas, pero procesadas no mesmo proceso.

Dado que Chrome executa diferentes sitios en diferentes procesos, a capacidade de realizar ataques prácticos limítase aos servizos que permiten a distintos usuarios aloxar as súas páxinas. O método permite, desde unha páxina na que o atacante ten a oportunidade de incrustar o seu código JavaScript, determinar a presenza doutras páxinas abertas polo usuario desde o mesmo sitio e extraer delas información confidencial, por exemplo, credenciais ou datos bancarios substituídos. mediante o sistema de enchemento automático de campos en formularios web. Como demostración, móstrase como pode atacar o blog doutra persoa no servizo Tumblr se o seu propietario abre noutra pestana un blog de atacantes aloxado no mesmo servizo.

Outra opción para usar o método é un ataque aos complementos do navegador, que permite, ao instalar un complemento controlado polo atacante, extraer datos doutros complementos. Como exemplo, mostramos como instalando un complemento malicioso pode extraer información confidencial do xestor de contrasinais de LastPass.

Os investigadores publicaron un prototipo dun exploit que funciona en Chrome 89 en sistemas cunha CPUIntel i7-6700K e i7-7600U. Ao crear o exploit, utilizáronse prototipos de código JavaScript publicados previamente por Google para realizar ataques da clase Spectre. Nótase que os investigadores foron capaces de preparar exploits de traballo para sistemas baseados en procesadores Intel e Apple M1, que permiten organizar a lectura da memoria a unha velocidade de 500 bytes por segundo e unha precisión do 96%. Suponse que o método tamén é aplicable aos procesadores AMD, pero non foi posible preparar un exploit totalmente funcional.

O ataque é aplicable a calquera navegador baseado no motor Chromium, incluído Google Chrome, Microsoft Edge e Brave. Os investigadores tamén cren que o método se pode adaptar para traballar con Firefox, pero como o motor Firefox é moi diferente de Chrome, o traballo para crear tal exploit queda para o futuro.

Para protexerse contra ataques baseados no navegador relacionados coa execución especulativa de instrucións, Chrome implementa a segmentación do espazo de enderezos: o illamento de sandbox permite que JavaScript funcione só con punteiros de 32 bits e comparta a memoria dos controladores en pilas de 4 GB disxuntas. Para proporcionar acceso a todo o espazo de enderezos do proceso e evitar a limitación de 32 bits, os investigadores utilizaron unha técnica chamada Type Confusion, que obriga ao motor JavaScript a procesar un obxecto cun tipo incorrecto, o que permite formar un tipo de 64 bits. punteiro baseado nunha combinación de dous valores de 32 bits.

A esencia do ataque é que ao procesar un obxecto malicioso especialmente deseñado no motor JavaScript, créanse condicións que conducen á execución especulativa de instrucións que acceden á matriz. O obxecto selecciónase de tal xeito que os campos controlados polo atacante colóquense na zona onde se usa o punteiro de 64 bits. Dado que o tipo de obxecto malicioso non coincide co tipo da matriz que se está a procesar, en condicións normais tales accións están bloqueadas en Chrome mediante un mecanismo para desoptimizar o código utilizado para acceder ás matrices. Para resolver este problema, o código para o ataque Type Confusion colócase nun bloque "se" condicional, que non se activa en condicións normais, senón que se executa en modo especulativo, se o procesador prevé incorrectamente máis ramificacións.

Como resultado, o procesador accede especulativamente ao punteiro de 64 bits xerado e retrotrae o estado despois de determinar unha predición fallida, pero os rastros da execución permanecen na caché compartida e pódense restaurar mediante métodos de detección de caché de canle lateral que analizan os cambios na memoria caché. tempos de acceso aos datos cachés e non cachés. Para analizar o contido da caché en condicións de insuficiente precisión do temporizador dispoñible en JavaScript, utilízase un método proposto por Google, que engana a estratexia de desaloxo da caché Tree-PLRU empregada nos procesadores e permite, ao aumentar o número de ciclos, aumentar significativamente a diferenza de tempo cando un valor está presente e ausente na caché.

Fonte: opennet.ru

Engadir un comentario