No 35º Chaos Communication Congress, quase um ano após a primeira publicação sobre as vulnerabilidades de hardware da CPU, conhecidas como Meltdown e Spectre, um grupo de pesquisadores da Universidade de Tecnologia de Graz, na Áustria, falou sobre o atual estado das vulnerabilidades conhecidas de hardware das CPUs. Spoiler: no ano passado muitas outras vieram à tona.
A essência do Meltdown e Spectre
Primeiro vamos lembrar o que Meltdown e Spectre são e como se diferenciam.
A vulnerabilidade Meltdown apareceu porque as CPUs atuais podem executar instruções fora de serviço. Esse é um recurso muito conveniente, que acelera o processamento de código, mas, em alguns casos, a CPU acaba por processar códigos propensos a erros. Ou seja, primeiro, a CPU executa o código e só depois se torna aparente que a operação não pode ser concluída – tais situações acontecem exatamente porque as instruções são executadas fora de serviço.
Naturalmente, os resultados de tais operações não serão repassados ou utilizados. Além disso, deixam rastros no nível de microarquitetura – na memória cache da CPU, e podem ser extraídos de lá. Como resultado, o cache pode ser usado para obter dados que de outra forma estariam inacessíveis: como, por exemplo, uma senha. Veja como funciona: um programa pode solicitar acesso aos dados no armazenamento – para o qual o sistema responderá de maneira razoável que o acesso é negado por falta de autorização. Mas, devido à execução fora de serviço das operações, a senha ainda terminará no cache e, a partir daí, ela poderá ser roubada. Resumindo, o Meltdown pode ocorrer quando se tenta executar uma ação injustificada.
A vulnerabilidade Spectre é semelhante. No entanto, apesar de estar relacionada à aceleração da computação da CPU, se origina da funcionalidade de previsão de conflitos disponíveis nas CPUs contemporâneas. Em princípio, uma CPU é capaz de prever, com certa precisão, que como a ação B normalmente segue a ação A, ela pode executar a ação B antes que os resultados de A se tornem claros. Se o conjunto de previsões estiver certo, e a ação B prosseguir, tudo está bem – e se os resultados de A indicarem que a CPU deveria ter completado a ação С, ao invés de B, a CPU simplesmente abandonará o desvio B e mudará para outra na qual ela terá que concluir a ação C.
O preditor de ramificação é inteligente, na maioria dos casos, lembra os padrões de sequência de ação, melhorando realmente o desempenho da CPU (se B seguiu A várias vezes, a CPU supõe logicamente que em uma dada situação ela terá que executar B após A). No entanto, ocorrem erros de interpretação (às vezes, C aparece em vez de B, embora o preditor de conflitos se lembre muito bem de que A é normalmente seguido por B).
Se você treinar o sistema por tempo suficiente, demonstrando que um certo ramo é o correto e é sempre executado, e então mudar um parâmetro para que ele se torne errado, a CPU irá executá-lo de qualquer maneira e depois revogá-lo, ao descobrir que outra lógica deveria ter sido executada. Mas, semelhante ao que acontece com o Meltdown, o resultado da ação ainda poderá permanecer – por exemplo, no cache, onde novamente poderá ser extraído.
As consequências são praticamente as mesmas: o Spectre abre uma janela para acesso não autorizado aos dados. Esse acesso pode ocorrer apenas em casos de predição de ramificação que dão errado, mas a teoria da probabilidade simples nos diz que isso acontecerá.
Um ano depois: surgem novas variações de Spectre e Meltdown
Após a descoberta das primeiras vulnerabilidades Meltdown e Spectre, os pesquisadores começaram a estudar cada vez mais o assunto e logo descobriram problemas semelhantes que diferem apenas em pequenos detalhes. Foi descoberto que os desenvolvedores de CPU também empregam outras otimizações que resultam em vulnerabilidades semelhantes às Meltdown e Spectre. A equipe da Universidade de Graz menciona 14 vulnerabilidades do tipo Meltdown e 13 do tipo Spectre – um total de 27 vulnerabilidades de hardware de CPU em contraponto a apenas duas pertencentes a essas famílias no início de 2018.
Além disso, embora a AMD tenha alegado anteriormente que suas CPUs não estavam expostas às vulnerabilidades da classe Meltdown, os pesquisadores descobriram uma variação do Meltdown (chamada Meltdown-BR) que estava operando perfeitamente com os processadores da AMD. Então, conclui-se que neste momento, as CPUs dos três dos maiores fornecedores globais de processadores – AMD, ARM e Intel – são suscetíveis tanto ao Meltdown, quanto ao Spectre. Bem, pelo menos a algumas das variações dessas duas famílias.
Felizmente, boa parte de todas as numerosas versões não funcionam com nenhuma delas – nem com o ARM, AMD, nem Intel – ou, pelo menos, os especialistas não conseguiram fazê-las funcionar. No entanto, a maioria delas opera pelo menos em algum lugar
As empresas começaram a lançar correções para microcódigos de CPU, sistemas operacionais e programas individuais em janeiro de 2018, procurando acabar com esses incômodos. Infelizmente, o Spectre e o Meltdown são vulnerabilidades de hardware; elas existem no nível do hardware, por isso, não podem ser completamente remediadas com correções de software.
Pensando nisso, uma das correções foi implementada dentro do núcleo do Linux OS, mas estava prejudicando muito a performance do sistema, então depois de um período de teste, ela foi removida do código.
O Spectre é problemático porque tem como alvo diferentes componentes de microarquitetura, portanto, deve-se projetar uma correção separada para cada um deles. E cada uma das correções exigirá que certas funcionalidades sejam desativadas ou que ações extras sejam executadas e, por isso, reduzirão ainda mais o desempenho.
Na verdade, as correções afetam a performance de forma tão severa que em muitos casos um sistema corrigido funciona mais lentamente do que aquele em que os componentes vulneráveis da CPU são desligados completamente.
O futuro de Spectre e Meltdown
Em outubro de 2018, a Intel anunciou que seus novos processadores (ou seja, a geração prevista para 2019) incluirão proteção contra às vulnerabilidades Spectre e Meltdown em nível de hardware. Mas isso já foi dito sobre as duas versões “básicas”, das quais, como discutimos acima, há muito mais a ser feito. A AMD também planeja consertar uma das variações do Spectre em sua nova geração de processadores de arquitetura Zen 2, a serem lançados em 2019. O ARM também promete atualizações de hardware, alegando que “todos os seus futuros processadores serão resilientes à ataques estilo Spectre”.
Ótima notícia, claro – para quem comprará novos aparelhos no futuro. Para àqueles que compraram um computador, smartphone ou outro dispositivo desenvolvido em uma CPU Intel, AMD ou ARM em 2018 ou em anos anteriores, será necessário instalar correções para praticamente tudo, reduzindo consideravelmente o desempenho. Há grandes chances de algumas pessoas não darem conta disso.
Os fabricantes de CPU ignoraram as vulnerabilidades no nível de hardware por muito tempo, otimizando suas CPUs com funcionalidades focadas apenas do desempenho. Porém, todas essas inovações tiveram um custo: algumas coisas foram realmente melhoradas, mas outras acabaram por gerar mais problemas. Agora será desafiador livrar-se dessas vulnerabilidades, enterradas profundamente. No entanto, é preciso dizer que a exploração dessas vulnerabilidades não será tão fácil e isso é um bom motivo para começar a ter esperança – pelo menos até que as CPUs da próxima geração sejam lançadas.