Spectre é uma falha de segurança encontrada no design da maioria dos microprocessadores modernos. O nome se dá ao fato dos processadores que realizam branch prediction e Speculative execution que basicamente são tecnologias usadas para tentar maximizar a performance, tentando realizar a predição do código, dessa forma poupando tempo de execução, onde essencialmente foi encontrada a vulnerabilidade.

Exposição Duas exposições de vulnerabilidade estão relacionadas ao Spectre: as referências oficiais CVE-2017-5753 e CVE-2017-5715. Elas foram relatadas em 3 de janeiro de 2018, em conjunto com outra vulnerabilidade chamada Meltdown. A descoberta foi feita pelo time de pesquisadores: Jann Horn, Paul Kocher, Daniel Genkin, Mike Hamburg, Moritz Lipp e Yuval Yarom.

Impacto A grande maioria dos sistemas são afetados pelo Spectre: Desktops, Laptops, Servidores em Nuvem, Smartphones. Mais especificamente, todos os processadores modernos capazes de realizar multiprocessamento são potencialmente vulneráveis, sendo encontrado em processadores Intel, AMD e ARM.

Através dessa vulnerabilidade é possível fazer com que o processador execute instruções atípicas e assim fure o isolamento entre aplicações como, por exemplo, em navegadores, e faça com que o código executado tenha acesso a dados confidenciais de outras aplicações.

Visão Geral

Os ataques envolvem induzir a vitima a realizar operações que não ocorrem durante a execução correta do programa, podendo revelar dados confidenciais da vítima, o ataque se dá em três fases: fase de configuração; execução de instruções; fase final.

Fase de Configuração A fase de configuração realiza operações que induzem o processador a executar a predição especulativa de maneira errônea, possibilitando a exploração da falha. Adicionalmente, a fase de configuração induz a leitura direcionada de memória evitando que o processador "consulte" o cache para obter um valor que é necessário para determinar o destino de uma instrução de ramificação. Durante essa fase o atacante prepara um canal que poderá ser usado para extrair informações da vítima.

Fase de Execução de Instruções Durante essa fase o processador executa instruções que transferem informações sensíveis da vítima para um canal secundário na micro arquitetura, criado na primeira fase. Isso pode ser desencadeado ao invasor solicitar que a vítima execute uma ação como, por exemplo, uma chamada de sistema ou arquivo, etc. que explora uma técnica conhecida como Execução Especulativa.

Execução Especulativa, por sua vez, é uma técnica empregada em micro-codificação para melhorar a performance do fluxo de execução de ações no CPU.

Explicando de forma resumida, o controle do fluxo de ações depende de um valor de endereçamento que fica momentaneamente localizado na memória física. Usando esse valor, a micro-codificação é capaz de recuperar os dados ali armazenados e dessa forma completar sua extensa lista de tarefas binárias para processar o que quer que lhe seja solicitado. Como um efeito colateral da arquitetura utilizada, a recuperação dessa informação na memória física acaba sendo uma lenta e repetitiva tarefa feita pelo CPU. Para se ter ideia é normal que o fluxo de algumas ações levem centenas de ciclos de clock para finalizar e em cada um desses ciclos a memória é consultada mesmo que o valor nominal não seja necessário.

Portanto, ao invés de gastar ciclos de clock de forma ociosa, o CPU tenta "adivinhar" a direção do fluxo de controle, criando um checkpoint durante o primeiro ciclo, e tentando um por um os caminhos possíveis para finalizar a execução. Caso o valor retornado não seja o esperado pelo checkpoint, o CPU registra-o como ocioso, de uma maneira similar àquela feita no ciclo tradicional. Porém, caso o valor retornado esteja correto, a execução especulativa é comitada, resultando em um ganho de performance significante e útil.

Do ponto de vista de segurança, a Execução Especulativa executa uma programação com possíveis comprometimentos, uma vez que testa indiscriminadamente "caminhos" para finalizar cada comando. Porém, devido o CPU ser desenhado para manter sua correlatividade funcional recuperando os resultados das especulações incorretas de seu checkpoint seguro, assumia-se até então que esteja procedimento era seguro.

Fase Final O processo de recuperação dos dados consiste em marcar o tempo que as leituras são realizadas nos endereços de memória, nas linhas de cache que estão sendo monitoradas.

Ver também Isolamento da tabela de página do Kernel

Ligações externas Paper que publicou a vulnerabilidade site com informações adicionais sobre a vulnerabilidade

Categoria:Falhas em segurança de computadores Categoria:Segurança da informação