VM hypervisor che non perde che è una VM per l'ospite?

7

Ho bisogno di un hypervisor VM che non perderà al guest che è in una VM. L'ospite dovrebbe crederci su una macchina fisica completa.

Apparentemente VirtualBox fallisce in questo , insieme a con Virtual PC e VMWare . Prima di immergermi in mostri come Xen, c'è qualche hyperviosr che può fare questo?

    
posta TheLQ 11.01.2012 - 18:54
fonte

5 risposte

12

Xen , per definizione, è virtualizzato. Assume un codice guest specifico per il kernel del sistema operativo. Non cerca di nascondere la presenza della virtualizzazione, anzi la pubblicizza in modo chiaro. Questa non è la VM che stai cercando.

Un hypervisor completamente invisibile è teoricamente fattibile, ma non economico. Il problema è con i tempi. Un hypervisor funziona potendo intercettare alcune "operazioni sensibili", in particolare relative all'accesso alla memoria, e alterarne il comportamento. L'alterazione viene eseguita con il software, che può effettivamente rimanere nascosto bloccando alcuni accessi alla memoria, emulando invece un'assenza di RAM. Tuttavia, tale intercettazione richiede un po 'di tempo: la gestione di un accesso di memoria intercettato utilizzerà alcuni cicli di clock aggiuntivi su ciò che farebbe una chiamata non intercettata su "hardware grezzo". Poiché il codice può accedere a un orologio con precisione del ciclo di clock (non accuratezza) tramite l'opcode rdtsc , l'intercettazione può essere rilevata . A meno che non venga intercettato anche il rdtsc opcode, per renderlo "più lento".

In effetti, il nostro hypervisor invisibile può rimanere invisibile solo "rallentando" la macchina virtuale, in modo da ottenere abbastanza "cicli extra" nascosti per le sue intercettazioni. Quindi il sistema operativo guest deve:

  • o non hanno accesso a nessuna fonte temporale esterna (e, se il SO guest ha qualche rete, può accedere a fonti di orario esterne);
  • o ritieni che l'hardware abbia un clock inferiore a quello a cui l'hardware fisico funziona realmente.

Come caso estremo, considera gli emulatori . Gli emulatori per vecchi sistemi degli anni '80 possono avere una precisione del ciclo di clock, ovvero rendono l'emulazione così perfetta che il codice in esecuzione non è in grado di rilevare che non funziona sull'hardware originale. Ma possono farlo solo lanciandosi un sacco di potere computazionale; il sovraccarico è tremendo (stiamo parlando di una perdita di potenza di calcolo 10x o 20x qui). Inoltre, l'emulazione degli effetti temporali per un Atari ST è un'attività relativamente semplice perché non c'è una cache in tale macchina.

La Blue Pill è una dimostrazione di un cosiddetto "hypervisor invisibile", e ha generato un acceso dibattito (come si dice, "con più calore che luce"), soprattutto perché non c'è parità tra le competenze nella programmazione dei sistemi di assemblaggio e la capacità di spiegare le cose ad altre persone con pedagogia e serenità. Ciononostante, la "pillola blu" dovrebbe essere rilevabile, sebbene la ricerca di un codice reale che lo faccia, pubblicato sul Web, potrebbe essere una sfida.

Un punto interessante sollevato dallo sviluppatore di pillole blu è che gli hypervisor dovrebbero diventare mainstream e "normali", così che la presenza di un hypervisor non dovrebbe, a lungo termine , indicare che la virtualizzazione sta succedendo. È concepibile, e persino probabile, che i sistemi operativi futuri attivino sempre un hypervisor all'avvio, quindi rilevare che la virtualizzazione è attiva non indicherà più possibili riproduzioni irregolari. Non abbiamo ancora raggiunto quel punto, però.

    
risposta data 11.01.2012 - 22:29
fonte
2

Non è fattibile al 100% in x86. Ci sono alcune istruzioni che non sono virtualizzabili, quindi se sai cosa controllare, puoi sempre determinare se stai facendo virtualizzare o bare metal.

Ecco alcune fonti su cui leggere: Il link è il miglior punto di partenza su questo argomento.
Un altro buon esempio è link

    
risposta data 11.01.2012 - 21:33
fonte
2

In pratica, ciò che vuoi non è praticamente fattibile. Vedi la seguente analisi dettagliata dalla letteratura di ricerca:

Esistono diversi modi in cui un ospite malintenzionato può rilevare che è in esecuzione in una VM: tempistica, discrepanze nella semantica di alcune istruzioni della CPU oscure, discrepanze nella gestione di driver e periferiche, discrepanze nelle dimensioni di varie cache (che causa effetti rilevabili sulle prestazioni) e molti altri. Vedi il documento per un'analisi dettagliata. Entrano più in profondità di qualsiasi risposta qui - o c'è spazio per coprire qui.

    
risposta data 07.02.2012 - 21:49
fonte
1

Sembra che tu stia cercando un hypervisor rookit , il pillola blu è un buon esempio di questo tipo di rookit.

Questo è solo un tipo di VM che si nasconde dall'ospite, e così capita che possa essere usato per nascondere le attività di un attaccante. Puoi usare questo software come vuoi, non devi essere un attaccante. È possibile utilizzare nmap e ping per il debug dei problemi di rete. Un martello può essere usato per mettere un chiodo o per rompere una finestra.

    
risposta data 11.01.2012 - 19:42
fonte
1

KVM utilizza hardware "standard", ma se sai cosa stai cercando puoi ancora dirlo.

(Ovviamente anche se si installano gli strumenti del SO Guest, questo diventerà evidente a prescindere da cosa si usa)

Quello che stai cercando di nascondere è tutto ciò che menzionerebbe la VM nei processi, file, registro, memoria, hardware o istruzioni del processore.

Se sei in grado di fare tutto questo (a seconda dell'importanza di questo progetto) dovrai nascondere il metodo di comunicazione (che so su VMWare utilizza un valore hardcoded per).

In particolare, cosa stai cercando di risolvere con questa soluzione?

  • Trick gli utenti che pensano che sia una vera macchina
  • Analisi malware ecc.
  • Qualcos'altro completamente
risposta data 11.01.2012 - 21:15
fonte

Leggi altre domande sui tag