
2 de janeiro de 2018 (CVE-2017-5753 e CVE-2017-5715) exploit da vulnerabilidade "Fantasma" Spectre
2 de janeiro de 2018 (CVE-2017-5753 e CVE-2017-5715) Exemplo de exploração da vulnerabilidade "Spectre"
Colocamos o texto "The Magic Words are Squeamish Ossifrage." na memória e, em seguida, tentamos lê-lo explorando a vulnerabilidade. Se o sistema for vulnerável, você verá o mesmo texto na saída padrão.
Neste código, se as instruções de compilação em victim_function() forem executadas em ordem estrita do programa, a função lerá apenas de array1[0..15], pois array1 size = 16. No entanto, é possível que o tempo de execução ultrapasse o tempo de leitura. A função read memory byte() faz várias chamadas de treinamento para victim_function(), de modo que o preditor de desvios espere um valor válido de x, e então chama x fora dos limites. O desvio condicional não pode ser previsto, e a execução especulativa subsequente usa x fora dos limites para ler um byte misterioso. Em seguida, o código previsto lê de array2[array1[x] * 512], vazando o valor de array1[x] para o cache. Para completar o ataque, usa-se um simples flush + probe para identificar em qual linha de cache array2 está, revelando o conteúdo da memória. O ataque é repetido várias vezes, de modo que, mesmo que o byte alvo não esteja inicialmente em cache, a primeira iteração o trará para o cache. Em um Surface Pro 3 i7, o código otimizado lê a aproximadamente 10 KB/s.