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.