Sim O Spectre pode cruzar os limites de host / convidado, convidado / host e convidado / convidado, porque essa é uma falha no nível da CPU, o que significa que informações potencialmente sensíveis podem vazar em qualquer coisa que seja executada no núcleo da CPU.
A maioria das notícias na internet fala sobre os provedores de nuvem serem os mais atingidos por isso, pois possuem grandes conjuntos de sistemas virtualizados e que podem ser abusados por vazar informações confidenciais.
A maioria dos grandes fornecedores já deveria estar corrigida contra as falhas, da melhor maneira possível, mas isso vai ser um problema que vive conosco por algum tempo.
O Security.SE possui perguntas e respostas canônicas sobre isso e menciona as VMs:
Estou executando uma máquina virtual / contêineres, até que ponto estou vulnerável?
De acordo com a resposta de Steffen Ullrich
- Os ataques de fusão não cruzam as VMs, apenas vazam a memória do kernel para os processos locais.
- O Spectre pode funcionar em VMs.
Além disso, de Steffen novamente , Meltdown e Spectre funcionam com contêineres, pois eles se baseiam no kernel do host.
As VMs usam a CPU real em seu sistema com algumas instruções privilegiadas interceptadas e capazes de serem redirecionadas. Ele usa os mesmos caches e instruções que o host. É essencialmente apenas outra camada dentro da CPU física em seu sistema.
A virtualização é rápida apenas porque usa a CPU física com o mínimo de abstração possível e depende do hardware da CPU para fornecer isolamento. Coisas como o qemu podem fazer uma emulação que seria mais segura, pois não é uma CPU de hardware, mas é muito mais lenta e diferente da virtualização.
Na publicação canônica Security.se novamente:
O Spectre trabalha em um nível diferente e não permite o acesso aos dados do espaço do kernel a partir do espaço do usuário. Nesse ataque, o invasor engana a execução especulativa para executar instruções de forma incorreta. Em poucas palavras, o preditor é coagido a prever um resultado específico da ramificação (se -> verdadeiro), que resulta em solicitar um acesso à memória fora do limite que o processo da vítima normalmente não solicitaria, resultando em execução especulativa incorreta. Em seguida, pelo canal lateral, recupera o valor dessa memória. Dessa maneira, a memória pertencente ao processo da vítima é vazada para o processo malicioso.
Portanto, como a VM é executada no hardware real da CPU e tudo o que é necessário é executar um loop específico para "treinar" o mecanismo de execução especulativo. Em seguida, ele pode usar o tempo preciso para observar os caches de padrões específicos de acesso indicativos do processo de host ou convidado (ou outra VM) que ele deseja explorar.
Dessa maneira, significa que uma máquina é explorável em todas as direções. Do host à VM, da VM ao host e da VM à VM.
Sim, não é nada fácil e é difícil de executar, pois o núcleo da CPU da VM pode mudar ao capricho do host e o host pode agendar alegremente tarefas em núcleos diferentes, mas, por um longo período de tempo, informações suficientes pode haver vazamento para abrir uma chave secreta para algum sistema ou conta importante. Com tempo suficiente e algum software furtivo, tudo está potencialmente aberto.
Se você queria uma VM "segura", precisa garantir que seus núcleos sejam isolados. As únicas maneiras reais de bloquear esse ataque seriam "forçar" o host e as VMs a usar apenas determinados núcleos para que nunca funcionem no mesmo hardware, mas isso levaria a um aumento efetivo no custo, pois você não seria capaz de ter tantas VMs em um determinado host. Você nunca conseguiria executar mais VMs do que os núcleos disponíveis, o que eu esperaria que fosse feito em servidores de "baixa carga", pois muitos sistemas ficam ociosos por 90% de sua vida útil.