a vulnerabilidade de segurança do espectro pode estar em uma máquina virtual?

13

É possível que uma máquina virtual como o VirtualBox tenha a vulnerabilidade de segurança "espectro"? Acho que a VM talvez faça execução fora de ordem, mas, na minha opinião, não é possível espiar o cache para ler o resultado.

Existe alguma explicação sobre como é possível ler o cache de uma CPU virtual?


fonte
4
Sim, um pouco de pesquisa confirmaria que o VMWare lançou patches para lidar com Spectre e Meltdown. O sistema operacional convidado deve ser corrigido, além disso, ao hypervisor real (ambos os tipos)
Ramhound
Depende do nível de virtualização, eu diria. Se você estiver simulando uma CPU virtual, provavelmente estará seguro. Mas não é isso que as VMs modernas fazem.
Bergi 03/03/19
Existe alguma explicação sobre como é possível ler o cache de uma CPU virtual?
1
Os detalhes do @jms estão no post canônico que eu Spectre works on a different level ... In this attack, the attacker tricks the speculative execution to predictively execute instructions erroneously. In a nutshell, the predictor is coerced to predict a specific branch result that results in asking for an out-of-bound memory access that the victim process would not normally have requested resulting in incorrect speculative execution. Then by the side-channel, retrieves the value of this memory. In this way memory belonging to the victim process is leaked to the malicious process.
vinculei
1
@jms 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 e abstração. Coisas como qemupodem fazer emulações que seriam mais seguras, pois não são uma CPU de hardware , mas são muito mais lentas e diferentes da virtualização.
Mokubai

Respostas:

14

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.

Mokubai
fonte
2
Acho que você interpretou a pergunta como "se a CPU do host for afetada, a VM também será afetada?" Pelo que entendi, a pergunta é "se a CPU do host não for afetada, a VM ainda pode ser afetada?" Você poderia esclarecer isso?
21418 AndreKR #
1
@AndreKR: atualmente todas as CPUs de execução fora de ordem são afetadas pelo Spectre; somente com soluções alternativas de software você pode tornar um sistema mais seguro (e, portanto, a VM precisaria se preocupar com isso, embora um hipervisor possa isolar os convidados um do outro se a CPU fornecer as instalações, por exemplo, o material IBRS da Intel). Mas em uma CPU em ordem, sem execução especulativa, não podem existir vulnerabilidades de nenhum tipo entre dois tipos de software. A essência do Spectre é provocar a execução especulativa de algo que coloca dados secretos em estado microarquitetural; CPUs em ordem não.
Peter Cordes
O mais interessante não é a execução especulativa. O mais interessante é como um processo pode descobrir o que está no cache - mesmo em uma VM.
@jms os ataques de canal lateral disponíveis são facilitados e tornados úteis pela execução especulativa. O processo pode não ser capaz de ler diretamente as linhas de cache, mas a execução especulativa pode vazar informações fazendo cálculos que colocam valores no cache que podem ser detectados ou inferidos por ataques de tempo. A seção 4 do informe
oficial
0

gem5

Se você estiver interessado em estudar / reproduzir vulnerabilidades apenas com emulação, sem usar a CPU host, não acho que o QEMU seja detalhado o suficiente para observá-las, pois não simula o pipeline da CPU.

No entanto, o gem5 é usado para estimar o desempenho do sistema em pesquisa e desenvolvimento e simula internos da CPU suficientes para você observar o Spectre em um ambiente totalmente limpo e controlado.

Uma demonstração legal do x86_64 com visualização foi publicada em: http://www.lowepower.com/jason/visualizing-spectre-with-gem5.html

A desvantagem do gem5 é que ele é muito mais lento que o QEMU; a simulação é mais detalhada.

Ciro Santilli adicionou uma nova foto
fonte