Nova técnica para explorar vulnerabilidades Spectre no Chrome

Um grupo de pesquisadores de universidades americanas, australianas e israelenses propôs uma nova técnica de ataque de canal lateral para explorar vulnerabilidades da classe Spectre em navegadores baseados no mecanismo Chromium. O ataque, codinome Spook.js, permite contornar o mecanismo de isolamento do site executando o código JavaScript e lendo o conteúdo de todo o espaço de endereço do processo atual, ou seja, acessar dados de páginas executadas em outras guias, mas processadas no mesmo processo.

Como o Chrome executa sites diferentes em processos diferentes, a capacidade de realizar ataques práticos é limitada a serviços que permitem que diferentes usuários hospedem suas páginas. O método permite, a partir de uma página na qual o invasor tem a oportunidade de embutir seu código JavaScript, determinar a presença de outras páginas abertas pelo usuário do mesmo site e extrair delas informações confidenciais, por exemplo, credenciais ou dados bancários substituídos pelo sistema de preenchimento automático de campos em formulários web. Como demonstração, é mostrado como você pode atacar o blog de outra pessoa no serviço Tumblr se o seu proprietário abrir o blog de um invasor hospedado no mesmo serviço em outra aba.

Outra opção de utilização do método é o ataque aos complementos do navegador, que permite, ao instalar um complemento controlado pelo invasor, extrair dados de outros complementos. Como exemplo, mostramos como, ao instalar um complemento malicioso, você pode extrair informações confidenciais do gerenciador de senhas LastPass.

Os pesquisadores publicaram um protótipo de exploração que funciona no Chrome 89 em sistemas com CPUIntel i7-6700K e i7-7600U. Ao criar o exploit, protótipos de código JavaScript publicados anteriormente pelo Google foram usados ​​para realizar ataques da classe Spectre. Observa-se que os pesquisadores conseguiram preparar exploits funcionais para sistemas baseados em processadores Intel e Apple M1, que permitem organizar a leitura da memória a uma velocidade de 500 bytes por segundo e uma precisão de 96%. Supõe-se que o método também seja aplicável aos processadores AMD, mas não foi possível preparar um exploit totalmente funcional.

O ataque é aplicável a qualquer navegador baseado no mecanismo Chromium, incluindo Google Chrome, Microsoft Edge e Brave. Os pesquisadores também acreditam que o método pode ser adaptado para funcionar com o Firefox, mas como o mecanismo do Firefox é muito diferente do Chrome, o trabalho de criação de tal exploração fica para o futuro.

Para proteger contra ataques baseados em navegador relacionados à execução especulativa de instruções, o Chrome implementa segmentação de espaço de endereço - o isolamento de sandbox permite que o JavaScript funcione apenas com ponteiros de 32 bits e compartilhe a memória dos manipuladores em heaps separados de 4 GB. Para fornecer acesso a todo o espaço de endereço do processo e contornar a limitação de 32 bits, os pesquisadores usaram uma técnica chamada Type Confusion, que força o mecanismo JavaScript a processar um objeto com tipo incorreto, o que possibilita formar um 64 bits ponteiro baseado em uma combinação de dois valores de 32 bits.

A essência do ataque é que, ao processar um objeto malicioso especialmente projetado no mecanismo JavaScript, são criadas condições que levam à execução especulativa de instruções que acessam o array. O objeto é selecionado de forma que os campos controlados pelo invasor sejam colocados na área onde o ponteiro de 64 bits é utilizado. Como o tipo do objeto malicioso não corresponde ao tipo do array que está sendo processado, em condições normais tais ações são bloqueadas no Chrome por um mecanismo de desotimização do código usado para acessar os arrays. Para resolver este problema, o código para o ataque Type Confusion é colocado em um bloco condicional “if”, que não é ativado em condições normais, mas é executado em modo especulativo, se o processador prever incorretamente ramificações adicionais.

Como resultado, o processador acessa especulativamente o ponteiro de 64 bits gerado e reverte o estado após determinar uma previsão com falha, mas os rastros da execução permanecem no cache compartilhado e podem ser restaurados usando métodos de detecção de cache de canal lateral que analisam mudanças em tempos de acesso a dados armazenados em cache e não armazenados em cache. Para analisar o conteúdo do cache em condições de precisão insuficiente do temporizador disponível em JavaScript, é utilizado um método proposto pelo Google, que engana a estratégia de despejo de cache Tree-PLRU utilizada em processadores e permite, ao aumentar o número de ciclos, para aumenta significativamente a diferença de tempo quando um valor está presente e ausente no cache.

Fonte: opennet.ru

Adicionar um comentário