
Exemplo de uso do exploit "Spectre" revelado (CVE-2017-5753 e CVE-2017-5715)
Exemplo de uso do exploit "Spectre" revelado em 2 de janeiro de 2018 (CVE-2017-5753 e CVE-2017-5715)
O Spectre quebra o isolamento entre diferentes aplicações. Ele permite que um atacante engane programas sem erros, que seguem as melhores práticas, fazendo com que vazem seus segredos. Na verdade, as verificações de segurança dessas melhores práticas aumentam a superfície de ataque e podem tornar as aplicações mais suscetíveis ao Spectre.
C, usa as bibliotecas:
Colocamos o texto "The Magic Words are Squeamish Ossifrage." na memória e então tentamos lê-lo usando o exploit. Se o sistema for vulnerável, você verá o mesmo texto na saída, lido da memória.
Neste código, se as instruções compiladas em victim_function() fossem executadas em ordem estrita do programa, a função só leria de array1[0..15], pois o tamanho de array1 é 16. No entanto, quando executada especulativamente, leituras fora dos limites são possíveis. A função readMemoryByte() faz várias chamadas de treinamento a para fazer o preditor de desvios esperar valores válidos para x e, em seguida, faz uma chamada com um x fora dos limites. O desvio condicional tem previsão incorreta, e a execução especulativa resultante lê um byte secreto usando o x fora dos limites. O código especulativo então lê de , vazando o valor de para o estado do cache. Para completar o ataque, um simples flush+probe é usado para identificar qual linha de cache em foi carregada, revelando o conteúdo da memória. O ataque é repetido várias vezes; assim, mesmo que o byte alvo não esteja inicialmente em cache, a primeira iteração o trará para o cache.
victim_function()array2[array1[x] * 512]array1[x]array2O código não otimizado lê aproximadamente 10KB/segundo em um i7 Surface Pro 3.