# Spectre (informática)

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.