Como posso ter certeza de que meu servidor não é virtualizado?

6

Como posso ter certeza de que meu servidor Linux está sendo executado em uma caixa real não virtualizada?

Este é o cenário em que estou pensando:

  1. Eu instalo uma distro em um servidor montado em rack,
  2. Eu alugo um espaço de rack em um datacenter e o deixo lá,
  3. Mallory ("o invasor") vai para o datacenter desconecta meu servidor,
  4. Mallory pega uma imagem do disco,
  5. Mallory executa a imagem do disco como convidado em uma caixa KVM.

Suponha que, em nome desta questão, o invasor

  • modificou o KVM, ou qualquer hypervisor semelhante, para simular exatamente o mesmo hardware em que meu servidor estava sendo executado,
  • conhece todos os ataques conhecidos de "escapar ao hipervisor" ou "detectar o hipervisor" e corrigiu o hipervisor para neutralizá-los (portanto, nenhuma pílula vermelha e semelhante).
Então, minha pergunta é: será que sempre haverá maneiras sólidas de se certificar de que um sistema operacional está sendo executado em uma caixa física (ou em uma caixa física precisa), formas que não dependem de falhas de virtualização (como a pílula vermelha)? / p>

Ou o contrário: há provas de que esse tipo de detecção sempre será possível?

Esclarecimento : esta é uma questão hipotética, não uma discussão sobre as tecnologias atuais. Atualmente é muito fácil detectar se estou em um ambiente virtualizado, basta usar imvirt e sua coleção de falhas / falhas de virtualização conhecidas. Gostaria de saber se coisas como "virtualização perfeita" foram discutidas e consideradas possíveis ou impossíveis do ponto de vista teórico.

    
por gioele 04.02.2012 / 17:26

6 respostas

3

Você supõe que o invasor fez uma máquina virtual que emula perfeitamente seu hardware. Sob esta suposição, então, por definição, você não pode detectar que seu código está sendo executado na máquina virtual.

Se a máquina virtual estiver sendo executada no hardware real, você poderá detectá-la externamente, pois é provável que a sobrecarga da virtualização apresente alguma latência de resposta adicional. A sobrecarga pode não ser perceptível acima de outra sobrecarga de rede. Se a máquina virtual estiver rodando em um hardware mais rápido, ela pode fornecer uma emulação perfeita, em teoria.

Na prática, seria extremamente difícil fornecer emulação de hardware perfeita. (Isso é algo que os sistemas operacionais e os desenvolvedores de drivers gostariam, e infelizmente para eles, os emuladores não são perfeitos.) Claro, é possível, em teoria, mas haveria métodos de ataque mais baratos para o invasor. Você está postulando acesso físico; o atacante poderia plantar um rootkit oculto, ou colocar um espião no barramento PCI ou RAM: isso custaria menos do que desenvolver emuladores perfeitos para todo o hardware que está por aí. Ou, ainda mais provável, Mallory exploraria um buraco de software, usaria uma senha ou, como último recurso, usaria criptoanálise de chave, se estivesse realmente incomodada a>.

Copiar os dados e plantar o rootkit é de longe o método de ataque mais fácil. Você pode se proteger contra isso até certo ponto usando um TPM em seu servidor. Os TPMs são projetados para serem difíceis de replicar e, se usados corretamente (observe: isso é difícil! Atualmente, não há sistemas operacionais prontos para uso que verifiquem a integridade de todo o SO de uma raiz de confiança do TPM.) O TPM pode proteger integridade e confidencialidade do seu sistema operacional e seus dados.

    
por 06.02.2012 / 03:01
2

Em teoria, acho que seria possível se alguém fizesse uma máquina virtual que imitasse todas as partes físicas de um computador. E por 'imitar' eu entendo que ele teria processador que relata que é um processador físico específico, um chipset que relata que é um chipset específico, um BIOS, disco, etc.

Eu acho que, do ponto de vista puramente técnico, isso é factível. Por outro lado, do ponto de vista prático, provavelmente nunca será feito. Por que alguém investiria uma enorme quantidade de dinheiro e poder humano para fornecer um computador virtual imitando perfeitamente algo tão efêmero que uma versão de hardware específica? Quando terminassem de criar essa solução virtual, o hardware estaria fora de uso.

    
por 04.02.2012 / 21:17
0

Em resumo não. Não há garantia. No entanto, pelo que entendi, atualmente, não há nenhuma solução de virtualização que possa usar um kernel em execução e usá-lo em um ambiente de virtualização. O personagem Mallory precisaria instalar um kernel de virtualização guest para poder executá-lo em uma VM. Portanto, a maneira mais fácil de verificar seria verificar o que o kernel está executando.

Minha resposta é não porque, como uma questão de segurança, eu acho que é uma questão de como determinar Mallory está impedindo você de descobrir o que o kernel está rodando E porque eu imagino que possa haver uma solução algum dia para a questão de um kernel diferente usado para virtualização.

    
por 04.02.2012 / 19:47
0

Use o dmidecode . Os dados da DMI contêm informações sobre o hardware físico em que você está sendo executado. Isso inclui coisas como o modelo, o número de série, etc. Não conheço nenhum hipervisor capaz de forjar essa informação.

Porção de amostra da saída dmidecode:

System Information
Manufacturer: HP
Product Name: ProLiant DL360 G5
Version: Not Specified
Serial Number: MXQ643K6F8      
UUID: 93403131-8718-4D72-2834-917461184750
Wake-up Type: Power Switch
SKU Number: 470064-513      
Family: ProLiant

Embora seja tecnicamente possível forjá-lo modificando o código do hipervisor em casos como o KVM, isso não seria razoável. A pessoa que faz isso perderia a capacidade de atualizar o hypervisor sempre que novas versões forem lançadas. Eles teriam que fazer todas as alterações novamente.

Outra possibilidade seria o endereço mac. Se eles mudassem seu sistema operacional para uma máquina virtual, seu endereço MAC teria que mudar ou eles não poderiam mais usar o hardware físico em que você estava na mesma rede ou isso causaria conflitos de endereço mac.

    
por 04.02.2012 / 20:04
0

Joanna Rutkowska disse algo sobre isso nas primeiras Conferências da Black Hat. Enquanto um " Blue Pill " levará sua máquina para uma camada de VM, um Red Pill ajudará a detectar se você está dentro de uma VM. Esses Termos baseiam-se nos filmes Matriz . ; -)

    
por 04.02.2012 / 22:32
0

Se o hardware virtualizado se parecesse exatamente com o hardware do computador real, não haveria como saber.

Então, a resposta é "não", mas é uma resposta teórica para uma questão teórica.

Por outro lado, se a virtualização não fosse perfeita, mas mais lenta que o hardware real, o desempenho poderia ser testado e os números poderiam ser comparados com os números reais.

    
por 05.02.2012 / 01:42